1 /* Process declarations and variables for C compiler.
2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
3 Free Software Foundation, Inc.
4 Contributed by Michael Tiemann (tiemann@cygnus.com)
6 This file is part of GNU CC.
8 GNU CC 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 GNU CC 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 GNU CC; 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. */
48 extern int current_class_depth;
50 extern tree static_ctors, static_dtors;
52 extern tree global_namespace;
54 extern int (*valid_lang_attribute) PARAMS ((tree, tree, tree, tree));
56 /* Use garbage collection. */
60 #ifndef WCHAR_UNSIGNED
61 #define WCHAR_UNSIGNED 0
64 #ifndef CHAR_TYPE_SIZE
65 #define CHAR_TYPE_SIZE BITS_PER_UNIT
68 #ifndef BOOL_TYPE_SIZE
69 #ifdef SLOW_BYTE_ACCESS
70 /* In the new ABI, `bool' has size and alignment `1', on all
72 #define BOOL_TYPE_SIZE \
73 ((SLOW_BYTE_ACCESS && !flag_new_abi) ? (POINTER_SIZE) : (CHAR_TYPE_SIZE))
75 #define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
79 /* We let tm.h override the types used here, to handle trivial differences
80 such as the choice of unsigned int or long unsigned int for size_t.
81 When machines start needing nontrivial differences in the size type,
82 it would be best to do something here to figure out automatically
83 from other information what type to use. */
86 #define SIZE_TYPE "long unsigned int"
90 #define PTRDIFF_TYPE "long int"
94 #define WCHAR_TYPE "int"
97 static tree grokparms PARAMS ((tree, int));
98 static const char *redeclaration_error_message PARAMS ((tree, tree));
100 static void push_binding_level PARAMS ((struct binding_level *, int,
102 static void pop_binding_level PARAMS ((void));
103 static void suspend_binding_level PARAMS ((void));
104 static void resume_binding_level PARAMS ((struct binding_level *));
105 static struct binding_level *make_binding_level PARAMS ((void));
106 static void declare_namespace_level PARAMS ((void));
107 static void signal_catch PARAMS ((int)) ATTRIBUTE_NORETURN;
108 static void storedecls PARAMS ((tree));
109 static void require_complete_types_for_parms PARAMS ((tree));
110 static int ambi_op_p PARAMS ((tree));
111 static int unary_op_p PARAMS ((tree));
112 static tree store_bindings PARAMS ((tree, tree));
113 static tree lookup_tag_reverse PARAMS ((tree, tree));
114 static tree obscure_complex_init PARAMS ((tree, tree));
115 static tree lookup_name_real PARAMS ((tree, int, int, int));
116 static void warn_extern_redeclared_static PARAMS ((tree, tree));
117 static void grok_reference_init PARAMS ((tree, tree, tree));
118 static tree grokfndecl PARAMS ((tree, tree, tree, tree, int,
119 enum overload_flags, tree,
120 tree, int, int, int, int, int, int, tree));
121 static tree grokvardecl PARAMS ((tree, tree, RID_BIT_TYPE *, int, int, tree));
122 static tree lookup_tag PARAMS ((enum tree_code, tree,
123 struct binding_level *, int));
124 static void set_identifier_type_value_with_scope
125 PARAMS ((tree, tree, struct binding_level *));
126 static void record_builtin_type PARAMS ((enum rid, const char *, tree));
127 static void record_unknown_type PARAMS ((tree, const char *));
128 static tree build_library_fn_1 PARAMS ((tree, tree));
129 static int member_function_or_else PARAMS ((tree, tree, enum overload_flags));
130 static void bad_specifiers PARAMS ((tree, const char *, int, int, int, int,
132 static void lang_print_error_function PARAMS ((const char *));
133 static tree maybe_process_template_type_declaration PARAMS ((tree, int, struct binding_level*));
134 static void check_for_uninitialized_const_var PARAMS ((tree));
135 static unsigned long typename_hash PARAMS ((hash_table_key));
136 static boolean typename_compare PARAMS ((hash_table_key, hash_table_key));
137 static void push_binding PARAMS ((tree, tree, struct binding_level*));
138 static int add_binding PARAMS ((tree, tree));
139 static void pop_binding PARAMS ((tree, tree));
140 static tree local_variable_p_walkfn PARAMS ((tree *, int *, void *));
141 static tree find_binding PARAMS ((tree, tree));
142 static tree select_decl PARAMS ((tree, int));
143 static int lookup_flags PARAMS ((int, int));
144 static tree qualify_lookup PARAMS ((tree, int));
145 static tree record_builtin_java_type PARAMS ((const char *, int));
146 static const char *tag_name PARAMS ((enum tag_types code));
147 static void find_class_binding_level PARAMS ((void));
148 static struct binding_level *innermost_nonclass_level PARAMS ((void));
149 static void warn_about_implicit_typename_lookup PARAMS ((tree, tree));
150 static int walk_namespaces_r PARAMS ((tree, walk_namespaces_fn, void *));
151 static int walk_globals_r PARAMS ((tree, void *));
152 static void add_decl_to_level PARAMS ((tree, struct binding_level *));
153 static tree make_label_decl PARAMS ((tree, int));
154 static void pop_label PARAMS ((tree));
155 static void pop_labels PARAMS ((tree));
156 static void maybe_deduce_size_from_array_init PARAMS ((tree, tree));
157 static void layout_var_decl PARAMS ((tree));
158 static void maybe_commonize_var PARAMS ((tree));
159 static tree check_initializer PARAMS ((tree, tree));
160 static void make_rtl_for_nonlocal_decl PARAMS ((tree, tree, const char *));
161 static void push_cp_function_context PARAMS ((struct function *));
162 static void pop_cp_function_context PARAMS ((struct function *));
163 static void mark_binding_level PARAMS ((void *));
164 static void mark_cp_function_context PARAMS ((struct function *));
165 static void mark_saved_scope PARAMS ((void *));
166 static void mark_lang_function PARAMS ((struct language_function *));
167 static void mark_stmt_tree PARAMS ((struct stmt_tree *));
168 static void save_function_data PARAMS ((tree));
169 static void check_function_type PARAMS ((tree));
170 static void destroy_local_var PARAMS ((tree));
171 static void finish_constructor_body PARAMS ((void));
172 static void finish_destructor_body PARAMS ((void));
173 static tree create_array_type_for_decl PARAMS ((tree, tree, tree));
174 static tree get_atexit_node PARAMS ((void));
175 static tree get_dso_handle_node PARAMS ((void));
176 static tree start_cleanup_fn PARAMS ((void));
177 static void end_cleanup_fn PARAMS ((void));
178 static tree cp_make_fname_decl PARAMS ((tree, const char *, int));
179 static void initialize_predefined_identifiers PARAMS ((void));
180 static tree check_special_function_return_type
181 PARAMS ((special_function_kind, tree, tree, tree));
183 #if defined (DEBUG_CP_BINDING_LEVELS)
184 static void indent PARAMS ((void));
187 /* Erroneous argument lists can use this *IFF* they do not modify it. */
188 tree error_mark_list;
190 /* The following symbols are subsumed in the cp_global_trees array, and
191 listed here individually for documentation purposes.
194 tree wchar_decl_node;
197 tree vtable_entry_type;
198 tree delta_type_node;
201 tree __baselist_desc_type_node;
202 tree __i_desc_type_node, __m_desc_type_node;
203 tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
205 tree __t_desc_type_node;
207 tree __tp_desc_type_node;
209 tree ti_desc_type_node;
210 tree bltn_desc_type_node, ptr_desc_type_node;
211 tree ary_desc_type_node, func_desc_type_node, enum_desc_type_node;
212 tree class_desc_type_node, si_class_desc_type_node, vmi_class_desc_type_node;
213 tree ptm_desc_type_node;
214 tree base_desc_type_node;
216 Not needed yet? May be needed one day?
217 tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
218 tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
219 tree __ptmf_desc_array_type, __ptmd_desc_array_type;
222 tree class_type_node, record_type_node, union_type_node, enum_type_node;
223 tree unknown_type_node;
225 Array type `vtable_entry_type[]'
228 tree vtbl_ptr_type_node;
235 A FUNCTION_DECL which can call `abort'. Not necessarily the
236 one that the user will declare, but sufficient to be called
237 by routines that want to abort the program.
241 The FUNCTION_DECL for the default `::operator delete'.
243 tree global_delete_fndecl;
246 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
251 tree cp_global_trees[CPTI_MAX];
253 /* Indicates that there is a type value in some namespace, although
254 that is not necessarily in scope at the moment. */
256 static tree global_type_node;
261 /* Expect only namespace names now. */
262 static int only_namespace_names;
264 /* If original DECL_RESULT of current function was a register,
265 but due to being an addressable named return value, would up
266 on the stack, this variable holds the named return value's
267 original location. */
269 #define original_result_rtx cp_function_chain->x_result_rtx
271 struct named_label_list
273 struct binding_level *binding_level;
276 const char *filename_o_goto;
278 struct named_label_list *next;
281 /* Used only for jumps to as-yet undefined labels, since jumps to
282 defined labels can have their validity checked by stmt.c. */
284 #define named_label_uses cp_function_chain->x_named_label_uses
286 /* A list of objects which have constructors or destructors
287 which reside in the global scope. The decl is stored in
288 the TREE_VALUE slot and the initializer is stored
289 in the TREE_PURPOSE slot. */
290 tree static_aggregates;
294 /* A node for the integer constants 2, and 3. */
296 tree integer_two_node, integer_three_node;
298 /* Parsing a function declarator leaves here a chain of structure
299 and enum types declared in the parmlist. */
301 static tree last_function_parm_tags;
303 /* Similar, for last_function_parm_tags. */
304 tree last_function_parms;
305 static tree current_function_parm_tags;
307 /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
308 that have names. Here so we can clear out their names' definitions
309 at the end of the function. The TREE_VALUE is a LABEL_DECL; the
310 TREE_PURPOSE is the previous binding of the label. */
312 #define named_labels cp_function_chain->x_named_labels
314 /* Set to 0 at beginning of a function definition, and whenever
315 a label (case or named) is defined. Set to value of expression
316 returned from function when that value can be transformed into
317 a named return value. */
319 tree current_function_return_value;
321 /* Nonzero means use the ISO C99 dialect of C. */
325 /* Nonzero means give `double' the same size as `float'. */
327 extern int flag_short_double;
329 /* Nonzero means don't recognize any builtin functions. */
331 extern int flag_no_builtin;
333 /* Nonzero means don't recognize the non-ANSI builtin functions.
336 extern int flag_no_nonansi_builtin;
338 /* Nonzero if we want to conserve space in the .o files. We do this
339 by putting uninitialized data and runtime initialized data into
340 .common instead of .data at the expense of not flagging multiple
342 extern int flag_conserve_space;
344 /* C and C++ flags are in decl2.c. */
346 /* Flag used when debugging spew.c */
348 extern int spew_debug;
350 /* A expression of value 0 with the same precision as a sizetype
352 tree signed_size_zero_node;
354 /* The name of the anonymous namespace, throughout this translation
356 tree anonymous_namespace_name;
359 /* For each binding contour we allocate a binding_level structure
360 which records the names defined in that contour.
363 1) one for each function definition,
364 where internal declarations of the parameters appear.
365 2) one for each compound statement,
366 to record its declarations.
368 The current meaning of a name can be found by searching the levels
369 from the current one out to the global one.
371 Off to the side, may be the class_binding_level. This exists only
372 to catch class-local declarations. It is otherwise nonexistent.
374 Also there may be binding levels that catch cleanups that must be
375 run when exceptions occur. Thus, to see whether a name is bound in
376 the current scope, it is not enough to look in the
377 CURRENT_BINDING_LEVEL. You should use lookup_name_current_level
380 /* Note that the information in the `names' component of the global contour
381 is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers. */
385 /* A chain of _DECL nodes for all variables, constants, functions,
386 and typedef types. These are in the reverse of the order
387 supplied. There may be OVERLOADs on this list, too, but they
388 are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD. */
391 /* A list of structure, union and enum definitions, for looking up
393 It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
394 or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
395 or ENUMERAL_TYPE node.
397 C++: the TREE_VALUE nodes can be simple types for
398 component_bindings. */
401 /* A list of USING_DECL nodes. */
404 /* A list of used namespaces. PURPOSE is the namespace,
405 VALUE the common ancestor with this binding_level's namespace. */
406 tree using_directives;
408 /* If this binding level is the binding level for a class, then
409 class_shadowed is a TREE_LIST. The TREE_PURPOSE of each node
410 is the name of an entity bound in the class; the TREE_VALUE is
411 the IDENTIFIER_CLASS_VALUE before we entered the class. Thus,
412 when leaving class scope, we can restore the
413 IDENTIFIER_CLASS_VALUE by walking this list. The TREE_TYPE is
414 the DECL bound by this name in the class. */
417 /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
418 is used for all binding levels. */
421 /* A TREE_LIST. Each TREE_VALUE is the LABEL_DECL for a local
422 label in this scope. The TREE_PURPOSE is the previous value of
423 the IDENTIFIER_LABEL VALUE. */
424 tree shadowed_labels;
426 /* For each level (except not the global one),
427 a chain of BLOCK nodes for all the levels
428 that were entered and exited one level down. */
431 /* The BLOCK node for this level, if one has been preallocated.
432 If 0, the BLOCK is allocated (if needed) when the level is popped. */
435 /* The _TYPE node for this level, if parm_flag == 2. */
438 /* The binding level which this one is contained in (inherits from). */
439 struct binding_level *level_chain;
441 /* List of decls in `names' that have incomplete
442 structure or union types. */
445 /* List of VAR_DECLS saved from a previous for statement.
446 These would be dead in ISO-conforming code, but might
447 be referenced in ARM-era code. These are stored in a
448 TREE_LIST; the TREE_VALUE is the actual declaration. */
449 tree dead_vars_from_for;
451 /* 1 for the level that holds the parameters of a function.
452 2 for the level that holds a class declaration. */
453 unsigned parm_flag : 2;
455 /* 1 means make a BLOCK for this level regardless of all else.
456 2 for temporary binding contours created by the compiler. */
459 /* Nonzero if this level "doesn't exist" for tags. */
460 unsigned tag_transparent : 1;
462 /* Nonzero if this level can safely have additional
463 cleanup-needing variables added to it. */
464 unsigned more_cleanups_ok : 1;
465 unsigned have_cleanups : 1;
467 /* Nonzero if this scope is for storing the decls for template
468 parameters and generic decls; these decls will be discarded and
469 replaced with a TEMPLATE_DECL. */
470 unsigned template_parms_p : 1;
472 /* Nonzero if this scope corresponds to the `<>' in a
473 `template <>' clause. Whenever this flag is set,
474 TEMPLATE_PARMS_P will be set as well. */
475 unsigned template_spec_p : 1;
477 /* This is set for a namespace binding level. */
478 unsigned namespace_p : 1;
480 /* True if this level is that of a for-statement where we need to
481 worry about ambiguous (ARM or ISO) scope rules. */
482 unsigned is_for_scope : 1;
484 /* True if this level corresponds to an EH region, as for a try block. */
485 unsigned eh_region : 1;
487 /* Four bits left for this word. */
489 #if defined(DEBUG_CP_BINDING_LEVELS)
490 /* Binding depth at which this level began. */
491 unsigned binding_depth;
492 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
495 #define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
497 /* The binding level currently in effect. */
499 #define current_binding_level \
501 ? cp_function_chain->bindings \
502 : scope_chain->bindings)
504 /* The binding level of the current class, if any. */
506 #define class_binding_level scope_chain->class_bindings
508 /* A chain of binding_level structures awaiting reuse. */
510 static struct binding_level *free_binding_level;
512 /* The outermost binding level, for names of file scope.
513 This is created when the compiler is started and exists
514 through the entire run. */
516 static struct binding_level *global_binding_level;
518 /* Nonzero means unconditionally make a BLOCK for the next level pushed. */
520 static int keep_next_level_flag;
522 #if defined(DEBUG_CP_BINDING_LEVELS)
523 static int binding_depth = 0;
524 static int is_class_level = 0;
531 for (i = 0; i < binding_depth*2; i++)
534 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
536 static tree pushdecl_with_scope PARAMS ((tree, struct binding_level *));
539 push_binding_level (newlevel, tag_transparent, keep)
540 struct binding_level *newlevel;
541 int tag_transparent, keep;
543 /* Add this level to the front of the chain (stack) of levels that
545 bzero ((char*) newlevel, sizeof (struct binding_level));
546 newlevel->level_chain = current_binding_level;
547 current_binding_level = newlevel;
548 newlevel->tag_transparent = tag_transparent;
549 newlevel->more_cleanups_ok = 1;
551 /* We are called before expand_start_bindings, but after
552 expand_eh_region_start for a try block; so we check this now,
553 before the EH block is covered up. */
554 newlevel->eh_region = is_eh_region ();
556 newlevel->keep = keep;
557 #if defined(DEBUG_CP_BINDING_LEVELS)
558 newlevel->binding_depth = binding_depth;
560 fprintf (stderr, "push %s level 0x%08x line %d\n",
561 (is_class_level) ? "class" : "block", newlevel, lineno);
564 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
567 /* Find the innermost enclosing class scope, and reset
568 CLASS_BINDING_LEVEL appropriately. */
571 find_class_binding_level ()
573 struct binding_level *level = current_binding_level;
575 while (level && level->parm_flag != 2)
576 level = level->level_chain;
577 if (level && level->parm_flag == 2)
578 class_binding_level = level;
580 class_binding_level = 0;
586 if (global_binding_level)
588 /* Cannot pop a level, if there are none left to pop. */
589 if (current_binding_level == global_binding_level)
590 my_friendly_abort (123);
592 /* Pop the current level, and free the structure for reuse. */
593 #if defined(DEBUG_CP_BINDING_LEVELS)
596 fprintf (stderr, "pop %s level 0x%08x line %d\n",
597 (is_class_level) ? "class" : "block",
598 current_binding_level, lineno);
599 if (is_class_level != (current_binding_level == class_binding_level))
602 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
605 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
607 register struct binding_level *level = current_binding_level;
608 current_binding_level = current_binding_level->level_chain;
609 level->level_chain = free_binding_level;
610 #if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
611 if (level->binding_depth != binding_depth)
613 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
614 free_binding_level = level;
615 find_class_binding_level ();
620 suspend_binding_level ()
622 if (class_binding_level)
623 current_binding_level = class_binding_level;
625 if (global_binding_level)
627 /* Cannot suspend a level, if there are none left to suspend. */
628 if (current_binding_level == global_binding_level)
629 my_friendly_abort (123);
631 /* Suspend the current level. */
632 #if defined(DEBUG_CP_BINDING_LEVELS)
635 fprintf (stderr, "suspend %s level 0x%08x line %d\n",
636 (is_class_level) ? "class" : "block",
637 current_binding_level, lineno);
638 if (is_class_level != (current_binding_level == class_binding_level))
641 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
644 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
645 current_binding_level = current_binding_level->level_chain;
646 find_class_binding_level ();
650 resume_binding_level (b)
651 struct binding_level *b;
653 /* Resuming binding levels is meant only for namespaces,
654 and those cannot nest into classes. */
655 my_friendly_assert(!class_binding_level, 386);
656 /* Also, resuming a non-directly nested namespace is a no-no. */
657 my_friendly_assert(b->level_chain == current_binding_level, 386);
658 current_binding_level = b;
659 #if defined(DEBUG_CP_BINDING_LEVELS)
660 b->binding_depth = binding_depth;
662 fprintf (stderr, "resume %s level 0x%08x line %d\n",
663 (is_class_level) ? "class" : "block", b, lineno);
666 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
669 /* Create a new `struct binding_level'. */
672 struct binding_level *
673 make_binding_level ()
676 return (struct binding_level *) xmalloc (sizeof (struct binding_level));
679 /* Nonzero if we are currently in the global binding level. */
684 return current_binding_level == global_binding_level;
687 /* Return the innermost binding level that is not for a class scope. */
689 static struct binding_level *
690 innermost_nonclass_level ()
692 struct binding_level *b;
694 b = current_binding_level;
695 while (b->parm_flag == 2)
701 /* Nonzero if we are currently in a toplevel binding level. This
702 means either the global binding level or a namespace in a toplevel
703 binding level. Since there are no non-toplevel namespace levels,
704 this really means any namespace or template parameter level. We
705 also include a class whose context is toplevel. */
708 toplevel_bindings_p ()
710 struct binding_level *b = innermost_nonclass_level ();
712 return b->namespace_p || b->template_parms_p;
715 /* Nonzero if this is a namespace scope, or if we are defining a class
716 which is itself at namespace scope, or whose enclosing class is
717 such a class, etc. */
720 namespace_bindings_p ()
722 struct binding_level *b = innermost_nonclass_level ();
724 return b->namespace_p;
727 /* If KEEP is non-zero, make a BLOCK node for the next binding level,
728 unconditionally. Otherwise, use the normal logic to decide whether
729 or not to create a BLOCK. */
732 keep_next_level (keep)
735 keep_next_level_flag = keep;
738 /* Nonzero if the current level needs to have a BLOCK made. */
743 return (current_binding_level->blocks != NULL_TREE
744 || current_binding_level->keep
745 || current_binding_level->names != NULL_TREE
746 || (current_binding_level->tags != NULL_TREE
747 && !current_binding_level->tag_transparent));
751 declare_namespace_level ()
753 current_binding_level->namespace_p = 1;
756 /* Returns non-zero if this scope was created to store template
760 template_parm_scope_p ()
762 return current_binding_level->template_parms_p;
765 /* Returns the kind of template specialization we are currently
766 processing, given that it's declaration contained N_CLASS_SCOPES
767 explicit scope qualifications. */
770 current_tmpl_spec_kind (n_class_scopes)
773 int n_template_parm_scopes = 0;
774 int seen_specialization_p = 0;
775 int innermost_specialization_p = 0;
776 struct binding_level *b;
778 /* Scan through the template parameter scopes. */
779 for (b = current_binding_level; b->template_parms_p; b = b->level_chain)
781 /* If we see a specialization scope inside a parameter scope,
782 then something is wrong. That corresponds to a declaration
785 template <class T> template <> ...
787 which is always illegal since [temp.expl.spec] forbids the
788 specialization of a class member template if the enclosing
789 class templates are not explicitly specialized as well. */
790 if (b->template_spec_p)
792 if (n_template_parm_scopes == 0)
793 innermost_specialization_p = 1;
795 seen_specialization_p = 1;
797 else if (seen_specialization_p == 1)
798 return tsk_invalid_member_spec;
800 ++n_template_parm_scopes;
803 /* Handle explicit instantiations. */
804 if (processing_explicit_instantiation)
806 if (n_template_parm_scopes != 0)
807 /* We've seen a template parameter list during an explicit
808 instantiation. For example:
810 template <class T> template void f(int);
812 This is erroneous. */
813 return tsk_invalid_expl_inst;
815 return tsk_expl_inst;
818 if (n_template_parm_scopes < n_class_scopes)
819 /* We've not seen enough template headers to match all the
820 specialized classes present. For example:
822 template <class T> void R<T>::S<T>::f(int);
824 This is illegal; there needs to be one set of template
825 parameters for each class. */
826 return tsk_insufficient_parms;
827 else if (n_template_parm_scopes == n_class_scopes)
828 /* We're processing a non-template declaration (even though it may
829 be a member of a template class.) For example:
831 template <class T> void S<T>::f(int);
833 The `class T' maches the `S<T>', leaving no template headers
834 corresponding to the `f'. */
836 else if (n_template_parm_scopes > n_class_scopes + 1)
837 /* We've got too many template headers. For example:
839 template <> template <class T> void f (T);
841 There need to be more enclosing classes. */
842 return tsk_excessive_parms;
844 /* This must be a template. It's of the form:
846 template <class T> template <class U> void S<T>::f(U);
848 This is a specialization if the innermost level was a
849 specialization; otherwise it's just a definition of the
851 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
855 set_class_shadows (shadows)
858 class_binding_level->class_shadowed = shadows;
861 /* Enter a new binding level.
862 If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
863 not for that of tags. */
866 pushlevel (tag_transparent)
869 struct binding_level *newlevel;
871 if (cfun && !doing_semantic_analysis_p ())
874 /* Reuse or create a struct for this binding level. */
875 #if defined(DEBUG_CP_BINDING_LEVELS)
877 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
878 if (free_binding_level)
879 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
881 newlevel = free_binding_level;
882 free_binding_level = free_binding_level->level_chain;
885 newlevel = make_binding_level ();
887 push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
888 GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
889 keep_next_level_flag = 0;
892 /* Enter a new scope. The KIND indicates what kind of scope is being
903 case sk_template_spec:
904 current_binding_level->template_spec_p = 1;
907 case sk_template_parms:
908 current_binding_level->template_parms_p = 1;
912 my_friendly_abort (20000309);
916 /* Exit the current scope. */
925 note_level_for_for ()
927 current_binding_level->is_for_scope = 1;
930 /* For a binding between a name and an entity at a block scope,
931 this is the `struct binding_level' for the block. */
932 #define BINDING_LEVEL(NODE) \
933 (((struct tree_binding*)NODE)->scope.level)
935 /* Make DECL the innermost binding for ID. The LEVEL is the binding
936 level at which this declaration is being bound. */
939 push_binding (id, decl, level)
942 struct binding_level* level;
946 binding = make_node (CPLUS_BINDING);
948 /* Now, fill in the binding information. */
949 BINDING_VALUE (binding) = decl;
950 BINDING_TYPE (binding) = NULL_TREE;
951 BINDING_LEVEL (binding) = level;
952 INHERITED_VALUE_BINDING_P (binding) = 0;
953 LOCAL_BINDING_P (binding) = (level != class_binding_level);
954 BINDING_HAS_LEVEL_P (binding) = 1;
956 /* And put it on the front of the list of bindings for ID. */
957 TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
958 IDENTIFIER_BINDING (id) = binding;
961 /* ID is already bound in the current scope. But, DECL is an
962 additional binding for ID in the same scope. This is the `struct
963 stat' hack whereby a non-typedef class-name or enum-name can be
964 bound at the same level as some other kind of entity. It's the
965 responsibility of the caller to check that inserting this name is
966 legal here. Returns nonzero if the new binding was successful. */
968 add_binding (id, decl)
972 tree binding = IDENTIFIER_BINDING (id);
975 if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
976 /* The new name is the type name. */
977 BINDING_TYPE (binding) = decl;
978 else if (!BINDING_VALUE (binding))
979 /* This situation arises when push_class_level_binding moves an
980 inherited type-binding out of the way to make room for a new
982 BINDING_VALUE (binding) = decl;
983 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
984 && DECL_ARTIFICIAL (BINDING_VALUE (binding)))
986 /* The old binding was a type name. It was placed in
987 BINDING_VALUE because it was thought, at the point it was
988 declared, to be the only entity with such a name. Move the
989 type name into the type slot; it is now hidden by the new
991 BINDING_TYPE (binding) = BINDING_VALUE (binding);
992 BINDING_VALUE (binding) = decl;
993 INHERITED_VALUE_BINDING_P (binding) = 0;
995 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
996 && TREE_CODE (decl) == TYPE_DECL
997 && DECL_NAME (decl) == DECL_NAME (BINDING_VALUE (binding))
998 && same_type_p (TREE_TYPE (decl),
999 TREE_TYPE (BINDING_VALUE (binding))))
1000 /* We have two typedef-names, both naming the same type to have
1001 the same name. This is OK because of:
1005 In a given scope, a typedef specifier can be used to redefine
1006 the name of any type declared in that scope to refer to the
1007 type to which it already refers. */
1011 cp_error ("declaration of `%#D'", decl);
1012 cp_error_at ("conflicts with previous declaration `%#D'",
1013 BINDING_VALUE (binding));
1020 /* Add DECL to the list of things declared in B. */
1023 add_decl_to_level (decl, b)
1025 struct binding_level *b;
1027 /* We build up the list in reverse order, and reverse it later if
1029 TREE_CHAIN (decl) = b->names;
1033 /* Bind DECL to ID in the current_binding_level, assumed to be a local
1034 binding level. If PUSH_USING is set in FLAGS, we know that DECL
1035 doesn't really belong to this binding level, that it got here
1036 through a using-declaration. */
1039 push_local_binding (id, decl, flags)
1044 struct binding_level *b;
1046 /* Skip over any local classes. This makes sense if we call
1047 push_local_binding with a friend decl of a local class. */
1048 b = current_binding_level;
1049 while (b->parm_flag == 2)
1052 if (lookup_name_current_level (id))
1054 /* Supplement the existing binding. */
1055 if (!add_binding (id, decl))
1056 /* It didn't work. Something else must be bound at this
1057 level. Do not add DECL to the list of things to pop
1062 /* Create a new binding. */
1063 push_binding (id, decl, b);
1065 if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
1066 /* We must put the OVERLOAD into a TREE_LIST since the
1067 TREE_CHAIN of an OVERLOAD is already used. Similarly for
1068 decls that got here through a using-declaration. */
1069 decl = build_tree_list (NULL_TREE, decl);
1071 /* And put DECL on the list of things declared by the current
1073 add_decl_to_level (decl, b);
1076 /* Bind DECL to ID in the class_binding_level. Returns nonzero if the
1077 binding was successful. */
1080 push_class_binding (id, decl)
1085 tree binding = IDENTIFIER_BINDING (id);
1088 /* Note that we declared this value so that we can issue an error if
1089 this an illegal redeclaration of a name already used for some
1091 note_name_declared_in_class (id, decl);
1093 if (binding && BINDING_LEVEL (binding) == class_binding_level)
1094 /* Supplement the existing binding. */
1095 result = add_binding (id, decl);
1097 /* Create a new binding. */
1098 push_binding (id, decl, class_binding_level);
1100 /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
1101 class-level declaration. Note that we do not use DECL here
1102 because of the possibility of the `struct stat' hack; if DECL is
1103 a class-name or enum-name we might prefer a field-name, or some
1105 IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
1107 /* If this is a binding from a base class, mark it as such. */
1108 binding = IDENTIFIER_BINDING (id);
1109 if (BINDING_VALUE (binding) == decl && TREE_CODE (decl) != TREE_LIST)
1111 /* Any implicit typename must be from a base-class. The
1112 context for an implicit typename declaration is always
1113 the derived class in which the lookup was done, so the checks
1114 based on the context of DECL below will not trigger. */
1115 if (IMPLICIT_TYPENAME_TYPE_DECL_P (decl))
1116 INHERITED_VALUE_BINDING_P (binding) = 1;
1119 if (TREE_CODE (decl) == OVERLOAD)
1120 context = CP_DECL_CONTEXT (OVL_CURRENT (decl));
1123 my_friendly_assert (DECL_P (decl), 0);
1124 context = CP_DECL_CONTEXT (decl);
1127 if (is_properly_derived_from (current_class_type, context))
1128 INHERITED_VALUE_BINDING_P (binding) = 1;
1130 INHERITED_VALUE_BINDING_P (binding) = 0;
1133 else if (BINDING_VALUE (binding) == decl)
1134 /* We only encounter a TREE_LIST when push_class_decls detects an
1135 ambiguity. Such an ambiguity can be overridden by a definition
1137 INHERITED_VALUE_BINDING_P (binding) = 1;
1142 /* Remove the binding for DECL which should be the innermost binding
1146 pop_binding (id, decl)
1152 if (id == NULL_TREE)
1153 /* It's easiest to write the loops that call this function without
1154 checking whether or not the entities involved have names. We
1155 get here for such an entity. */
1158 /* Get the innermost binding for ID. */
1159 binding = IDENTIFIER_BINDING (id);
1161 /* The name should be bound. */
1162 my_friendly_assert (binding != NULL_TREE, 0);
1164 /* The DECL will be either the ordinary binding or the type
1165 binding for this identifier. Remove that binding. */
1166 if (BINDING_VALUE (binding) == decl)
1167 BINDING_VALUE (binding) = NULL_TREE;
1168 else if (BINDING_TYPE (binding) == decl)
1169 BINDING_TYPE (binding) = NULL_TREE;
1171 my_friendly_abort (0);
1173 if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
1174 /* We're completely done with the innermost binding for this
1175 identifier. Unhook it from the list of bindings. */
1176 IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
1179 /* When a label goes out of scope, check to see if that label was used
1180 in a valid manner, and issue any appropriate warnings or errors. */
1186 tree label = TREE_VALUE (link);
1188 if (!processing_template_decl && doing_semantic_analysis_p ())
1190 if (DECL_INITIAL (label) == NULL_TREE)
1192 cp_error_at ("label `%D' used but not defined", label);
1193 /* Avoid crashing later. */
1194 define_label (input_filename, 1, DECL_NAME (label));
1196 else if (warn_unused_label && !TREE_USED (label))
1197 cp_warning_at ("label `%D' defined but not used", label);
1200 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), TREE_PURPOSE (link));
1203 /* At the end of a function, all labels declared within the fucntion
1204 go out of scope. BLOCK is the top-level block for the
1213 /* Clear out the definitions of all label names, since their scopes
1215 for (link = named_labels; link; link = TREE_CHAIN (link))
1218 /* Put the labels into the "variables" of the top-level block,
1219 so debugger can see them. */
1220 TREE_CHAIN (TREE_VALUE (link)) = BLOCK_VARS (block);
1221 BLOCK_VARS (block) = TREE_VALUE (link);
1224 named_labels = NULL_TREE;
1227 /* Exit a binding level.
1228 Pop the level off, and restore the state of the identifier-decl mappings
1229 that were in effect when this level was entered.
1231 If KEEP == 1, this level had explicit declarations, so
1232 and create a "block" (a BLOCK node) for the level
1233 to record its declarations and subblocks for symbol table output.
1235 If FUNCTIONBODY is nonzero, this level is the body of a function,
1236 so create a block as if KEEP were set and also clear out all
1239 If REVERSE is nonzero, reverse the order of decls before putting
1240 them into the BLOCK. */
1243 poplevel (keep, reverse, functionbody)
1249 /* The chain of decls was accumulated in reverse order.
1250 Put it into forward order, just for cleanliness. */
1252 int tmp = functionbody;
1253 int real_functionbody;
1256 tree block = NULL_TREE;
1258 int block_previously_created;
1259 int leaving_for_scope;
1261 if (cfun && !doing_semantic_analysis_p ())
1264 my_friendly_assert (current_binding_level->parm_flag != 2,
1267 real_functionbody = (current_binding_level->keep == 2
1268 ? ((functionbody = 0), tmp) : functionbody);
1269 tags = functionbody >= 0 ? current_binding_level->tags : 0;
1270 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1272 my_friendly_assert (!current_binding_level->class_shadowed,
1275 /* We used to use KEEP == 2 to indicate that the new block should go
1276 at the beginning of the list of blocks at this binding level,
1277 rather than the end. This hack is no longer used. */
1278 my_friendly_assert (keep == 0 || keep == 1, 0);
1280 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1281 (HOST_WIDE_INT) current_binding_level->level_chain,
1282 current_binding_level->parm_flag,
1283 current_binding_level->keep);
1285 if (current_binding_level->keep == 1)
1288 /* Get the decls in the order they were written.
1289 Usually current_binding_level->names is in reverse order.
1290 But parameter decls were previously put in forward order. */
1293 current_binding_level->names
1294 = decls = nreverse (current_binding_level->names);
1296 decls = current_binding_level->names;
1298 /* Output any nested inline functions within this block
1299 if they weren't already output. */
1300 for (decl = decls; decl; decl = TREE_CHAIN (decl))
1301 if (TREE_CODE (decl) == FUNCTION_DECL
1302 && ! TREE_ASM_WRITTEN (decl)
1303 && DECL_INITIAL (decl) != NULL_TREE
1304 && TREE_ADDRESSABLE (decl)
1305 && decl_function_context (decl) == current_function_decl)
1307 /* If this decl was copied from a file-scope decl
1308 on account of a block-scope extern decl,
1309 propagate TREE_ADDRESSABLE to the file-scope decl. */
1310 if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1311 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1314 push_function_context ();
1315 output_inline_function (decl);
1316 pop_function_context ();
1320 /* When not in function-at-a-time mode, expand_end_bindings will
1321 warn about unused variables. But, in function-at-a-time mode
1322 expand_end_bindings is not passed the list of variables in the
1323 current scope, and therefore no warning is emitted. So, we
1324 explicitly warn here. */
1325 if (!processing_template_decl)
1326 warn_about_unused_variables (getdecls ());
1328 /* If there were any declarations or structure tags in that level,
1329 or if this level is a function body,
1330 create a BLOCK to record them for the life of this function. */
1332 block_previously_created = (current_binding_level->this_block != NULL_TREE);
1333 if (block_previously_created)
1334 block = current_binding_level->this_block;
1335 else if (keep == 1 || functionbody)
1336 block = make_node (BLOCK);
1337 if (block != NULL_TREE)
1339 if (block_previously_created)
1341 if (decls || tags || subblocks)
1343 if (BLOCK_VARS (block))
1344 warning ("internal compiler error: debugging info corrupted");
1346 BLOCK_VARS (block) = decls;
1348 /* We can have previous subblocks and new subblocks when
1349 doing fixup_gotos with complex cleanups. We chain the new
1350 subblocks onto the end of any pre-existing subblocks. */
1351 BLOCK_SUBBLOCKS (block) = chainon (BLOCK_SUBBLOCKS (block),
1357 BLOCK_VARS (block) = decls;
1358 BLOCK_SUBBLOCKS (block) = subblocks;
1362 /* In each subblock, record that this is its superior. */
1364 for (link = subblocks; link; link = TREE_CHAIN (link))
1365 BLOCK_SUPERCONTEXT (link) = block;
1367 /* We still support the old for-scope rules, whereby the variables
1368 in a for-init statement were in scope after the for-statement
1369 ended. We only use the new rules in flag_new_for_scope is
1372 = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1374 /* Remove declarations for all the DECLs in this level. */
1375 for (link = decls; link; link = TREE_CHAIN (link))
1377 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL)
1380 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1384 ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
1386 ns_binding = NULL_TREE;
1389 && (BINDING_LEVEL (outer_binding)
1390 == current_binding_level->level_chain))
1391 /* We have something like:
1396 and we are leaving the `for' scope. There's no reason to
1397 keep the binding of the inner `i' in this case. */
1398 pop_binding (DECL_NAME (link), link);
1399 else if ((outer_binding
1400 && (TREE_CODE (BINDING_VALUE (outer_binding))
1403 && TREE_CODE (ns_binding) == TYPE_DECL))
1404 /* Here, we have something like:
1412 We must pop the for-scope binding so we know what's a
1413 type and what isn't. */
1414 pop_binding (DECL_NAME (link), link);
1417 /* Mark this VAR_DECL as dead so that we can tell we left it
1418 there only for backward compatibility. */
1419 DECL_DEAD_FOR_LOCAL (link) = 1;
1421 /* Keep track of what should of have happenned when we
1422 popped the binding. */
1423 if (outer_binding && BINDING_VALUE (outer_binding))
1424 DECL_SHADOWED_FOR_VAR (link)
1425 = BINDING_VALUE (outer_binding);
1427 /* Add it to the list of dead variables in the next
1428 outermost binding to that we can remove these when we
1429 leave that binding. */
1430 current_binding_level->level_chain->dead_vars_from_for
1431 = tree_cons (NULL_TREE, link,
1432 current_binding_level->level_chain->
1433 dead_vars_from_for);
1435 /* Although we don't pop the CPLUS_BINDING, we do clear
1436 its BINDING_LEVEL since the level is going away now. */
1437 BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1443 /* Remove the binding. */
1445 if (TREE_CODE (decl) == TREE_LIST)
1446 decl = TREE_VALUE (decl);
1448 pop_binding (DECL_NAME (decl), decl);
1449 else if (TREE_CODE (decl) == OVERLOAD)
1450 pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
1452 my_friendly_abort (0);
1456 /* Remove declarations for any `for' variables from inner scopes
1457 that we kept around. */
1458 for (link = current_binding_level->dead_vars_from_for;
1459 link; link = TREE_CHAIN (link))
1460 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
1462 /* Restore the IDENTIFIER_TYPE_VALUEs. */
1463 for (link = current_binding_level->type_shadowed;
1464 link; link = TREE_CHAIN (link))
1465 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
1467 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
1468 for (link = current_binding_level->shadowed_labels;
1470 link = TREE_CHAIN (link))
1473 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1474 list if a `using' declaration put them there. The debugging
1475 back-ends won't understand OVERLOAD, so we remove them here.
1476 Because the BLOCK_VARS are (temporarily) shared with
1477 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1478 popped all the bindings. */
1483 for (d = &BLOCK_VARS (block); *d; )
1485 if (TREE_CODE (*d) == TREE_LIST)
1486 *d = TREE_CHAIN (*d);
1488 d = &TREE_CHAIN (*d);
1492 /* If the level being exited is the top level of a function,
1493 check over all the labels. */
1496 /* Since this is the top level block of a function, the vars are
1497 the function's parameters. Don't leave them in the BLOCK
1498 because they are found in the FUNCTION_DECL instead. */
1499 BLOCK_VARS (block) = 0;
1503 /* Any uses of undefined labels now operate under constraints
1504 of next binding contour. */
1507 struct binding_level *level_chain;
1508 level_chain = current_binding_level->level_chain;
1511 struct named_label_list *labels;
1512 for (labels = named_label_uses; labels; labels = labels->next)
1513 if (labels->binding_level == current_binding_level)
1515 labels->binding_level = level_chain;
1516 labels->names_in_scope = level_chain->names;
1521 tmp = current_binding_level->keep;
1523 pop_binding_level ();
1525 DECL_INITIAL (current_function_decl) = block;
1528 if (!block_previously_created)
1529 current_binding_level->blocks
1530 = chainon (current_binding_level->blocks, block);
1532 /* If we did not make a block for the level just exited,
1533 any blocks made for inner levels
1534 (since they cannot be recorded as subblocks in that level)
1535 must be carried forward so they will later become subblocks
1536 of something else. */
1538 current_binding_level->blocks
1539 = chainon (current_binding_level->blocks, subblocks);
1541 /* Each and every BLOCK node created here in `poplevel' is important
1542 (e.g. for proper debugging information) so if we created one
1543 earlier, mark it as "used". */
1545 TREE_USED (block) = 1;
1547 /* Take care of compiler's internal binding structures. */
1553 = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/1);
1556 SCOPE_STMT_BLOCK (TREE_PURPOSE (scope_stmts)) = block;
1557 SCOPE_STMT_BLOCK (TREE_VALUE (scope_stmts)) = block;
1560 block = poplevel (keep, reverse, functionbody);
1566 /* Delete the node BLOCK from the current binding level.
1567 This is used for the block inside a stmt expr ({...})
1568 so that the block can be reinserted where appropriate. */
1571 delete_block (block)
1575 if (current_binding_level->blocks == block)
1576 current_binding_level->blocks = TREE_CHAIN (block);
1577 for (t = current_binding_level->blocks; t;)
1579 if (TREE_CHAIN (t) == block)
1580 TREE_CHAIN (t) = TREE_CHAIN (block);
1584 TREE_CHAIN (block) = NULL_TREE;
1585 /* Clear TREE_USED which is always set by poplevel.
1586 The flag is set again if insert_block is called. */
1587 TREE_USED (block) = 0;
1590 /* Insert BLOCK at the end of the list of subblocks of the
1591 current binding level. This is used when a BIND_EXPR is expanded,
1592 to handle the BLOCK node inside the BIND_EXPR. */
1595 insert_block (block)
1598 TREE_USED (block) = 1;
1599 current_binding_level->blocks
1600 = chainon (current_binding_level->blocks, block);
1603 /* Set the BLOCK node for the innermost scope
1604 (the one we are currently in). */
1608 register tree block;
1610 current_binding_level->this_block = block;
1613 /* Do a pushlevel for class declarations. */
1618 register struct binding_level *newlevel;
1620 /* Reuse or create a struct for this binding level. */
1621 #if defined(DEBUG_CP_BINDING_LEVELS)
1623 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1624 if (free_binding_level)
1625 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1627 newlevel = free_binding_level;
1628 free_binding_level = free_binding_level->level_chain;
1631 newlevel = make_binding_level ();
1633 #if defined(DEBUG_CP_BINDING_LEVELS)
1635 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1637 push_binding_level (newlevel, 0, 0);
1639 class_binding_level = current_binding_level;
1640 class_binding_level->parm_flag = 2;
1641 class_binding_level->this_class = current_class_type;
1644 /* ...and a poplevel for class declarations. */
1649 register struct binding_level *level = class_binding_level;
1652 my_friendly_assert (level != 0, 354);
1654 /* If we're leaving a toplevel class, don't bother to do the setting
1655 of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
1656 shouldn't even be used when current_class_type isn't set, and second,
1657 if we don't touch it here, we're able to use the cache effect if the
1658 next time we're entering a class scope, it is the same class. */
1659 if (current_class_depth != 1)
1661 struct binding_level* b;
1663 /* Clear out our IDENTIFIER_CLASS_VALUEs. */
1664 for (shadowed = level->class_shadowed;
1666 shadowed = TREE_CHAIN (shadowed))
1667 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = NULL_TREE;
1669 /* Find the next enclosing class, and recreate
1670 IDENTIFIER_CLASS_VALUEs appropriate for that class. */
1671 b = level->level_chain;
1672 while (b && b->parm_flag != 2)
1676 for (shadowed = b->class_shadowed;
1678 shadowed = TREE_CHAIN (shadowed))
1682 t = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
1683 while (t && BINDING_LEVEL (t) != b)
1687 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed))
1688 = BINDING_VALUE (t);
1692 /* Remember to save what IDENTIFIER's were bound in this scope so we
1693 can recover from cache misses. */
1695 previous_class_type = current_class_type;
1696 previous_class_values = class_binding_level->class_shadowed;
1698 for (shadowed = level->type_shadowed;
1700 shadowed = TREE_CHAIN (shadowed))
1701 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
1703 /* Remove the bindings for all of the class-level declarations. */
1704 for (shadowed = level->class_shadowed;
1706 shadowed = TREE_CHAIN (shadowed))
1707 pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
1709 GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1710 (HOST_WIDE_INT) class_binding_level->level_chain,
1711 class_binding_level->parm_flag,
1712 class_binding_level->keep);
1714 /* Now, pop out of the binding level which we created up in the
1715 `pushlevel_class' routine. */
1716 #if defined(DEBUG_CP_BINDING_LEVELS)
1718 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1720 pop_binding_level ();
1723 /* We are entering the scope of a class. Clear IDENTIFIER_CLASS_VALUE
1724 for any names in enclosing classes. */
1727 clear_identifier_class_values ()
1731 if (!class_binding_level)
1734 for (t = class_binding_level->class_shadowed;
1737 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
1740 /* Returns non-zero if T is a virtual function table. */
1743 vtable_decl_p (t, data)
1745 void *data ATTRIBUTE_UNUSED;
1747 return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
1750 /* Returns non-zero if T is a TYPE_DECL for a type with virtual
1754 vtype_decl_p (t, data)
1756 void *data ATTRIBUTE_UNUSED;
1758 return (TREE_CODE (t) == TYPE_DECL
1759 && TREE_CODE (TREE_TYPE (t)) == RECORD_TYPE
1760 && TYPE_POLYMORPHIC_P (TREE_TYPE (t)));
1763 /* Return the declarations that are members of the namespace NS. */
1766 cp_namespace_decls (ns)
1769 return NAMESPACE_LEVEL (ns)->names;
1772 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
1773 itself, calling F for each. The DATA is passed to F as well. */
1776 walk_namespaces_r (namespace, f, data)
1778 walk_namespaces_fn f;
1784 result |= (*f) (namespace, data);
1786 for (current = cp_namespace_decls (namespace);
1788 current = TREE_CHAIN (current))
1790 if (TREE_CODE (current) != NAMESPACE_DECL
1791 || DECL_NAMESPACE_ALIAS (current))
1793 if (!DECL_LANG_SPECIFIC (current))
1796 my_friendly_assert (current == std_node, 393);
1800 /* We found a namespace. */
1801 result |= walk_namespaces_r (current, f, data);
1807 /* Walk all the namespaces, calling F for each. The DATA is passed to
1811 walk_namespaces (f, data)
1812 walk_namespaces_fn f;
1815 return walk_namespaces_r (global_namespace, f, data);
1818 struct walk_globals_data {
1819 walk_globals_pred p;
1824 /* Walk the global declarations in NAMESPACE. Whenever one is found
1825 for which P returns non-zero, call F with its address. If any call
1826 to F returns a non-zero value, return a non-zero value. */
1829 walk_globals_r (namespace, data)
1833 struct walk_globals_data* wgd = (struct walk_globals_data *) data;
1834 walk_globals_pred p = wgd->p;
1835 walk_globals_fn f = wgd->f;
1836 void *d = wgd->data;
1840 t = &NAMESPACE_LEVEL (namespace)->names;
1847 result |= (*f) (t, d);
1849 /* If F changed *T, then *T still points at the next item to
1852 t = &TREE_CHAIN (*t);
1858 /* Walk the global declarations. Whenever one is found for which P
1859 returns non-zero, call F with its address. If any call to F
1860 returns a non-zero value, return a non-zero value. */
1863 walk_globals (p, f, data)
1864 walk_globals_pred p;
1868 struct walk_globals_data wgd;
1873 return walk_namespaces (walk_globals_r, &wgd);
1876 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
1877 DATA is non-NULL, this is the last time we will call
1878 wrapup_global_declarations for this NAMESPACE. */
1881 wrapup_globals_for_namespace (namespace, data)
1885 tree globals = cp_namespace_decls (namespace);
1886 int len = list_length (globals);
1887 tree *vec = (tree *) alloca (sizeof (tree) * len);
1891 int last_time = (data != 0);
1893 if (last_time && namespace == global_namespace)
1894 /* Let compile_file handle the global namespace. */
1897 /* Process the decls in reverse order--earliest first.
1898 Put them into VEC from back to front, then take out from front. */
1900 for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
1902 /* Pretend we've output an unused static variable. This ensures
1903 that the toplevel __FUNCTION__ etc won't be emitted, unless
1905 if (TREE_CODE (decl) == VAR_DECL && DECL_ARTIFICIAL (decl)
1906 && !TREE_PUBLIC (decl) && !TREE_USED (decl))
1908 TREE_ASM_WRITTEN (decl) = 1;
1909 DECL_IGNORED_P (decl) = 1;
1911 vec[len - i - 1] = decl;
1916 check_global_declarations (vec, len);
1920 /* Temporarily mark vtables as external. That prevents
1921 wrapup_global_declarations from writing them out; we must process
1922 them ourselves in finish_vtable_vardecl. */
1923 for (i = 0; i < len; ++i)
1924 if (vtable_decl_p (vec[i], /*data=*/0) && !DECL_EXTERNAL (vec[i]))
1926 DECL_NOT_REALLY_EXTERN (vec[i]) = 1;
1927 DECL_EXTERNAL (vec[i]) = 1;
1930 /* Write out any globals that need to be output. */
1931 result = wrapup_global_declarations (vec, len);
1933 /* Undo the hack to DECL_EXTERNAL above. */
1934 for (i = 0; i < len; ++i)
1935 if (vtable_decl_p (vec[i], /*data=*/0)
1936 && DECL_NOT_REALLY_EXTERN (vec[i]))
1938 DECL_NOT_REALLY_EXTERN (vec[i]) = 0;
1939 DECL_EXTERNAL (vec[i]) = 0;
1946 /* Mark ARG (which is really a struct binding_level **) for GC. */
1949 mark_binding_level (arg)
1952 struct binding_level *lvl = *(struct binding_level **)arg;
1956 ggc_mark_tree (lvl->names);
1957 ggc_mark_tree (lvl->tags);
1958 ggc_mark_tree (lvl->usings);
1959 ggc_mark_tree (lvl->using_directives);
1960 ggc_mark_tree (lvl->class_shadowed);
1961 ggc_mark_tree (lvl->type_shadowed);
1962 ggc_mark_tree (lvl->shadowed_labels);
1963 ggc_mark_tree (lvl->blocks);
1964 ggc_mark_tree (lvl->this_block);
1965 ggc_mark_tree (lvl->this_class);
1966 ggc_mark_tree (lvl->incomplete);
1967 ggc_mark_tree (lvl->dead_vars_from_for);
1969 lvl = lvl->level_chain;
1973 /* For debugging. */
1974 static int no_print_functions = 0;
1975 static int no_print_builtins = 0;
1978 print_binding_level (lvl)
1979 struct binding_level *lvl;
1983 fprintf (stderr, " blocks=");
1984 fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
1985 fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
1986 list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
1987 if (lvl->tag_transparent)
1988 fprintf (stderr, " tag-transparent");
1989 if (lvl->more_cleanups_ok)
1990 fprintf (stderr, " more-cleanups-ok");
1991 if (lvl->have_cleanups)
1992 fprintf (stderr, " have-cleanups");
1993 fprintf (stderr, "\n");
1996 fprintf (stderr, " names:\t");
1997 /* We can probably fit 3 names to a line? */
1998 for (t = lvl->names; t; t = TREE_CHAIN (t))
2000 if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL))
2002 if (no_print_builtins
2003 && (TREE_CODE (t) == TYPE_DECL)
2004 && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
2007 /* Function decls tend to have longer names. */
2008 if (TREE_CODE (t) == FUNCTION_DECL)
2015 fprintf (stderr, "\n\t");
2018 print_node_brief (stderr, "", t, 0);
2019 if (t == error_mark_node)
2023 fprintf (stderr, "\n");
2027 fprintf (stderr, " tags:\t");
2029 for (t = lvl->tags; t; t = TREE_CHAIN (t))
2031 if (TREE_PURPOSE (t) == NULL_TREE)
2033 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2040 fprintf (stderr, "\n\t");
2043 if (TREE_PURPOSE (t) == NULL_TREE)
2045 print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
2046 fprintf (stderr, ">");
2048 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2049 print_node_brief (stderr, "", TREE_VALUE (t), 0);
2052 print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
2053 print_node_brief (stderr, "", TREE_VALUE (t), 0);
2054 fprintf (stderr, ">");
2058 fprintf (stderr, "\n");
2060 if (lvl->class_shadowed)
2062 fprintf (stderr, " class-shadowed:");
2063 for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
2065 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2067 fprintf (stderr, "\n");
2069 if (lvl->type_shadowed)
2071 fprintf (stderr, " type-shadowed:");
2072 for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
2074 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2076 fprintf (stderr, "\n");
2081 print_other_binding_stack (stack)
2082 struct binding_level *stack;
2084 struct binding_level *level;
2085 for (level = stack; level != global_binding_level; level = level->level_chain)
2087 fprintf (stderr, "binding level ");
2088 fprintf (stderr, HOST_PTR_PRINTF, level);
2089 fprintf (stderr, "\n");
2090 print_binding_level (level);
2095 print_binding_stack ()
2097 struct binding_level *b;
2098 fprintf (stderr, "current_binding_level=");
2099 fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
2100 fprintf (stderr, "\nclass_binding_level=");
2101 fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
2102 fprintf (stderr, "\nglobal_binding_level=");
2103 fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
2104 fprintf (stderr, "\n");
2105 if (class_binding_level)
2107 for (b = class_binding_level; b; b = b->level_chain)
2108 if (b == current_binding_level)
2111 b = class_binding_level;
2113 b = current_binding_level;
2116 b = current_binding_level;
2117 print_other_binding_stack (b);
2118 fprintf (stderr, "global:\n");
2119 print_binding_level (global_binding_level);
2122 /* Namespace binding access routines: The namespace_bindings field of
2123 the identifier is polymorphic, with three possible values:
2124 NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
2125 indicating the BINDING_VALUE of global_namespace. */
2127 /* Check whether the a binding for the name to scope is known.
2128 Assumes that the bindings of the name are already a list
2129 of bindings. Returns the binding found, or NULL_TREE. */
2132 find_binding (name, scope)
2136 tree iter, prev = NULL_TREE;
2138 scope = ORIGINAL_NAMESPACE (scope);
2140 for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
2141 iter = TREE_CHAIN (iter))
2143 my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
2144 if (BINDING_SCOPE (iter) == scope)
2146 /* Move binding found to the front of the list, so
2147 subsequent lookups will find it faster. */
2150 TREE_CHAIN (prev) = TREE_CHAIN (iter);
2151 TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
2152 IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
2161 /* Always returns a binding for name in scope. If the
2162 namespace_bindings is not a list, convert it to one first.
2163 If no binding is found, make a new one. */
2166 binding_for_name (name, scope)
2170 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2173 scope = ORIGINAL_NAMESPACE (scope);
2175 if (b && TREE_CODE (b) != CPLUS_BINDING)
2177 /* Get rid of optimization for global scope. */
2178 IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
2179 BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
2180 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2182 if (b && (result = find_binding (name, scope)))
2184 /* Not found, make a new one. */
2185 result = make_node (CPLUS_BINDING);
2186 TREE_CHAIN (result) = b;
2187 IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
2188 BINDING_SCOPE (result) = scope;
2189 BINDING_TYPE (result) = NULL_TREE;
2190 BINDING_VALUE (result) = NULL_TREE;
2194 /* Return the binding value for name in scope, considering that
2195 namespace_binding may or may not be a list of CPLUS_BINDINGS. */
2198 namespace_binding (name, scope)
2202 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2205 if (scope == NULL_TREE)
2206 scope = global_namespace;
2207 if (TREE_CODE (b) != CPLUS_BINDING)
2208 return (scope == global_namespace) ? b : NULL_TREE;
2209 name = find_binding (name,scope);
2210 if (name == NULL_TREE)
2212 return BINDING_VALUE (name);
2215 /* Set the binding value for name in scope. If modifying the binding
2216 of global_namespace is attempted, try to optimize it. */
2219 set_namespace_binding (name, scope, val)
2226 if (scope == NULL_TREE)
2227 scope = global_namespace;
2229 if (scope == global_namespace)
2231 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2232 if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
2234 IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
2238 b = binding_for_name (name, scope);
2239 BINDING_VALUE (b) = val;
2242 /* Push into the scope of the NAME namespace. If NAME is NULL_TREE, then we
2243 select a name that is unique to this compilation unit. */
2246 push_namespace (name)
2251 int implicit_use = 0;
2253 if (!global_namespace)
2255 /* This must be ::. */
2256 my_friendly_assert (name == get_identifier ("::"), 377);
2261 /* The name of anonymous namespace is unique for the translation
2263 if (!anonymous_namespace_name)
2264 anonymous_namespace_name = get_file_function_name ('N');
2265 name = anonymous_namespace_name;
2266 d = IDENTIFIER_NAMESPACE_VALUE (name);
2268 /* Reopening anonymous namespace. */
2272 else if (current_namespace == global_namespace
2273 && name == DECL_NAME (std_node))
2280 /* Check whether this is an extended namespace definition. */
2281 d = IDENTIFIER_NAMESPACE_VALUE (name);
2282 if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
2285 if (DECL_NAMESPACE_ALIAS (d))
2287 cp_error ("namespace alias `%D' not allowed here, assuming `%D'",
2288 d, DECL_NAMESPACE_ALIAS (d));
2289 d = DECL_NAMESPACE_ALIAS (d);
2296 /* Make a new namespace, binding the name to it. */
2297 d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2298 /* The global namespace is not pushed, and the global binding
2299 level is set elsewhere. */
2304 declare_namespace_level ();
2305 NAMESPACE_LEVEL (d) = current_binding_level;
2309 resume_binding_level (NAMESPACE_LEVEL (d));
2312 do_using_directive (d);
2313 /* Enter the name space. */
2314 current_namespace = d;
2317 /* Pop from the scope of the current namespace. */
2322 if (current_namespace == global_namespace)
2324 my_friendly_assert (in_std>0, 980421);
2328 current_namespace = CP_DECL_CONTEXT (current_namespace);
2329 /* The binding level is not popped, as it might be re-opened later. */
2330 suspend_binding_level ();
2333 /* Push into the scope of the namespace NS, even if it is deeply
2334 nested within another namespace. */
2337 push_nested_namespace (ns)
2340 if (ns == global_namespace)
2341 push_to_top_level ();
2344 push_nested_namespace (CP_DECL_CONTEXT (ns));
2345 push_namespace (DECL_NAME (ns));
2349 /* Pop back from the scope of the namespace NS, which was previously
2350 entered with push_nested_namespace. */
2353 pop_nested_namespace (ns)
2356 while (ns != global_namespace)
2359 ns = CP_DECL_CONTEXT (ns);
2362 pop_from_top_level ();
2366 /* Subroutines for reverting temporarily to top-level for instantiation
2367 of templates and such. We actually need to clear out the class- and
2368 local-value slots of all identifiers, so that only the global values
2369 are at all visible. Simply setting current_binding_level to the global
2370 scope isn't enough, because more binding levels may be pushed. */
2371 struct saved_scope *scope_chain;
2373 /* Mark ST for GC. */
2377 struct stmt_tree *st;
2379 ggc_mark_tree (st->x_last_stmt);
2380 ggc_mark_tree (st->x_last_expr_type);
2383 /* Mark ARG (which is really a struct saved_scope **) for GC. */
2386 mark_saved_scope (arg)
2389 struct saved_scope *t = *(struct saved_scope **)arg;
2392 mark_binding_level (&t->class_bindings);
2393 ggc_mark_tree (t->old_bindings);
2394 ggc_mark_tree (t->old_namespace);
2395 ggc_mark_tree (t->class_name);
2396 ggc_mark_tree (t->class_type);
2397 ggc_mark_tree (t->access_specifier);
2398 ggc_mark_tree (t->function_decl);
2400 ggc_mark_tree_varray (t->lang_base);
2401 ggc_mark_tree (t->lang_name);
2402 ggc_mark_tree (t->x_function_parms);
2403 ggc_mark_tree (t->template_parms);
2404 ggc_mark_tree (t->x_previous_class_type);
2405 ggc_mark_tree (t->x_previous_class_values);
2406 ggc_mark_tree (t->x_saved_tree);
2407 ggc_mark_tree (t->incomplete);
2408 ggc_mark_tree (t->lookups);
2410 mark_stmt_tree (&t->x_stmt_tree);
2411 mark_binding_level (&t->bindings);
2417 store_bindings (names, old_bindings)
2418 tree names, old_bindings;
2421 for (t = names; t; t = TREE_CHAIN (t))
2423 tree binding, t1, id;
2425 if (TREE_CODE (t) == TREE_LIST)
2426 id = TREE_PURPOSE (t);
2431 /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2432 we have no IDENTIFIER_BINDING if we have left the class
2433 scope, but cached the class-level declarations. */
2434 || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
2437 for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
2438 if (TREE_VEC_ELT (t1, 0) == id)
2441 binding = make_tree_vec (4);
2445 my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
2446 TREE_VEC_ELT (binding, 0) = id;
2447 TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
2448 TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
2449 TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
2450 IDENTIFIER_BINDING (id) = NULL_TREE;
2451 IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
2453 TREE_CHAIN (binding) = old_bindings;
2454 old_bindings = binding;
2458 return old_bindings;
2462 maybe_push_to_top_level (pseudo)
2465 struct saved_scope *s;
2466 struct binding_level *b;
2470 s = (struct saved_scope *) xcalloc (1, sizeof (struct saved_scope));
2472 b = scope_chain ? current_binding_level : 0;
2474 /* If we're in the middle of some function, save our state. */
2478 push_function_context_to (NULL_TREE);
2483 old_bindings = NULL_TREE;
2484 if (scope_chain && previous_class_type)
2485 old_bindings = store_bindings (previous_class_values, old_bindings);
2487 /* Have to include global_binding_level, because class-level decls
2488 aren't listed anywhere useful. */
2489 for (; b; b = b->level_chain)
2493 /* Template IDs are inserted into the global level. If they were
2494 inserted into namespace level, finish_file wouldn't find them
2495 when doing pending instantiations. Therefore, don't stop at
2496 namespace level, but continue until :: . */
2497 if (b == global_binding_level || (pseudo && b->template_parms_p))
2500 old_bindings = store_bindings (b->names, old_bindings);
2501 /* We also need to check class_shadowed to save class-level type
2502 bindings, since pushclass doesn't fill in b->names. */
2503 if (b->parm_flag == 2)
2504 old_bindings = store_bindings (b->class_shadowed, old_bindings);
2506 /* Unwind type-value slots back to top level. */
2507 for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2508 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2510 s->prev = scope_chain;
2511 s->old_bindings = old_bindings;
2513 s->need_pop_function_context = need_pop;
2514 s->function_decl = current_function_decl;
2517 current_function_decl = NULL_TREE;
2518 VARRAY_TREE_INIT (current_lang_base, 10, "current_lang_base");
2519 current_lang_stack = &VARRAY_TREE (current_lang_base, 0);
2520 current_lang_name = lang_name_cplusplus;
2521 strict_prototype = strict_prototypes_lang_cplusplus;
2522 current_namespace = global_namespace;
2526 push_to_top_level ()
2528 maybe_push_to_top_level (0);
2532 pop_from_top_level ()
2534 struct saved_scope *s = scope_chain;
2537 /* Clear out class-level bindings cache. */
2538 if (previous_class_type)
2539 invalidate_class_lookup_cache ();
2541 VARRAY_FREE (current_lang_base);
2543 scope_chain = s->prev;
2544 for (t = s->old_bindings; t; t = TREE_CHAIN (t))
2546 tree id = TREE_VEC_ELT (t, 0);
2549 SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
2550 IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
2551 IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
2555 if (current_lang_name == lang_name_cplusplus)
2556 strict_prototype = strict_prototypes_lang_cplusplus;
2557 else if (current_lang_name == lang_name_c)
2558 strict_prototype = strict_prototypes_lang_c;
2560 /* If we were in the middle of compiling a function, restore our
2562 if (s->need_pop_function_context)
2563 pop_function_context_from (NULL_TREE);
2564 current_function_decl = s->function_decl;
2569 /* Push a definition of struct, union or enum tag "name".
2570 into binding_level "b". "type" should be the type node,
2571 We assume that the tag "name" is not already defined.
2573 Note that the definition may really be just a forward reference.
2574 In that case, the TYPE_SIZE will be a NULL_TREE.
2576 C++ gratuitously puts all these tags in the name space. */
2578 /* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2579 record the shadowed value for this binding contour. TYPE is
2580 the type that ID maps to. */
2583 set_identifier_type_value_with_scope (id, type, b)
2586 struct binding_level *b;
2588 if (!b->namespace_p)
2590 /* Shadow the marker, not the real thing, so that the marker
2591 gets restored later. */
2592 tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
2594 = tree_cons (id, old_type_value, b->type_shadowed);
2598 tree binding = binding_for_name (id, current_namespace);
2599 BINDING_TYPE (binding) = type;
2600 /* Store marker instead of real type. */
2601 type = global_type_node;
2603 SET_IDENTIFIER_TYPE_VALUE (id, type);
2606 /* As set_identifier_type_value_with_scope, but using current_binding_level. */
2609 set_identifier_type_value (id, type)
2613 set_identifier_type_value_with_scope (id, type, current_binding_level);
2616 /* Return the type associated with id. */
2619 identifier_type_value (id)
2622 /* There is no type with that name, anywhere. */
2623 if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2625 /* This is not the type marker, but the real thing. */
2626 if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2627 return REAL_IDENTIFIER_TYPE_VALUE (id);
2628 /* Have to search for it. It must be on the global level, now.
2629 Ask lookup_name not to return non-types. */
2630 id = lookup_name_real (id, 2, 1, 0);
2632 return TREE_TYPE (id);
2636 /* Pop off extraneous binding levels left over due to syntax errors.
2638 We don't pop past namespaces, as they might be valid. */
2643 #ifdef DEBUG_CP_BINDING_LEVELS
2644 fprintf (stderr, "XXX entering pop_everything ()\n");
2646 while (!toplevel_bindings_p ())
2648 if (current_binding_level->parm_flag == 2)
2649 pop_nested_class ();
2653 #ifdef DEBUG_CP_BINDING_LEVELS
2654 fprintf (stderr, "XXX leaving pop_everything ()\n");
2658 /* The type TYPE is being declared. If it is a class template, or a
2659 specialization of a class template, do any processing required and
2660 perform error-checking. If IS_FRIEND is non-zero, this TYPE is
2661 being declared a friend. B is the binding level at which this TYPE
2664 Returns the TYPE_DECL for TYPE, which may have been altered by this
2668 maybe_process_template_type_declaration (type, globalize, b)
2671 struct binding_level* b;
2673 tree decl = TYPE_NAME (type);
2675 if (processing_template_parmlist)
2676 /* You can't declare a new template type in a template parameter
2677 list. But, you can declare a non-template type:
2679 template <class A*> struct S;
2681 is a forward-declaration of `A'. */
2685 maybe_check_template_type (type);
2687 my_friendly_assert (IS_AGGR_TYPE (type)
2688 || TREE_CODE (type) == ENUMERAL_TYPE, 0);
2691 if (processing_template_decl)
2693 /* This may change after the call to
2694 push_template_decl_real, but we want the original value. */
2695 tree name = DECL_NAME (decl);
2697 decl = push_template_decl_real (decl, globalize);
2698 /* If the current binding level is the binding level for the
2699 template parameters (see the comment in
2700 begin_template_parm_list) and the enclosing level is a class
2701 scope, and we're not looking at a friend, push the
2702 declaration of the member class into the class scope. In the
2703 friend case, push_template_decl will already have put the
2704 friend into global scope, if appropriate. */
2705 if (TREE_CODE (type) != ENUMERAL_TYPE
2706 && !globalize && b->template_parms_p
2707 && b->level_chain->parm_flag == 2)
2709 finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
2710 /* Put this tag on the list of tags for the class, since
2711 that won't happen below because B is not the class
2712 binding level, but is instead the pseudo-global level. */
2713 b->level_chain->tags =
2714 tree_cons (name, type, b->level_chain->tags);
2715 if (!COMPLETE_TYPE_P (current_class_type))
2716 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2724 /* In C++, you don't have to write `struct S' to refer to `S'; you
2725 can just use `S'. We accomplish this by creating a TYPE_DECL as
2726 if the user had written `typedef struct S S'. Create and return
2727 the TYPE_DECL for TYPE. */
2730 create_implicit_typedef (name, type)
2736 decl = build_decl (TYPE_DECL, name, type);
2737 SET_DECL_ARTIFICIAL (decl);
2738 /* There are other implicit type declarations, like the one *within*
2739 a class that allows you to write `S::S'. We must distinguish
2741 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
2742 TYPE_NAME (type) = decl;
2747 /* Push a tag name NAME for struct/class/union/enum type TYPE.
2748 Normally put it into the inner-most non-tag-transparent scope,
2749 but if GLOBALIZE is true, put it in the inner-most non-class scope.
2750 The latter is needed for implicit declarations. */
2753 pushtag (name, type, globalize)
2757 register struct binding_level *b;
2759 b = current_binding_level;
2760 while (b->tag_transparent
2761 || (globalize && b->parm_flag == 2))
2764 b->tags = tree_cons (name, type, b->tags);
2768 /* Do C++ gratuitous typedefing. */
2769 if (IDENTIFIER_TYPE_VALUE (name) != type)
2771 register tree d = NULL_TREE;
2773 tree context = TYPE_CONTEXT (type);
2777 tree cs = current_scope ();
2781 else if (cs != NULL_TREE && TYPE_P (cs))
2782 /* When declaring a friend class of a local class, we want
2783 to inject the newly named class into the scope
2784 containing the local class, not the namespace scope. */
2785 context = decl_function_context (get_type_decl (cs));
2788 context = current_namespace;
2790 if ((b->template_parms_p && b->level_chain->parm_flag == 2)
2791 || b->parm_flag == 2)
2794 if (current_lang_name == lang_name_java)
2795 TYPE_FOR_JAVA (type) = 1;
2797 d = create_implicit_typedef (name, type);
2798 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2800 set_identifier_type_value_with_scope (name, type, b);
2802 d = maybe_process_template_type_declaration (type,
2805 if (b->parm_flag == 2)
2807 if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
2808 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2809 class. But if it's a member template class, we
2810 want the TEMPLATE_DECL, not the TYPE_DECL, so this
2812 finish_member_declaration (d);
2814 pushdecl_class_level (d);
2817 d = pushdecl_with_scope (d, b);
2819 if (ANON_AGGRNAME_P (name))
2820 DECL_IGNORED_P (d) = 1;
2822 TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2823 DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
2824 if (!uses_template_parms (type))
2825 DECL_ASSEMBLER_NAME (d)
2826 = get_identifier (build_overload_name (type, 1, 1));
2828 if (b->parm_flag == 2)
2830 if (!COMPLETE_TYPE_P (current_class_type))
2831 CLASSTYPE_TAGS (current_class_type) = b->tags;
2835 if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2836 /* Use the canonical TYPE_DECL for this node. */
2837 TYPE_STUB_DECL (type) = TYPE_NAME (type);
2840 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2841 will be the tagged type we just added to the current
2842 binding level. This fake NULL-named TYPE_DECL node helps
2843 dwarfout.c to know when it needs to output a
2844 representation of a tagged type, and it also gives us a
2845 convenient place to record the "scope start" address for
2848 tree d = build_decl (TYPE_DECL, NULL_TREE, type);
2849 TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2853 /* Counter used to create anonymous type names. */
2855 static int anon_cnt = 0;
2857 /* Return an IDENTIFIER which can be used as a name for
2858 anonymous structs and unions. */
2865 sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2866 return get_identifier (buf);
2869 /* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2870 This keeps dbxout from getting confused. */
2875 register struct binding_level *b;
2877 static int last_cnt = 0;
2879 /* Fast out if no new anon names were declared. */
2880 if (last_cnt == anon_cnt)
2883 b = current_binding_level;
2884 while (b->tag_transparent)
2889 /* A NULL purpose means we have already processed all tags
2890 from here to the end of the list. */
2891 if (TREE_PURPOSE (tags) == NULL_TREE)
2893 if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2894 TREE_PURPOSE (tags) = NULL_TREE;
2895 tags = TREE_CHAIN (tags);
2897 last_cnt = anon_cnt;
2900 /* Subroutine of duplicate_decls: return truthvalue of whether
2901 or not types of these decls match.
2903 For C++, we must compare the parameter list so that `int' can match
2904 `int&' in a parameter position, but `int&' is not confused with
2908 decls_match (newdecl, olddecl)
2909 tree newdecl, olddecl;
2913 if (newdecl == olddecl)
2916 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
2917 /* If the two DECLs are not even the same kind of thing, we're not
2918 interested in their types. */
2921 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2923 tree f1 = TREE_TYPE (newdecl);
2924 tree f2 = TREE_TYPE (olddecl);
2925 tree p1 = TYPE_ARG_TYPES (f1);
2926 tree p2 = TYPE_ARG_TYPES (f2);
2928 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
2929 && ! (DECL_EXTERN_C_P (newdecl)
2930 && DECL_EXTERN_C_P (olddecl)))
2933 if (TREE_CODE (f1) != TREE_CODE (f2))
2936 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
2938 if ((! strict_prototypes_lang_c || DECL_BUILT_IN (olddecl))
2939 && DECL_EXTERN_C_P (olddecl)
2942 types_match = self_promoting_args_p (p1);
2943 if (p1 == void_list_node)
2944 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2946 else if (!strict_prototypes_lang_c
2947 && DECL_EXTERN_C_P (olddecl)
2948 && DECL_EXTERN_C_P (newdecl)
2951 types_match = self_promoting_args_p (p2);
2952 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2955 types_match = compparms (p1, p2);
2960 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2962 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
2963 DECL_TEMPLATE_PARMS (olddecl)))
2966 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2969 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
2970 DECL_TEMPLATE_RESULT (newdecl));
2974 if (TREE_TYPE (newdecl) == error_mark_node)
2975 types_match = TREE_TYPE (olddecl) == error_mark_node;
2976 else if (TREE_TYPE (olddecl) == NULL_TREE)
2977 types_match = TREE_TYPE (newdecl) == NULL_TREE;
2978 else if (TREE_TYPE (newdecl) == NULL_TREE)
2981 types_match = comptypes (TREE_TYPE (newdecl),
2982 TREE_TYPE (olddecl),
2983 COMPARE_REDECLARATION);
2989 /* If NEWDECL is `static' and an `extern' was seen previously,
2990 warn about it. OLDDECL is the previous declaration.
2992 Note that this does not apply to the C++ case of declaring
2993 a variable `extern const' and then later `const'.
2995 Don't complain about built-in functions, since they are beyond
2996 the user's control. */
2999 warn_extern_redeclared_static (newdecl, olddecl)
3000 tree newdecl, olddecl;
3002 static const char *explicit_extern_static_warning
3003 = "`%D' was declared `extern' and later `static'";
3004 static const char *implicit_extern_static_warning
3005 = "`%D' was declared implicitly `extern' and later `static'";
3009 if (TREE_CODE (newdecl) == TYPE_DECL
3010 || TREE_CODE (newdecl) == TEMPLATE_DECL)
3013 /* Don't get confused by static member functions; that's a different
3015 if (TREE_CODE (newdecl) == FUNCTION_DECL
3016 && DECL_STATIC_FUNCTION_P (newdecl))
3019 /* If the old declaration was `static', or the new one isn't, then
3020 then everything is OK. */
3021 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
3024 /* It's OK to declare a builtin function as `static'. */
3025 if (TREE_CODE (olddecl) == FUNCTION_DECL
3026 && DECL_ARTIFICIAL (olddecl))
3029 name = DECL_ASSEMBLER_NAME (newdecl);
3030 cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
3031 ? implicit_extern_static_warning
3032 : explicit_extern_static_warning, newdecl);
3033 cp_pedwarn_at ("previous declaration of `%D'", olddecl);
3036 /* Handle when a new declaration NEWDECL has the same name as an old
3037 one OLDDECL in the same binding contour. Prints an error message
3040 If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
3041 Otherwise, return 0. */
3044 duplicate_decls (newdecl, olddecl)
3045 tree newdecl, olddecl;
3047 unsigned olddecl_uid = DECL_UID (olddecl);
3048 int olddecl_friend = 0, types_match = 0;
3049 int new_defines_function = 0;
3051 if (newdecl == olddecl)
3054 types_match = decls_match (newdecl, olddecl);
3056 /* If either the type of the new decl or the type of the old decl is an
3057 error_mark_node, then that implies that we have already issued an
3058 error (earlier) for some bogus type specification, and in that case,
3059 it is rather pointless to harass the user with yet more error message
3060 about the same declaration, so just pretend the types match here. */
3061 if (TREE_TYPE (newdecl) == error_mark_node
3062 || TREE_TYPE (olddecl) == error_mark_node)
3065 /* Check for redeclaration and other discrepancies. */
3066 if (TREE_CODE (olddecl) == FUNCTION_DECL
3067 && DECL_ARTIFICIAL (olddecl))
3069 if (TREE_CODE (newdecl) != FUNCTION_DECL)
3071 /* If you declare a built-in or predefined function name as static,
3072 the old definition is overridden, but optionally warn this was a
3073 bad choice of name. */
3074 if (! TREE_PUBLIC (newdecl))
3077 cp_warning ("shadowing %s function `%#D'",
3078 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3080 /* Discard the old built-in function. */
3083 /* If the built-in is not ansi, then programs can override
3084 it even globally without an error. */
3085 else if (! DECL_BUILT_IN (olddecl))
3086 cp_warning ("library function `%#D' redeclared as non-function `%#D'",
3090 cp_error ("declaration of `%#D'", newdecl);
3091 cp_error ("conflicts with built-in declaration `%#D'",
3096 else if (!types_match)
3098 if ((DECL_EXTERN_C_P (newdecl)
3099 && DECL_EXTERN_C_P (olddecl))
3100 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3101 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3103 /* A near match; override the builtin. */
3105 if (TREE_PUBLIC (newdecl))
3107 cp_warning ("new declaration `%#D'", newdecl);
3108 cp_warning ("ambiguates built-in declaration `%#D'",
3111 else if (warn_shadow)
3112 cp_warning ("shadowing %s function `%#D'",
3113 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3117 /* Discard the old built-in function. */
3121 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
3123 /* If a builtin function is redeclared as `static', merge
3124 the declarations, but make the original one static. */
3125 DECL_THIS_STATIC (olddecl) = 1;
3126 TREE_PUBLIC (olddecl) = 0;
3128 /* Make the old declaration consistent with the new one so
3129 that all remnants of the builtin-ness of this function
3130 will be banished. */
3131 DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3132 DECL_RTL (olddecl) = DECL_RTL (newdecl);
3133 DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3134 SET_IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (newdecl),
3138 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
3140 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
3141 && TREE_CODE (newdecl) != TYPE_DECL
3142 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
3143 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
3144 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
3145 && TREE_CODE (olddecl) != TYPE_DECL
3146 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
3147 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
3150 /* We do nothing special here, because C++ does such nasty
3151 things with TYPE_DECLs. Instead, just let the TYPE_DECL
3152 get shadowed, and know that if we need to find a TYPE_DECL
3153 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3154 slot of the identifier. */
3158 if ((TREE_CODE (newdecl) == FUNCTION_DECL
3159 && DECL_FUNCTION_TEMPLATE_P (olddecl))
3160 || (TREE_CODE (olddecl) == FUNCTION_DECL
3161 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
3164 cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
3165 if (TREE_CODE (olddecl) == TREE_LIST)
3166 olddecl = TREE_VALUE (olddecl);
3167 cp_error_at ("previous declaration of `%#D'", olddecl);
3169 /* New decl is completely inconsistent with the old one =>
3170 tell caller to replace the old one. */
3174 else if (!types_match)
3176 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
3177 /* These are certainly not duplicate declarations; they're
3178 from different scopes. */
3181 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3183 /* The name of a class template may not be declared to refer to
3184 any other template, class, function, object, namespace, value,
3185 or type in the same scope. */
3186 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
3187 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3189 cp_error ("declaration of template `%#D'", newdecl);
3190 cp_error_at ("conflicts with previous declaration `%#D'",
3193 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
3194 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3195 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
3196 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
3197 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3198 DECL_TEMPLATE_PARMS (olddecl)))
3200 cp_error ("new declaration `%#D'", newdecl);
3201 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3205 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3207 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
3209 cp_error ("declaration of C function `%#D' conflicts with",
3211 cp_error_at ("previous declaration `%#D' here", olddecl);
3213 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3214 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3216 cp_error ("new declaration `%#D'", newdecl);
3217 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3223 /* Already complained about this, so don't do so again. */
3224 else if (current_class_type == NULL_TREE
3225 || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3227 cp_error ("conflicting types for `%#D'", newdecl);
3228 cp_error_at ("previous declaration as `%#D'", olddecl);
3231 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3232 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3233 && (!DECL_TEMPLATE_INFO (newdecl)
3234 || (DECL_TI_TEMPLATE (newdecl)
3235 != DECL_TI_TEMPLATE (olddecl))))
3236 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3237 && (!DECL_TEMPLATE_INFO (olddecl)
3238 || (DECL_TI_TEMPLATE (olddecl)
3239 != DECL_TI_TEMPLATE (newdecl))))))
3240 /* It's OK to have a template specialization and a non-template
3241 with the same type, or to have specializations of two
3242 different templates with the same type. Note that if one is a
3243 specialization, and the other is an instantiation of the same
3244 template, that we do not exit at this point. That situation
3245 can occur if we instantiate a template class, and then
3246 specialize one of its methods. This situation is legal, but
3247 the declarations must be merged in the usual way. */
3249 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3250 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
3251 && !DECL_USE_TEMPLATE (newdecl))
3252 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3253 && !DECL_USE_TEMPLATE (olddecl))))
3254 /* One of the declarations is a template instantiation, and the
3255 other is not a template at all. That's OK. */
3257 else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3258 && DECL_NAMESPACE_ALIAS (newdecl)
3259 && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3260 /* Redeclaration of namespace alias, ignore it. */
3264 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
3267 cp_error (errmsg, newdecl);
3268 if (DECL_NAME (olddecl) != NULL_TREE)
3269 cp_error_at ((DECL_INITIAL (olddecl)
3270 && namespace_bindings_p ())
3271 ? "`%#D' previously defined here"
3272 : "`%#D' previously declared here", olddecl);
3274 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3275 && DECL_INITIAL (olddecl) != NULL_TREE
3276 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3277 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3279 /* Prototype decl follows defn w/o prototype. */
3280 cp_warning_at ("prototype for `%#D'", newdecl);
3281 cp_warning_at ("follows non-prototype definition here", olddecl);
3283 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3284 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
3286 /* extern "C" int foo ();
3287 int foo () { bar (); }
3289 if (current_lang_stack
3290 == &VARRAY_TREE (current_lang_base, 0))
3291 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3294 cp_error_at ("previous declaration of `%#D' with %L linkage",
3295 olddecl, DECL_LANGUAGE (olddecl));
3296 cp_error ("conflicts with new declaration with %L linkage",
3297 DECL_LANGUAGE (newdecl));
3301 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
3303 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
3305 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3306 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3309 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3310 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
3312 for (; t1 && t1 != void_list_node;
3313 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3314 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3316 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3321 cp_pedwarn ("default argument given for parameter %d of `%#D'",
3323 cp_pedwarn_at ("after previous specification in `%#D'",
3329 cp_error ("default argument given for parameter %d of `%#D'",
3331 cp_error_at ("after previous specification in `%#D'",
3336 if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
3337 && TREE_ADDRESSABLE (olddecl) && warn_inline)
3339 cp_warning ("`%#D' was used before it was declared inline",
3341 cp_warning_at ("previous non-inline declaration here",
3347 /* If new decl is `static' and an `extern' was seen previously,
3349 warn_extern_redeclared_static (newdecl, olddecl);
3351 /* We have committed to returning 1 at this point. */
3352 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3354 /* Now that functions must hold information normally held
3355 by field decls, there is extra work to do so that
3356 declaration information does not get destroyed during
3358 if (DECL_VINDEX (olddecl))
3359 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
3360 if (DECL_VIRTUAL_CONTEXT (olddecl))
3361 DECL_VIRTUAL_CONTEXT (newdecl) = DECL_VIRTUAL_CONTEXT (olddecl);
3362 if (DECL_CONTEXT (olddecl))
3363 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
3364 if (DECL_PENDING_INLINE_INFO (newdecl) == (struct pending_inline *)0)
3365 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
3366 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3367 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
3368 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
3369 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
3370 DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
3371 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
3372 DECL_VTT_PARM (newdecl) = DECL_VTT_PARM (olddecl);
3373 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
3375 /* Optionally warn about more than one declaration for the same
3376 name, but don't warn about a function declaration followed by a
3378 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3379 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3380 /* Don't warn about extern decl followed by definition. */
3381 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3382 /* Don't warn about friends, let add_friend take care of it. */
3383 && ! DECL_FRIEND_P (newdecl))
3385 cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3386 cp_warning_at ("previous declaration of `%D'", olddecl);
3390 /* Deal with C++: must preserve virtual function table size. */
3391 if (TREE_CODE (olddecl) == TYPE_DECL)
3393 register tree newtype = TREE_TYPE (newdecl);
3394 register tree oldtype = TREE_TYPE (olddecl);
3396 if (newtype != error_mark_node && oldtype != error_mark_node
3397 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3399 CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3400 CLASSTYPE_FRIEND_CLASSES (newtype)
3401 = CLASSTYPE_FRIEND_CLASSES (oldtype);
3405 /* Copy all the DECL_... slots specified in the new decl
3406 except for any that we copy here from the old type. */
3407 DECL_MACHINE_ATTRIBUTES (newdecl)
3408 = merge_machine_decl_attributes (olddecl, newdecl);
3410 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3412 if (! duplicate_decls (DECL_TEMPLATE_RESULT (newdecl),
3413 DECL_TEMPLATE_RESULT (olddecl)))
3414 cp_error ("invalid redeclaration of %D", newdecl);
3415 TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
3416 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
3417 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3418 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
3425 /* Automatically handles default parameters. */
3426 tree oldtype = TREE_TYPE (olddecl);
3429 /* Merge the data types specified in the two decls. */
3430 newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3432 if (TREE_CODE (newdecl) == VAR_DECL)
3433 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3434 /* Do this after calling `common_type' so that default
3435 parameters don't confuse us. */
3436 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3437 && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3438 != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3440 TREE_TYPE (newdecl) = build_exception_variant (newtype,
3441 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
3442 TREE_TYPE (olddecl) = build_exception_variant (newtype,
3443 TYPE_RAISES_EXCEPTIONS (oldtype));
3445 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3446 && DECL_SOURCE_LINE (olddecl) != 0
3448 && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
3449 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
3451 cp_error ("declaration of `%F' throws different exceptions",
3453 cp_error_at ("than previous declaration `%F'", olddecl);
3456 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3458 /* Lay the type out, unless already done. */
3459 if (! same_type_p (newtype, oldtype)
3460 && TREE_TYPE (newdecl) != error_mark_node
3461 && !(processing_template_decl && uses_template_parms (newdecl)))
3462 layout_type (TREE_TYPE (newdecl));
3464 if ((TREE_CODE (newdecl) == VAR_DECL
3465 || TREE_CODE (newdecl) == PARM_DECL
3466 || TREE_CODE (newdecl) == RESULT_DECL
3467 || TREE_CODE (newdecl) == FIELD_DECL
3468 || TREE_CODE (newdecl) == TYPE_DECL)
3469 && !(processing_template_decl && uses_template_parms (newdecl)))
3470 layout_decl (newdecl, 0);
3472 /* Merge the type qualifiers. */
3473 if (TREE_READONLY (newdecl))
3474 TREE_READONLY (olddecl) = 1;
3475 if (TREE_THIS_VOLATILE (newdecl))
3476 TREE_THIS_VOLATILE (olddecl) = 1;
3478 /* Merge the initialization information. */
3479 if (DECL_INITIAL (newdecl) == NULL_TREE
3480 && DECL_INITIAL (olddecl) != NULL_TREE)
3482 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3483 DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3484 DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
3485 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
3486 && DECL_LANG_SPECIFIC (newdecl)
3487 && DECL_LANG_SPECIFIC (olddecl))
3488 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
3491 /* Merge the section attribute.
3492 We want to issue an error if the sections conflict but that must be
3493 done later in decl_attributes since we are called before attributes
3495 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3496 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3498 /* Keep the old rtl since we can safely use it. */
3499 DECL_RTL (newdecl) = DECL_RTL (olddecl);
3501 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3503 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
3504 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
3505 DECL_NO_CHECK_MEMORY_USAGE (newdecl)
3506 |= DECL_NO_CHECK_MEMORY_USAGE (olddecl);
3507 DECL_NO_LIMIT_STACK (newdecl)
3508 |= DECL_NO_LIMIT_STACK (olddecl);
3511 /* If cannot merge, then use the new type and qualifiers,
3512 and don't preserve the old rtl. */
3515 /* Clean out any memory we had of the old declaration. */
3516 tree oldstatic = value_member (olddecl, static_aggregates);
3518 TREE_VALUE (oldstatic) = error_mark_node;
3520 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3521 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3522 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3523 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3526 /* Merge the storage class information. */
3527 DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
3528 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
3529 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
3530 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3531 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3532 if (! DECL_EXTERNAL (olddecl))
3533 DECL_EXTERNAL (newdecl) = 0;
3535 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
3537 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3538 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
3539 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
3540 DECL_TEMPLATE_INSTANTIATED (newdecl)
3541 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
3542 /* Don't really know how much of the language-specific
3543 values we should copy from old to new. */
3544 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3545 DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3546 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
3547 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3548 olddecl_friend = DECL_FRIEND_P (olddecl);
3550 /* Only functions have DECL_BEFRIENDING_CLASSES. */
3551 if (TREE_CODE (newdecl) == FUNCTION_DECL
3552 || DECL_FUNCTION_TEMPLATE_P (newdecl))
3553 DECL_BEFRIENDING_CLASSES (newdecl)
3554 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3555 DECL_BEFRIENDING_CLASSES (olddecl));
3558 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3560 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
3561 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
3563 /* If newdecl is not a specialization, then it is not a
3564 template-related function at all. And that means that we
3565 shoud have exited above, returning 0. */
3566 my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3569 if (TREE_USED (olddecl))
3570 /* From [temp.expl.spec]:
3572 If a template, a member template or the member of a class
3573 template is explicitly specialized then that
3574 specialization shall be declared before the first use of
3575 that specialization that would cause an implicit
3576 instantiation to take place, in every translation unit in
3577 which such a use occurs. */
3578 cp_error ("explicit specialization of %D after first use",
3581 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3583 DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3585 /* If either decl says `inline', this fn is inline, unless its
3586 definition was passed already. */
3587 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3588 DECL_INLINE (olddecl) = 1;
3589 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3593 DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3594 DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3595 DECL_RTL (olddecl) = DECL_RTL (newdecl);
3597 if (! types_match || new_defines_function)
3599 /* These need to be copied so that the names are available.
3600 Note that if the types do match, we'll preserve inline
3601 info and other bits, but if not, we won't. */
3602 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3603 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
3605 if (new_defines_function)
3606 /* If defining a function declared with other language
3607 linkage, use the previously declared language linkage. */
3608 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3609 else if (types_match)
3611 /* If redeclaring a builtin function, and not a definition,
3612 it stays built in. */
3613 if (DECL_BUILT_IN (olddecl))
3615 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
3616 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
3617 /* If we're keeping the built-in definition, keep the rtl,
3618 regardless of declaration matches. */
3619 DECL_RTL (newdecl) = DECL_RTL (olddecl);
3622 DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
3624 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
3625 if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
3626 /* Previously saved insns go together with
3627 the function's previous definition. */
3628 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3629 /* Don't clear out the arguments if we're redefining a function. */
3630 if (DECL_ARGUMENTS (olddecl))
3631 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3635 if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3637 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3640 /* Now preserve various other info from the definition. */
3641 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3642 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3643 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
3644 DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
3646 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3650 function_size = sizeof (struct tree_decl);
3652 bcopy ((char *) newdecl + sizeof (struct tree_common),
3653 (char *) olddecl + sizeof (struct tree_common),
3654 function_size - sizeof (struct tree_common));
3656 if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3658 /* If newdecl is a template instantiation, it is possible that
3659 the following sequence of events has occurred:
3661 o A friend function was declared in a class template. The
3662 class template was instantiated.
3664 o The instantiation of the friend declaration was
3665 recorded on the instantiation list, and is newdecl.
3667 o Later, however, instantiate_class_template called pushdecl
3668 on the newdecl to perform name injection. But, pushdecl in
3669 turn called duplicate_decls when it discovered that another
3670 declaration of a global function with the same name already
3673 o Here, in duplicate_decls, we decided to clobber newdecl.
3675 If we're going to do that, we'd better make sure that
3676 olddecl, and not newdecl, is on the list of
3677 instantiations so that if we try to do the instantiation
3678 again we won't get the clobbered declaration. */
3680 tree tmpl = DECL_TI_TEMPLATE (newdecl);
3681 tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
3683 for (; decls; decls = TREE_CHAIN (decls))
3684 if (TREE_VALUE (decls) == newdecl)
3685 TREE_VALUE (decls) = olddecl;
3690 bcopy ((char *) newdecl + sizeof (struct tree_common),
3691 (char *) olddecl + sizeof (struct tree_common),
3692 sizeof (struct tree_decl) - sizeof (struct tree_common)
3693 + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3696 DECL_UID (olddecl) = olddecl_uid;
3698 DECL_FRIEND_P (olddecl) = 1;
3700 /* NEWDECL contains the merged attribute lists.
3701 Update OLDDECL to be the same. */
3702 DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3707 /* Record a decl-node X as belonging to the current lexical scope.
3708 Check for errors (such as an incompatible declaration for the same
3709 name already seen in the same scope).
3711 Returns either X or an old decl for the same name.
3712 If an old decl is returned, it may have been smashed
3713 to agree with what X says. */
3721 int need_new_binding;
3723 /* We shouldn't be calling pushdecl when we're generating RTL for a
3724 function that we already did semantic analysis on previously. */
3725 my_friendly_assert (!cfun || doing_semantic_analysis_p (),
3728 name = DECL_ASSEMBLER_NAME (x);
3729 need_new_binding = 1;
3731 if (DECL_TEMPLATE_PARM_P (x))
3732 /* Template parameters have no context; they are not X::T even
3733 when declared within a class or namespace. */
3737 if (current_function_decl && x != current_function_decl
3738 /* A local declaration for a function doesn't constitute
3740 && !(TREE_CODE (x) == FUNCTION_DECL && !DECL_INITIAL (x))
3741 /* A local declaration for an `extern' variable is in the
3742 scoped of the current namespace, not the current
3744 && !(TREE_CODE (x) == VAR_DECL && DECL_EXTERNAL (x))
3745 && !DECL_CONTEXT (x))
3746 DECL_CONTEXT (x) = current_function_decl;
3747 if (!DECL_CONTEXT (x))
3748 DECL_CONTEXT (x) = FROB_CONTEXT (current_namespace);
3750 /* If this is the declaration for a namespace-scope function,
3751 but the declaration itself is in a local scope, mark the
3753 if (TREE_CODE (x) == FUNCTION_DECL
3754 && DECL_NAMESPACE_SCOPE_P (x)
3755 && current_function_decl
3756 && x != current_function_decl)
3757 DECL_LOCAL_FUNCTION_P (x) = 1;
3760 /* Type are looked up using the DECL_NAME, as that is what the rest of the
3761 compiler wants to use. */
3762 if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
3763 || TREE_CODE (x) == NAMESPACE_DECL)
3764 name = DECL_NAME (x);
3769 /* Not needed...see below. */
3773 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3774 name = TREE_OPERAND (name, 0);
3776 /* Namespace-scoped variables are not found in the current level. */
3777 if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x))
3778 t = namespace_binding (name, DECL_CONTEXT (x));
3780 t = lookup_name_current_level (name);
3781 if (t == error_mark_node)
3783 /* error_mark_node is 0 for a while during initialization! */
3785 cp_error_at ("`%#D' used prior to declaration", x);
3788 else if (t != NULL_TREE)
3791 /* This is turned off until I have time to do it right (bpk). */
3792 /* With the code below that uses it... */
3793 file = DECL_SOURCE_FILE (t);
3794 line = DECL_SOURCE_LINE (t);
3796 if (TREE_CODE (t) == PARM_DECL)
3798 if (DECL_CONTEXT (t) == NULL_TREE)
3799 fatal ("parse errors have confused me too much");
3801 /* Check for duplicate params. */
3802 if (duplicate_decls (x, t))
3805 else if ((DECL_EXTERN_C_FUNCTION_P (x)
3806 || DECL_FUNCTION_TEMPLATE_P (x))
3807 && is_overloaded_fn (t))
3808 /* Don't do anything just yet. */;
3809 else if (t == wchar_decl_node)
3811 if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
3812 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
3814 /* Throw away the redeclaration. */
3817 else if (TREE_CODE (t) != TREE_CODE (x))
3819 if (duplicate_decls (x, t))
3822 else if (duplicate_decls (x, t))
3825 /* This is turned off until I have time to do it right (bpk). */
3827 /* Also warn if they did a prototype with `static' on it, but
3828 then later left the `static' off. */
3829 if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
3831 if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3836 cp_warning ("`static' missing from declaration of `%D'",
3838 warning_with_file_and_line (file, line,
3839 "previous declaration of `%s'",
3840 decl_as_string (t, 0));
3843 /* Now fix things so it'll do what they expect. */
3844 if (current_function_decl)
3845 TREE_PUBLIC (current_function_decl) = 0;
3847 /* Due to interference in memory reclamation (X may be
3848 obstack-deallocated at this point), we must guard against
3849 one really special case. [jason: This should be handled
3850 by start_function] */
3851 if (current_function_decl == x)
3852 current_function_decl = t;
3854 if (TREE_CODE (t) == TYPE_DECL)
3855 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
3856 else if (TREE_CODE (t) == FUNCTION_DECL)
3857 check_default_args (t);
3861 else if (DECL_MAIN_P (x))
3863 /* A redeclaration of main, but not a duplicate of the
3868 This function shall not be overloaded. */
3869 cp_error_at ("invalid redeclaration of `%D'", t);
3870 cp_error ("as `%D'", x);
3871 /* We don't try to push this declaration since that
3877 check_template_shadow (x);
3879 /* If this is a function conjured up by the backend, massage it
3880 so it looks friendly. */
3881 if (DECL_NON_THUNK_FUNCTION_P (x) && ! DECL_LANG_SPECIFIC (x))
3883 retrofit_lang_decl (x);
3884 DECL_LANGUAGE (x) = lang_c;
3887 if (DECL_NON_THUNK_FUNCTION_P (x) && ! DECL_FUNCTION_MEMBER_P (x))
3889 t = push_overloaded_decl (x, PUSH_LOCAL);
3892 if (!namespace_bindings_p ())
3893 /* We do not need to create a binding for this name;
3894 push_overloaded_decl will have already done so if
3896 need_new_binding = 0;
3898 else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
3900 t = push_overloaded_decl (x, PUSH_GLOBAL);
3902 add_decl_to_level (x, NAMESPACE_LEVEL (CP_DECL_CONTEXT (t)));
3906 /* If declaring a type as a typedef, copy the type (unless we're
3907 at line 0), and install this TYPE_DECL as the new type's typedef
3908 name. See the extensive comment in ../c-decl.c (pushdecl). */
3909 if (TREE_CODE (x) == TYPE_DECL)
3911 tree type = TREE_TYPE (x);
3912 if (DECL_SOURCE_LINE (x) == 0)
3914 if (TYPE_NAME (type) == 0)
3915 TYPE_NAME (type) = x;
3917 else if (type != error_mark_node && TYPE_NAME (type) != x
3918 /* We don't want to copy the type when all we're
3919 doing is making a TYPE_DECL for the purposes of
3921 && (!TYPE_NAME (type)
3922 || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
3924 DECL_ORIGINAL_TYPE (x) = type;
3925 type = build_type_copy (type);
3926 TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
3927 TYPE_NAME (type) = x;
3928 TREE_TYPE (x) = type;
3931 if (type != error_mark_node
3933 && TYPE_IDENTIFIER (type))
3934 set_identifier_type_value_with_scope (DECL_NAME (x), type,
3935 current_binding_level);
3939 /* Multiple external decls of the same identifier ought to match.
3941 We get warnings about inline functions where they are defined.
3942 We get warnings about other functions from push_overloaded_decl.
3944 Avoid duplicate warnings where they are used. */
3945 if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
3949 if (IDENTIFIER_NAMESPACE_VALUE (name) != NULL_TREE
3950 && (DECL_EXTERNAL (IDENTIFIER_NAMESPACE_VALUE (name))
3951 || TREE_PUBLIC (IDENTIFIER_NAMESPACE_VALUE (name))))
3952 decl = IDENTIFIER_NAMESPACE_VALUE (name);
3957 /* If different sort of thing, we already gave an error. */
3958 && TREE_CODE (decl) == TREE_CODE (x)
3959 && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
3961 cp_pedwarn ("type mismatch with previous external decl", x);
3962 cp_pedwarn_at ("previous external decl of `%#D'", decl);
3966 /* This name is new in its binding level.
3967 Install the new declaration and return it. */
3968 if (namespace_bindings_p ())
3970 /* Install a global value. */
3972 /* If the first global decl has external linkage,
3973 warn if we later see static one. */
3974 if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
3975 TREE_PUBLIC (name) = 1;
3977 if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
3979 /* For an ordinary function, we create a binding from
3980 the mangled name (i.e., NAME) to the DECL. But, for
3981 an `extern "C"' function, the mangled name and the
3982 ordinary name are the same so we need not do this. */
3983 && !DECL_EXTERN_C_FUNCTION_P (x))
3985 if (TREE_CODE (x) == FUNCTION_DECL)
3987 ((IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
3988 || (IDENTIFIER_GLOBAL_VALUE (name) == x), 378);
3989 SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
3992 /* Don't forget if the function was used via an implicit decl. */
3993 if (IDENTIFIER_IMPLICIT_DECL (name)
3994 && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
3997 /* Don't forget if its address was taken in that way. */
3998 if (IDENTIFIER_IMPLICIT_DECL (name)
3999 && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
4000 TREE_ADDRESSABLE (x) = 1;
4002 /* Warn about mismatches against previous implicit decl. */
4003 if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
4004 /* If this real decl matches the implicit, don't complain. */
4005 && ! (TREE_CODE (x) == FUNCTION_DECL
4006 && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
4008 ("`%D' was previously implicitly declared to return `int'", x);
4010 /* If new decl is `static' and an `extern' was seen previously,
4012 if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
4013 warn_extern_redeclared_static (x, t);
4017 /* Here to install a non-global value. */
4018 tree oldlocal = IDENTIFIER_VALUE (name);
4019 tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
4021 if (need_new_binding)
4023 push_local_binding (name, x, 0);
4024 /* Because push_local_binding will hook X on to the
4025 current_binding_level's name list, we don't want to
4026 do that again below. */
4027 need_new_binding = 0;
4030 /* If this is a TYPE_DECL, push it into the type value slot. */
4031 if (TREE_CODE (x) == TYPE_DECL)
4032 set_identifier_type_value_with_scope (name, TREE_TYPE (x),
4033 current_binding_level);
4035 /* Clear out any TYPE_DECL shadowed by a namespace so that
4036 we won't think this is a type. The C struct hack doesn't
4037 go through namespaces. */
4038 if (TREE_CODE (x) == NAMESPACE_DECL)
4039 set_identifier_type_value_with_scope (name, NULL_TREE,
4040 current_binding_level);
4047 && TREE_CODE (oldlocal) == VAR_DECL
4048 && DECL_DEAD_FOR_LOCAL (oldlocal))
4049 oldlocal = DECL_SHADOWED_FOR_VAR (oldlocal);
4051 if (oldlocal == NULL_TREE)
4052 oldlocal = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (d));
4055 /* If this is an extern function declaration, see if we
4056 have a global definition or declaration for the function. */
4057 if (oldlocal == NULL_TREE
4058 && DECL_EXTERNAL (x)
4059 && oldglobal != NULL_TREE
4060 && TREE_CODE (x) == FUNCTION_DECL
4061 && TREE_CODE (oldglobal) == FUNCTION_DECL)
4063 /* We have one. Their types must agree. */
4064 if (decls_match (x, oldglobal))
4068 cp_warning ("extern declaration of `%#D' doesn't match", x);
4069 cp_warning_at ("global declaration `%#D'", oldglobal);
4072 /* If we have a local external declaration,
4073 and no file-scope declaration has yet been seen,
4074 then if we later have a file-scope decl it must not be static. */
4075 if (oldlocal == NULL_TREE
4076 && oldglobal == NULL_TREE
4077 && DECL_EXTERNAL (x)
4079 TREE_PUBLIC (name) = 1;
4081 /* Warn if shadowing an argument at the top level of the body. */
4082 if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
4083 /* Inline decls shadow nothing. */
4084 && !DECL_FROM_INLINE (x)
4085 && TREE_CODE (oldlocal) == PARM_DECL
4086 /* Don't complain if it's from an enclosing function. */
4087 && DECL_CONTEXT (oldlocal) == current_function_decl
4088 && TREE_CODE (x) != PARM_DECL)
4090 /* Go to where the parms should be and see if we
4092 struct binding_level *b = current_binding_level->level_chain;
4098 if (b->parm_flag == 1)
4099 cp_error ("declaration of `%#D' shadows a parameter", name);
4102 /* Maybe warn if shadowing something else. */
4103 if (warn_shadow && !DECL_EXTERNAL (x)
4104 /* Inline decls shadow nothing. */
4105 && !DECL_FROM_INLINE (x)
4106 /* No shadow warnings for internally generated vars. */
4107 && ! DECL_ARTIFICIAL (x)
4108 /* No shadow warnings for vars made for inlining. */
4109 && ! DECL_FROM_INLINE (x))
4111 if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
4112 warning ("declaration of `%s' shadows a parameter",
4113 IDENTIFIER_POINTER (name));
4114 else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
4115 && current_class_ptr
4116 && !TREE_STATIC (name))
4117 warning ("declaration of `%s' shadows a member of `this'",
4118 IDENTIFIER_POINTER (name));
4119 else if (oldlocal != NULL_TREE)
4120 warning ("declaration of `%s' shadows previous local",
4121 IDENTIFIER_POINTER (name));
4122 else if (oldglobal != NULL_TREE)
4123 /* XXX shadow warnings in outer-more namespaces */
4124 warning ("declaration of `%s' shadows global declaration",
4125 IDENTIFIER_POINTER (name));
4129 if (TREE_CODE (x) == FUNCTION_DECL)
4130 check_default_args (x);
4132 /* Keep count of variables in this level with incomplete type. */
4133 if (TREE_CODE (x) == VAR_DECL
4134 && TREE_TYPE (x) != error_mark_node
4135 && ((!COMPLETE_TYPE_P (TREE_TYPE (x))
4136 && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
4137 /* RTTI TD entries are created while defining the type_info. */
4138 || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
4139 && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
4141 if (namespace_bindings_p ())
4142 namespace_scope_incomplete
4143 = tree_cons (NULL_TREE, x, namespace_scope_incomplete);
4145 current_binding_level->incomplete
4146 = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
4150 if (need_new_binding)
4151 add_decl_to_level (x,
4152 DECL_NAMESPACE_SCOPE_P (x)
4153 ? NAMESPACE_LEVEL (CP_DECL_CONTEXT (x))
4154 : current_binding_level);
4159 /* Same as pushdecl, but define X in binding-level LEVEL. We rely on the
4160 caller to set DECL_CONTEXT properly. */
4163 pushdecl_with_scope (x, level)
4165 struct binding_level *level;
4167 register struct binding_level *b;
4168 tree function_decl = current_function_decl;
4170 current_function_decl = NULL_TREE;
4171 if (level->parm_flag == 2)
4173 b = class_binding_level;
4174 class_binding_level = level;
4175 pushdecl_class_level (x);
4176 class_binding_level = b;
4180 b = current_binding_level;
4181 current_binding_level = level;
4183 current_binding_level = b;
4185 current_function_decl = function_decl;
4189 /* Like pushdecl, only it places X in the current namespace,
4193 pushdecl_namespace_level (x)
4196 register struct binding_level *b = current_binding_level;
4199 t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
4201 /* Now, the type_shadowed stack may screw us. Munge it so it does
4203 if (TREE_CODE (x) == TYPE_DECL)
4205 tree name = DECL_NAME (x);
4207 tree *ptr = (tree *)0;
4208 for (; b != global_binding_level; b = b->level_chain)
4210 tree shadowed = b->type_shadowed;
4211 for (; shadowed; shadowed = TREE_CHAIN (shadowed))
4212 if (TREE_PURPOSE (shadowed) == name)
4214 ptr = &TREE_VALUE (shadowed);
4215 /* Can't break out of the loop here because sometimes
4216 a binding level will have duplicate bindings for
4217 PT names. It's gross, but I haven't time to fix it. */
4220 newval = TREE_TYPE (x);
4221 if (ptr == (tree *)0)
4223 /* @@ This shouldn't be needed. My test case "zstring.cc" trips
4224 up here if this is changed to an assertion. --KR */
4225 SET_IDENTIFIER_TYPE_VALUE (name, newval);
4235 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4239 pushdecl_top_level (x)
4242 push_to_top_level ();
4243 x = pushdecl_namespace_level (x);
4244 pop_from_top_level ();
4248 /* Make the declaration of X appear in CLASS scope. */
4251 pushdecl_class_level (x)
4254 /* Don't use DECL_ASSEMBLER_NAME here! Everything that looks in class
4255 scope looks for the pre-mangled name. */
4258 if (TREE_CODE (x) == OVERLOAD)
4259 x = OVL_CURRENT (x);
4260 name = DECL_NAME (x);
4264 push_class_level_binding (name, x);
4265 if (TREE_CODE (x) == TYPE_DECL)
4266 set_identifier_type_value (name, TREE_TYPE (x));
4268 else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
4272 for (f = TYPE_FIELDS (TREE_TYPE (x));
4275 pushdecl_class_level (f);
4279 /* Enter DECL into the symbol table, if that's appropriate. Returns
4280 DECL, or a modified version thereof. */
4283 maybe_push_decl (decl)
4286 tree type = TREE_TYPE (decl);
4288 /* Add this decl to the current binding level, but not if it comes
4289 from another scope, e.g. a static member variable. TEM may equal
4290 DECL or it may be a previous decl of the same name. */
4291 if (decl == error_mark_node
4292 || (TREE_CODE (decl) != PARM_DECL
4293 && DECL_CONTEXT (decl) != NULL_TREE
4294 /* Definitions of namespace members outside their namespace are
4296 && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4297 || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
4298 || TREE_CODE (type) == UNKNOWN_TYPE
4299 /* The declaration of a template specialization does not affect
4300 the functions available for overload resolution, so we do not
4302 || (TREE_CODE (decl) == FUNCTION_DECL
4303 && DECL_TEMPLATE_SPECIALIZATION (decl)))
4306 return pushdecl (decl);
4309 /* Make the declaration(s) of X appear in CLASS scope
4310 under the name NAME. */
4313 push_class_level_binding (name, x)
4318 /* The class_binding_level will be NULL if x is a template
4319 parameter name in a member template. */
4320 if (!class_binding_level)
4323 /* Make sure that this new member does not have the same name
4324 as a template parameter. */
4325 if (TYPE_BEING_DEFINED (current_class_type))
4326 check_template_shadow (x);
4328 /* If this declaration shadows a declaration from an enclosing
4329 class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4330 we leave this class. Record the shadowed declaration here. */
4331 binding = IDENTIFIER_BINDING (name);
4333 && ((TREE_CODE (x) == OVERLOAD
4334 && BINDING_VALUE (binding)
4335 && is_overloaded_fn (BINDING_VALUE (binding)))
4336 || INHERITED_VALUE_BINDING_P (binding)))
4341 /* If the old binding was from a base class, and was for a tag
4342 name, slide it over to make room for the new binding. The
4343 old binding is still visible if explicitly qualified with a
4345 if (INHERITED_VALUE_BINDING_P (binding)
4346 && BINDING_VALUE (binding)
4347 && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
4348 && DECL_ARTIFICIAL (BINDING_VALUE (binding))
4349 && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
4351 old_decl = BINDING_TYPE (binding);
4352 BINDING_TYPE (binding) = BINDING_VALUE (binding);
4353 BINDING_VALUE (binding) = NULL_TREE;
4354 INHERITED_VALUE_BINDING_P (binding) = 0;
4357 old_decl = BINDING_VALUE (binding);
4359 /* There was already a binding for X containing fewer
4360 functions than are named in X. Find the previous
4361 declaration of X on the class-shadowed list, and update it. */
4362 for (shadow = class_binding_level->class_shadowed;
4364 shadow = TREE_CHAIN (shadow))
4365 if (TREE_PURPOSE (shadow) == name
4366 && TREE_TYPE (shadow) == old_decl)
4368 BINDING_VALUE (binding) = x;
4369 INHERITED_VALUE_BINDING_P (binding) = 0;
4370 TREE_TYPE (shadow) = x;
4375 /* If we didn't replace an existing binding, put the binding on the
4376 stack of bindings for the identifier, and update
4377 IDENTIFIER_CLASS_VALUE. */
4378 if (push_class_binding (name, x))
4380 class_binding_level->class_shadowed
4381 = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
4382 class_binding_level->class_shadowed);
4383 /* Record the value we are binding NAME to so that we can know
4384 what to pop later. */
4385 TREE_TYPE (class_binding_level->class_shadowed) = x;
4389 /* Insert another USING_DECL into the current binding level, returning
4390 this declaration. If this is a redeclaration, do nothing, and
4391 return NULL_TREE if this not in namespace scope (in namespace
4392 scope, a using decl might extend any previous bindings). */
4395 push_using_decl (scope, name)
4401 my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4402 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4403 for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4404 if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4407 return namespace_bindings_p () ? decl : NULL_TREE;
4408 decl = build_lang_decl (USING_DECL, name, void_type_node);
4409 DECL_INITIAL (decl) = scope;
4410 TREE_CHAIN (decl) = current_binding_level->usings;
4411 current_binding_level->usings = decl;
4415 /* Add namespace to using_directives. Return NULL_TREE if nothing was
4416 changed (i.e. there was already a directive), or the fresh
4417 TREE_LIST otherwise. */
4420 push_using_directive (used)
4423 tree ud = current_binding_level->using_directives;
4424 tree iter, ancestor;
4426 /* Check if we already have this. */
4427 if (purpose_member (used, ud) != NULL_TREE)
4430 /* Recursively add all namespaces used. */
4431 for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4432 push_using_directive (TREE_PURPOSE (iter));
4434 ancestor = namespace_ancestor (current_decl_namespace (), used);
4435 ud = current_binding_level->using_directives;
4436 ud = tree_cons (used, ancestor, ud);
4437 current_binding_level->using_directives = ud;
4441 /* DECL is a FUNCTION_DECL for a non-member function, which may have
4442 other definitions already in place. We get around this by making
4443 the value of the identifier point to a list of all the things that
4444 want to be referenced by that name. It is then up to the users of
4445 that name to decide what to do with that list.
4447 DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its
4448 DECL_TEMPLATE_RESULT. It is dealt with the same way.
4450 FLAGS is a bitwise-or of the following values:
4451 PUSH_LOCAL: Bind DECL in the current scope, rather than at
4453 PUSH_USING: DECL is being pushed as the result of a using
4456 The value returned may be a previous declaration if we guessed wrong
4457 about what language DECL should belong to (C or C++). Otherwise,
4458 it's always DECL (and never something that's not a _DECL). */
4461 push_overloaded_decl (decl, flags)
4465 tree name = DECL_NAME (decl);
4468 int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
4471 old = namespace_binding (name, DECL_CONTEXT (decl));
4473 old = lookup_name_current_level (name);
4477 if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
4479 tree t = TREE_TYPE (old);
4480 if (IS_AGGR_TYPE (t) && warn_shadow
4481 && (! DECL_IN_SYSTEM_HEADER (decl)
4482 || ! DECL_IN_SYSTEM_HEADER (old)))
4483 cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
4486 else if (is_overloaded_fn (old))
4490 for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
4492 tree fn = OVL_CURRENT (tmp);
4494 if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4495 && !(flags & PUSH_USING)
4496 && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4497 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4498 cp_error ("`%#D' conflicts with previous using declaration `%#D'",
4501 if (duplicate_decls (decl, fn))
4507 cp_error_at ("previous non-function declaration `%#D'", old);
4508 cp_error ("conflicts with function declaration `%#D'", decl);
4513 if (old || TREE_CODE (decl) == TEMPLATE_DECL)
4515 if (old && TREE_CODE (old) != OVERLOAD)
4516 new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4518 new_binding = ovl_cons (decl, old);
4519 if (flags & PUSH_USING)
4520 OVL_USED (new_binding) = 1;
4523 /* NAME is not ambiguous. */
4527 set_namespace_binding (name, current_namespace, new_binding);
4530 /* We only create an OVERLOAD if there was a previous binding at
4531 this level, or if decl is a template. In the former case, we
4532 need to remove the old binding and replace it with the new
4533 binding. We must also run through the NAMES on the binding
4534 level where the name was bound to update the chain. */
4536 if (TREE_CODE (new_binding) == OVERLOAD && old)
4540 for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4542 d = &TREE_CHAIN (*d))
4544 || (TREE_CODE (*d) == TREE_LIST
4545 && TREE_VALUE (*d) == old))
4547 if (TREE_CODE (*d) == TREE_LIST)
4548 /* Just replace the old binding with the new. */
4549 TREE_VALUE (*d) = new_binding;
4551 /* Build a TREE_LIST to wrap the OVERLOAD. */
4552 *d = tree_cons (NULL_TREE, new_binding,
4555 /* And update the CPLUS_BINDING node. */
4556 BINDING_VALUE (IDENTIFIER_BINDING (name))
4561 /* We should always find a previous binding in this case. */
4562 my_friendly_abort (0);
4565 /* Install the new binding. */
4566 push_local_binding (name, new_binding, flags);
4572 /* Generate an implicit declaration for identifier FUNCTIONID
4573 as a function of type int (). Print a warning if appropriate. */
4576 implicitly_declare (functionid)
4581 /* We used to reuse an old implicit decl here,
4582 but this loses with inline functions because it can clobber
4583 the saved decl chains. */
4584 decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4586 DECL_EXTERNAL (decl) = 1;
4587 TREE_PUBLIC (decl) = 1;
4589 /* ISO standard says implicit declarations are in the innermost block.
4590 So we record the decl in the standard fashion. */
4592 rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4595 /* Only one warning per identifier. */
4596 && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4598 cp_pedwarn ("implicit declaration of function `%#D'", decl);
4601 SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4606 /* Return zero if the declaration NEWDECL is valid
4607 when the declaration OLDDECL (assumed to be for the same name)
4608 has already been seen.
4609 Otherwise return an error message format string with a %s
4610 where the identifier should go. */
4613 redeclaration_error_message (newdecl, olddecl)
4614 tree newdecl, olddecl;
4616 if (TREE_CODE (newdecl) == TYPE_DECL)
4618 /* Because C++ can put things into name space for free,
4619 constructs like "typedef struct foo { ... } foo"
4620 would look like an erroneous redeclaration. */
4621 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
4624 return "redefinition of `%#D'";
4626 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4628 /* If this is a pure function, its olddecl will actually be
4629 the original initialization to `0' (which we force to call
4630 abort()). Don't complain about redefinition in this case. */
4631 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl))
4634 /* If both functions come from different namespaces, this is not
4635 a redeclaration - this is a conflict with a used function. */
4636 if (DECL_NAMESPACE_SCOPE_P (olddecl)
4637 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
4638 return "`%D' conflicts with used function";
4640 /* We'll complain about linkage mismatches in
4641 warn_extern_redeclared_static. */
4643 /* Defining the same name twice is no good. */
4644 if (DECL_INITIAL (olddecl) != NULL_TREE
4645 && DECL_INITIAL (newdecl) != NULL_TREE)
4647 if (DECL_NAME (olddecl) == NULL_TREE)
4648 return "`%#D' not declared in class";
4650 return "redefinition of `%#D'";
4654 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4656 if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
4657 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4658 && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4659 || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
4660 && COMPLETE_TYPE_P (TREE_TYPE (newdecl))
4661 && COMPLETE_TYPE_P (TREE_TYPE (olddecl))))
4662 return "redefinition of `%#D'";
4665 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
4667 /* Objects declared at top level: */
4668 /* If at least one is a reference, it's ok. */
4669 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
4671 /* Reject two definitions. */
4672 return "redefinition of `%#D'";
4676 /* Objects declared with block scope: */
4677 /* Reject two definitions, and reject a definition
4678 together with an external reference. */
4679 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
4680 return "redeclaration of `%#D'";
4685 /* Create a new label, named ID. */
4688 make_label_decl (id, local_p)
4694 decl = build_decl (LABEL_DECL, id, void_type_node);
4696 /* Make sure every label has an rtx. */
4699 DECL_CONTEXT (decl) = current_function_decl;
4700 DECL_MODE (decl) = VOIDmode;
4701 C_DECLARED_LABEL_FLAG (decl) = local_p;
4703 /* Say where one reference is to the label, for the sake of the
4704 error if it is not defined. */
4705 DECL_SOURCE_LINE (decl) = lineno;
4706 DECL_SOURCE_FILE (decl) = input_filename;
4708 /* Record the fact that this identifier is bound to this label. */
4709 SET_IDENTIFIER_LABEL_VALUE (id, decl);
4711 /* Record this label on the list of used labels so that we can check
4712 at the end of the function to see whether or not the label was
4713 actually defined. */
4714 if ((named_label_uses == NULL || named_label_uses->label_decl != decl)
4715 && (named_label_uses == NULL
4716 || named_label_uses->names_in_scope != current_binding_level->names
4717 || named_label_uses->label_decl != decl))
4719 struct named_label_list *new_ent;
4721 = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
4722 new_ent->label_decl = decl;
4723 new_ent->names_in_scope = current_binding_level->names;
4724 new_ent->binding_level = current_binding_level;
4725 new_ent->lineno_o_goto = lineno;
4726 new_ent->filename_o_goto = input_filename;
4727 new_ent->next = named_label_uses;
4728 named_label_uses = new_ent;
4734 /* Look for a label named ID in the current function. If one cannot
4735 be found, create one. (We keep track of used, but undefined,
4736 labels, and complain about them at the end of a function.) */
4744 /* You can't use labels at global scope. */
4745 if (current_function_decl == NULL_TREE)
4747 error ("label `%s' referenced outside of any function",
4748 IDENTIFIER_POINTER (id));
4752 /* See if we've already got this label. */
4753 decl = IDENTIFIER_LABEL_VALUE (id);
4754 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
4757 /* Record this label on the list of labels used in this function.
4758 We do this before calling make_label_decl so that we get the
4759 IDENTIFIER_LABEL_VALUE before the new label is declared. */
4760 named_labels = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4762 /* We need a new label. */
4763 decl = make_label_decl (id, /*local_p=*/0);
4764 /* Now fill in the information we didn't have before. */
4765 TREE_VALUE (named_labels) = decl;
4770 /* Declare a local label named ID. */
4773 declare_local_label (id)
4778 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
4779 this scope we can restore the old value of
4780 IDENTIFIER_TYPE_VALUE. */
4781 current_binding_level->shadowed_labels
4782 = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4783 current_binding_level->shadowed_labels);
4784 /* Look for the label. */
4785 decl = make_label_decl (id, /*local_p=*/1);
4786 /* Now fill in the information we didn't have before. */
4787 TREE_VALUE (current_binding_level->shadowed_labels) = decl;
4792 /* Define a label, specifying the location in the source file.
4793 Return the LABEL_DECL node for the label, if the definition is valid.
4794 Otherwise return 0. */
4797 define_label (filename, line, name)
4798 const char *filename;
4802 tree decl = lookup_label (name);
4804 /* After labels, make any new cleanups go into their
4805 own new (temporary) binding contour. */
4806 current_binding_level->more_cleanups_ok = 0;
4808 if (name == get_identifier ("wchar_t"))
4809 cp_pedwarn ("label named wchar_t");
4811 if (DECL_INITIAL (decl) != NULL_TREE)
4813 cp_error ("duplicate label `%D'", decl);
4818 struct named_label_list *uses, *prev;
4822 /* Mark label as having been defined. */
4823 DECL_INITIAL (decl) = error_mark_node;
4824 /* Say where in the source. */
4825 DECL_SOURCE_FILE (decl) = filename;
4826 DECL_SOURCE_LINE (decl) = line;
4829 uses = named_label_uses;
4830 while (uses != NULL)
4831 if (uses->label_decl == decl)
4833 struct binding_level *b = current_binding_level;
4836 tree new_decls = b->names;
4837 tree old_decls = (b == uses->binding_level)
4838 ? uses->names_in_scope : NULL_TREE;
4839 while (new_decls != old_decls)
4841 if (TREE_CODE (new_decls) == VAR_DECL
4842 /* Don't complain about crossing initialization
4843 of internal entities. They can't be accessed,
4844 and they should be cleaned up
4845 by the time we get to the label. */
4846 && ! DECL_ARTIFICIAL (new_decls)
4847 && !(DECL_INITIAL (new_decls) == NULL_TREE
4848 && pod_type_p (TREE_TYPE (new_decls))))
4850 /* This is really only important if we're crossing
4851 an initialization. The POD stuff is just
4852 pedantry; why should it matter if the class
4853 contains a field of pointer to member type? */
4854 int problem = (DECL_INITIAL (new_decls)
4855 || (TYPE_NEEDS_CONSTRUCTING
4856 (TREE_TYPE (new_decls))));
4862 cp_error ("jump to label `%D'", decl);
4863 error_with_file_and_line
4864 (uses->filename_o_goto,
4865 uses->lineno_o_goto, " from here");
4869 cp_pedwarn ("jump to label `%D'", decl);
4870 pedwarn_with_file_and_line
4871 (uses->filename_o_goto,
4872 uses->lineno_o_goto, " from here");
4878 cp_error_at (" crosses initialization of `%#D'",
4881 cp_pedwarn_at (" enters scope of non-POD `%#D'",
4884 new_decls = TREE_CHAIN (new_decls);
4886 if (b == uses->binding_level)
4888 if (b->eh_region && ! saw_eh)
4892 cp_error ("jump to label `%D'", decl);
4893 error_with_file_and_line
4894 (uses->filename_o_goto,
4895 uses->lineno_o_goto, " from here");
4898 error (" enters exception handling block");
4905 prev->next = uses->next;
4907 named_label_uses = uses->next;
4916 current_function_return_value = NULL_TREE;
4923 struct binding_level *level;
4924 struct cp_switch *next;
4927 static struct cp_switch *switch_stack;
4933 = (struct cp_switch *) xmalloc (sizeof (struct cp_switch));
4934 p->level = current_binding_level;
4935 p->next = switch_stack;
4942 struct cp_switch *cs;
4945 switch_stack = switch_stack->next;
4949 /* Note that we've seen a definition of a case label, and complain if this
4950 is a bad place for one. */
4953 define_case_label ()
4955 tree cleanup = last_cleanup_this_contour ();
4956 struct binding_level *b = current_binding_level;
4960 /* Don't crash; we'll complain in do_case. */
4965 static int explained = 0;
4966 cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
4967 warning ("where case label appears here");
4970 warning ("(enclose actions of previous case statements requiring");
4971 warning ("destructors in their own binding contours.)");
4976 for (; b && b != switch_stack->level; b = b->level_chain)
4978 tree new_decls = b->names;
4979 for (; new_decls; new_decls = TREE_CHAIN (new_decls))
4981 if (TREE_CODE (new_decls) == VAR_DECL
4982 /* Don't complain about crossing initialization
4983 of internal entities. They can't be accessed,
4984 and they should be cleaned up
4985 by the time we get to the label. */
4986 && ! DECL_ARTIFICIAL (new_decls)
4987 && ((DECL_INITIAL (new_decls) != NULL_TREE
4988 && DECL_INITIAL (new_decls) != error_mark_node)
4989 || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
4992 error ("jump to case label");
4994 cp_error_at (" crosses initialization of `%#D'",
5000 /* After labels, make any new cleanups go into their
5001 own new (temporary) binding contour. */
5003 current_binding_level->more_cleanups_ok = 0;
5004 current_function_return_value = NULL_TREE;
5007 /* Return the list of declarations of the current level.
5008 Note that this list is in reverse order unless/until
5009 you nreverse it; and when you do nreverse it, you must
5010 store the result back using `storedecls' or you will lose. */
5015 return current_binding_level->names;
5018 /* Return the list of type-tags (for structs, etc) of the current level. */
5023 return current_binding_level->tags;
5026 /* Store the list of declarations of the current level.
5027 This is done for the parameter declarations of a function being defined,
5028 after they are modified in the light of any missing parameters. */
5034 current_binding_level->names = decls;
5037 /* Similarly, store the list of tags of the current level. */
5043 current_binding_level->tags = tags;
5046 /* Given NAME, an IDENTIFIER_NODE,
5047 return the structure (or union or enum) definition for that name.
5048 Searches binding levels from BINDING_LEVEL up to the global level.
5049 If THISLEVEL_ONLY is nonzero, searches only the specified context
5050 (but skips any tag-transparent contexts to find one that is
5051 meaningful for tags).
5052 FORM says which kind of type the caller wants;
5053 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
5054 If the wrong kind of type is found, and it's not a template, an error is
5058 lookup_tag (form, name, binding_level, thislevel_only)
5059 enum tree_code form;
5061 struct binding_level *binding_level;
5064 register struct binding_level *level;
5065 /* Non-zero if, we should look past a template parameter level, even
5066 if THISLEVEL_ONLY. */
5067 int allow_template_parms_p = 1;
5069 for (level = binding_level; level; level = level->level_chain)
5072 if (ANON_AGGRNAME_P (name))
5073 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5075 /* There's no need for error checking here, because
5076 anon names are unique throughout the compilation. */
5077 if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
5078 return TREE_VALUE (tail);
5080 else if (level->namespace_p)
5081 /* Do namespace lookup. */
5082 for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
5084 tree old = binding_for_name (name, tail);
5086 /* If we just skipped past a template parameter level,
5087 even though THISLEVEL_ONLY, and we find a template
5088 class declaration, then we use the _TYPE node for the
5089 template. See the example below. */
5090 if (thislevel_only && !allow_template_parms_p
5091 && old && BINDING_VALUE (old)
5092 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
5093 old = TREE_TYPE (BINDING_VALUE (old));
5095 old = BINDING_TYPE (old);
5097 /* If it has an original type, it is a typedef, and we
5098 should not return it. */
5099 if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
5101 if (old && TREE_CODE (old) != form
5102 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
5104 cp_error ("`%#D' redeclared as %C", old, form);
5109 if (thislevel_only || tail == global_namespace)
5113 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5115 if (TREE_PURPOSE (tail) == name)
5117 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
5118 /* Should tighten this up; it'll probably permit
5119 UNION_TYPE and a struct template, for example. */
5121 && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
5123 /* Definition isn't the kind we were looking for. */
5124 cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
5128 return TREE_VALUE (tail);
5131 if (thislevel_only && ! level->tag_transparent)
5133 if (level->template_parms_p && allow_template_parms_p)
5135 /* We must deal with cases like this:
5137 template <class T> struct S;
5138 template <class T> struct S {};
5140 When looking up `S', for the second declaration, we
5141 would like to find the first declaration. But, we
5142 are in the pseudo-global level created for the
5143 template parameters, rather than the (surrounding)
5144 namespace level. Thus, we keep going one more level,
5145 even though THISLEVEL_ONLY is non-zero. */
5146 allow_template_parms_p = 0;
5158 set_current_level_tags_transparency (tags_transparent)
5159 int tags_transparent;
5161 current_binding_level->tag_transparent = tags_transparent;
5165 /* Given a type, find the tag that was defined for it and return the tag name.
5166 Otherwise return 0. However, the value can never be 0
5167 in the cases in which this is used.
5169 C++: If NAME is non-zero, this is the new name to install. This is
5170 done when replacing anonymous tags with real tag names. */
5173 lookup_tag_reverse (type, name)
5177 register struct binding_level *level;
5179 for (level = current_binding_level; level; level = level->level_chain)
5182 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5184 if (TREE_VALUE (tail) == type)
5187 TREE_PURPOSE (tail) = name;
5188 return TREE_PURPOSE (tail);
5195 /* Look up NAME in the NAMESPACE. */
5198 lookup_namespace_name (namespace, name)
5199 tree namespace, name;
5202 tree template_id = NULL_TREE;
5204 my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
5206 if (TREE_CODE (name) == NAMESPACE_DECL)
5207 /* This happens for A::B<int> when B is a namespace. */
5209 else if (TREE_CODE (name) == TEMPLATE_DECL)
5211 /* This happens for A::B where B is a template, and there are no
5212 template arguments. */
5213 cp_error ("invalid use of `%D'", name);
5214 return error_mark_node;
5217 namespace = ORIGINAL_NAMESPACE (namespace);
5219 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5222 name = TREE_OPERAND (name, 0);
5223 if (TREE_CODE (name) == OVERLOAD)
5224 name = DECL_NAME (OVL_CURRENT (name));
5225 else if (DECL_P (name))
5226 name = DECL_NAME (name);
5229 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
5231 val = make_node (CPLUS_BINDING);
5232 if (!qualified_lookup_using_namespace (name, namespace, val, 0))
5233 return error_mark_node;
5235 if (BINDING_VALUE (val))
5237 val = BINDING_VALUE (val);
5241 if (DECL_CLASS_TEMPLATE_P (val))
5242 val = lookup_template_class (val,
5243 TREE_OPERAND (template_id, 1),
5244 /*in_decl=*/NULL_TREE,
5245 /*context=*/NULL_TREE,
5246 /*entering_scope=*/0);
5247 else if (DECL_FUNCTION_TEMPLATE_P (val)
5248 || TREE_CODE (val) == OVERLOAD)
5249 val = lookup_template_function (val,
5250 TREE_OPERAND (template_id, 1));
5253 cp_error ("`%D::%D' is not a template",
5255 return error_mark_node;
5259 /* If we have a single function from a using decl, pull it out. */
5260 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5261 val = OVL_FUNCTION (val);
5265 cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
5266 return error_mark_node;
5269 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
5271 static unsigned long
5279 hash = (((unsigned long) TYPE_CONTEXT (t))
5280 ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5285 /* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
5288 typename_compare (k1, k2)
5299 d1 = TYPE_NAME (t1);
5300 d2 = TYPE_NAME (t2);
5302 return (DECL_NAME (d1) == DECL_NAME (d2)
5303 && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
5304 && ((TREE_TYPE (t1) != NULL_TREE)
5305 == (TREE_TYPE (t2) != NULL_TREE))
5306 && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5307 && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5310 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
5311 the type of `T', NAME is the IDENTIFIER_NODE for `t'. If BASE_TYPE
5312 is non-NULL, this type is being created by the implicit typename
5313 extension, and BASE_TYPE is a type named `t' in some base class of
5314 `T' which depends on template parameters.
5316 Returns the new TYPENAME_TYPE. */
5319 build_typename_type (context, name, fullname, base_type)
5327 struct hash_entry* e;
5329 static struct hash_table ht;
5333 static struct hash_table *h = &ht;
5334 if (!hash_table_init (&ht, &hash_newfunc, &typename_hash,
5336 fatal ("virtual memory exhausted");
5337 ggc_add_tree_hash_table_root (&h, 1);
5340 /* Build the TYPENAME_TYPE. */
5341 t = make_aggr_type (TYPENAME_TYPE);
5342 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5343 TYPENAME_TYPE_FULLNAME (t) = fullname;
5344 TREE_TYPE (t) = base_type;
5346 /* Build the corresponding TYPE_DECL. */
5347 d = build_decl (TYPE_DECL, name, t);
5348 TYPE_NAME (TREE_TYPE (d)) = d;
5349 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5350 DECL_CONTEXT (d) = FROB_CONTEXT (context);
5351 DECL_ARTIFICIAL (d) = 1;
5353 /* See if we already have this type. */
5354 e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5358 /* Insert the type into the table. */
5359 hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5364 /* Resolve `typename CONTEXT::NAME'. Returns an appropriate type,
5365 unless an error occurs, in which case error_mark_node is returned.
5366 If COMPLAIN zero, don't complain about any errors that occur. */
5369 make_typename_type (context, name, complain)
5377 if (!(TYPE_LANG_SPECIFIC (name)
5378 && (CLASSTYPE_IS_TEMPLATE (name)
5379 || CLASSTYPE_USE_TEMPLATE (name))))
5380 name = TYPE_IDENTIFIER (name);
5382 /* Create a TEMPLATE_ID_EXPR for the type. */
5383 name = build_nt (TEMPLATE_ID_EXPR,
5384 CLASSTYPE_TI_TEMPLATE (name),
5385 CLASSTYPE_TI_ARGS (name));
5387 else if (TREE_CODE (name) == TYPE_DECL)
5388 name = DECL_NAME (name);
5392 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5394 name = TREE_OPERAND (name, 0);
5395 if (TREE_CODE (name) == TEMPLATE_DECL)
5396 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5398 if (TREE_CODE (name) != IDENTIFIER_NODE)
5399 my_friendly_abort (2000);
5401 if (TREE_CODE (context) == NAMESPACE_DECL)
5403 /* We can get here from typename_sub0 in the explicit_template_type
5404 expansion. Just fail. */
5406 cp_error ("no class template named `%#T' in `%#T'",
5408 return error_mark_node;
5411 if (! uses_template_parms (context)
5412 || currently_open_class (context))
5414 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5416 tree tmpl = NULL_TREE;
5417 if (IS_AGGR_TYPE (context))
5418 tmpl = lookup_field (context, name, 0, 0);
5419 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5422 cp_error ("no class template named `%#T' in `%#T'",
5424 return error_mark_node;
5427 return lookup_template_class (tmpl,
5428 TREE_OPERAND (fullname, 1),
5430 /*entering_scope=*/0);
5436 if (!IS_AGGR_TYPE (context))
5439 cp_error ("no type named `%#T' in `%#T'", name, context);
5440 return error_mark_node;
5443 t = lookup_field (context, name, 0, 1);
5445 return TREE_TYPE (t);
5449 /* If the CONTEXT is not a template type, then either the field is
5450 there now or its never going to be. */
5451 if (!uses_template_parms (context))
5454 cp_error ("no type named `%#T' in `%#T'", name, context);
5455 return error_mark_node;
5459 return build_typename_type (context, name, fullname, NULL_TREE);
5462 /* Select the right _DECL from multiple choices. */
5465 select_decl (binding, flags)
5470 val = BINDING_VALUE (binding);
5471 if (LOOKUP_NAMESPACES_ONLY (flags))
5473 /* We are not interested in types. */
5474 if (val && TREE_CODE (val) == NAMESPACE_DECL)
5479 /* If we could have a type and
5480 we have nothing or we need a type and have none. */
5481 if (BINDING_TYPE (binding)
5482 && (!val || ((flags & LOOKUP_PREFER_TYPES)
5483 && TREE_CODE (val) != TYPE_DECL)))
5484 val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5485 /* Don't return non-types if we really prefer types. */
5486 else if (val && LOOKUP_TYPES_ONLY (flags) && TREE_CODE (val) != TYPE_DECL
5487 && (TREE_CODE (val) != TEMPLATE_DECL
5488 || !DECL_CLASS_TEMPLATE_P (val)))
5494 /* Unscoped lookup of a global: iterate over current namespaces,
5495 considering using-directives. If SPACESP is non-NULL, store a list
5496 of the namespaces we've considered in it. */
5499 unqualified_namespace_lookup (name, flags, spacesp)
5504 tree b = make_node (CPLUS_BINDING);
5505 tree initial = current_decl_namespace();
5506 tree scope = initial;
5508 struct binding_level *level;
5509 tree val = NULL_TREE;
5512 *spacesp = NULL_TREE;
5514 for (; !val; scope = CP_DECL_CONTEXT (scope))
5517 *spacesp = tree_cons (scope, NULL_TREE, *spacesp);
5518 val = binding_for_name (name, scope);
5520 /* Initialize binding for this context. */
5521 BINDING_VALUE (b) = BINDING_VALUE (val);
5522 BINDING_TYPE (b) = BINDING_TYPE (val);
5524 /* Add all _DECLs seen through local using-directives. */
5525 for (level = current_binding_level;
5526 !level->namespace_p;
5527 level = level->level_chain)
5528 if (!lookup_using_namespace (name, b, level->using_directives,
5529 scope, flags, spacesp))
5530 /* Give up because of error. */
5531 return error_mark_node;
5533 /* Add all _DECLs seen through global using-directives. */
5534 /* XXX local and global using lists should work equally. */
5538 if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter),
5539 scope, flags, spacesp))
5540 /* Give up because of error. */
5541 return error_mark_node;
5542 if (siter == scope) break;
5543 siter = CP_DECL_CONTEXT (siter);
5546 val = select_decl (b, flags);
5547 if (scope == global_namespace)
5553 /* Combine prefer_type and namespaces_only into flags. */
5556 lookup_flags (prefer_type, namespaces_only)
5557 int prefer_type, namespaces_only;
5559 if (namespaces_only)
5560 return LOOKUP_PREFER_NAMESPACES;
5561 if (prefer_type > 1)
5562 return LOOKUP_PREFER_TYPES;
5563 if (prefer_type > 0)
5564 return LOOKUP_PREFER_BOTH;
5568 /* Given a lookup that returned VAL, use FLAGS to decide if we want to
5569 ignore it or not. Subroutine of lookup_name_real. */
5572 qualify_lookup (val, flags)
5576 if (val == NULL_TREE)
5578 if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5580 if ((flags & LOOKUP_PREFER_TYPES)
5581 && (TREE_CODE (val) == TYPE_DECL
5582 || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5583 && DECL_CLASS_TEMPLATE_P (val))))
5585 if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
5590 /* Any other BINDING overrides an implicit TYPENAME. Warn about
5594 warn_about_implicit_typename_lookup (typename, binding)
5598 tree subtype = TREE_TYPE (TREE_TYPE (typename));
5599 tree name = DECL_NAME (typename);
5601 if (! (TREE_CODE (binding) == TEMPLATE_DECL
5602 && CLASSTYPE_TEMPLATE_INFO (subtype)
5603 && CLASSTYPE_TI_TEMPLATE (subtype) == binding)
5604 && ! (TREE_CODE (binding) == TYPE_DECL
5605 && same_type_p (TREE_TYPE (binding), subtype)))
5607 cp_warning ("lookup of `%D' finds `%#D'",
5609 cp_warning (" instead of `%D' from dependent base class",
5611 cp_warning (" (use `typename %T::%D' if that's what you meant)",
5612 constructor_name (current_class_type), name);
5616 /* Look up NAME in the current binding level and its superiors in the
5617 namespace of variables, functions and typedefs. Return a ..._DECL
5618 node of some kind representing its definition if there is only one
5619 such declaration, or return a TREE_LIST with all the overloaded
5620 definitions if there are many, or return 0 if it is undefined.
5622 If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5623 If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
5624 If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
5625 Otherwise we prefer non-TYPE_DECLs.
5627 If NONCLASS is non-zero, we don't look for the NAME in class scope,
5628 using IDENTIFIER_CLASS_VALUE. */
5631 lookup_name_real (name, prefer_type, nonclass, namespaces_only)
5633 int prefer_type, nonclass, namespaces_only;
5636 tree val = NULL_TREE;
5638 tree from_obj = NULL_TREE;
5640 int val_is_implicit_typename = 0;
5642 /* Hack: copy flag set by parser, if set. */
5643 if (only_namespace_names)
5644 namespaces_only = 1;
5646 if (prefer_type == -2)
5648 extern int looking_for_typename;
5649 tree type = NULL_TREE;
5652 prefer_type = looking_for_typename;
5654 flags = lookup_flags (prefer_type, namespaces_only);
5655 /* If the next thing is '<', class templates are types. */
5656 if (looking_for_template)
5657 flags |= LOOKUP_TEMPLATES_EXPECTED;
5659 /* std:: becomes :: for now. */
5660 if (got_scope == std_node)
5661 got_scope = void_type_node;
5665 else if (got_object != error_mark_node)
5670 if (type == error_mark_node)
5671 return error_mark_node;
5672 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5673 type = TREE_TYPE (type);
5676 type = complete_type (type);
5678 if (TREE_CODE (type) == VOID_TYPE)
5679 type = global_namespace;
5680 if (TREE_CODE (type) == NAMESPACE_DECL)
5682 val = make_node (CPLUS_BINDING);
5683 flags |= LOOKUP_COMPLAIN;
5684 if (!qualified_lookup_using_namespace (name, type, val, flags))
5686 val = select_decl (val, flags);
5688 else if (! IS_AGGR_TYPE (type)
5689 || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5690 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
5691 || TREE_CODE (type) == TYPENAME_TYPE)
5692 /* Someone else will give an error about this if needed. */
5694 else if (type == current_class_type)
5695 val = IDENTIFIER_CLASS_VALUE (name);
5698 val = lookup_member (type, name, 0, prefer_type);
5699 type_access_control (type, val);
5707 else if (got_object && val)
5712 flags = lookup_flags (prefer_type, namespaces_only);
5713 /* If we're not parsing, we need to complain. */
5714 flags |= LOOKUP_COMPLAIN;
5717 /* First, look in non-namespace scopes. */
5719 if (current_class_type == NULL_TREE)
5722 for (t = IDENTIFIER_BINDING (name); t; t = TREE_CHAIN (t))
5726 if (!LOCAL_BINDING_P (t) && nonclass)
5727 /* We're not looking for class-scoped bindings, so keep going. */
5730 /* If this is the kind of thing we're looking for, we're done. */
5731 if (qualify_lookup (BINDING_VALUE (t), flags))
5732 binding = BINDING_VALUE (t);
5733 else if ((flags & LOOKUP_PREFER_TYPES)
5734 && qualify_lookup (BINDING_TYPE (t), flags))
5735 binding = BINDING_TYPE (t);
5737 binding = NULL_TREE;
5739 /* Handle access control on types from enclosing or base classes. */
5740 if (binding && ! yylex
5741 && BINDING_LEVEL (t) && BINDING_LEVEL (t)->parm_flag == 2)
5742 type_access_control (BINDING_LEVEL (t)->this_class, binding);
5745 && (!val || !IMPLICIT_TYPENAME_TYPE_DECL_P (binding)))
5747 if (val_is_implicit_typename && !yylex)
5748 warn_about_implicit_typename_lookup (val, binding);
5750 val_is_implicit_typename
5751 = IMPLICIT_TYPENAME_TYPE_DECL_P (val);
5752 if (!val_is_implicit_typename)
5757 /* Now lookup in namespace scopes. */
5758 if (!val || val_is_implicit_typename)
5760 t = unqualified_namespace_lookup (name, flags, 0);
5763 if (val_is_implicit_typename && !yylex)
5764 warn_about_implicit_typename_lookup (val, t);
5772 /* This should only warn about types used in qualified-ids. */
5773 if (from_obj && from_obj != val)
5775 if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
5776 && TREE_CODE (val) == TYPE_DECL
5777 && TREE_TYPE (from_obj) != TREE_TYPE (val))
5779 cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
5780 name, got_object, TREE_TYPE (from_obj));
5781 cp_pedwarn (" does not match lookup in the current scope (`%#T')",
5785 /* We don't change val to from_obj if got_object depends on
5786 template parms because that breaks implicit typename for
5787 destructor calls. */
5788 if (! uses_template_parms (got_object))
5792 /* If we have a single function from a using decl, pull it out. */
5793 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5794 val = OVL_FUNCTION (val);
5803 lookup_name_nonclass (name)
5806 return lookup_name_real (name, 0, 1, 0);
5810 lookup_function_nonclass (name, args)
5814 return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
5818 lookup_name_namespace_only (name)
5821 /* type-or-namespace, nonclass, namespace_only */
5822 return lookup_name_real (name, 1, 1, 1);
5826 lookup_name (name, prefer_type)
5830 return lookup_name_real (name, prefer_type, 0, 0);
5833 /* Similar to `lookup_name' but look only in the innermost non-class
5837 lookup_name_current_level (name)
5840 struct binding_level *b;
5843 b = current_binding_level;
5844 while (b->parm_flag == 2)
5849 t = IDENTIFIER_NAMESPACE_VALUE (name);
5851 /* extern "C" function() */
5852 if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
5855 else if (IDENTIFIER_BINDING (name)
5856 && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
5860 if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
5861 return IDENTIFIER_VALUE (name);
5873 /* Like lookup_name_current_level, but for types. */
5876 lookup_type_current_level (name)
5879 register tree t = NULL_TREE;
5881 my_friendly_assert (! current_binding_level->namespace_p, 980716);
5883 if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
5884 && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
5886 struct binding_level *b = current_binding_level;
5889 if (purpose_member (name, b->type_shadowed))
5890 return REAL_IDENTIFIER_TYPE_VALUE (name);
5902 begin_only_namespace_names ()
5904 only_namespace_names = 1;
5908 end_only_namespace_names ()
5910 only_namespace_names = 0;
5913 /* Arrange for the user to get a source line number, even when the
5914 compiler is going down in flames, so that she at least has a
5915 chance of working around problems in the compiler. We used to
5916 call error(), but that let the segmentation fault continue
5917 through; now, it's much more passive by asking them to send the
5918 maintainers mail about the problem. */
5922 int sig ATTRIBUTE_UNUSED;
5924 signal (SIGSEGV, SIG_DFL);
5926 signal (SIGIOT, SIG_DFL);
5929 signal (SIGILL, SIG_DFL);
5932 signal (SIGABRT, SIG_DFL);
5935 signal (SIGBUS, SIG_DFL);
5937 my_friendly_abort (0);
5940 /* Push the declarations of builtin types into the namespace.
5941 RID_INDEX, if < RID_MAX is the index of the builtin type
5942 in the array RID_POINTERS. NAME is the name used when looking
5943 up the builtin type. TYPE is the _TYPE node for the builtin type. */
5946 record_builtin_type (rid_index, name, type)
5951 tree rname = NULL_TREE, tname = NULL_TREE;
5952 tree tdecl = NULL_TREE;
5954 if ((int) rid_index < (int) RID_MAX)
5955 rname = ridpointers[(int) rid_index];
5957 tname = get_identifier (name);
5959 TYPE_BUILT_IN (type) = 1;
5963 tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
5964 set_identifier_type_value (tname, NULL_TREE);
5965 if ((int) rid_index < (int) RID_MAX)
5966 /* Built-in types live in the global namespace. */
5967 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
5969 if (rname != NULL_TREE)
5971 if (tname != NULL_TREE)
5973 set_identifier_type_value (rname, NULL_TREE);
5974 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
5978 tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
5979 set_identifier_type_value (rname, NULL_TREE);
5984 /* Record one of the standard Java types.
5985 * Declare it as having the given NAME.
5986 * If SIZE > 0, it is the size of one of the integral types;
5987 * otherwise it is the negative of the size of one of the other types. */
5990 record_builtin_java_type (name, size)
5996 type = make_signed_type (size);
5997 else if (size > -32)
5998 { /* "__java_char" or ""__java_boolean". */
5999 type = make_unsigned_type (-size);
6000 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
6003 { /* "__java_float" or ""__java_double". */
6004 type = make_node (REAL_TYPE);
6005 TYPE_PRECISION (type) = - size;
6008 record_builtin_type (RID_MAX, name, type);
6009 decl = TYPE_NAME (type);
6011 /* Suppress generate debug symbol entries for these types,
6012 since for normal C++ they are just clutter.
6013 However, push_lang_context undoes this if extern "Java" is seen. */
6014 DECL_IGNORED_P (decl) = 1;
6016 TYPE_FOR_JAVA (type) = 1;
6020 /* Push a type into the namespace so that the back-ends ignore it. */
6023 record_unknown_type (type, name)
6027 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
6028 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
6029 DECL_IGNORED_P (decl) = 1;
6030 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6031 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
6032 TYPE_ALIGN (type) = 1;
6033 TYPE_MODE (type) = TYPE_MODE (void_type_node);
6036 /* An string for which we should create an IDENTIFIER_NODE at
6039 typedef struct predefined_identifier
6041 /* The name of the identifier. */
6043 /* The place where the IDENTIFIER_NODE should be stored. */
6045 /* Non-zero if this is the name of a constructor or destructor. */
6047 } predefined_identifier;
6049 /* Create all the predefined identifiers. */
6052 initialize_predefined_identifiers ()
6054 struct predefined_identifier *pid;
6056 /* A table of identifiers to create at startup. */
6057 static predefined_identifier predefined_identifiers[] = {
6058 { "C++", &lang_name_cplusplus, 0 },
6059 { "C", &lang_name_c, 0 },
6060 { "Java", &lang_name_java, 0 },
6061 { CTOR_NAME, &ctor_identifier, 1 },
6062 { "__base_ctor", &base_ctor_identifier, 1 },
6063 { "__comp_ctor", &complete_ctor_identifier, 1 },
6064 { DTOR_NAME, &dtor_identifier, 1 },
6065 { "__comp_dtor", &complete_dtor_identifier, 1 },
6066 { "__base_dtor", &base_dtor_identifier, 1 },
6067 { "__deleting_dtor", &deleting_dtor_identifier, 1 },
6068 { VTABLE_DELTA2_NAME, &delta2_identifier, 0 },
6069 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
6070 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
6071 { VTABLE_INDEX_NAME, &index_identifier, 0 },
6072 { "nelts", &nelts_identifier, 0 },
6073 { THIS_NAME, &this_identifier, 0 },
6074 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
6075 { "__pfn_or_delta2", &pfn_or_delta2_identifier, 0 },
6076 { "_vptr", &vptr_identifier, 0 },
6077 { "__cp_push_exception", &cp_push_exception_identifier, 0 },
6078 { "__vtt_parm", &vtt_parm_identifier, 0 },
6082 for (pid = predefined_identifiers; pid->name; ++pid)
6084 *pid->node = get_identifier (pid->name);
6085 if (pid->ctor_or_dtor_p)
6086 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
6090 /* Create the predefined scalar types of C,
6091 and some nodes representing standard constants (0, 1, (void *)0).
6092 Initialize the global binding level.
6093 Make definitions for built-in primitive functions. */
6096 init_decl_processing ()
6099 int wchar_type_size;
6100 tree array_domain_type;
6102 /* Check to see that the user did not specify an invalid combination
6103 of command-line options. */
6104 if (flag_new_abi && !flag_vtable_thunks)
6105 fatal ("the new ABI requires vtable thunks");
6107 /* Create all the identifiers we need. */
6108 initialize_predefined_identifiers ();
6110 /* Let the back-end now how to save and restore language-specific
6111 per-function globals. */
6112 init_lang_status = &push_cp_function_context;
6113 free_lang_status = &pop_cp_function_context;
6114 mark_lang_status = &mark_cp_function_context;
6120 /* Create the global variables. */
6121 push_to_top_level ();
6123 /* Enter the global namespace. */
6124 my_friendly_assert (global_namespace == NULL_TREE, 375);
6125 push_namespace (get_identifier ("::"));
6126 global_namespace = current_namespace;
6127 current_lang_name = NULL_TREE;
6129 /* Adjust various flags based on command-line settings. */
6130 if (flag_strict_prototype == 2)
6131 flag_strict_prototype = pedantic;
6132 if (! flag_permissive && ! pedantic)
6133 flag_pedantic_errors = 1;
6134 if (!flag_no_inline)
6135 flag_inline_trees = 1;
6137 strict_prototypes_lang_c = flag_strict_prototype;
6140 current_lang_name = lang_name_c;
6142 current_function_decl = NULL_TREE;
6143 current_binding_level = NULL_BINDING_LEVEL;
6144 free_binding_level = NULL_BINDING_LEVEL;
6146 /* Because most segmentation signals can be traced back into user
6147 code, catch them and at least give the user a chance of working
6148 around compiler bugs. */
6149 signal (SIGSEGV, signal_catch);
6151 /* We will also catch aborts in the back-end through signal_catch and
6152 give the user a chance to see where the error might be, and to defeat
6153 aborts in the back-end when there have been errors previously in their
6156 signal (SIGIOT, signal_catch);
6159 signal (SIGILL, signal_catch);
6162 signal (SIGABRT, signal_catch);
6165 signal (SIGBUS, signal_catch);
6168 build_common_tree_nodes (flag_signed_char);
6170 error_mark_list = build_tree_list (error_mark_node, error_mark_node);
6171 TREE_TYPE (error_mark_list) = error_mark_node;
6173 /* Make the binding_level structure for global names. */
6175 global_binding_level = current_binding_level;
6176 /* The global level is the namespace level of ::. */
6177 NAMESPACE_LEVEL (global_namespace) = global_binding_level;
6178 declare_namespace_level ();
6180 /* Define `int' and `char' first so that dbx will output them first. */
6181 record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
6182 record_builtin_type (RID_CHAR, "char", char_type_node);
6184 /* `signed' is the same as `int' */
6185 record_builtin_type (RID_SIGNED, NULL_PTR, integer_type_node);
6186 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
6187 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
6188 record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
6189 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
6190 record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
6191 record_builtin_type (RID_MAX, "long long unsigned int",
6192 long_long_unsigned_type_node);
6193 record_builtin_type (RID_MAX, "long long unsigned",
6194 long_long_unsigned_type_node);
6195 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
6196 record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
6197 record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
6200 = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
6202 /* Define both `signed char' and `unsigned char'. */
6203 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
6204 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
6206 /* `unsigned long' is the standard type for sizeof.
6207 Note that stddef.h uses `unsigned long',
6208 and this must agree, even if long and int are the same size. */
6210 (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
6212 /* Create the widest literal types. */
6213 widest_integer_literal_type_node = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
6214 pushdecl (build_decl (TYPE_DECL, NULL_TREE,
6215 widest_integer_literal_type_node));
6217 widest_unsigned_literal_type_node = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
6218 pushdecl (build_decl (TYPE_DECL, NULL_TREE,
6219 widest_unsigned_literal_type_node));
6221 /* These are types that type_for_size and type_for_mode use. */
6222 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
6223 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
6224 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
6225 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
6226 #if HOST_BITS_PER_WIDE_INT >= 64
6227 pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
6229 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
6230 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
6231 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
6232 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
6233 #if HOST_BITS_PER_WIDE_INT >= 64
6234 pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
6237 build_common_tree_nodes_2 (flag_short_double);
6239 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6240 java_short_type_node = record_builtin_java_type ("__java_short", 16);
6241 java_int_type_node = record_builtin_java_type ("__java_int", 32);
6242 java_long_type_node = record_builtin_java_type ("__java_long", 64);
6243 java_float_type_node = record_builtin_java_type ("__java_float", -32);
6244 java_double_type_node = record_builtin_java_type ("__java_double", -64);
6245 java_char_type_node = record_builtin_java_type ("__java_char", -16);
6246 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
6248 integer_two_node = build_int_2 (2, 0);
6249 TREE_TYPE (integer_two_node) = integer_type_node;
6250 integer_three_node = build_int_2 (3, 0);
6251 TREE_TYPE (integer_three_node) = integer_type_node;
6253 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6254 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
6255 TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6256 TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6257 TYPE_PRECISION (boolean_type_node) = 1;
6258 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6259 boolean_false_node = build_int_2 (0, 0);
6260 TREE_TYPE (boolean_false_node) = boolean_type_node;
6261 boolean_true_node = build_int_2 (1, 0);
6262 TREE_TYPE (boolean_true_node) = boolean_type_node;
6264 signed_size_zero_node = build_int_2 (0, 0);
6265 record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
6266 record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
6267 record_builtin_type (RID_MAX, "long double", long_double_type_node);
6269 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
6270 complex_integer_type_node));
6271 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
6272 complex_float_type_node));
6273 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
6274 complex_double_type_node));
6275 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
6276 complex_long_double_type_node));
6278 TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6280 record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
6281 void_list_node = build_tree_list (NULL_TREE, void_type_node);
6282 TREE_PARMLIST (void_list_node) = 1;
6284 /* Used for expressions that do nothing, but are not errors. */
6285 void_zero_node = build_int_2 (0, 0);
6286 TREE_TYPE (void_zero_node) = void_type_node;
6288 string_type_node = build_pointer_type (char_type_node);
6289 const_string_type_node
6290 = build_pointer_type (build_qualified_type (char_type_node,
6292 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
6294 record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6297 /* Make a type to be the domain of a few array types
6298 whose domains don't really matter.
6299 200 is small enough that it always fits in size_t. */
6300 array_domain_type = build_index_type (build_int_2 (200, 0));
6302 /* Make a type for arrays of characters.
6303 With luck nothing will ever really depend on the length of this
6305 char_array_type_node
6306 = build_array_type (char_type_node, array_domain_type);
6307 /* Likewise for arrays of ints. */
6309 = build_array_type (integer_type_node, array_domain_type);
6312 delta_type_node = ptrdiff_type_node;
6313 else if (flag_huge_objects)
6314 delta_type_node = long_integer_type_node;
6316 delta_type_node = short_integer_type_node;
6319 vtable_index_type = ptrdiff_type_node;
6321 vtable_index_type = delta_type_node;
6323 default_function_type
6324 = build_function_type (integer_type_node, NULL_TREE);
6326 ptr_type_node = build_pointer_type (void_type_node);
6328 = build_pointer_type (build_qualified_type (void_type_node,
6330 vtt_parm_type = build_pointer_type (const_ptr_type_node);
6331 c_common_nodes_and_builtins (1, flag_no_builtin, flag_no_nonansi_builtin);
6332 lang_type_promotes_to = convert_type_from_ellipsis;
6335 = build_exception_variant (void_ftype_ptr, empty_except_spec);
6337 /* C++ extensions */
6339 unknown_type_node = make_node (UNKNOWN_TYPE);
6340 record_unknown_type (unknown_type_node, "unknown type");
6342 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
6343 TREE_TYPE (unknown_type_node) = unknown_type_node;
6345 TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
6347 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6349 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6350 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6352 /* This is special for C++ so functions can be overloaded. */
6353 wchar_type_node = get_identifier (flag_short_wchar
6354 ? "short unsigned int"
6356 wchar_type_node = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (wchar_type_node));
6357 wchar_type_size = TYPE_PRECISION (wchar_type_node);
6358 signed_wchar_type_node = make_signed_type (wchar_type_size);
6359 unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
6361 = TREE_UNSIGNED (wchar_type_node)
6362 ? unsigned_wchar_type_node
6363 : signed_wchar_type_node;
6364 record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
6366 /* Artificial declaration of wchar_t -- can be bashed */
6367 wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
6369 pushdecl (wchar_decl_node);
6371 /* This is for wide string constants. */
6372 wchar_array_type_node
6373 = build_array_type (wchar_type_node, array_domain_type);
6375 if (flag_vtable_thunks)
6377 /* Make sure we get a unique function type, so we can give
6378 its pointer type a name. (This wins for gdb.) */
6379 tree vfunc_type = make_node (FUNCTION_TYPE);
6380 TREE_TYPE (vfunc_type) = integer_type_node;
6381 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6382 layout_type (vfunc_type);
6384 vtable_entry_type = build_pointer_type (vfunc_type);
6388 vtable_entry_type = make_aggr_type (RECORD_TYPE);
6389 fields[0] = build_decl (FIELD_DECL, delta_identifier,
6391 fields[1] = build_decl (FIELD_DECL, index_identifier,
6393 fields[2] = build_decl (FIELD_DECL, pfn_identifier,
6395 finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6398 /* Make this part of an invisible union. */
6399 fields[3] = copy_node (fields[2]);
6400 TREE_TYPE (fields[3]) = delta_type_node;
6401 DECL_NAME (fields[3]) = delta2_identifier;
6402 DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6403 DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
6404 DECL_SIZE_UNIT (fields[3]) = TYPE_SIZE_UNIT (delta_type_node);
6405 TREE_UNSIGNED (fields[3]) = 0;
6406 TREE_CHAIN (fields[2]) = fields[3];
6407 vtable_entry_type = build_qualified_type (vtable_entry_type,
6410 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
6413 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
6414 layout_type (vtbl_type_node);
6415 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
6416 record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
6417 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6418 layout_type (vtbl_ptr_type_node);
6419 record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
6421 std_node = build_decl (NAMESPACE_DECL,
6422 get_identifier (flag_honor_std ? "fake std":"std"),
6424 pushdecl (std_node);
6428 push_namespace (get_identifier ("__cxxabiv1"));
6429 abi_node = current_namespace;
6433 global_type_node = make_node (LANG_TYPE);
6434 record_unknown_type (global_type_node, "global type");
6437 current_lang_name = lang_name_cplusplus;
6440 tree bad_alloc_type_node, newtype, deltype;
6442 push_namespace (get_identifier ("std"));
6443 bad_alloc_type_node = xref_tag
6444 (class_type_node, get_identifier ("bad_alloc"), 1);
6447 newtype = build_exception_variant
6448 (ptr_ftype_sizetype, add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1));
6449 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
6450 push_cp_library_fn (ansi_opname[(int) NEW_EXPR], newtype);
6451 push_cp_library_fn (ansi_opname[(int) VEC_NEW_EXPR], newtype);
6452 global_delete_fndecl = push_cp_library_fn (ansi_opname[(int) DELETE_EXPR],
6454 push_cp_library_fn (ansi_opname[(int) VEC_DELETE_EXPR], deltype);
6458 = build_library_fn_ptr ("__pure_virtual", void_ftype);
6460 /* Perform other language dependent initializations. */
6461 init_class_processing ();
6462 init_init_processing ();
6463 init_search_processing ();
6464 init_rtti_processing ();
6466 if (flag_exceptions)
6467 init_exception_processing ();
6470 flag_inline_functions = 0;
6473 if (! supports_one_only ())
6476 /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__. */
6477 make_fname_decl = cp_make_fname_decl;
6478 declare_function_name ();
6480 /* Prepare to check format strings against argument lists. */
6481 init_function_format_info ();
6483 /* Show we use EH for cleanups. */
6484 using_eh_for_cleanups ();
6486 print_error_function = lang_print_error_function;
6487 lang_get_alias_set = &c_get_alias_set;
6488 valid_lang_attribute = cp_valid_lang_attribute;
6490 /* Maintain consistency. Perhaps we should just complain if they
6491 say -fwritable-strings? */
6492 if (flag_writable_strings)
6493 flag_const_strings = 0;
6495 /* Add GC roots for all of our global variables. */
6496 ggc_add_tree_root (c_global_trees, sizeof c_global_trees / sizeof(tree));
6497 ggc_add_tree_root (cp_global_trees, sizeof cp_global_trees / sizeof(tree));
6498 ggc_add_tree_root (&integer_three_node, 1);
6499 ggc_add_tree_root (&integer_two_node, 1);
6500 ggc_add_tree_root (&signed_size_zero_node, 1);
6501 ggc_add_tree_root (&size_one_node, 1);
6502 ggc_add_tree_root (&size_zero_node, 1);
6503 ggc_add_root (&global_binding_level, 1, sizeof global_binding_level,
6504 mark_binding_level);
6505 ggc_add_root (&scope_chain, 1, sizeof scope_chain, &mark_saved_scope);
6506 ggc_add_tree_root (&static_ctors, 1);
6507 ggc_add_tree_root (&static_dtors, 1);
6508 ggc_add_tree_root (&lastiddecl, 1);
6510 ggc_add_tree_root (&last_function_parm_tags, 1);
6511 ggc_add_tree_root (¤t_function_return_value, 1);
6512 ggc_add_tree_root (¤t_function_parms, 1);
6513 ggc_add_tree_root (¤t_function_parm_tags, 1);
6514 ggc_add_tree_root (&last_function_parms, 1);
6515 ggc_add_tree_root (&error_mark_list, 1);
6517 ggc_add_tree_root (&global_namespace, 1);
6518 ggc_add_tree_root (&global_type_node, 1);
6519 ggc_add_tree_root (&anonymous_namespace_name, 1);
6521 ggc_add_tree_root (&got_object, 1);
6522 ggc_add_tree_root (&got_scope, 1);
6524 ggc_add_tree_root (¤t_lang_name, 1);
6525 ggc_add_tree_root (&static_aggregates, 1);
6528 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
6529 decl, NAME is the initialization string and TYPE_DEP indicates whether
6530 NAME depended on the type of the function. We make use of that to detect
6531 __PRETTY_FUNCTION__ inside a template fn. Because we build a tree for
6532 the function before emitting any of it, we don't need to treat the
6533 VAR_DECL specially. We can decide whether to emit it later, if it was
6537 cp_make_fname_decl (id, name, type_dep)
6542 tree decl, type, init;
6543 size_t length = strlen (name);
6544 tree domain = NULL_TREE;
6546 if (!processing_template_decl)
6549 domain = build_index_type (build_int_2 (length, 0));
6551 type = build_cplus_array_type
6552 (build_qualified_type (char_type_node, TYPE_QUAL_CONST),
6555 decl = build_decl (VAR_DECL, id, type);
6556 TREE_STATIC (decl) = 1;
6557 TREE_READONLY (decl) = 1;
6558 DECL_SOURCE_LINE (decl) = 0;
6559 DECL_ARTIFICIAL (decl) = 1;
6560 DECL_IN_SYSTEM_HEADER (decl) = 1;
6562 if (processing_template_decl)
6563 decl = push_template_decl (decl);
6566 init = build (FUNCTION_NAME, type);
6567 DECL_PRETTY_FUNCTION_P (decl) = 1;
6571 init = build_string (length + 1, name);
6572 TREE_TYPE (init) = type;
6574 DECL_INITIAL (decl) = init;
6575 cp_finish_decl (decl, init, NULL_TREE, LOOKUP_ONLYCONVERTING);
6577 /* We will have to make sure we only emit this, if it is actually used. */
6581 /* Function to print any language-specific context for an error message. */
6584 lang_print_error_function (file)
6587 default_print_error_function (file);
6588 maybe_print_template_context ();
6591 /* Entry point for the benefit of c_common_nodes_and_builtins.
6593 Make a definition for a builtin function named NAME and whose data type
6594 is TYPE. TYPE should be a function type with argument types.
6596 CLASS and CODE tell later passes how to compile calls to this function.
6597 See tree.h for possible values.
6599 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6600 the name to be called if we can't opencode the function. */
6603 builtin_function (name, type, code, class, libname)
6607 enum built_in_class class;
6608 const char *libname;
6610 tree decl = build_library_fn_1 (get_identifier (name), type);
6611 DECL_BUILT_IN_CLASS (decl) = class;
6612 DECL_FUNCTION_CODE (decl) = code;
6614 my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
6616 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6617 we cannot change DECL_ASSEMBLER_NAME until we have installed this
6618 function in the namespace. */
6621 DECL_ASSEMBLER_NAME (decl) = get_identifier (libname);
6622 make_function_rtl (decl);
6626 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
6627 function. Not called directly. */
6630 build_library_fn_1 (name, type)
6634 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
6635 DECL_EXTERNAL (fn) = 1;
6636 TREE_PUBLIC (fn) = 1;
6637 DECL_ARTIFICIAL (fn) = 1;
6638 TREE_NOTHROW (fn) = 1;
6642 /* Returns the _DECL for a library function with C linkage.
6643 We assume that such functions never throw; if this is incorrect,
6644 callers should unset TREE_NOTHROW. */
6647 build_library_fn (name, type)
6651 tree fn = build_library_fn_1 (name, type);
6652 make_function_rtl (fn);
6656 /* Returns the _DECL for a library function with C++ linkage. */
6659 build_cp_library_fn (name, type)
6663 tree fn = build_library_fn_1 (name, type);
6664 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
6665 set_mangled_name_for_decl (fn);
6666 make_function_rtl (fn);
6670 /* Like build_library_fn, but takes a C string instead of an
6674 build_library_fn_ptr (name, type)
6678 return build_library_fn (get_identifier (name), type);
6681 /* Like build_cp_library_fn, but takes a C string instead of an
6685 build_cp_library_fn_ptr (name, type)
6689 return build_cp_library_fn (get_identifier (name), type);
6692 /* Like build_library_fn, but also pushes the function so that we will
6693 be able to find it via IDENTIFIER_GLOBAL_VALUE. */
6696 push_library_fn (name, type)
6699 tree fn = build_library_fn (name, type);
6700 pushdecl_top_level (fn);
6704 /* Like build_cp_library_fn, but also pushes the function so that it
6705 will be found by normal lookup. */
6708 push_cp_library_fn (name, type)
6712 tree fn = build_cp_library_fn (name, type);
6717 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
6721 push_void_library_fn (name, parmtypes)
6722 tree name, parmtypes;
6724 tree type = build_function_type (void_type_node, parmtypes);
6725 return push_library_fn (name, type);
6728 /* Like push_library_fn, but also note that this function throws
6729 and does not return. Used for __throw_foo and the like. */
6732 push_throw_library_fn (name, type)
6735 tree fn = push_library_fn (name, type);
6736 TREE_THIS_VOLATILE (fn) = 1;
6737 TREE_NOTHROW (fn) = 0;
6741 /* When we call finish_struct for an anonymous union, we create
6742 default copy constructors and such. But, an anonymous union
6743 shouldn't have such things; this function undoes the damage to the
6744 anonymous union type T.
6746 (The reason that we create the synthesized methods is that we don't
6747 distinguish `union { int i; }' from `typedef union { int i; } U'.
6748 The first is an anonymous union; the second is just an ordinary
6752 fixup_anonymous_aggr (t)
6757 /* Wipe out memory of synthesized methods */
6758 TYPE_HAS_CONSTRUCTOR (t) = 0;
6759 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6760 TYPE_HAS_INIT_REF (t) = 0;
6761 TYPE_HAS_CONST_INIT_REF (t) = 0;
6762 TYPE_HAS_ASSIGN_REF (t) = 0;
6763 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6765 /* Splice the implicitly generated functions out of the TYPE_METHODS
6767 q = &TYPE_METHODS (t);
6770 if (DECL_ARTIFICIAL (*q))
6771 *q = TREE_CHAIN (*q);
6773 q = &TREE_CHAIN (*q);
6776 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
6777 if (TYPE_METHODS (t))
6778 error ("an anonymous union cannot have function members");
6781 /* Make sure that a declaration with no declarator is well-formed, i.e.
6782 just defines a tagged type or anonymous union.
6784 Returns the type defined, if any. */
6787 check_tag_decl (declspecs)
6792 tree ob_modifier = NULL_TREE;
6794 register tree t = NULL_TREE;
6796 for (link = declspecs; link; link = TREE_CHAIN (link))
6798 register tree value = TREE_VALUE (link);
6801 || (TREE_CODE (value) == IDENTIFIER_NODE
6802 && IDENTIFIER_GLOBAL_VALUE (value)
6803 && TYPE_P (IDENTIFIER_GLOBAL_VALUE (value))))
6807 if (IS_AGGR_TYPE (value) || TREE_CODE (value) == ENUMERAL_TYPE)
6809 my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
6813 else if (value == ridpointers[(int) RID_FRIEND])
6815 if (current_class_type == NULL_TREE
6816 || current_scope () != current_class_type)
6817 ob_modifier = value;
6821 else if (value == ridpointers[(int) RID_STATIC]
6822 || value == ridpointers[(int) RID_EXTERN]
6823 || value == ridpointers[(int) RID_AUTO]
6824 || value == ridpointers[(int) RID_REGISTER]
6825 || value == ridpointers[(int) RID_INLINE]
6826 || value == ridpointers[(int) RID_VIRTUAL]
6827 || value == ridpointers[(int) RID_CONST]
6828 || value == ridpointers[(int) RID_VOLATILE]
6829 || value == ridpointers[(int) RID_EXPLICIT])
6830 ob_modifier = value;
6834 error ("multiple types in one declaration");
6836 if (t == NULL_TREE && ! saw_friend)
6837 pedwarn ("declaration does not declare anything");
6839 /* Check for an anonymous union. We're careful
6840 accessing TYPE_IDENTIFIER because some built-in types, like
6841 pointer-to-member types, do not have TYPE_NAME. */
6842 else if (t && IS_AGGR_TYPE_CODE (TREE_CODE (t))
6844 && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
6846 /* Anonymous unions are objects, so they can have specifiers. */;
6847 SET_ANON_AGGR_TYPE_P (t);
6849 if (TREE_CODE (t) != UNION_TYPE && pedantic && ! in_system_header)
6850 pedwarn ("ISO C++ prohibits anonymous structs");
6853 else if (ob_modifier)
6855 if (ob_modifier == ridpointers[(int) RID_INLINE]
6856 || ob_modifier == ridpointers[(int) RID_VIRTUAL])
6857 cp_error ("`%D' can only be specified for functions", ob_modifier);
6858 else if (ob_modifier == ridpointers[(int) RID_FRIEND])
6859 cp_error ("`%D' can only be specified inside a class", ob_modifier);
6860 else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
6861 cp_error ("`%D' can only be specified for constructors",
6864 cp_error ("`%D' can only be specified for objects and functions",
6871 /* Called when a declaration is seen that contains no names to declare.
6872 If its type is a reference to a structure, union or enum inherited
6873 from a containing scope, shadow that tag name for the current scope
6874 with a forward reference.
6875 If its type defines a new named structure or union
6876 or defines an enum, it is valid but we need not do anything here.
6877 Otherwise, it is an error.
6879 C++: may have to grok the declspecs to learn about static,
6880 complain for anonymous unions. */
6883 shadow_tag (declspecs)
6886 tree t = check_tag_decl (declspecs);
6889 maybe_process_partial_specialization (t);
6891 /* This is where the variables in an anonymous union are
6892 declared. An anonymous union declaration looks like:
6894 because there is no declarator after the union, the parser
6895 sends that declaration here. */
6896 if (t && ANON_AGGR_TYPE_P (t))
6898 fixup_anonymous_aggr (t);
6900 if (TYPE_FIELDS (t))
6902 tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
6904 finish_anon_union (decl);
6909 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
6912 groktypename (typename)
6915 if (TREE_CODE (typename) != TREE_LIST)
6917 return grokdeclarator (TREE_VALUE (typename),
6918 TREE_PURPOSE (typename),
6919 TYPENAME, 0, NULL_TREE);
6922 /* Decode a declarator in an ordinary declaration or data definition.
6923 This is called as soon as the type information and variable name
6924 have been parsed, before parsing the initializer if any.
6925 Here we create the ..._DECL node, fill in its type,
6926 and put it on the list of decls for the current context.
6927 The ..._DECL node is returned as the value.
6929 Exception: for arrays where the length is not specified,
6930 the type is left null, to be filled in by `cp_finish_decl'.
6932 Function definitions do not come here; they go to start_function
6933 instead. However, external and forward declarations of functions
6934 do go through here. Structure field declarations are done by
6935 grokfield and not through here. */
6938 start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
6939 tree declarator, declspecs;
6941 tree attributes, prefix_attributes;
6944 register tree type, tem;
6946 extern int have_extern_spec;
6947 extern int used_extern_spec;
6951 /* See code below that used this. */
6952 int init_written = initialized;
6955 /* This should only be done once on the top most decl. */
6956 if (have_extern_spec && !used_extern_spec)
6958 declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
6960 used_extern_spec = 1;
6963 if (attributes || prefix_attributes)
6964 attrlist = build_tree_list (attributes, prefix_attributes);
6966 attrlist = NULL_TREE;
6968 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
6971 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
6974 type = TREE_TYPE (decl);
6976 if (type == error_mark_node)
6979 context = DECL_CONTEXT (decl);
6981 if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
6982 && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
6984 /* When parsing the initializer, lookup should use the object's
6986 push_decl_namespace (context);
6989 /* We are only interested in class contexts, later. */
6990 if (context && TREE_CODE (context) == NAMESPACE_DECL)
6991 context = NULL_TREE;
6994 /* Is it valid for this decl to have an initializer at all?
6995 If not, set INITIALIZED to zero, which will indirectly
6996 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
6997 switch (TREE_CODE (decl))
7000 /* typedef foo = bar means give foo the same type as bar.
7001 We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
7002 Any other case of an initialization in a TYPE_DECL is an error. */
7003 if (pedantic || list_length (declspecs) > 1)
7005 cp_error ("typedef `%D' is initialized", decl);
7011 cp_error ("function `%#D' is initialized like a variable", decl);
7021 if (! toplevel_bindings_p ()
7022 && DECL_EXTERNAL (decl))
7023 cp_warning ("declaration of `%#D' has `extern' and is initialized",
7025 DECL_EXTERNAL (decl) = 0;
7026 if (toplevel_bindings_p ())
7027 TREE_STATIC (decl) = 1;
7029 /* Tell `pushdecl' this is an initialized decl
7030 even though we don't yet have the initializer expression.
7031 Also tell `cp_finish_decl' it may store the real initializer. */
7032 DECL_INITIAL (decl) = error_mark_node;
7035 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
7036 SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
7039 /* Set attributes here so if duplicate decl, will have proper attributes. */
7040 cplus_decl_attributes (decl, attributes, prefix_attributes);
7042 if (context && COMPLETE_TYPE_P (complete_type (context)))
7044 push_nested_class (context, 2);
7046 if (TREE_CODE (decl) == VAR_DECL)
7048 tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
7049 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
7050 cp_error ("`%#D' is not a static member of `%#T'", decl, context);
7053 if (DECL_CONTEXT (field) != context)
7055 cp_pedwarn ("ISO C++ does not permit `%T::%D' to be defined as `%T::%D'",
7056 DECL_CONTEXT (field), DECL_NAME (decl),
7057 context, DECL_NAME (decl));
7058 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
7060 /* Static data member are tricky; an in-class initialization
7061 still doesn't provide a definition, so the in-class
7062 declaration will have DECL_EXTERNAL set, but will have an
7063 initialization. Thus, duplicate_decls won't warn
7064 about this situation, and so we check here. */
7065 if (DECL_INITIAL (decl) && DECL_INITIAL (field))
7066 cp_error ("duplicate initialization of %D", decl);
7067 if (duplicate_decls (decl, field))
7073 tree field = check_classfn (context, decl);
7074 if (field && duplicate_decls (decl, field))
7078 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
7079 DECL_IN_AGGR_P (decl) = 0;
7080 if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
7081 || CLASSTYPE_USE_TEMPLATE (context))
7083 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
7084 /* [temp.expl.spec] An explicit specialization of a static data
7085 member of a template is a definition if the declaration
7086 includes an initializer; otherwise, it is a declaration.
7088 We check for processing_specialization so this only applies
7089 to the new specialization syntax. */
7090 if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
7091 DECL_EXTERNAL (decl) = 1;
7094 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
7095 cp_pedwarn ("declaration of `%#D' outside of class is not definition",
7099 /* Enter this declaration into the symbol table. */
7100 tem = maybe_push_decl (decl);
7102 if (processing_template_decl)
7103 tem = push_template_decl (tem);
7105 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7106 /* Tell the back-end to use or not use .common as appropriate. If we say
7107 -fconserve-space, we want this to save .data space, at the expense of
7108 wrong semantics. If we say -fno-conserve-space, we want this to
7109 produce errors about redefs; to do this we force variables into the
7111 DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
7114 if (! processing_template_decl)
7124 tree type = TREE_TYPE (decl);
7125 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
7127 if (type == error_mark_node)
7130 /* If this type of object needs a cleanup, but we're not allowed to
7131 add any more objects with cleanups to the current scope, create a
7132 new binding level. */
7133 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
7134 && current_binding_level->more_cleanups_ok == 0)
7136 keep_next_level (2);
7139 add_scope_stmt (/*begin_p=*/1, /*partial_p=*/1);
7143 /* Is it valid for this decl to have an initializer at all?
7144 If not, set INITIALIZED to zero, which will indirectly
7145 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
7147 /* Don't allow initializations for incomplete types except for
7148 arrays which might be completed by the initialization. */
7149 if (COMPLETE_TYPE_P (complete_type (type)))
7150 ; /* A complete type is ok. */
7151 else if (TREE_CODE (type) != ARRAY_TYPE)
7153 cp_error ("variable `%#D' has initializer but incomplete type",
7156 type = TREE_TYPE (decl) = error_mark_node;
7158 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
7160 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
7161 cp_error ("elements of array `%#D' have incomplete type", decl);
7162 /* else we already gave an error in start_decl. */
7168 && TREE_CODE (decl) != TYPE_DECL
7169 && TREE_CODE (decl) != TEMPLATE_DECL
7170 && type != error_mark_node
7171 && IS_AGGR_TYPE (type)
7172 && ! DECL_EXTERNAL (decl))
7174 if ((! processing_template_decl || ! uses_template_parms (type))
7175 && !COMPLETE_TYPE_P (complete_type (type)))
7177 cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
7179 /* Change the type so that assemble_variable will give
7180 DECL an rtl we can live with: (mem (const_int 0)). */
7181 type = TREE_TYPE (decl) = error_mark_node;
7185 /* If any base type in the hierarchy of TYPE needs a constructor,
7186 then we set initialized to 1. This way any nodes which are
7187 created for the purposes of initializing this aggregate
7188 will live as long as it does. This is necessary for global
7189 aggregates which do not have their initializers processed until
7190 the end of the file. */
7191 initialized = TYPE_NEEDS_CONSTRUCTING (type);
7196 DECL_INITIAL (decl) = NULL_TREE;
7199 /* Handle initialization of references.
7200 These three arguments are from `cp_finish_decl', and have the
7201 same meaning here that they do there.
7203 Quotes on semantics can be found in ARM 8.4.3. */
7206 grok_reference_init (decl, type, init)
7207 tree decl, type, init;
7211 if (init == NULL_TREE)
7213 if ((DECL_LANG_SPECIFIC (decl) == 0
7214 || DECL_IN_AGGR_P (decl) == 0)
7215 && ! DECL_THIS_EXTERN (decl))
7216 cp_error ("`%D' declared as reference but not initialized", decl);
7220 if (init == error_mark_node)
7223 if (TREE_CODE (init) == CONSTRUCTOR)
7225 cp_error ("ISO C++ forbids use of initializer list to initialize reference `%D'", decl);
7229 if (TREE_CODE (init) == TREE_LIST)
7230 init = build_compound_expr (init);
7232 if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
7233 init = convert_from_reference (init);
7235 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
7236 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
7238 /* Note: default conversion is only called in very special cases. */
7239 init = default_conversion (init);
7242 /* Convert INIT to the reference type TYPE. This may involve the
7243 creation of a temporary, whose lifetime must be the same as that
7244 of the reference. If so, a DECL_STMT for the temporary will be
7245 added just after the DECL_STMT for DECL. That's why we don't set
7246 DECL_INITIAL for local references (instead assigning to them
7247 explicitly); we need to allow the temporary to be initialized
7249 tmp = convert_to_reference
7250 (type, init, CONV_IMPLICIT,
7251 LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
7253 if (tmp == error_mark_node)
7255 else if (tmp != NULL_TREE)
7258 tmp = save_expr (tmp);
7259 if (building_stmt_tree ())
7261 /* Initialize the declaration. */
7262 tmp = build (INIT_EXPR, TREE_TYPE (decl), decl, tmp);
7263 finish_expr_stmt (tmp);
7266 DECL_INITIAL (decl) = tmp;
7270 cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
7274 if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
7276 expand_static_init (decl, DECL_INITIAL (decl));
7277 DECL_INITIAL (decl) = NULL_TREE;
7282 /* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7283 mucking with forces it does not comprehend (i.e. initialization with a
7284 constructor). If we are at global scope and won't go into COMMON, fill
7285 it in with a dummy CONSTRUCTOR to force the variable into .data;
7286 otherwise we can use error_mark_node. */
7289 obscure_complex_init (decl, init)
7292 if (! flag_no_inline && TREE_STATIC (decl))
7294 if (extract_init (decl, init))
7298 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7299 if (toplevel_bindings_p () && ! DECL_COMMON (decl))
7300 DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7304 DECL_INITIAL (decl) = error_mark_node;
7309 /* When parsing `int a[] = {1, 2};' we don't know the size of the
7310 array until we finish parsing the initializer. If that's the
7311 situation we're in, update DECL accordingly. */
7314 maybe_deduce_size_from_array_init (decl, init)
7318 tree type = TREE_TYPE (decl);
7320 if (TREE_CODE (type) == ARRAY_TYPE
7321 && TYPE_DOMAIN (type) == NULL_TREE
7322 && TREE_CODE (decl) != TYPE_DECL)
7325 = (TREE_STATIC (decl)
7326 /* Even if pedantic, an external linkage array
7327 may have incomplete type at first. */
7328 ? pedantic && ! DECL_EXTERNAL (decl)
7329 : !DECL_EXTERNAL (decl));
7330 tree initializer = init ? init : DECL_INITIAL (decl);
7331 int failure = complete_array_type (type, initializer, do_default);
7334 cp_error ("initializer fails to determine size of `%D'", decl);
7339 cp_error ("array size missing in `%D'", decl);
7340 /* If a `static' var's size isn't known, make it extern as
7341 well as static, so it does not get allocated. If it's not
7342 `static', then don't mark it extern; finish_incomplete_decl
7343 will give it a default size and it will get allocated. */
7344 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7345 DECL_EXTERNAL (decl) = 1;
7348 if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7349 && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7351 cp_error ("zero-size array `%D'", decl);
7353 layout_decl (decl, 0);
7357 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
7358 any appropriate error messages regarding the layout. */
7361 layout_var_decl (decl)
7364 tree type = TREE_TYPE (decl);
7366 tree ttype = target_type (type);
7369 /* If we haven't already layed out this declaration, do so now.
7370 Note that we must not call complete type for an external object
7371 because it's type might involve templates that we are not
7372 supposed to isntantiate yet. (And it's perfectly legal to say
7373 `extern X x' for some incomplete type `X'.) */
7374 if (!DECL_EXTERNAL (decl))
7375 complete_type (type);
7376 if (!DECL_SIZE (decl) && COMPLETE_TYPE_P (type))
7377 layout_decl (decl, 0);
7379 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
7381 /* An automatic variable with an incomplete type: that is an error.
7382 Don't talk about array types here, since we took care of that
7383 message in grokdeclarator. */
7384 cp_error ("storage size of `%D' isn't known", decl);
7385 TREE_TYPE (decl) = error_mark_node;
7388 /* Keep this code around in case we later want to control debug info
7389 based on whether a type is "used". (jason 1999-11-11) */
7391 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7392 /* Let debugger know it should output info for this type. */
7393 note_debug_info_needed (ttype);
7395 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7396 note_debug_info_needed (DECL_CONTEXT (decl));
7399 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7400 && DECL_SIZE (decl) != NULL_TREE
7401 && ! TREE_CONSTANT (DECL_SIZE (decl)))
7403 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7404 constant_expression_warning (DECL_SIZE (decl));
7406 cp_error ("storage size of `%D' isn't constant", decl);
7410 /* If a local static variable is declared in an inline function, or if
7411 we have a weak definition, we must endeavor to create only one
7412 instance of the variable at link-time. */
7415 maybe_commonize_var (decl)
7418 /* Static data in a function with comdat linkage also has comdat
7420 if (TREE_STATIC (decl)
7421 /* Don't mess with __FUNCTION__. */
7422 && ! DECL_ARTIFICIAL (decl)
7423 && current_function_decl
7424 && DECL_CONTEXT (decl) == current_function_decl
7425 && (DECL_THIS_INLINE (current_function_decl)
7426 || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7427 && TREE_PUBLIC (current_function_decl))
7429 /* Rather than try to get this right with inlining, we suppress
7430 inlining of such functions. */
7431 current_function_cannot_inline
7432 = "function with static variable cannot be inline";
7434 /* If flag_weak, we don't need to mess with this, as we can just
7435 make the function weak, and let it refer to its unique local
7436 copy. This works because we don't allow the function to be
7440 if (DECL_INTERFACE_KNOWN (current_function_decl))
7442 TREE_PUBLIC (decl) = 1;
7443 DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7445 else if (DECL_INITIAL (decl) == NULL_TREE
7446 || DECL_INITIAL (decl) == error_mark_node)
7448 TREE_PUBLIC (decl) = 1;
7449 DECL_COMMON (decl) = 1;
7451 /* else we lose. We can only do this if we can use common,
7452 which we can't if it has been initialized. */
7454 if (TREE_PUBLIC (decl))
7455 DECL_ASSEMBLER_NAME (decl)
7456 = build_static_name (current_function_decl, DECL_NAME (decl));
7459 cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7460 cp_warning_at (" you can work around this by removing the initializer", decl);
7464 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
7465 /* Set it up again; we might have set DECL_INITIAL since the last
7467 comdat_linkage (decl);
7470 /* Issue an error message if DECL is an uninitialized const variable. */
7473 check_for_uninitialized_const_var (decl)
7476 tree type = TREE_TYPE (decl);
7478 /* ``Unless explicitly declared extern, a const object does not have
7479 external linkage and must be initialized. ($8.4; $12.1)'' ARM
7481 if (TREE_CODE (decl) == VAR_DECL
7482 && TREE_CODE (type) != REFERENCE_TYPE
7483 && CP_TYPE_CONST_P (type)
7484 && !TYPE_NEEDS_CONSTRUCTING (type)
7485 && !DECL_INITIAL (decl))
7486 cp_error ("uninitialized const `%D'", decl);
7489 /* Verify INIT (the initializer for DECL), and record the
7490 initialization in DECL_INITIAL, if appropriate. Returns a new
7494 check_initializer (decl, init)
7500 if (TREE_CODE (decl) == FIELD_DECL)
7503 type = TREE_TYPE (decl);
7505 /* If `start_decl' didn't like having an initialization, ignore it now. */
7506 if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7509 /* Check the initializer. */
7512 /* Things that are going to be initialized need to have complete
7514 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
7516 if (type == error_mark_node)
7517 /* We will have already complained. */
7519 else if (COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
7521 cp_error ("variable-sized object `%D' may not be initialized", decl);
7524 else if (TREE_CODE (type) == ARRAY_TYPE
7525 && !COMPLETE_TYPE_P (TREE_TYPE (type)))
7527 cp_error ("elements of array `%#D' have incomplete type", decl);
7530 else if (!COMPLETE_TYPE_P (type))
7532 cp_error ("`%D' has incomplete type", decl);
7533 TREE_TYPE (decl) = error_mark_node;
7538 if (TREE_CODE (decl) == CONST_DECL)
7540 my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7542 DECL_INITIAL (decl) = init;
7544 /* This will keep us from needing to worry about our obstacks. */
7545 my_friendly_assert (init != NULL_TREE, 149);
7548 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
7550 if (TREE_STATIC (decl))
7551 make_decl_rtl (decl, NULL_PTR, toplevel_bindings_p ());
7552 grok_reference_init (decl, type, init);
7557 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7559 if (TREE_CODE (type) == ARRAY_TYPE)
7560 init = digest_init (type, init, (tree *) 0);
7561 else if (TREE_CODE (init) == CONSTRUCTOR
7562 && TREE_HAS_CONSTRUCTOR (init))
7564 if (TYPE_NON_AGGREGATE_CLASS (type))
7566 cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7568 init = error_mark_node;
7571 goto dont_use_constructor;
7576 dont_use_constructor:
7577 if (TREE_CODE (init) != TREE_VEC)
7578 init = store_init_value (decl, init);
7582 /* We must hide the initializer so that expand_decl
7583 won't try to do something it does not understand. */
7584 init = obscure_complex_init (decl, init);
7586 else if (DECL_EXTERNAL (decl))
7588 else if (TYPE_P (type)
7589 && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7591 tree core_type = strip_array_types (type);
7593 if (! TYPE_NEEDS_CONSTRUCTING (core_type))
7595 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
7596 cp_error ("structure `%D' with uninitialized const members", decl);
7597 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
7598 cp_error ("structure `%D' with uninitialized reference members",
7602 check_for_uninitialized_const_var (decl);
7604 if (COMPLETE_TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
7605 init = obscure_complex_init (decl, NULL_TREE);
7609 check_for_uninitialized_const_var (decl);
7614 /* If DECL is not a local variable, give it RTL. */
7617 make_rtl_for_nonlocal_decl (decl, init, asmspec)
7620 const char *asmspec;
7625 type = TREE_TYPE (decl);
7626 toplev = toplevel_bindings_p ();
7628 /* Handle non-variables up front. */
7629 if (TREE_CODE (decl) != VAR_DECL)
7631 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7635 /* Set the DECL_ASSEMBLER_NAME for the variable. */
7637 DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7639 if (DECL_VIRTUAL_P (decl))
7640 make_decl_rtl (decl, NULL_PTR, toplev);
7641 else if (TREE_READONLY (decl)
7642 && DECL_INITIAL (decl) != NULL_TREE
7643 && DECL_INITIAL (decl) != error_mark_node
7644 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
7646 DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
7648 if (toplev && ! TREE_PUBLIC (decl))
7650 /* If this is a static const, change its apparent linkage
7651 if it belongs to a #pragma interface. */
7652 if (!interface_unknown)
7654 TREE_PUBLIC (decl) = 1;
7655 DECL_EXTERNAL (decl) = interface_only;
7657 make_decl_rtl (decl, asmspec, toplev);
7660 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7662 else if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
7664 my_friendly_assert (TREE_STATIC (decl), 19990828);
7666 if (init == NULL_TREE
7667 #ifdef DEFAULT_STATIC_DEFS
7668 /* If this code is dead, then users must
7669 explicitly declare static member variables
7670 outside the class def'n as well. */
7671 && TYPE_NEEDS_CONSTRUCTING (type)
7675 DECL_EXTERNAL (decl) = 1;
7676 make_decl_rtl (decl, asmspec, 1);
7679 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7681 else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == NAMESPACE_DECL
7682 || (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl)))
7683 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7686 /* Create RTL for the local static variable DECL. */
7689 make_rtl_for_local_static (decl)
7692 const char *asmspec = NULL;
7694 /* If we inlined this variable, we could see it's declaration
7696 if (DECL_RTL (decl))
7699 if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
7701 /* The only way this situaton can occur is if the
7702 user specified a name for this DECL using the
7703 `attribute' syntax. */
7704 asmspec = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
7705 DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
7708 rest_of_decl_compilation (decl, asmspec, /*top_level=*/0, /*at_end=*/0);
7711 /* The old ARM scoping rules injected variables declared in the
7712 initialization statement of a for-statement into the surrounding
7713 scope. We support this usage, in order to be backward-compatible.
7714 DECL is a just-declared VAR_DECL; if necessary inject its
7715 declaration into the surrounding scope. */
7718 maybe_inject_for_scope_var (decl)
7721 if (current_binding_level->is_for_scope)
7723 struct binding_level *outer
7724 = current_binding_level->level_chain;
7726 /* Check to see if the same name is already bound at the outer
7727 level, either because it was directly declared, or because a
7728 dead for-decl got preserved. In either case, the code would
7729 not have been valid under the ARM scope rules, so clear
7730 is_for_scope for the current_binding_level.
7732 Otherwise, we need to preserve the temp slot for decl to last
7733 into the outer binding level. */
7736 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
7738 if (outer_binding && BINDING_LEVEL (outer_binding) == outer
7739 && (TREE_CODE (BINDING_VALUE (outer_binding))
7741 && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
7743 BINDING_VALUE (outer_binding)
7744 = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
7745 current_binding_level->is_for_scope = 0;
7747 else if (DECL_IN_MEMORY_P (decl))
7748 preserve_temp_slots (DECL_RTL (decl));
7752 /* Generate code to initialize DECL (a local variable). */
7755 initialize_local_var (decl, init, flags)
7760 tree type = TREE_TYPE (decl);
7762 /* If the type is bogus, don't bother initializing the variable. */
7763 if (type == error_mark_node)
7766 if (DECL_SIZE (decl) == NULL_TREE && !TREE_STATIC (decl))
7768 /* If we used it already as memory, it must stay in memory. */
7769 DECL_INITIAL (decl) = NULL_TREE;
7770 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7773 /* Local statics are handled differently from ordinary automatic
7775 if (TREE_STATIC (decl))
7777 if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
7778 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7779 expand_static_init (decl, init);
7783 if (DECL_SIZE (decl) && type != error_mark_node)
7787 /* Compute and store the initial value. */
7788 already_used = TREE_USED (decl) || TREE_USED (type);
7790 if (init || TYPE_NEEDS_CONSTRUCTING (type))
7792 int saved_stmts_are_full_exprs_p;
7794 emit_line_note (DECL_SOURCE_FILE (decl),
7795 DECL_SOURCE_LINE (decl));
7796 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p;
7797 stmts_are_full_exprs_p = 1;
7798 finish_expr_stmt (build_aggr_init (decl, init, flags));
7799 stmts_are_full_exprs_p = saved_stmts_are_full_exprs_p;
7802 /* Set this to 0 so we can tell whether an aggregate which was
7803 initialized was ever used. Don't do this if it has a
7804 destructor, so we don't complain about the 'resource
7805 allocation is initialization' idiom. Now set
7806 attribute((unused)) on types so decls of that type will be
7807 marked used. (see TREE_USED, above.) */
7808 if (TYPE_NEEDS_CONSTRUCTING (type)
7810 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
7811 && DECL_NAME (decl))
7812 TREE_USED (decl) = 0;
7813 else if (already_used)
7814 TREE_USED (decl) = 1;
7818 /* Generate code to destroy DECL (a local variable). */
7821 destroy_local_var (decl)
7824 tree type = TREE_TYPE (decl);
7827 /* Only variables get cleaned up. */
7828 if (TREE_CODE (decl) != VAR_DECL)
7831 /* And only things with destructors need cleaning up. */
7832 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
7835 if (TREE_CODE (decl) == VAR_DECL &&
7836 (DECL_EXTERNAL (decl) || TREE_STATIC (decl)))
7837 /* We don't clean up things that aren't defined in this
7838 translation unit, or that need a static cleanup. The latter
7839 are handled by finish_file. */
7842 /* Compute the cleanup. */
7843 cleanup = maybe_build_cleanup (decl);
7845 /* Record the cleanup required for this declaration. */
7846 if (DECL_SIZE (decl) && TREE_TYPE (decl) != error_mark_node
7848 finish_decl_cleanup (decl, cleanup);
7851 /* Let the back-end know about DECL. */
7854 emit_local_var (decl)
7857 /* Create RTL for this variable. */
7858 if (DECL_RTL (decl))
7859 /* Only a RESULT_DECL should have non-NULL RTL when arriving here.
7860 All other local variables are assigned RTL in this function. */
7861 my_friendly_assert (TREE_CODE (decl) == RESULT_DECL,
7865 if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
7866 /* The user must have specified an assembler name for this
7867 variable. Set that up now. */
7868 rest_of_decl_compilation
7869 (decl, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)),
7870 /*top_level=*/0, /*at_end=*/0);
7875 /* Actually do the initialization. */
7876 if (stmts_are_full_exprs_p)
7877 expand_start_target_temps ();
7879 expand_decl_init (decl);
7881 if (stmts_are_full_exprs_p)
7882 expand_end_target_temps ();
7885 /* Finish processing of a declaration;
7886 install its line number and initial value.
7887 If the length of an array type is not known before,
7888 it must be determined now, from the initial value, or it is an error.
7890 INIT0 holds the value of an initializer that should be allowed to escape
7893 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
7894 if the (init) syntax was used. */
7897 cp_finish_decl (decl, init, asmspec_tree, flags)
7903 tree ttype = NULL_TREE;
7904 const char *asmspec = NULL;
7905 int was_readonly = 0;
7910 error ("assignment (not initialization) in declaration");
7914 /* If a name was specified, get the string. */
7916 asmspec = TREE_STRING_POINTER (asmspec_tree);
7918 if (init && TREE_CODE (init) == NAMESPACE_DECL)
7920 cp_error ("cannot initialize `%D' to namespace `%D'",
7925 if (current_class_type
7926 && CP_DECL_CONTEXT (decl) == current_class_type
7927 && TYPE_BEING_DEFINED (current_class_type)
7928 && (DECL_INITIAL (decl) || init))
7929 DECL_DEFINED_IN_CLASS_P (decl) = 1;
7931 if (TREE_CODE (decl) == VAR_DECL
7932 && DECL_CONTEXT (decl)
7933 && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
7934 && DECL_CONTEXT (decl) != current_namespace
7937 /* Leave the namespace of the object. */
7938 pop_decl_namespace ();
7941 type = TREE_TYPE (decl);
7943 if (type == error_mark_node)
7946 /* Add this declaration to the statement-tree. */
7947 if (building_stmt_tree () && at_function_scope_p ())
7948 add_decl_stmt (decl);
7950 if (TYPE_HAS_MUTABLE_P (type))
7951 TREE_READONLY (decl) = 0;
7953 if (processing_template_decl)
7955 if (init && DECL_INITIAL (decl))
7956 DECL_INITIAL (decl) = init;
7960 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
7961 my_friendly_assert (TREE_CODE (decl) != PARM_DECL, 19990828);
7963 /* Take care of TYPE_DECLs up front. */
7964 if (TREE_CODE (decl) == TYPE_DECL)
7966 if (init && DECL_INITIAL (decl))
7968 /* typedef foo = bar; store the type of bar as the type of foo. */
7969 TREE_TYPE (decl) = type = TREE_TYPE (init);
7970 DECL_INITIAL (decl) = init = NULL_TREE;
7972 if (type != error_mark_node
7973 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
7975 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7976 cp_warning ("shadowing previous type declaration of `%#D'", decl);
7977 set_identifier_type_value (DECL_NAME (decl), type);
7978 CLASSTYPE_GOT_SEMICOLON (type) = 1;
7980 GNU_xref_decl (current_function_decl, decl);
7982 /* If we have installed this as the canonical typedef for this
7983 type, and that type has not been defined yet, delay emitting
7984 the debug information for it, as we will emit it later. */
7985 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7986 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
7987 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7989 rest_of_decl_compilation (decl, NULL_PTR,
7990 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
7994 if (TREE_CODE (decl) != FUNCTION_DECL)
7995 ttype = target_type (type);
7997 if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
7998 && TYPE_NEEDS_CONSTRUCTING (type))
8000 /* Currently, GNU C++ puts constants in text space, making them
8001 impossible to initialize. In the future, one would hope for
8002 an operating system which understood the difference between
8003 initialization and the running of a program. */
8005 TREE_READONLY (decl) = 0;
8008 if (TREE_CODE (decl) == FIELD_DECL && asmspec)
8010 /* This must override the asm specifier which was placed by
8011 grokclassfn. Lay this out fresh. */
8012 DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
8013 DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
8014 make_decl_rtl (decl, asmspec, 0);
8017 /* Deduce size of array from initialization, if not already known. */
8018 maybe_deduce_size_from_array_init (decl, init);
8019 init = check_initializer (decl, init);
8021 GNU_xref_decl (current_function_decl, decl);
8023 if (TREE_CODE (decl) == VAR_DECL)
8024 layout_var_decl (decl);
8026 /* Output the assembler code and/or RTL code for variables and functions,
8027 unless the type is an undefined structure or union.
8028 If not, it will get done when the type is completed. */
8029 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
8030 || TREE_CODE (decl) == RESULT_DECL)
8032 if (TREE_CODE (decl) == VAR_DECL)
8033 maybe_commonize_var (decl);
8035 make_rtl_for_nonlocal_decl (decl, init, asmspec);
8037 if (TREE_CODE (type) == FUNCTION_TYPE
8038 || TREE_CODE (type) == METHOD_TYPE)
8039 abstract_virtuals_error (decl,
8040 strip_array_types (TREE_TYPE (type)));
8042 abstract_virtuals_error (decl, strip_array_types (type));
8044 if (TREE_CODE (decl) == FUNCTION_DECL)
8046 else if (DECL_EXTERNAL (decl)
8047 && ! (DECL_LANG_SPECIFIC (decl)
8048 && DECL_NOT_REALLY_EXTERN (decl)))
8051 DECL_INITIAL (decl) = init;
8053 else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
8055 /* This is a local declaration. */
8056 if (doing_semantic_analysis_p ())
8057 maybe_inject_for_scope_var (decl);
8058 /* Initialize the local variable. But, if we're building a
8059 statement-tree, we'll do the initialization when we
8061 if (processing_template_decl)
8063 if (init || DECL_INITIAL (decl) == error_mark_node)
8064 DECL_INITIAL (decl) = init;
8068 /* If we're not building RTL, then we need to do so
8070 if (!building_stmt_tree ())
8071 emit_local_var (decl);
8072 /* Initialize the variable. */
8073 initialize_local_var (decl, init, flags);
8074 /* Clean up the variable. */
8075 destroy_local_var (decl);
8078 else if (TREE_STATIC (decl) && type != error_mark_node)
8080 /* Cleanups for static variables are handled by `finish_file'. */
8081 if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
8082 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
8083 expand_static_init (decl, init);
8087 /* Undo call to `pushclass' that was done in `start_decl'
8088 due to initialization of qualified member variable.
8089 I.e., Foo::x = 10; */
8091 tree context = CP_DECL_CONTEXT (decl);
8094 && (TREE_CODE (decl) == VAR_DECL
8095 /* We also have a pushclass done that we need to undo here
8096 if we're at top level and declare a method. */
8097 || TREE_CODE (decl) == FUNCTION_DECL)
8098 /* If size hasn't been set, we're still defining it,
8099 and therefore inside the class body; don't pop
8100 the binding level.. */
8101 && COMPLETE_TYPE_P (context)
8102 && context == current_class_type)
8103 pop_nested_class ();
8110 TREE_READONLY (decl) = 1;
8113 /* This is here for a midend callback from c-common.c */
8116 finish_decl (decl, init, asmspec_tree)
8120 cp_finish_decl (decl, init, asmspec_tree, 0);
8123 /* Returns a declaration for a VAR_DECL as if:
8125 extern "C" TYPE NAME;
8127 had been seen. Used to create compiler-generated global
8131 declare_global_var (name, type)
8137 push_to_top_level ();
8138 decl = build_decl (VAR_DECL, name, type);
8139 TREE_PUBLIC (decl) = 1;
8140 DECL_EXTERNAL (decl) = 1;
8141 DECL_ARTIFICIAL (decl) = 1;
8143 cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
8144 pop_from_top_level ();
8149 /* Returns a pointer to the `atexit' function. Note that if
8150 FLAG_USE_CXA_ATEXIT is non-zero, then this will actually be the new
8151 `__cxa_atexit' function specified in the IA64 C++ ABI. */
8165 if (flag_use_cxa_atexit)
8167 /* The declaration for `__cxa_atexit' is:
8169 int __cxa_atexit (void (*)(void *), void *, void *)
8171 We build up the argument types and then then function type
8174 /* First, build the pointer-to-function type for the first
8176 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
8177 fn_type = build_function_type (void_type_node, arg_types);
8178 fn_ptr_type = build_pointer_type (fn_type);
8179 /* Then, build the rest of the argument types. */
8180 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
8181 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
8182 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
8183 /* And the final __cxa_atexit type. */
8184 fn_type = build_function_type (integer_type_node, arg_types);
8185 fn_ptr_type = build_pointer_type (fn_type);
8186 name = "__cxa_atexit";
8190 /* The declaration for `atexit' is:
8192 int atexit (void (*)());
8194 We build up the argument types and then then function type
8196 fn_type = build_function_type (void_type_node, void_list_node);
8197 fn_ptr_type = build_pointer_type (fn_type);
8198 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
8199 /* Build the final atexit type. */
8200 fn_type = build_function_type (integer_type_node, arg_types);
8204 /* Now, build the function declaration. */
8205 push_lang_context (lang_name_c);
8206 atexit_fndecl = build_library_fn_ptr (name, fn_type);
8207 mark_used (atexit_fndecl);
8208 pop_lang_context ();
8209 atexit_node = default_conversion (atexit_fndecl);
8214 /* Returns the __dso_handle VAR_DECL. */
8217 get_dso_handle_node ()
8219 if (dso_handle_node)
8220 return dso_handle_node;
8222 /* Declare the variable. */
8223 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
8226 return dso_handle_node;
8229 /* Begin a new function with internal linkage whose job will be simply
8230 to destroy some particular variable. */
8235 static int counter = 0;
8236 int old_interface_unknown = interface_unknown;
8242 push_to_top_level ();
8244 /* No need to mangle this. */
8245 push_lang_context (lang_name_c);
8247 interface_unknown = 1;
8249 /* Build the parameter-types. */
8250 parmtypes = void_list_node;
8251 /* Functions passed to __cxa_atexit take an additional parameter.
8252 We'll just ignore it. After we implement the new calling
8253 convention for destructors, we can eliminate the use of
8254 additional cleanup functions entirely in the -fnew-abi case. */
8255 if (flag_use_cxa_atexit)
8256 parmtypes = tree_cons (NULL_TREE, ptr_type_node, parmtypes);
8257 /* Build the function type itself. */
8258 fntype = build_function_type (void_type_node, parmtypes);
8259 /* Build the name of the function. */
8260 sprintf (name, "__tcf_%d", counter++);
8261 /* Build the function declaration. */
8262 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
8263 /* It's a function with internal linkage, generated by the
8265 TREE_PUBLIC (fndecl) = 0;
8266 DECL_ARTIFICIAL (fndecl) = 1;
8267 /* Build the parameter. */
8268 if (flag_use_cxa_atexit)
8272 parmdecl = build_decl (PARM_DECL, NULL_TREE, ptr_type_node);
8273 DECL_CONTEXT (parmdecl) = fndecl;
8274 DECL_ARG_TYPE (parmdecl) = ptr_type_node;
8275 TREE_USED (parmdecl) = 1;
8276 DECL_ARGUMENTS (fndecl) = parmdecl;
8280 start_function (/*specs=*/NULL_TREE, fndecl, NULL_TREE, SF_PRE_PARSED);
8283 interface_unknown = old_interface_unknown;
8285 pop_lang_context ();
8287 return current_function_decl;
8290 /* Finish the cleanup function begun by start_cleanup_fn. */
8297 expand_body (finish_function (0));
8299 pop_from_top_level ();
8302 /* Generate code to handle the destruction of DECL, an object with
8303 static storage duration. */
8306 register_dtor_fn (decl)
8314 int saved_flag_access_control;
8316 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
8319 /* Call build_cleanup before we enter the anonymous function so that
8320 any access checks will be done relative to the current scope,
8321 rather than the scope of the anonymous function. */
8322 build_cleanup (decl);
8324 /* Now start the function. */
8325 cleanup = start_cleanup_fn ();
8327 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
8328 to the original function, rather than the anonymous one. That
8329 will make the back-end think that nested functions are in use,
8330 which causes confusion. */
8331 saved_flag_access_control = flag_access_control;
8332 flag_access_control = 0;
8333 fcall = build_cleanup (decl);
8334 flag_access_control = saved_flag_access_control;
8336 /* Create the body of the anonymous function. */
8337 compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
8338 finish_expr_stmt (fcall);
8339 finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
8342 /* Call atexit with the cleanup function. */
8343 mark_addressable (cleanup);
8344 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
8345 if (flag_use_cxa_atexit)
8347 args = tree_cons (NULL_TREE, get_dso_handle_node (), NULL_TREE);
8348 args = tree_cons (NULL_TREE, null_pointer_node, args);
8349 args = tree_cons (NULL_TREE, cleanup, args);
8352 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
8353 finish_expr_stmt (build_function_call (get_atexit_node (), args));
8357 expand_static_init (decl, init)
8361 tree oldstatic = value_member (decl, static_aggregates);
8365 if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
8366 cp_error ("multiple initializations given for `%D'", decl);
8368 else if (! toplevel_bindings_p ())
8370 /* Emit code to perform this initialization but once. */
8377 /* Emit code to perform this initialization but once. This code
8380 static int temp = 0;
8382 // Do initialization.
8384 // Register variable for destruction at end of program.
8387 Note that the `temp' variable is only set to 1 *after* the
8388 initialization is complete. This ensures that an exception,
8389 thrown during the construction, will cause the variable to
8390 reinitialized when we pass through this code again, as per:
8394 If the initialization exits by throwing an exception, the
8395 initialization is not complete, so it will be tried again
8396 the next time control enters the declaration.
8398 In theory, this process should be thread-safe, too; multiple
8399 threads should not be able to initialize the variable more
8400 than once. We don't yet attempt to ensure thread-safety. */
8401 temp = get_temp_name (integer_type_node, 1);
8402 rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
8404 /* Begin the conditional initialization. */
8405 if_stmt = begin_if_stmt ();
8406 finish_if_stmt_cond (build_binary_op (EQ_EXPR, temp,
8409 then_clause = begin_compound_stmt (/*has_no_scope=*/0);
8411 /* Do the initialization itself. */
8412 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
8413 || (init && TREE_CODE (init) == TREE_LIST))
8414 assignment = build_aggr_init (decl, init, 0);
8416 /* The initialization we're doing here is just a bitwise
8418 assignment = build (INIT_EXPR, TREE_TYPE (decl), decl, init);
8420 assignment = NULL_TREE;
8422 /* Once the assignment is complete, set TEMP to 1. Since the
8423 construction of the static object is complete at this point,
8424 we want to make sure TEMP is set to 1 even if a temporary
8425 constructed during the initialization throws an exception
8426 when it is destroyed. So, we combine the initialization and
8427 the assignment to TEMP into a single expression, ensuring
8428 that when we call finish_expr_stmt the cleanups will not be
8429 run until after TEMP is set to 1. */
8430 temp_init = build_modify_expr (temp, NOP_EXPR, integer_one_node);
8433 assignment = tree_cons (NULL_TREE, assignment,
8434 build_tree_list (NULL_TREE,
8436 assignment = build_compound_expr (assignment);
8439 assignment = temp_init;
8440 finish_expr_stmt (assignment);
8442 /* Use atexit to register a function for destroying this static
8444 register_dtor_fn (decl);
8446 finish_compound_stmt (/*has_no_scope=*/0, then_clause);
8447 finish_then_clause (if_stmt);
8451 static_aggregates = tree_cons (init, decl, static_aggregates);
8454 /* Finish the declaration of a catch-parameter. */
8457 start_handler_parms (declspecs, declarator)
8464 decl = grokdeclarator (declarator, declspecs, CATCHPARM,
8466 if (decl == NULL_TREE)
8467 error ("invalid catch parameter");
8476 /* Make TYPE a complete type based on INITIAL_VALUE.
8477 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8478 2 if there was no information (in which case assume 0 if DO_DEFAULT). */
8481 complete_array_type (type, initial_value, do_default)
8482 tree type, initial_value;
8485 register tree maxindex = NULL_TREE;
8490 /* Note MAXINDEX is really the maximum index,
8491 one less than the size. */
8492 if (TREE_CODE (initial_value) == STRING_CST)
8495 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8496 maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8499 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8501 tree elts = CONSTRUCTOR_ELTS (initial_value);
8503 maxindex = ssize_int (-1);
8504 for (; elts; elts = TREE_CHAIN (elts))
8506 if (TREE_PURPOSE (elts))
8507 maxindex = TREE_PURPOSE (elts);
8509 maxindex = size_binop (PLUS_EXPR, maxindex, ssize_int (1));
8511 maxindex = copy_node (maxindex);
8515 /* Make an error message unless that happened already. */
8516 if (initial_value != error_mark_node)
8519 initial_value = NULL_TREE;
8521 /* Prevent further error messages. */
8522 maxindex = build_int_2 (0, 0);
8529 maxindex = build_int_2 (0, 0);
8538 domain = build_index_type (maxindex);
8539 TYPE_DOMAIN (type) = domain;
8541 if (! TREE_TYPE (maxindex))
8542 TREE_TYPE (maxindex) = domain;
8544 itype = TREE_TYPE (initial_value);
8547 if (itype && !TYPE_DOMAIN (itype))
8548 TYPE_DOMAIN (itype) = domain;
8549 /* The type of the main variant should never be used for arrays
8550 of different sizes. It should only ever be completed with the
8551 size of the array. */
8552 if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
8553 TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
8556 /* Lay out the type now that we can get the real answer. */
8563 /* Return zero if something is declared to be a member of type
8564 CTYPE when in the context of CUR_TYPE. STRING is the error
8565 message to print in that case. Otherwise, quietly return 1. */
8568 member_function_or_else (ctype, cur_type, flags)
8569 tree ctype, cur_type;
8570 enum overload_flags flags;
8572 if (ctype && ctype != cur_type)
8574 if (flags == DTOR_FLAG)
8575 error ("destructor for alien class `%s' cannot be a member",
8576 TYPE_NAME_STRING (ctype));
8578 error ("constructor for alien class `%s' cannot be a member",
8579 TYPE_NAME_STRING (ctype));
8585 /* Subroutine of `grokdeclarator'. */
8587 /* Generate errors possibly applicable for a given set of specifiers.
8588 This is for ARM $7.1.2. */
8591 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8594 int virtualp, quals, friendp, raises, inlinep;
8597 cp_error ("`%D' declared as a `virtual' %s", object, type);
8599 cp_error ("`%D' declared as an `inline' %s", object, type);
8601 cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
8604 cp_error_at ("`%D' declared as a friend", object);
8606 cp_error_at ("`%D' declared with an exception specification", object);
8609 /* CTYPE is class type, or null if non-class.
8610 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8612 DECLARATOR is the function's name.
8613 VIRTUALP is truthvalue of whether the function is virtual or not.
8614 FLAGS are to be passed through to `grokclassfn'.
8615 QUALS are qualifiers indicating whether the function is `const'
8617 RAISES is a list of exceptions that this function can raise.
8618 CHECK is 1 if we must find this method in CTYPE, 0 if we should
8619 not look, and -1 if we should not call `grokclassfn' at all.
8621 Returns `NULL_TREE' if something goes wrong, after issuing
8622 applicable error messages. */
8625 grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
8626 raises, check, friendp, publicp, inlinep, funcdef_flag,
8627 template_count, in_namespace)
8630 tree orig_declarator;
8632 enum overload_flags flags;
8634 int check, friendp, publicp, inlinep, funcdef_flag, template_count;
8638 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8639 int has_default_arg = 0;
8643 cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8644 ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8650 type = build_exception_variant (type, raises);
8653 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8654 /* Propagate volatile out from type to decl. */
8655 if (TYPE_VOLATILE (type))
8656 TREE_THIS_VOLATILE (decl) = 1;
8658 /* If this decl has namespace scope, set that up. */
8660 set_decl_namespace (decl, in_namespace, friendp);
8661 else if (publicp && ! ctype)
8662 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8664 /* `main' and builtins have implicit 'C' linkage. */
8665 if ((MAIN_NAME_P (declarator)
8666 || (IDENTIFIER_LENGTH (declarator) > 10
8667 && IDENTIFIER_POINTER (declarator)[0] == '_'
8668 && IDENTIFIER_POINTER (declarator)[1] == '_'
8669 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8670 && current_lang_name == lang_name_cplusplus
8671 && ctype == NULL_TREE
8672 /* NULL_TREE means global namespace. */
8673 && DECL_CONTEXT (decl) == NULL_TREE)
8674 DECL_LANGUAGE (decl) = lang_c;
8676 /* Should probably propagate const out from type to decl I bet (mrs). */
8679 DECL_STATIC_FUNCTION_P (decl) = 1;
8680 DECL_CONTEXT (decl) = ctype;
8684 DECL_CONTEXT (decl) = ctype;
8686 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8688 if (processing_template_decl)
8689 error ("cannot declare `::main' to be a template");
8691 error ("cannot declare `::main' to be inline");
8693 error ("cannot declare `::main' to be static");
8698 /* Members of anonymous types and local classes have no linkage; make
8700 if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
8701 || decl_function_context (TYPE_MAIN_DECL (ctype))))
8706 /* [basic.link]: A name with no linkage (notably, the name of a class
8707 or enumeration declared in a local scope) shall not be used to
8708 declare an entity with linkage.
8710 Only check this for public decls for now. */
8711 t = no_linkage_check (TREE_TYPE (decl));
8714 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8716 if (DECL_EXTERN_C_P (decl))
8717 /* Allow this; it's pretty common in C. */;
8719 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8723 cp_pedwarn ("non-local function `%#D' uses local type `%T'",
8728 TREE_PUBLIC (decl) = publicp;
8731 DECL_INTERFACE_KNOWN (decl) = 1;
8732 DECL_NOT_REALLY_EXTERN (decl) = 1;
8736 DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8738 DECL_EXTERNAL (decl) = 1;
8739 if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8741 cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8742 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8746 if (DECL_OVERLOADED_OPERATOR_P (decl))
8747 grok_op_properties (decl, virtualp, check < 0);
8749 if (ctype && decl_function_context (decl))
8750 DECL_NO_STATIC_CHAIN (decl) = 1;
8752 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8753 if (TREE_PURPOSE (t)
8754 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8756 has_default_arg = 1;
8761 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8765 ("defining explicit specialization `%D' in friend declaration",
8769 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8771 /* Something like `template <class T> friend void f<T>()'. */
8772 cp_error ("invalid use of template-id `%D' in declaration of primary template",
8778 /* A friend declaration of the form friend void f<>(). Record
8779 the information in the TEMPLATE_ID_EXPR. */
8780 SET_DECL_IMPLICIT_INSTANTIATION (decl);
8781 DECL_TEMPLATE_INFO (decl)
8782 = tree_cons (TREE_OPERAND (orig_declarator, 0),
8783 TREE_OPERAND (orig_declarator, 1),
8786 if (has_default_arg)
8788 cp_error ("default arguments are not allowed in declaration of friend template specialization `%D'",
8795 cp_error ("`inline' is not allowed in declaration of friend template specialization `%D'",
8802 if (has_default_arg)
8803 add_defarg_fn (decl);
8805 /* Plain overloading: will not be grok'd by grokclassfn. */
8806 if (! ctype && ! processing_template_decl
8807 && !DECL_EXTERN_C_P (decl)
8808 && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
8809 set_mangled_name_for_decl (decl);
8812 /* Make the init_value nonzero so pushdecl knows this is not
8813 tentative. error_mark_node is replaced later with the BLOCK. */
8814 DECL_INITIAL (decl) = error_mark_node;
8816 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
8817 TREE_NOTHROW (decl) = 1;
8819 /* Caller will do the rest of this. */
8823 if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
8824 DECL_CONSTRUCTOR_P (decl) = 1;
8826 /* Function gets the ugly name, field gets the nice one. This call
8827 may change the type of the function (because of default
8829 if (ctype != NULL_TREE)
8830 grokclassfn (ctype, decl, flags, quals);
8832 decl = check_explicit_specialization (orig_declarator, decl,
8834 2 * (funcdef_flag != 0) +
8835 4 * (friendp != 0));
8836 if (decl == error_mark_node)
8839 if (ctype != NULL_TREE
8840 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8845 old_decl = check_classfn (ctype, decl);
8847 if (old_decl && TREE_CODE (old_decl) == TEMPLATE_DECL)
8848 /* Because grokfndecl is always supposed to return a
8849 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
8850 here. We depend on our callers to figure out that its
8851 really a template that's being returned. */
8852 old_decl = DECL_TEMPLATE_RESULT (old_decl);
8854 if (old_decl && DECL_STATIC_FUNCTION_P (old_decl)
8855 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8857 /* Remove the `this' parm added by grokclassfn.
8858 XXX Isn't this done in start_function, too? */
8859 revert_static_member_fn (decl);
8860 last_function_parms = TREE_CHAIN (last_function_parms);
8862 if (old_decl && DECL_ARTIFICIAL (old_decl))
8863 cp_error ("definition of implicitly-declared `%D'", old_decl);
8867 /* Since we've smashed OLD_DECL to its
8868 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
8869 if (TREE_CODE (decl) == TEMPLATE_DECL)
8870 decl = DECL_TEMPLATE_RESULT (decl);
8872 /* Attempt to merge the declarations. This can fail, in
8873 the case of some illegal specialization declarations. */
8874 if (!duplicate_decls (decl, old_decl))
8875 cp_error ("no `%#D' member function declared in class `%T'",
8881 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
8884 if (ctype == NULL_TREE || check)
8889 DECL_VIRTUAL_P (decl) = 1;
8890 if (DECL_VINDEX (decl) == NULL_TREE)
8891 DECL_VINDEX (decl) = error_mark_node;
8892 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
8899 grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
8902 RID_BIT_TYPE *specbits_in;
8908 RID_BIT_TYPE specbits;
8910 specbits = *specbits_in;
8912 if (TREE_CODE (type) == OFFSET_TYPE)
8914 /* If you declare a static member so that it
8915 can be initialized, the code will reach here. */
8916 tree basetype = TYPE_OFFSET_BASETYPE (type);
8917 type = TREE_TYPE (type);
8918 decl = build_lang_decl (VAR_DECL, declarator, type);
8919 DECL_CONTEXT (decl) = basetype;
8920 DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
8927 context = in_namespace;
8928 else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
8929 context = current_namespace;
8931 context = NULL_TREE;
8933 if (processing_template_decl && context)
8934 /* For global variables, declared in a template, we need the
8936 decl = build_lang_decl (VAR_DECL, declarator, type);
8938 decl = build_decl (VAR_DECL, declarator, type);
8941 set_decl_namespace (decl, context, 0);
8943 context = DECL_CONTEXT (decl);
8944 if (declarator && context && current_lang_name != lang_name_c)
8945 DECL_ASSEMBLER_NAME (decl) = build_static_name (context, declarator);
8949 set_decl_namespace (decl, in_namespace, 0);
8951 if (RIDBIT_SETP (RID_EXTERN, specbits))
8953 DECL_THIS_EXTERN (decl) = 1;
8954 DECL_EXTERNAL (decl) = !initialized;
8957 /* In class context, static means one per class,
8958 public access, and static storage. */
8959 if (DECL_CLASS_SCOPE_P (decl))
8961 TREE_PUBLIC (decl) = 1;
8962 TREE_STATIC (decl) = 1;
8963 DECL_EXTERNAL (decl) = 0;
8965 /* At top level, either `static' or no s.c. makes a definition
8966 (perhaps tentative), and absence of `static' makes it public. */
8967 else if (toplevel_bindings_p ())
8969 TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
8970 && (DECL_THIS_EXTERN (decl) || ! constp));
8971 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8973 /* Not at top level, only `static' makes a static definition. */
8976 TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
8977 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8980 if (TREE_PUBLIC (decl))
8982 /* [basic.link]: A name with no linkage (notably, the name of a class
8983 or enumeration declared in a local scope) shall not be used to
8984 declare an entity with linkage.
8986 Only check this for public decls for now. */
8987 tree t = no_linkage_check (TREE_TYPE (decl));
8990 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8991 /* Ignore for now; `enum { foo } e' is pretty common. */;
8993 cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
9001 /* Create and return a canonical pointer to member function type, for
9002 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
9005 build_ptrmemfunc_type (type)
9011 tree unqualified_variant = NULL_TREE;
9013 /* If a canonical type already exists for this type, use it. We use
9014 this method instead of type_hash_canon, because it only does a
9015 simple equality check on the list of field members. */
9017 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
9020 /* Make sure that we always have the unqualified pointer-to-member
9022 if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
9024 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9026 t = make_aggr_type (RECORD_TYPE);
9027 /* Let the front-end know this is a pointer to member function... */
9028 TYPE_PTRMEMFUNC_FLAG (t) = 1;
9029 /* ... and not really an aggregate. */
9030 SET_IS_AGGR_TYPE (t, 0);
9034 u = make_aggr_type (UNION_TYPE);
9035 SET_IS_AGGR_TYPE (u, 0);
9036 fields[0] = build_decl (FIELD_DECL, pfn_identifier, type);
9037 fields[1] = build_decl (FIELD_DECL, delta2_identifier,
9039 finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
9040 TYPE_NAME (u) = NULL_TREE;
9042 fields[0] = build_decl (FIELD_DECL, delta_identifier,
9044 fields[1] = build_decl (FIELD_DECL, index_identifier,
9046 fields[2] = build_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
9047 finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
9051 fields[0] = build_decl (FIELD_DECL, pfn_identifier, type);
9052 fields[1] = build_decl (FIELD_DECL, delta_identifier,
9054 finish_builtin_type (t, "__ptrmemfunc_type", fields, 1, ptr_type_node);
9057 /* Zap out the name so that the back-end will give us the debugging
9058 information for this anonymous RECORD_TYPE. */
9059 TYPE_NAME (t) = NULL_TREE;
9061 /* If this is not the unqualified form of this pointer-to-member
9062 type, set the TYPE_MAIN_VARIANT for this type to be the
9063 unqualified type. Since they are actually RECORD_TYPEs that are
9064 not variants of each other, we must do this manually. */
9065 if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
9067 t = build_qualified_type (t, CP_TYPE_QUALS (type));
9068 TYPE_MAIN_VARIANT (t) = unqualified_variant;
9069 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
9070 TYPE_NEXT_VARIANT (unqualified_variant) = t;
9073 /* Cache this pointer-to-member type so that we can find it again
9075 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
9077 /* Seems to be wanted. */
9078 CLASSTYPE_GOT_SEMICOLON (t) = 1;
9083 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9084 Check to see that the definition is valid. Issue appropriate error
9085 messages. Return 1 if the definition is particularly bad, or 0
9089 check_static_variable_definition (decl, type)
9093 /* Motion 10 at San Diego: If a static const integral data member is
9094 initialized with an integral constant expression, the initializer
9095 may appear either in the declaration (within the class), or in
9096 the definition, but not both. If it appears in the class, the
9097 member is a member constant. The file-scope definition is always
9099 if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
9101 cp_error ("invalid in-class initialization of static data member of non-integral type `%T'",
9103 /* If we just return the declaration, crashes will sometimes
9104 occur. We therefore return void_type_node, as if this was a
9105 friend declaration, to cause callers to completely ignore
9106 this declaration. */
9109 else if (!CP_TYPE_CONST_P (type))
9110 cp_error ("ISO C++ forbids in-class initialization of non-const static member `%D'",
9112 else if (pedantic && !INTEGRAL_TYPE_P (type))
9113 cp_pedwarn ("ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
9118 /* Given the SIZE (i.e., number of elements) in an array, compute an
9119 appropriate index type for the array. If non-NULL, NAME is the
9120 name of the thing being declared. */
9123 compute_array_index_type (name, size)
9129 /* The size might be the result of a cast. */
9130 STRIP_TYPE_NOPS (size);
9132 /* It might be a const variable or enumeration constant. */
9133 size = decl_constant_value (size);
9135 /* If this involves a template parameter, it will be a constant at
9136 instantiation time, but we don't know what the value is yet.
9137 Even if no template parameters are involved, we may an expression
9138 that is not a constant; we don't even simplify `1 + 2' when
9139 processing a template. */
9140 if (processing_template_decl)
9142 /* Resolve a qualified reference to an enumerator or static
9143 const data member of ours. */
9144 if (TREE_CODE (size) == SCOPE_REF
9145 && TREE_OPERAND (size, 0) == current_class_type)
9147 tree t = lookup_field (current_class_type,
9148 TREE_OPERAND (size, 1), 0, 0);
9153 return build_index_type (build_min (MINUS_EXPR, sizetype,
9154 size, integer_one_node));
9157 /* The array bound must be an integer type. */
9158 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
9159 && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
9160 && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
9163 cp_error ("size of array `%D' has non-integer type", name);
9165 cp_error ("size of array has non-integer type");
9166 size = integer_one_node;
9169 /* Normally, the array-bound will be a constant. */
9170 if (TREE_CONSTANT (size))
9172 /* Check to see if the array bound overflowed. Make that an
9173 error, no matter how generous we're being. */
9174 int old_flag_pedantic_errors = flag_pedantic_errors;
9175 int old_pedantic = pedantic;
9176 pedantic = flag_pedantic_errors = 1;
9177 constant_expression_warning (size);
9178 pedantic = old_pedantic;
9179 flag_pedantic_errors = old_flag_pedantic_errors;
9181 /* An array must have a positive number of elements. */
9182 if (INT_CST_LT (size, integer_zero_node))
9185 cp_error ("size of array `%D' is negative", name);
9187 cp_error ("size of array is negative");
9188 size = integer_one_node;
9190 /* Except that an extension we allow zero-sized arrays. We
9191 always allow them in system headers because glibc uses
9193 else if (integer_zerop (size) && pedantic && !in_system_header)
9196 cp_pedwarn ("ISO C++ forbids zero-size array `%D'", name);
9198 cp_pedwarn ("ISO C++ forbids zero-size array");
9202 /* Compute the index of the largest element in the array. It is
9203 one less than the number of elements in the array. */
9205 = fold (build_binary_op (MINUS_EXPR,
9206 cp_convert (ssizetype, size),
9207 cp_convert (ssizetype,
9208 integer_one_node)));
9210 /* Check for variable-sized arrays. We allow such things as an
9211 extension, even though they are not allowed in ANSI/ISO C++. */
9212 if (!TREE_CONSTANT (itype))
9217 cp_pedwarn ("ISO C++ forbids variable-size array `%D'",
9220 cp_pedwarn ("ISO C++ forbids variable-size array");
9223 /* Create a variable-sized array index type. */
9224 itype = variable_size (itype);
9226 /* Make sure that there was no overflow when creating to a signed
9227 index type. (For example, on a 32-bit machine, an array with
9228 size 2^32 - 1 is too big.) */
9229 else if (TREE_OVERFLOW (itype))
9231 error ("overflow in array dimension");
9232 TREE_OVERFLOW (itype) = 0;
9235 /* Create and return the appropriate index type. */
9236 return build_index_type (itype);
9239 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
9240 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
9244 create_array_type_for_decl (name, type, size)
9249 tree itype = NULL_TREE;
9250 const char* error_msg;
9252 /* If things have already gone awry, bail now. */
9253 if (type == error_mark_node || size == error_mark_node)
9254 return error_mark_node;
9256 /* Assume that everything will go OK. */
9259 /* There are some types which cannot be array elements. */
9260 switch (TREE_CODE (type))
9263 error_msg = "array of void";
9267 error_msg = "array of functions";
9270 case REFERENCE_TYPE:
9271 error_msg = "array of references";
9275 error_msg = "array of data members";
9279 error_msg = "array of function members";
9286 /* If something went wrong, issue an error-message and return. */
9290 cp_error ("declaration of `%D' as %s", name, error_msg);
9292 cp_error ("creating %s", error_msg);
9294 return error_mark_node;
9299 The constant expressions that specify the bounds of the arrays
9300 can be omitted only for the first member of the sequence. */
9301 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9303 cp_error ("declaration of `%D' as multidimensional array must have bounds for all dimensions except the first",
9306 return error_mark_node;
9309 /* Figure out the index type for the array. */
9311 itype = compute_array_index_type (name, size);
9313 return build_cplus_array_type (type, itype);
9316 /* Check that it's OK to declare a function with the indicated TYPE.
9317 SFK indicates the kind of special function (if any) that this
9318 function is. CTYPE is the class of which this function is a
9319 member. OPTYPE is the type given in a conversion operator
9320 declaration. Returns the actual return type of the function; that
9321 may be different than TYPE if an error occurs, or for certain
9322 special functions. */
9325 check_special_function_return_type (sfk, type, ctype, optype)
9326 special_function_kind sfk;
9333 case sfk_constructor:
9335 cp_error ("return type specification for constructor invalid");
9337 /* In the old ABI, we return `this'; in the new ABI we don't
9339 type = flag_new_abi ? void_type_node : build_pointer_type (ctype);
9342 case sfk_destructor:
9344 cp_error ("return type specification for destructor invalid");
9345 type = void_type_node;
9348 case sfk_conversion:
9349 if (type && !same_type_p (type, optype))
9350 cp_error ("operator `%T' declared to return `%T'", optype, type);
9352 cp_pedwarn ("return type specified for `operator %T'", optype);
9357 my_friendly_abort (20000408);
9364 /* Given declspecs and a declarator,
9365 determine the name and type of the object declared
9366 and construct a ..._DECL node for it.
9367 (In one case we can return a ..._TYPE node instead.
9368 For invalid input we sometimes return 0.)
9370 DECLSPECS is a chain of tree_list nodes whose value fields
9371 are the storage classes and type specifiers.
9373 DECL_CONTEXT says which syntactic context this declaration is in:
9374 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
9375 FUNCDEF for a function definition. Like NORMAL but a few different
9376 error messages in each case. Return value may be zero meaning
9377 this definition is too screwy to try to parse.
9378 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
9379 handle member functions (which have FIELD context).
9380 Return value may be zero meaning this definition is too screwy to
9382 PARM for a parameter declaration (either within a function prototype
9383 or before a function body). Make a PARM_DECL, or return void_type_node.
9384 CATCHPARM for a parameter declaration before a catch clause.
9385 TYPENAME if for a typename (in a cast or sizeof).
9386 Don't make a DECL node; just return the ..._TYPE node.
9387 FIELD for a struct or union field; make a FIELD_DECL.
9388 BITFIELD for a field with specified width.
9389 INITIALIZED is 1 if the decl has an initializer.
9391 ATTRLIST is a TREE_LIST node with prefix attributes in TREE_VALUE and
9392 normal attributes in TREE_PURPOSE, or NULL_TREE.
9394 In the TYPENAME case, DECLARATOR is really an abstract declarator.
9395 It may also be so in the PARM case, for a prototype where the
9396 argument type is specified but not the name.
9398 This function is where the complicated C meanings of `static'
9399 and `extern' are interpreted.
9401 For C++, if there is any monkey business to do, the function which
9402 calls this one must do it, i.e., prepending instance variables,
9403 renaming overloaded function names, etc.
9405 Note that for this C++, it is an error to define a method within a class
9406 which does not belong to that class.
9408 Except in the case where SCOPE_REFs are implicitly known (such as
9409 methods within a class being redundantly qualified),
9410 declarations which involve SCOPE_REFs are returned as SCOPE_REFs
9411 (class_name::decl_name). The caller must also deal with this.
9413 If a constructor or destructor is seen, and the context is FIELD,
9414 then the type gains the attribute TREE_HAS_x. If such a declaration
9415 is erroneous, NULL_TREE is returned.
9417 QUALS is used only for FUNCDEF and MEMFUNCDEF cases. For a member
9418 function, these are the qualifiers to give to the `this' pointer. We
9419 apply TYPE_QUAL_RESTRICT to the this ptr, not the object.
9421 May return void_type_node if the declarator turned out to be a friend.
9422 See grokfield for details. */
9425 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
9428 enum decl_context decl_context;
9432 RID_BIT_TYPE specbits;
9435 tree type = NULL_TREE;
9441 int virtualp, explicitp, friendp, inlinep, staticp;
9442 int explicit_int = 0;
9443 int explicit_char = 0;
9444 int defaulted_int = 0;
9445 tree typedef_decl = NULL_TREE;
9447 tree typedef_type = NULL_TREE;
9448 int funcdef_flag = 0;
9449 enum tree_code innermost_code = ERROR_MARK;
9452 /* See the code below that used this. */
9453 tree decl_machine_attr = NULL_TREE;
9455 /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
9456 All FIELD_DECLs we build here have `init' put into their DECL_INITIAL. */
9457 tree init = NULL_TREE;
9459 /* Keep track of what sort of function is being processed
9460 so that we can warn about default return values, or explicit
9461 return values which do not match prescribed defaults. */
9462 special_function_kind sfk = sfk_none;
9464 tree dname = NULL_TREE;
9465 tree ctype = current_class_type;
9466 tree ctor_return_type = NULL_TREE;
9467 enum overload_flags flags = NO_SPECIAL;
9468 tree quals = NULL_TREE;
9469 tree raises = NULL_TREE;
9470 int template_count = 0;
9471 tree in_namespace = NULL_TREE;
9475 RIDBIT_RESET_ALL (specbits);
9476 if (decl_context == FUNCDEF)
9477 funcdef_flag = 1, decl_context = NORMAL;
9478 else if (decl_context == MEMFUNCDEF)
9479 funcdef_flag = -1, decl_context = FIELD;
9480 else if (decl_context == BITFIELD)
9481 bitfield = 1, decl_context = FIELD;
9483 /* Look inside a declarator for the name being declared
9484 and get it as a string, for an error message. */
9486 tree *next = &declarator;
9490 while (next && *next)
9493 switch (TREE_CODE (decl))
9496 /* For attributes. */
9497 next = &TREE_VALUE (decl);
9502 next = &TREE_OPERAND (decl, 0);
9505 case BIT_NOT_EXPR: /* For C++ destructors! */
9507 tree name = TREE_OPERAND (decl, 0);
9508 tree rename = NULL_TREE;
9510 my_friendly_assert (flags == NO_SPECIAL, 152);
9512 sfk = sfk_destructor;
9513 if (TREE_CODE (name) == TYPE_DECL)
9514 TREE_OPERAND (decl, 0) = name = constructor_name (name);
9515 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
9516 if (ctype == NULL_TREE)
9518 if (current_class_type == NULL_TREE)
9520 error ("destructors must be member functions");
9525 tree t = constructor_name (current_class_name);
9532 tree t = constructor_name (ctype);
9539 cp_error ("destructor `%T' must match class name `%T'",
9541 TREE_OPERAND (decl, 0) = rename;
9547 case ADDR_EXPR: /* C++ reference declaration */
9552 innermost_code = TREE_CODE (decl);
9553 next = &TREE_OPERAND (decl, 0);
9557 if (parmlist_is_exprlist (CALL_DECLARATOR_PARMS (decl)))
9559 /* This is actually a variable declaration using
9560 constructor syntax. We need to call start_decl and
9561 cp_finish_decl so we can get the variable
9564 tree attributes, prefix_attributes;
9566 *next = TREE_OPERAND (decl, 0);
9567 init = CALL_DECLARATOR_PARMS (decl);
9571 attributes = TREE_PURPOSE (attrlist);
9572 prefix_attributes = TREE_VALUE (attrlist);
9576 attributes = NULL_TREE;
9577 prefix_attributes = NULL_TREE;
9580 decl = start_decl (declarator, declspecs, 1,
9581 attributes, prefix_attributes);
9582 decl_type_access_control (decl);
9585 /* Look for __unused__ attribute */
9586 if (TREE_USED (TREE_TYPE (decl)))
9587 TREE_USED (decl) = 1;
9588 finish_decl (decl, init, NULL_TREE);
9591 cp_error ("invalid declarator");
9594 innermost_code = TREE_CODE (decl);
9595 if (decl_context == FIELD && ctype == NULL_TREE)
9596 ctype = current_class_type;
9598 && TREE_OPERAND (decl, 0)
9599 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
9600 && ((DECL_NAME (TREE_OPERAND (decl, 0))
9601 == constructor_name_full (ctype))
9602 || (DECL_NAME (TREE_OPERAND (decl, 0))
9603 == constructor_name (ctype)))))
9604 TREE_OPERAND (decl, 0) = constructor_name (ctype);
9605 next = &TREE_OPERAND (decl, 0);
9607 if (ctype != NULL_TREE
9608 && decl != NULL_TREE && flags != DTOR_FLAG
9609 && decl == constructor_name (ctype))
9611 sfk = sfk_constructor;
9612 ctor_return_type = ctype;
9617 case TEMPLATE_ID_EXPR:
9619 tree fns = TREE_OPERAND (decl, 0);
9621 if (TREE_CODE (fns) == LOOKUP_EXPR)
9622 fns = TREE_OPERAND (fns, 0);
9625 if (TREE_CODE (dname) == COMPONENT_REF)
9626 dname = TREE_OPERAND (dname, 1);
9627 if (TREE_CODE (dname) != IDENTIFIER_NODE)
9629 my_friendly_assert (is_overloaded_fn (dname),
9631 dname = DECL_NAME (get_first_fn (dname));
9636 case IDENTIFIER_NODE:
9637 if (TREE_CODE (decl) == IDENTIFIER_NODE)
9644 cp_error ("declarator-id missing; using reserved word `%D'",
9646 name = IDENTIFIER_POINTER (dname);
9648 else if (!IDENTIFIER_OPNAME_P (dname))
9649 name = IDENTIFIER_POINTER (dname);
9652 if (IDENTIFIER_TYPENAME_P (dname))
9654 my_friendly_assert (flags == NO_SPECIAL, 154);
9655 flags = TYPENAME_FLAG;
9656 ctor_return_type = TREE_TYPE (dname);
9657 sfk = sfk_conversion;
9659 name = operator_name_string (dname);
9666 /* Perform error checking, and decide on a ctype. */
9667 tree cname = TREE_OPERAND (decl, 0);
9668 if (cname == NULL_TREE)
9670 else if (TREE_CODE (cname) == NAMESPACE_DECL)
9673 in_namespace = TREE_OPERAND (decl, 0);
9674 TREE_OPERAND (decl, 0) = NULL_TREE;
9676 else if (! is_aggr_type (cname, 1))
9677 TREE_OPERAND (decl, 0) = NULL_TREE;
9678 /* Must test TREE_OPERAND (decl, 1), in case user gives
9679 us `typedef (class::memfunc)(int); memfunc *memfuncptr;' */
9680 else if (TREE_OPERAND (decl, 1)
9681 && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9683 else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
9684 || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
9686 cp_error ("`%T::%D' is not a valid declarator", cname,
9687 TREE_OPERAND (decl, 1));
9688 cp_error (" perhaps you want `typename %T::%D' to make it a type",
9689 cname, TREE_OPERAND (decl, 1));
9690 return void_type_node;
9692 else if (ctype == NULL_TREE)
9694 else if (TREE_COMPLEXITY (decl) == current_class_depth)
9695 TREE_OPERAND (decl, 0) = ctype;
9698 if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
9700 cp_error ("type `%T' is not derived from type `%T'",
9702 TREE_OPERAND (decl, 0) = NULL_TREE;
9708 if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
9709 && ((DECL_NAME (TREE_OPERAND (decl, 1))
9710 == constructor_name_full (ctype))
9711 || (DECL_NAME (TREE_OPERAND (decl, 1))
9712 == constructor_name (ctype))))
9713 TREE_OPERAND (decl, 1) = constructor_name (ctype);
9714 next = &TREE_OPERAND (decl, 1);
9718 if (TREE_CODE (decl) == IDENTIFIER_NODE
9719 && constructor_name (ctype) == decl)
9721 sfk = sfk_constructor;
9722 ctor_return_type = ctype;
9724 else if (TREE_CODE (decl) == BIT_NOT_EXPR
9725 && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9726 && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9727 || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9729 sfk = sfk_destructor;
9730 ctor_return_type = ctype;
9732 TREE_OPERAND (decl, 0) = constructor_name (ctype);
9733 next = &TREE_OPERAND (decl, 0);
9744 /* Parse error puts this typespec where
9745 a declarator should go. */
9746 cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
9747 if (TREE_TYPE (decl) == current_class_type)
9748 cp_error (" perhaps you want `%T' for a constructor",
9749 current_class_name);
9750 dname = DECL_NAME (decl);
9751 name = IDENTIFIER_POINTER (dname);
9753 /* Avoid giving two errors for this. */
9754 IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9756 declspecs = tree_cons (NULL_TREE, integer_type_node, declspecs);
9762 cp_compiler_error ("`%D' as declarator", decl);
9763 return 0; /* We used to do a 155 abort here. */
9768 /* A function definition's declarator must have the form of
9769 a function declarator. */
9771 if (funcdef_flag && innermost_code != CALL_EXPR)
9774 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9775 && innermost_code != CALL_EXPR
9776 && ! (ctype && declspecs == NULL_TREE))
9778 cp_error ("declaration of `%D' as non-function", dname);
9779 return void_type_node;
9782 /* Anything declared one level down from the top level
9783 must be one of the parameters of a function
9784 (because the body is at least two levels down). */
9786 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9787 by not allowing C++ class definitions to specify their parameters
9788 with xdecls (must be spec.d in the parmlist).
9790 Since we now wait to push a class scope until we are sure that
9791 we are in a legitimate method context, we must set oldcname
9792 explicitly (since current_class_name is not yet alive).
9794 We also want to avoid calling this a PARM if it is in a namespace. */
9796 if (decl_context == NORMAL && !toplevel_bindings_p ())
9798 struct binding_level *b = current_binding_level;
9799 current_binding_level = b->level_chain;
9800 if (current_binding_level != 0 && toplevel_bindings_p ())
9801 decl_context = PARM;
9802 current_binding_level = b;
9806 name = decl_context == PARM ? "parameter" : "type name";
9808 /* Look through the decl specs and record which ones appear.
9809 Some typespecs are defined as built-in typenames.
9810 Others, the ones that are modifiers of other types,
9811 are represented by bits in SPECBITS: set the bits for
9812 the modifiers that appear. Storage class keywords are also in SPECBITS.
9814 If there is a typedef name or a type, store the type in TYPE.
9815 This includes builtin typedefs such as `int'.
9817 Set EXPLICIT_INT if the type is `int' or `char' and did not
9818 come from a user typedef.
9820 Set LONGLONG if `long' is mentioned twice.
9822 For C++, constructors and destructors have their own fast treatment. */
9824 for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9829 /* Certain parse errors slip through. For example,
9830 `int class;' is not caught by the parser. Try
9831 weakly to recover here. */
9832 if (TREE_CODE (spec) != TREE_LIST)
9835 id = TREE_VALUE (spec);
9837 if (TREE_CODE (id) == IDENTIFIER_NODE)
9839 if (id == ridpointers[(int) RID_INT]
9840 || id == ridpointers[(int) RID_CHAR]
9841 || id == ridpointers[(int) RID_BOOL]
9842 || id == ridpointers[(int) RID_WCHAR])
9846 if (id == ridpointers[(int) RID_BOOL])
9847 error ("`bool' is now a keyword");
9849 cp_error ("extraneous `%T' ignored", id);
9853 if (id == ridpointers[(int) RID_INT])
9855 else if (id == ridpointers[(int) RID_CHAR])
9857 type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
9861 /* C++ aggregate types. */
9862 if (IDENTIFIER_HAS_TYPE_VALUE (id))
9865 cp_error ("multiple declarations `%T' and `%T'", type, id);
9867 type = IDENTIFIER_TYPE_VALUE (id);
9871 for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
9873 if (ridpointers[i] == id)
9875 if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
9877 if (pedantic && ! in_system_header && warn_long_long)
9878 pedwarn ("ISO C++ does not support `long long'");
9880 error ("`long long long' is too long for GCC");
9884 else if (RIDBIT_SETP (i, specbits))
9885 pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
9886 RIDBIT_SET (i, specbits);
9891 /* C++ aggregate types. */
9892 else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
9895 cp_error ("multiple declarations `%T' and `%T'", type,
9899 type = TREE_TYPE (id);
9900 TREE_VALUE (spec) = type;
9905 error ("two or more data types in declaration of `%s'", name);
9906 else if (TREE_CODE (id) == IDENTIFIER_NODE)
9908 register tree t = lookup_name (id, 1);
9909 if (!t || TREE_CODE (t) != TYPE_DECL)
9910 error ("`%s' fails to be a typedef or built in type",
9911 IDENTIFIER_POINTER (id));
9914 type = TREE_TYPE (t);
9916 /* See the code below that used this. */
9917 decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
9922 else if (id != error_mark_node)
9923 /* Can't change CLASS nodes into RECORD nodes here! */
9929 typedef_type = type;
9931 /* No type at all: default to `int', and set DEFAULTED_INT
9932 because it was not a user-defined typedef. */
9934 if (type == NULL_TREE
9935 && (RIDBIT_SETP (RID_SIGNED, specbits)
9936 || RIDBIT_SETP (RID_UNSIGNED, specbits)
9937 || RIDBIT_SETP (RID_LONG, specbits)
9938 || RIDBIT_SETP (RID_SHORT, specbits)))
9940 /* These imply 'int'. */
9941 type = integer_type_node;
9945 if (sfk != sfk_none)
9946 type = check_special_function_return_type (sfk, type,
9949 else if (type == NULL_TREE)
9955 /* We handle `main' specially here, because 'main () { }' is so
9956 common. With no options, it is allowed. With -Wreturn-type,
9957 it is a warning. It is only an error with -pedantic-errors. */
9958 is_main = (funcdef_flag
9959 && MAIN_NAME_P (dname)
9960 && ctype == NULL_TREE
9961 && in_namespace == NULL_TREE
9962 && current_namespace == global_namespace);
9964 if (in_system_header || flag_ms_extensions)
9965 /* Allow it, sigh. */;
9966 else if (pedantic || ! is_main)
9967 cp_pedwarn ("ISO C++ forbids declaration of `%s' with no type",
9969 else if (warn_return_type)
9970 cp_warning ("ISO C++ forbids declaration of `%s' with no type",
9973 type = integer_type_node;
9978 /* Now process the modifiers that were specified
9979 and check for invalid combinations. */
9981 /* Long double is a special combination. */
9983 if (RIDBIT_SETP (RID_LONG, specbits)
9984 && TYPE_MAIN_VARIANT (type) == double_type_node)
9986 RIDBIT_RESET (RID_LONG, specbits);
9987 type = build_qualified_type (long_double_type_node,
9988 CP_TYPE_QUALS (type));
9991 /* Check all other uses of type modifiers. */
9993 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9994 || RIDBIT_SETP (RID_SIGNED, specbits)
9995 || RIDBIT_SETP (RID_LONG, specbits)
9996 || RIDBIT_SETP (RID_SHORT, specbits))
10000 if (TREE_CODE (type) == REAL_TYPE)
10001 error ("short, signed or unsigned invalid for `%s'", name);
10002 else if (TREE_CODE (type) != INTEGER_TYPE)
10003 error ("long, short, signed or unsigned invalid for `%s'", name);
10004 else if (RIDBIT_SETP (RID_LONG, specbits)
10005 && RIDBIT_SETP (RID_SHORT, specbits))
10006 error ("long and short specified together for `%s'", name);
10007 else if ((RIDBIT_SETP (RID_LONG, specbits)
10008 || RIDBIT_SETP (RID_SHORT, specbits))
10010 error ("long or short specified with char for `%s'", name);
10011 else if ((RIDBIT_SETP (RID_LONG, specbits)
10012 || RIDBIT_SETP (RID_SHORT, specbits))
10013 && TREE_CODE (type) == REAL_TYPE)
10014 error ("long or short specified with floating type for `%s'", name);
10015 else if (RIDBIT_SETP (RID_SIGNED, specbits)
10016 && RIDBIT_SETP (RID_UNSIGNED, specbits))
10017 error ("signed and unsigned given together for `%s'", name);
10021 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
10023 pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
10025 if (flag_pedantic_errors)
10030 /* Discard the type modifiers if they are invalid. */
10033 RIDBIT_RESET (RID_UNSIGNED, specbits);
10034 RIDBIT_RESET (RID_SIGNED, specbits);
10035 RIDBIT_RESET (RID_LONG, specbits);
10036 RIDBIT_RESET (RID_SHORT, specbits);
10041 if (RIDBIT_SETP (RID_COMPLEX, specbits)
10042 && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10044 error ("complex invalid for `%s'", name);
10045 RIDBIT_RESET (RID_COMPLEX, specbits);
10048 /* Decide whether an integer type is signed or not.
10049 Optionally treat bitfields as signed by default. */
10050 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
10053 It is implementation-defined whether a plain (neither
10054 explicitly signed or unsigned) char, short, int, or long
10055 bit-field is signed or unsigned.
10057 Naturally, we extend this to long long as well. Note that
10058 this does not include wchar_t. */
10059 || (bitfield && !flag_signed_bitfields
10060 && RIDBIT_NOTSETP (RID_SIGNED, specbits)
10061 /* A typedef for plain `int' without `signed' can be
10062 controlled just like plain `int', but a typedef for
10063 `signed int' cannot be so controlled. */
10065 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
10066 && (TREE_CODE (type) == INTEGER_TYPE
10067 || TREE_CODE (type) == CHAR_TYPE)
10068 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
10071 type = long_long_unsigned_type_node;
10072 else if (RIDBIT_SETP (RID_LONG, specbits))
10073 type = long_unsigned_type_node;
10074 else if (RIDBIT_SETP (RID_SHORT, specbits))
10075 type = short_unsigned_type_node;
10076 else if (type == char_type_node)
10077 type = unsigned_char_type_node;
10078 else if (typedef_decl)
10079 type = unsigned_type (type);
10081 type = unsigned_type_node;
10083 else if (RIDBIT_SETP (RID_SIGNED, specbits)
10084 && type == char_type_node)
10085 type = signed_char_type_node;
10087 type = long_long_integer_type_node;
10088 else if (RIDBIT_SETP (RID_LONG, specbits))
10089 type = long_integer_type_node;
10090 else if (RIDBIT_SETP (RID_SHORT, specbits))
10091 type = short_integer_type_node;
10093 if (RIDBIT_SETP (RID_COMPLEX, specbits))
10095 /* If we just have "complex", it is equivalent to
10096 "complex double", but if any modifiers at all are specified it is
10097 the complex form of TYPE. E.g, "complex short" is
10098 "complex short int". */
10100 if (defaulted_int && ! longlong
10101 && ! (RIDBIT_SETP (RID_LONG, specbits)
10102 || RIDBIT_SETP (RID_SHORT, specbits)
10103 || RIDBIT_SETP (RID_SIGNED, specbits)
10104 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
10105 type = complex_double_type_node;
10106 else if (type == integer_type_node)
10107 type = complex_integer_type_node;
10108 else if (type == float_type_node)
10109 type = complex_float_type_node;
10110 else if (type == double_type_node)
10111 type = complex_double_type_node;
10112 else if (type == long_double_type_node)
10113 type = complex_long_double_type_node;
10115 type = build_complex_type (type);
10118 if (sfk == sfk_conversion
10119 && (RIDBIT_SETP (RID_CONST, specbits)
10120 || RIDBIT_SETP (RID_VOLATILE, specbits)
10121 || RIDBIT_SETP (RID_RESTRICT, specbits)))
10122 cp_error ("qualifiers are not allowed on declaration of `operator %T'",
10125 /* Set CONSTP if this declaration is `const', whether by
10126 explicit specification or via a typedef.
10127 Likewise for VOLATILEP. */
10129 constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
10131 !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
10133 !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
10134 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10135 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10136 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10137 type = cp_build_qualified_type (type, type_quals);
10139 inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
10140 virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
10141 RIDBIT_RESET (RID_VIRTUAL, specbits);
10142 explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
10143 RIDBIT_RESET (RID_EXPLICIT, specbits);
10145 if (RIDBIT_SETP (RID_STATIC, specbits))
10146 staticp = 1 + (decl_context == FIELD);
10148 if (virtualp && staticp == 2)
10150 cp_error ("member `%D' cannot be declared both virtual and static",
10154 friendp = RIDBIT_SETP (RID_FRIEND, specbits);
10155 RIDBIT_RESET (RID_FRIEND, specbits);
10157 /* Warn if two storage classes are given. Default to `auto'. */
10159 if (RIDBIT_ANY_SET (specbits))
10161 if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
10162 if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
10163 if (decl_context == PARM && nclasses > 0)
10164 error ("storage class specifiers invalid in parameter declarations");
10165 if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10167 if (decl_context == PARM)
10168 error ("typedef declaration invalid in parameter declaration");
10171 if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
10172 if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
10175 /* Give error if `virtual' is used outside of class declaration. */
10177 && (current_class_name == NULL_TREE || decl_context != FIELD))
10179 error ("virtual outside class declaration");
10183 /* Static anonymous unions are dealt with here. */
10184 if (staticp && decl_context == TYPENAME
10185 && TREE_CODE (declspecs) == TREE_LIST
10186 && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
10187 decl_context = FIELD;
10189 /* Warn about storage classes that are invalid for certain
10190 kinds of declarations (parameters, typenames, etc.). */
10193 error ("multiple storage classes in declaration of `%s'", name);
10194 else if (decl_context != NORMAL && nclasses > 0)
10196 if ((decl_context == PARM || decl_context == CATCHPARM)
10197 && (RIDBIT_SETP (RID_REGISTER, specbits)
10198 || RIDBIT_SETP (RID_AUTO, specbits)))
10200 else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10202 else if (decl_context == FIELD
10203 /* C++ allows static class elements */
10204 && RIDBIT_SETP (RID_STATIC, specbits))
10205 /* C++ also allows inlines and signed and unsigned elements,
10206 but in those cases we don't come in here. */
10210 if (decl_context == FIELD)
10212 tree tmp = NULL_TREE;
10213 register int op = 0;
10217 /* Avoid trying to get an operand off an identifier node. */
10218 if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10221 tmp = TREE_OPERAND (declarator, 0);
10222 op = IDENTIFIER_OPNAME_P (tmp);
10224 error ("storage class specified for %s `%s'",
10225 op ? "member operator" : "field",
10226 op ? operator_name_string (tmp) : name);
10230 if (decl_context == PARM || decl_context == CATCHPARM)
10231 error ("storage class specified for parameter `%s'", name);
10233 error ("storage class specified for typename");
10235 RIDBIT_RESET (RID_REGISTER, specbits);
10236 RIDBIT_RESET (RID_AUTO, specbits);
10237 RIDBIT_RESET (RID_EXTERN, specbits);
10240 else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
10242 if (toplevel_bindings_p ())
10244 /* It's common practice (and completely valid) to have a const
10245 be initialized and declared extern. */
10246 if (!(type_quals & TYPE_QUAL_CONST))
10247 warning ("`%s' initialized and declared `extern'", name);
10250 error ("`%s' has both `extern' and initializer", name);
10252 else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
10253 && ! toplevel_bindings_p ())
10254 error ("nested function `%s' declared `extern'", name);
10255 else if (toplevel_bindings_p ())
10257 if (RIDBIT_SETP (RID_AUTO, specbits))
10258 error ("top-level declaration of `%s' specifies `auto'", name);
10261 if (nclasses > 0 && friendp)
10262 error ("storage class specifiers invalid in friend function declarations");
10264 /* Now figure out the structure of the declarator proper.
10265 Descend through it, creating more complex types, until we reach
10266 the declared identifier (or NULL_TREE, in an absolute declarator). */
10268 inner_attrs = NULL_TREE;
10271 while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
10272 && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
10274 /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
10275 an INDIRECT_REF (for *...),
10276 a CALL_EXPR (for ...(...)),
10277 an identifier (for the name being declared)
10278 or a null pointer (for the place in an absolute declarator
10279 where the name was omitted).
10280 For the last two cases, we have just exited the loop.
10282 For C++ it could also be
10283 a SCOPE_REF (for class :: ...). In this case, we have converted
10284 sensible names to types, and those are the values we use to
10285 qualify the member name.
10286 an ADDR_EXPR (for &...),
10287 a BIT_NOT_EXPR (for destructors)
10289 At this point, TYPE is the type of elements of an array,
10290 or for a function to return, or for a pointer to point to.
10291 After this sequence of ifs, TYPE is the type of the
10292 array or function or pointer, and DECLARATOR has had its
10293 outermost layer removed. */
10295 if (type == error_mark_node)
10297 if (TREE_CODE (declarator) == SCOPE_REF)
10298 declarator = TREE_OPERAND (declarator, 1);
10300 declarator = TREE_OPERAND (declarator, 0);
10303 if (quals != NULL_TREE
10304 && (declarator == NULL_TREE
10305 || TREE_CODE (declarator) != SCOPE_REF))
10307 if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
10308 ctype = TYPE_METHOD_BASETYPE (type);
10309 if (ctype != NULL_TREE)
10311 tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
10312 grok_method_quals (ctype, dummy, quals);
10313 type = TREE_TYPE (dummy);
10314 ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type)));
10319 /* See the comment for the TREE_LIST case, below. */
10322 else if (inner_attrs)
10324 decl_attributes (type, inner_attrs, NULL_TREE);
10325 inner_attrs = NULL_TREE;
10328 switch (TREE_CODE (declarator))
10332 /* We encode a declarator with embedded attributes using
10333 a TREE_LIST. The attributes apply to the declarator
10334 directly inside them, so we have to skip an iteration
10335 before applying them to the type. If the declarator just
10336 inside is the declarator-id, we apply the attrs to the
10338 inner_attrs = TREE_PURPOSE (declarator);
10340 declarator = TREE_VALUE (declarator);
10346 register tree size;
10348 size = TREE_OPERAND (declarator, 1);
10350 /* VC++ spells a zero-sized array with []. */
10351 if (size == NULL_TREE && decl_context == FIELD && ! staticp
10352 && ! RIDBIT_SETP (RID_TYPEDEF, specbits))
10353 size = integer_zero_node;
10355 declarator = TREE_OPERAND (declarator, 0);
10357 type = create_array_type_for_decl (dname, type, size);
10359 /* VLAs never work as fields. */
10360 if (decl_context == FIELD && !processing_template_decl
10361 && TREE_CODE (type) == ARRAY_TYPE
10362 && TYPE_DOMAIN (type) != NULL_TREE
10363 && !TREE_CONSTANT (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
10365 cp_error ("size of member `%D' is not constant", dname);
10366 /* Proceed with arbitrary constant size, so that offset
10367 computations don't get confused. */
10368 type = create_array_type_for_decl (dname, TREE_TYPE (type),
10380 tree inner_parms = CALL_DECLARATOR_PARMS (declarator);
10381 tree inner_decl = TREE_OPERAND (declarator, 0);
10383 /* Declaring a function type.
10384 Make sure we have a valid type for the function to return. */
10386 /* We now know that the TYPE_QUALS don't apply to the
10387 decl, but to its return type. */
10388 type_quals = TYPE_UNQUALIFIED;
10390 /* Warn about some types functions can't return. */
10392 if (TREE_CODE (type) == FUNCTION_TYPE)
10394 error ("`%s' declared as function returning a function", name);
10395 type = integer_type_node;
10397 if (TREE_CODE (type) == ARRAY_TYPE)
10399 error ("`%s' declared as function returning an array", name);
10400 type = integer_type_node;
10403 if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
10404 inner_decl = TREE_OPERAND (inner_decl, 1);
10406 if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR)
10407 inner_decl = dname;
10409 /* Pick up type qualifiers which should be applied to `this'. */
10410 quals = CALL_DECLARATOR_QUALS (declarator);
10412 /* Pick up the exception specifications. */
10413 raises = CALL_DECLARATOR_EXCEPTION_SPEC (declarator);
10415 /* Say it's a definition only for the CALL_EXPR
10416 closest to the identifier. */
10419 && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
10420 || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR
10421 || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
10423 if (ctype == NULL_TREE
10424 && decl_context == FIELD
10426 && (friendp == 0 || dname == current_class_name))
10427 ctype = current_class_type;
10429 if (ctype && sfk == sfk_conversion)
10430 TYPE_HAS_CONVERSION (ctype) = 1;
10431 if (ctype && constructor_name (ctype) == dname)
10433 /* We are within a class's scope. If our declarator name
10434 is the same as the class name, and we are defining
10435 a function, then it is a constructor/destructor, and
10436 therefore returns a void type. */
10438 if (flags == DTOR_FLAG)
10440 /* ISO C++ 12.4/2. A destructor may not be
10441 declared const or volatile. A destructor may
10444 error ("destructor cannot be static member function");
10447 cp_error ("destructors may not be `%s'",
10448 IDENTIFIER_POINTER (TREE_VALUE (quals)));
10451 if (decl_context == FIELD)
10453 if (! member_function_or_else (ctype,
10454 current_class_type,
10456 return void_type_node;
10459 else /* It's a constructor. */
10461 if (explicitp == 1)
10463 /* ISO C++ 12.1. A constructor may not be
10464 declared const or volatile. A constructor may
10465 not be virtual. A constructor may not be
10468 error ("constructor cannot be static member function");
10471 pedwarn ("constructors cannot be declared virtual");
10476 cp_error ("constructors may not be `%s'",
10477 IDENTIFIER_POINTER (TREE_VALUE (quals)));
10481 RID_BIT_TYPE tmp_bits;
10482 bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
10483 RIDBIT_RESET (RID_INLINE, tmp_bits);
10484 RIDBIT_RESET (RID_STATIC, tmp_bits);
10485 if (RIDBIT_ANY_SET (tmp_bits))
10486 error ("return value type specifier for constructor ignored");
10488 if (decl_context == FIELD)
10490 if (! member_function_or_else (ctype,
10491 current_class_type,
10493 return void_type_node;
10494 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
10495 if (sfk != sfk_constructor)
10499 if (decl_context == FIELD)
10505 error ("can't initialize friend function `%s'", name);
10508 /* Cannot be both friend and virtual. */
10509 error ("virtual functions cannot be friends");
10510 RIDBIT_RESET (RID_FRIEND, specbits);
10513 if (decl_context == NORMAL)
10514 error ("friend declaration not in class definition");
10515 if (current_function_decl && funcdef_flag)
10516 cp_error ("can't define friend function `%s' in a local class definition",
10520 /* Construct the function type and go to the next
10521 inner layer of declarator. */
10523 declarator = TREE_OPERAND (declarator, 0);
10525 /* FIXME: This is where default args should be fully
10528 arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
10530 if (declarator && flags == DTOR_FLAG)
10532 /* A destructor declared in the body of a class will
10533 be represented as a BIT_NOT_EXPR. But, we just
10534 want the underlying IDENTIFIER. */
10535 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
10536 declarator = TREE_OPERAND (declarator, 0);
10538 if (strict_prototype == 0 && arg_types == NULL_TREE)
10539 arg_types = void_list_node;
10540 else if (arg_types == NULL_TREE
10541 || arg_types != void_list_node)
10543 cp_error ("destructors may not have parameters");
10544 arg_types = void_list_node;
10545 last_function_parms = NULL_TREE;
10549 /* ANSI says that `const int foo ();'
10550 does not make the function foo const. */
10551 type = build_function_type (type, arg_types);
10555 for (t = arg_types; t; t = TREE_CHAIN (t))
10556 if (TREE_PURPOSE (t)
10557 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10559 add_defarg_fn (type);
10568 /* Filter out pointers-to-references and references-to-references.
10569 We can get these if a TYPE_DECL is used. */
10571 if (TREE_CODE (type) == REFERENCE_TYPE)
10573 error ("cannot declare %s to references",
10574 TREE_CODE (declarator) == ADDR_EXPR
10575 ? "references" : "pointers");
10576 declarator = TREE_OPERAND (declarator, 0);
10580 if (TREE_CODE (type) == OFFSET_TYPE
10581 && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10582 || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10584 cp_error ("cannot declare pointer to `%#T' member",
10586 type = TREE_TYPE (type);
10589 /* Merge any constancy or volatility into the target type
10590 for the pointer. */
10592 /* We now know that the TYPE_QUALS don't apply to the decl,
10593 but to the target of the pointer. */
10594 type_quals = TYPE_UNQUALIFIED;
10596 if (TREE_CODE (declarator) == ADDR_EXPR)
10598 if (TREE_CODE (type) == VOID_TYPE)
10599 error ("invalid type: `void &'");
10601 type = build_reference_type (type);
10603 else if (TREE_CODE (type) == METHOD_TYPE)
10604 type = build_ptrmemfunc_type (build_pointer_type (type));
10606 type = build_pointer_type (type);
10608 /* Process a list of type modifier keywords (such as
10609 const or volatile) that were given inside the `*' or `&'. */
10611 if (TREE_TYPE (declarator))
10613 register tree typemodlist;
10619 for (typemodlist = TREE_TYPE (declarator); typemodlist;
10620 typemodlist = TREE_CHAIN (typemodlist))
10622 tree qualifier = TREE_VALUE (typemodlist);
10624 if (qualifier == ridpointers[(int) RID_CONST])
10626 else if (qualifier == ridpointers[(int) RID_VOLATILE])
10628 else if (qualifier == ridpointers[(int) RID_RESTRICT])
10633 error ("invalid type modifier within pointer declarator");
10637 pedwarn ("duplicate `const'");
10639 pedwarn ("duplicate `volatile'");
10641 pedwarn ("duplicate `restrict'");
10643 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10644 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10645 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10646 if (TREE_CODE (declarator) == ADDR_EXPR
10647 && (constp || volatilep))
10650 pedwarn ("discarding `const' applied to a reference");
10652 pedwarn ("discarding `volatile' applied to a reference");
10653 type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
10655 type = cp_build_qualified_type (type, type_quals);
10657 declarator = TREE_OPERAND (declarator, 0);
10663 /* We have converted type names to NULL_TREE if the
10664 name was bogus, or to a _TYPE node, if not.
10666 The variable CTYPE holds the type we will ultimately
10667 resolve to. The code here just needs to build
10668 up appropriate member types. */
10669 tree sname = TREE_OPERAND (declarator, 1);
10672 /* Destructors can have their visibilities changed as well. */
10673 if (TREE_CODE (sname) == BIT_NOT_EXPR)
10674 sname = TREE_OPERAND (sname, 0);
10676 if (TREE_COMPLEXITY (declarator) == 0)
10677 /* This needs to be here, in case we are called
10678 multiple times. */ ;
10679 else if (TREE_COMPLEXITY (declarator) == -1)
10680 /* Namespace member. */
10681 pop_decl_namespace ();
10682 else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
10683 /* Don't fall out into global scope. Hides real bug? --eichin */ ;
10684 else if (! IS_AGGR_TYPE_CODE
10685 (TREE_CODE (TREE_OPERAND (declarator, 0))))
10687 else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10689 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10690 that refer to ctype. They couldn't be resolved earlier
10691 because we hadn't pushed into the class yet.
10692 Example: resolve 'B<T>::type' in
10693 'B<typename B<T>::type> B<T>::f () { }'. */
10694 if (current_template_parms
10695 && uses_template_parms (type)
10696 && uses_template_parms (current_class_type))
10698 tree args = current_template_args ();
10699 type = tsubst (type, args, /*complain=*/1, NULL_TREE);
10702 /* This pop_nested_class corresponds to the
10703 push_nested_class used to push into class scope for
10704 parsing the argument list of a function decl, in
10706 pop_nested_class ();
10707 TREE_COMPLEXITY (declarator) = current_class_depth;
10710 my_friendly_abort (16);
10712 if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10714 /* We had a reference to a global decl, or
10715 perhaps we were given a non-aggregate typedef,
10716 in which case we cleared this out, and should just
10717 keep going as though it wasn't there. */
10718 declarator = sname;
10721 ctype = TREE_OPERAND (declarator, 0);
10724 while (t != NULL_TREE && CLASS_TYPE_P (t))
10726 /* You're supposed to have one `template <...>'
10727 for every template class, but you don't need one
10728 for a full specialization. For example:
10730 template <class T> struct S{};
10731 template <> struct S<int> { void f(); };
10732 void S<int>::f () {}
10734 is correct; there shouldn't be a `template <>' for
10735 the definition of `S<int>::f'. */
10736 if (CLASSTYPE_TEMPLATE_INFO (t)
10737 && (CLASSTYPE_TEMPLATE_INSTANTIATION (t)
10738 || uses_template_parms (CLASSTYPE_TI_ARGS (t))))
10739 template_count += 1;
10741 t = TYPE_MAIN_DECL (t);
10742 if (DECL_LANG_SPECIFIC (t))
10743 t = DECL_CONTEXT (t);
10748 if (sname == NULL_TREE)
10751 if (TREE_CODE (sname) == IDENTIFIER_NODE)
10753 /* This is the `standard' use of the scoping operator:
10754 basetype :: member . */
10756 if (ctype == current_class_type)
10762 Is this ill-formed? */
10765 cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
10768 else if (TREE_CODE (type) == FUNCTION_TYPE)
10770 if (current_class_type == NULL_TREE
10772 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10773 TYPE_ARG_TYPES (type));
10776 cp_error ("cannot declare member function `%T::%s' within `%T'",
10777 ctype, name, current_class_type);
10778 return void_type_node;
10781 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
10782 || COMPLETE_TYPE_P (complete_type (ctype)))
10784 /* Have to move this code elsewhere in this function.
10785 this code is used for i.e., typedef int A::M; M *pm;
10787 It is? How? jason 10/2/94 */
10789 if (current_class_type)
10791 cp_error ("cannot declare member `%T::%s' within `%T'",
10792 ctype, name, current_class_type);
10793 return void_type_node;
10795 type = build_offset_type (ctype, type);
10797 else if (uses_template_parms (ctype))
10799 if (TREE_CODE (type) == FUNCTION_TYPE)
10801 = build_cplus_method_type (ctype, TREE_TYPE (type),
10802 TYPE_ARG_TYPES (type));
10806 cp_error ("structure `%T' not yet defined", ctype);
10807 return error_mark_node;
10810 declarator = sname;
10812 else if (TREE_CODE (sname) == SCOPE_REF)
10813 my_friendly_abort (17);
10817 declarator = TREE_OPERAND (declarator, 1);
10818 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10819 /* In this case, we will deal with it later. */
10823 if (TREE_CODE (type) == FUNCTION_TYPE)
10824 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10825 TYPE_ARG_TYPES (type));
10827 type = build_offset_type (ctype, type);
10834 declarator = TREE_OPERAND (declarator, 0);
10839 case ENUMERAL_TYPE:
10840 declarator = NULL_TREE;
10844 declarator = NULL_TREE;
10848 my_friendly_abort (158);
10852 /* See the comment for the TREE_LIST case, above. */
10855 if (! ignore_attrs)
10856 decl_attributes (type, inner_attrs, NULL_TREE);
10858 TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
10860 attrlist = build_decl_list (NULL_TREE, inner_attrs);
10863 /* Now TYPE has the actual type. */
10865 if (explicitp == 1 || (explicitp && friendp))
10867 /* [dcl.fct.spec] The explicit specifier shall only be used in
10868 declarations of constructors within a class definition. */
10869 error ("only declarations of constructors can be `explicit'");
10873 if (RIDBIT_SETP (RID_MUTABLE, specbits))
10875 if (current_class_name == NULL_TREE || decl_context == PARM || friendp)
10877 error ("non-member `%s' cannot be declared `mutable'", name);
10878 RIDBIT_RESET (RID_MUTABLE, specbits);
10880 else if (decl_context == TYPENAME || RIDBIT_SETP (RID_TYPEDEF, specbits))
10882 error ("non-object member `%s' cannot be declared `mutable'", name);
10883 RIDBIT_RESET (RID_MUTABLE, specbits);
10885 else if (TREE_CODE (type) == FUNCTION_TYPE
10886 || TREE_CODE (type) == METHOD_TYPE)
10888 error ("function `%s' cannot be declared `mutable'", name);
10889 RIDBIT_RESET (RID_MUTABLE, specbits);
10893 error ("static `%s' cannot be declared `mutable'", name);
10894 RIDBIT_RESET (RID_MUTABLE, specbits);
10896 else if (type_quals & TYPE_QUAL_CONST)
10898 error ("const `%s' cannot be declared `mutable'", name);
10899 RIDBIT_RESET (RID_MUTABLE, specbits);
10903 if (declarator == NULL_TREE
10904 || TREE_CODE (declarator) == IDENTIFIER_NODE
10905 || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
10906 && (TREE_CODE (type) == FUNCTION_TYPE
10907 || TREE_CODE (type) == METHOD_TYPE)))
10909 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10911 cp_error ("template-id `%D' used as a declarator", declarator);
10912 declarator = dname;
10915 /* Unexpected declarator format. */
10916 my_friendly_abort (990210);
10918 /* If this is declaring a typedef name, return a TYPE_DECL. */
10920 if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
10924 /* Note that the grammar rejects storage classes
10925 in typenames, fields or parameters. */
10926 if (current_lang_name == lang_name_java)
10927 TYPE_FOR_JAVA (type) = 1;
10929 if (decl_context == FIELD)
10931 if (declarator == constructor_name (current_class_type))
10932 cp_pedwarn ("ISO C++ forbids nested type `%D' with same name as enclosing class",
10934 decl = build_lang_decl (TYPE_DECL, declarator, type);
10937 decl = build_decl (TYPE_DECL, declarator, type);
10939 /* If the user declares "typedef struct {...} foo" then the
10940 struct will have an anonymous name. Fill that name in now.
10941 Nothing can refer to it, so nothing needs know about the name
10943 if (type != error_mark_node
10945 && TYPE_NAME (type)
10946 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10947 && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type))
10948 && CP_TYPE_QUALS (type) == TYPE_UNQUALIFIED)
10950 tree oldname = TYPE_NAME (type);
10953 /* Replace the anonymous name with the real name everywhere. */
10954 lookup_tag_reverse (type, declarator);
10955 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10956 if (TYPE_NAME (t) == oldname)
10957 TYPE_NAME (t) = decl;
10959 if (TYPE_LANG_SPECIFIC (type))
10960 TYPE_WAS_ANONYMOUS (type) = 1;
10962 /* If this is a typedef within a template class, the nested
10963 type is a (non-primary) template. The name for the
10964 template needs updating as well. */
10965 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10966 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10967 = TYPE_IDENTIFIER (type);
10969 /* XXX Temporarily set the scope.
10970 When returning, start_decl expects it as NULL_TREE,
10971 and will then then set it using pushdecl. */
10972 my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 980404);
10973 if (current_class_type)
10974 DECL_CONTEXT (decl) = current_class_type;
10976 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10978 DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
10979 DECL_ASSEMBLER_NAME (decl)
10980 = get_identifier (build_overload_name (type, 1, 1));
10981 DECL_CONTEXT (decl) = NULL_TREE;
10983 /* FIXME remangle member functions; member functions of a
10984 type with external linkage have external linkage. */
10987 if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
10989 cp_error_at ("typedef name may not be class-qualified", decl);
10994 if (ctype == NULL_TREE)
10996 if (TREE_CODE (type) != METHOD_TYPE)
10997 cp_error_at ("invalid type qualifier for non-member function type", decl);
10999 ctype = TYPE_METHOD_BASETYPE (type);
11001 if (ctype != NULL_TREE)
11002 grok_method_quals (ctype, decl, quals);
11005 if (RIDBIT_SETP (RID_SIGNED, specbits)
11006 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
11007 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
11009 bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
11010 inlinep, friendp, raises != NULL_TREE);
11013 error ("typedef declaration includes an initializer");
11018 /* Detect the case of an array type of unspecified size
11019 which came, as such, direct from a typedef name.
11020 We must copy the type, so that each identifier gets
11021 a distinct type, so that each identifier's size can be
11022 controlled separately by its own initializer. */
11024 if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
11025 && TYPE_DOMAIN (type) == NULL_TREE)
11027 type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
11030 /* If this is a type name (such as, in a cast or sizeof),
11031 compute the type and return it now. */
11033 if (decl_context == TYPENAME)
11035 /* Note that the grammar rejects storage classes
11036 in typenames, fields or parameters. */
11037 if (type_quals != TYPE_UNQUALIFIED)
11038 type_quals = TYPE_UNQUALIFIED;
11040 /* Special case: "friend class foo" looks like a TYPENAME context. */
11043 if (type_quals != TYPE_UNQUALIFIED)
11045 cp_error ("type qualifiers specified for friend class declaration");
11046 type_quals = TYPE_UNQUALIFIED;
11050 cp_error ("`inline' specified for friend class declaration");
11054 /* Only try to do this stuff if we didn't already give up. */
11055 if (type != integer_type_node)
11057 /* A friendly class? */
11058 if (current_class_type)
11059 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
11061 error ("trying to make class `%s' a friend of global scope",
11062 TYPE_NAME_STRING (type));
11063 type = void_type_node;
11068 if (ctype == NULL_TREE)
11070 if (TREE_CODE (type) != METHOD_TYPE)
11071 cp_error ("invalid qualifiers on non-member function type");
11073 ctype = TYPE_METHOD_BASETYPE (type);
11077 tree dummy = build_decl (TYPE_DECL, declarator, type);
11078 grok_method_quals (ctype, dummy, quals);
11079 type = TREE_TYPE (dummy);
11085 else if (declarator == NULL_TREE && decl_context != PARM
11086 && decl_context != CATCHPARM
11087 && TREE_CODE (type) != UNION_TYPE
11090 cp_error ("abstract declarator `%T' used as declaration", type);
11091 declarator = make_anon_name ();
11094 /* `void' at top level (not within pointer)
11095 is allowed only in typedefs or type names.
11096 We don't complain about parms either, but that is because
11097 a better error message can be made later. */
11099 if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
11102 error ("unnamed variable or field declared void");
11103 else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
11105 if (IDENTIFIER_OPNAME_P (declarator))
11106 my_friendly_abort (356);
11108 error ("variable or field `%s' declared void", name);
11111 error ("variable or field declared void");
11112 type = integer_type_node;
11115 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
11116 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
11118 if (decl_context == PARM || decl_context == CATCHPARM)
11120 if (ctype || in_namespace)
11121 error ("cannot use `::' in parameter declaration");
11123 /* A parameter declared as an array of T is really a pointer to T.
11124 One declared as a function is really a pointer to a function.
11125 One declared as a member is really a pointer to member. */
11127 if (TREE_CODE (type) == ARRAY_TYPE)
11129 /* Transfer const-ness of array into that of type pointed to. */
11130 type = build_pointer_type (TREE_TYPE (type));
11131 type_quals = TYPE_UNQUALIFIED;
11133 else if (TREE_CODE (type) == FUNCTION_TYPE)
11134 type = build_pointer_type (type);
11135 else if (TREE_CODE (type) == OFFSET_TYPE)
11136 type = build_pointer_type (type);
11137 else if (TREE_CODE (type) == VOID_TYPE && declarator)
11139 error ("declaration of `%s' as void", name);
11145 register tree decl;
11147 if (decl_context == PARM)
11149 decl = build_decl (PARM_DECL, declarator, type);
11151 bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
11152 inlinep, friendp, raises != NULL_TREE);
11154 /* Compute the type actually passed in the parmlist,
11155 for the case where there is no prototype.
11156 (For example, shorts and chars are passed as ints.)
11157 When there is a prototype, this is overridden later. */
11159 DECL_ARG_TYPE (decl) = type_promotes_to (type);
11161 else if (decl_context == FIELD)
11163 if (type == error_mark_node)
11165 /* Happens when declaring arrays of sizes which
11166 are error_mark_node, for example. */
11169 else if (in_namespace && !friendp)
11171 /* Something like struct S { int N::j; }; */
11172 cp_error ("invalid use of `::'");
11175 else if (TREE_CODE (type) == FUNCTION_TYPE)
11178 tree function_context;
11180 /* We catch the others as conflicts with the builtin
11182 if (friendp && declarator == ridpointers[(int) RID_SIGNED])
11184 cp_error ("function `%D' cannot be declared friend",
11191 if (ctype == NULL_TREE)
11192 ctype = current_class_type;
11194 if (ctype == NULL_TREE)
11196 cp_error ("can't make `%D' into a method -- not in a class",
11198 return void_type_node;
11201 /* ``A union may [ ... ] not [ have ] virtual functions.''
11203 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
11205 cp_error ("function `%D' declared virtual inside a union",
11207 return void_type_node;
11210 if (declarator == ansi_opname[(int) NEW_EXPR]
11211 || declarator == ansi_opname[(int) VEC_NEW_EXPR]
11212 || declarator == ansi_opname[(int) DELETE_EXPR]
11213 || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
11217 cp_error ("`%D' cannot be declared virtual, since it is always static",
11222 else if (staticp < 2)
11223 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11224 TYPE_ARG_TYPES (type));
11227 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
11228 function_context = (ctype != NULL_TREE) ?
11229 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
11230 publicp = (! friendp || ! staticp)
11231 && function_context == NULL_TREE;
11232 decl = grokfndecl (ctype, type,
11233 TREE_CODE (declarator) != TEMPLATE_ID_EXPR
11234 ? declarator : dname,
11236 virtualp, flags, quals, raises,
11237 friendp ? -1 : 0, friendp, publicp, inlinep,
11238 funcdef_flag, template_count, in_namespace);
11239 if (decl == NULL_TREE)
11242 /* This clobbers the attrs stored in `decl' from `attrlist'. */
11243 /* The decl and setting of decl_machine_attr is also turned off. */
11244 decl = build_decl_attribute_variant (decl, decl_machine_attr);
11247 /* [class.conv.ctor]
11249 A constructor declared without the function-specifier
11250 explicit that can be called with a single parameter
11251 specifies a conversion from the type of its first
11252 parameter to the type of its class. Such a constructor
11253 is called a converting constructor. */
11254 if (explicitp == 2)
11255 DECL_NONCONVERTING_P (decl) = 1;
11256 else if (DECL_CONSTRUCTOR_P (decl))
11258 /* The constructor can be called with exactly one
11259 parameter if there is at least one parameter, and
11260 any subsequent parameters have default arguments.
11261 We don't look at the first parameter, which is
11262 really just the `this' parameter for the new
11265 TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)));
11267 /* Skip the `in_chrg' argument too, if present. */
11268 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
11269 arg_types = TREE_CHAIN (arg_types);
11271 if (arg_types == void_list_node
11273 && TREE_CHAIN (arg_types)
11274 && TREE_CHAIN (arg_types) != void_list_node
11275 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
11276 DECL_NONCONVERTING_P (decl) = 1;
11279 else if (TREE_CODE (type) == METHOD_TYPE)
11281 /* We only get here for friend declarations of
11282 members of other classes. */
11283 /* All method decls are public, so tell grokfndecl to set
11284 TREE_PUBLIC, also. */
11285 decl = grokfndecl (ctype, type, declarator, declarator,
11286 virtualp, flags, quals, raises,
11287 friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
11288 template_count, in_namespace);
11289 if (decl == NULL_TREE)
11292 else if (!staticp && ! processing_template_decl
11293 && !COMPLETE_TYPE_P (complete_type (type))
11294 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
11297 cp_error ("field `%D' has incomplete type", declarator);
11299 cp_error ("name `%T' has incomplete type", type);
11301 /* If we're instantiating a template, tell them which
11302 instantiation made the field's type be incomplete. */
11303 if (current_class_type
11304 && TYPE_NAME (current_class_type)
11305 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
11306 && declspecs && TREE_VALUE (declspecs)
11307 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
11308 cp_error (" in instantiation of template `%T'",
11309 current_class_type);
11311 type = error_mark_node;
11318 error ("`%s' is neither function nor member function; cannot be declared friend",
11319 IDENTIFIER_POINTER (declarator));
11327 /* Friends are treated specially. */
11328 if (ctype == current_class_type)
11329 warning ("member functions are implicitly friends of their class");
11332 tree t = NULL_TREE;
11333 if (decl && DECL_NAME (decl))
11335 if (template_class_depth (current_class_type) == 0)
11338 = check_explicit_specialization
11340 template_count, 2 * (funcdef_flag != 0) + 4);
11341 if (decl == error_mark_node)
11342 return error_mark_node;
11345 t = do_friend (ctype, declarator, decl,
11346 last_function_parms, attrlist, flags, quals,
11349 if (t && funcdef_flag)
11352 return void_type_node;
11356 /* Structure field. It may not be a function, except for C++ */
11358 if (decl == NULL_TREE)
11364 /* An attempt is being made to initialize a non-static
11365 member. But, from [class.mem]:
11367 4 A member-declarator can contain a
11368 constant-initializer only if it declares a static
11369 member (_class.static_) of integral or enumeration
11370 type, see _class.static.data_.
11372 This used to be relatively common practice, but
11373 the rest of the compiler does not correctly
11374 handle the initialization unless the member is
11375 static so we make it static below. */
11376 cp_pedwarn ("ISO C++ forbids initialization of member `%D'",
11378 cp_pedwarn ("making `%D' static", declarator);
11382 if (uses_template_parms (type))
11383 /* We'll check at instantiation time. */
11385 else if (check_static_variable_definition (declarator,
11387 /* If we just return the declaration, crashes
11388 will sometimes occur. We therefore return
11389 void_type_node, as if this was a friend
11390 declaration, to cause callers to completely
11391 ignore this declaration. */
11392 return void_type_node;
11395 /* 9.2p13 [class.mem] */
11396 if (declarator == constructor_name (current_class_type)
11397 /* The standard does not allow non-static data members
11398 here either, but we agreed at the 10/99 meeting
11399 to change that in TC 1 so that they are allowed in
11400 classes with no user-defined constructors. */
11402 cp_pedwarn ("ISO C++ forbids static data member `%D' with same name as enclosing class",
11407 /* C++ allows static class members. All other work
11408 for this is done by grokfield. */
11409 decl = build_lang_decl (VAR_DECL, declarator, type);
11410 TREE_STATIC (decl) = 1;
11411 /* In class context, 'static' means public access. */
11412 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
11416 decl = build_decl (FIELD_DECL, declarator, type);
11417 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11419 DECL_MUTABLE_P (decl) = 1;
11420 RIDBIT_RESET (RID_MUTABLE, specbits);
11424 bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
11425 inlinep, friendp, raises != NULL_TREE);
11428 else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
11430 tree original_name;
11436 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11437 original_name = dname;
11439 original_name = declarator;
11441 if (RIDBIT_SETP (RID_AUTO, specbits))
11442 error ("storage class `auto' invalid for function `%s'", name);
11443 else if (RIDBIT_SETP (RID_REGISTER, specbits))
11444 error ("storage class `register' invalid for function `%s'", name);
11446 /* Function declaration not at top level.
11447 Storage classes other than `extern' are not allowed
11448 and `extern' makes no difference. */
11449 if (! toplevel_bindings_p ()
11450 && (RIDBIT_SETP (RID_STATIC, specbits)
11451 || RIDBIT_SETP (RID_INLINE, specbits))
11454 if (RIDBIT_SETP (RID_STATIC, specbits))
11455 pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
11457 pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
11460 if (ctype == NULL_TREE)
11464 error ("virtual non-class function `%s'", name);
11468 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
11469 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11470 TYPE_ARG_TYPES (type));
11472 /* Record presence of `static'. */
11473 publicp = (ctype != NULL_TREE
11474 || RIDBIT_SETP (RID_EXTERN, specbits)
11475 || !RIDBIT_SETP (RID_STATIC, specbits));
11477 decl = grokfndecl (ctype, type, original_name, declarator,
11478 virtualp, flags, quals, raises,
11480 publicp, inlinep, funcdef_flag,
11481 template_count, in_namespace);
11482 if (decl == NULL_TREE)
11487 int illegal_static = 0;
11489 /* Don't allow a static member function in a class, and forbid
11490 declaring main to be static. */
11491 if (TREE_CODE (type) == METHOD_TYPE)
11493 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
11494 illegal_static = 1;
11496 else if (current_function_decl)
11498 /* FIXME need arm citation */
11499 error ("cannot declare static function inside another function");
11500 illegal_static = 1;
11503 if (illegal_static)
11506 RIDBIT_RESET (RID_STATIC, specbits);
11512 /* It's a variable. */
11514 /* An uninitialized decl with `extern' is a reference. */
11515 decl = grokvardecl (type, declarator, &specbits,
11517 (type_quals & TYPE_QUAL_CONST) != 0,
11519 bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11520 inlinep, friendp, raises != NULL_TREE);
11524 DECL_CONTEXT (decl) = ctype;
11527 cp_pedwarn ("static member `%D' re-declared as static", decl);
11529 RIDBIT_RESET (RID_STATIC, specbits);
11531 if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11533 cp_error ("static member `%D' declared `register'", decl);
11534 RIDBIT_RESET (RID_REGISTER, specbits);
11536 if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
11538 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
11540 RIDBIT_RESET (RID_EXTERN, specbits);
11545 my_friendly_assert (!RIDBIT_SETP (RID_MUTABLE, specbits), 19990927);
11547 /* Record `register' declaration for warnings on &
11548 and in case doing stupid register allocation. */
11550 if (RIDBIT_SETP (RID_REGISTER, specbits))
11551 DECL_REGISTER (decl) = 1;
11553 if (RIDBIT_SETP (RID_EXTERN, specbits))
11554 DECL_THIS_EXTERN (decl) = 1;
11556 if (RIDBIT_SETP (RID_STATIC, specbits))
11557 DECL_THIS_STATIC (decl) = 1;
11559 /* Record constancy and volatility. There's no need to do this
11560 when processing a template; we'll do this for the instantiated
11561 declaration based on the type of DECL. */
11562 if (!processing_template_decl)
11563 c_apply_type_quals_to_decl (type_quals, decl);
11569 /* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11570 An empty exprlist is a parmlist. An exprlist which
11571 contains only identifiers at the global level
11572 is a parmlist. Otherwise, it is an exprlist. */
11575 parmlist_is_exprlist (exprs)
11578 if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11581 if (toplevel_bindings_p ())
11583 /* At the global level, if these are all identifiers,
11584 then it is a parmlist. */
11587 if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11589 exprs = TREE_CHAIN (exprs);
11596 /* Subroutine of start_function. Ensure that each of the parameter
11597 types (as listed in PARMS) is complete, as is required for a
11598 function definition. */
11601 require_complete_types_for_parms (parms)
11604 for (; parms; parms = TREE_CHAIN (parms))
11606 tree type = TREE_TYPE (parms);
11608 /* Try to complete the TYPE. */
11609 type = complete_type (type);
11611 if (type == error_mark_node)
11614 if (!COMPLETE_TYPE_P (type))
11616 if (DECL_NAME (parms))
11617 error ("parameter `%s' has incomplete type",
11618 IDENTIFIER_POINTER (DECL_NAME (parms)));
11620 error ("parameter has incomplete type");
11621 TREE_TYPE (parms) = error_mark_node;
11624 layout_decl (parms, 0);
11628 /* Returns non-zero if T is a local variable. */
11631 local_variable_p (t)
11634 if ((TREE_CODE (t) == VAR_DECL
11635 /* A VAR_DECL with a context that is a _TYPE is a static data
11637 && !TYPE_P (CP_DECL_CONTEXT (t))
11638 /* Any other non-local variable must be at namespace scope. */
11639 && !DECL_NAMESPACE_SCOPE_P (t))
11640 || (TREE_CODE (t) == PARM_DECL))
11646 /* Returns non-zero if T is an automatic local variable or a label.
11647 (These are the declarations that need to be remapped when the code
11648 containing them is duplicated.) */
11651 nonstatic_local_decl_p (t)
11654 return ((local_variable_p (t) && !TREE_STATIC (t))
11655 || TREE_CODE (t) == LABEL_DECL
11656 || TREE_CODE (t) == RESULT_DECL);
11659 /* Like local_variable_p, but suitable for use as a tree-walking
11663 local_variable_p_walkfn (tp, walk_subtrees, data)
11665 int *walk_subtrees ATTRIBUTE_UNUSED;
11666 void *data ATTRIBUTE_UNUSED;
11668 return ((local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
11669 ? *tp : NULL_TREE);
11672 /* Check that ARG, which is a default-argument expression for a
11673 parameter DECL, is legal. Returns ARG, or ERROR_MARK_NODE, if
11674 something goes wrong. DECL may also be a _TYPE node, rather than a
11675 DECL, if there is no DECL available. */
11678 check_default_argument (decl, arg)
11685 if (TREE_CODE (arg) == DEFAULT_ARG)
11686 /* We get a DEFAULT_ARG when looking at an in-class declaration
11687 with a default argument. Ignore the argument for now; we'll
11688 deal with it after the class is complete. */
11691 if (processing_template_decl || uses_template_parms (arg))
11692 /* We don't do anything checking until instantiation-time. Note
11693 that there may be uninstantiated arguments even for an
11694 instantiated function, since default arguments are not
11695 instantiated until they are needed. */
11704 decl_type = TREE_TYPE (decl);
11706 if (arg == error_mark_node
11707 || decl == error_mark_node
11708 || TREE_TYPE (arg) == error_mark_node
11709 || decl_type == error_mark_node)
11710 /* Something already went wrong. There's no need to check
11712 return error_mark_node;
11714 /* [dcl.fct.default]
11716 A default argument expression is implicitly converted to the
11718 if (!TREE_TYPE (arg)
11719 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
11722 cp_error ("default argument for `%#D' has type `%T'",
11723 decl, TREE_TYPE (arg));
11725 cp_error ("default argument for parameter of type `%T' has type `%T'",
11726 decl_type, TREE_TYPE (arg));
11728 return error_mark_node;
11731 /* [dcl.fct.default]
11733 Local variables shall not be used in default argument
11736 The keyword `this' shall not be used in a default argument of a
11737 member function. */
11738 var = walk_tree (&arg, local_variable_p_walkfn, NULL);
11741 cp_error ("default argument `%E' uses local variable `%D'",
11743 return error_mark_node;
11750 /* Decode the list of parameter types for a function type.
11751 Given the list of things declared inside the parens,
11752 return a list of types.
11754 The list we receive can have three kinds of elements:
11755 an IDENTIFIER_NODE for names given without types,
11756 a TREE_LIST node for arguments given as typespecs or names with typespecs,
11757 or void_type_node, to mark the end of an argument list
11758 when additional arguments are not permitted (... was not used).
11760 FUNCDEF_FLAG is nonzero for a function definition, 0 for
11761 a mere declaration. A nonempty identifier-list gets an error message
11762 when FUNCDEF_FLAG is zero.
11763 If FUNCDEF_FLAG is 1, then parameter types must be complete.
11764 If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
11766 If all elements of the input list contain types,
11767 we return a list of the types.
11768 If all elements contain no type (except perhaps a void_type_node
11769 at the end), we return a null list.
11770 If some have types and some do not, it is an error, and we
11771 return a null list.
11773 Also set last_function_parms to either
11774 a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
11775 A list of names is converted to a chain of PARM_DECLs
11776 by store_parm_decls so that ultimately it is always a chain of decls.
11778 Note that in C++, parameters can take default values. These default
11779 values are in the TREE_PURPOSE field of the TREE_LIST. It is
11780 an error to specify default values which are followed by parameters
11781 that have no default values, or an ELLIPSES. For simplicities sake,
11782 only parameters which are specified with their types can take on
11786 grokparms (first_parm, funcdef_flag)
11790 tree result = NULL_TREE;
11791 tree decls = NULL_TREE;
11793 if (first_parm != NULL_TREE
11794 && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
11796 if (! funcdef_flag)
11797 pedwarn ("parameter names (without types) in function declaration");
11798 last_function_parms = first_parm;
11801 else if (first_parm != NULL_TREE
11802 && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
11803 && TREE_CODE (TREE_VALUE (first_parm)) != VOID_TYPE)
11804 my_friendly_abort (145);
11807 /* Types were specified. This is a list of declarators
11808 each represented as a TREE_LIST node. */
11809 register tree parm, chain;
11810 int any_init = 0, any_error = 0;
11812 if (first_parm != NULL_TREE)
11814 tree last_result = NULL_TREE;
11815 tree last_decl = NULL_TREE;
11817 for (parm = first_parm; parm != NULL_TREE; parm = chain)
11819 tree type = NULL_TREE, list_node = parm;
11820 register tree decl = TREE_VALUE (parm);
11821 tree init = TREE_PURPOSE (parm);
11823 chain = TREE_CHAIN (parm);
11824 /* @@ weak defense against parse errors. */
11825 if (TREE_CODE (decl) != VOID_TYPE
11826 && TREE_CODE (decl) != TREE_LIST)
11828 /* Give various messages as the need arises. */
11829 if (TREE_CODE (decl) == STRING_CST)
11830 cp_error ("invalid string constant `%E'", decl);
11831 else if (TREE_CODE (decl) == INTEGER_CST)
11832 error ("invalid integer constant in parameter list, did you forget to give parameter name?");
11836 if (TREE_CODE (decl) != VOID_TYPE)
11838 decl = grokdeclarator (TREE_VALUE (decl),
11839 TREE_PURPOSE (decl),
11840 PARM, init != NULL_TREE,
11842 if (! decl || TREE_TYPE (decl) == error_mark_node)
11845 /* Top-level qualifiers on the parameters are
11846 ignored for function types. */
11847 type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
11849 if (TREE_CODE (type) == VOID_TYPE)
11850 decl = void_type_node;
11851 else if (TREE_CODE (type) == METHOD_TYPE)
11853 if (DECL_NAME (decl))
11854 /* Cannot use the decl here because
11855 we don't have DECL_CONTEXT set up yet. */
11856 cp_error ("parameter `%D' invalidly declared method type",
11859 error ("parameter invalidly declared method type");
11860 type = build_pointer_type (type);
11861 TREE_TYPE (decl) = type;
11863 else if (TREE_CODE (type) == OFFSET_TYPE)
11865 if (DECL_NAME (decl))
11866 cp_error ("parameter `%D' invalidly declared offset type",
11869 error ("parameter invalidly declared offset type");
11870 type = build_pointer_type (type);
11871 TREE_TYPE (decl) = type;
11873 else if (abstract_virtuals_error (decl, type))
11874 any_error = 1; /* Seems like a good idea. */
11875 else if (POINTER_TYPE_P (type))
11878 while (POINTER_TYPE_P (t)
11879 || (TREE_CODE (t) == ARRAY_TYPE
11880 && TYPE_DOMAIN (t) != NULL_TREE))
11882 if (TREE_CODE (t) == ARRAY_TYPE)
11883 cp_error ("parameter type `%T' includes %s to array of unknown bound",
11885 TYPE_PTR_P (type) ? "pointer" : "reference");
11889 if (TREE_CODE (decl) == VOID_TYPE)
11891 if (result == NULL_TREE)
11893 result = void_list_node;
11894 last_result = result;
11898 TREE_CHAIN (last_result) = void_list_node;
11899 last_result = void_list_node;
11902 && (chain != void_list_node || TREE_CHAIN (chain)))
11903 error ("`void' in parameter list must be entire list");
11907 /* Since there is a prototype, args are passed in their own types. */
11908 DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
11909 if (PROMOTE_PROTOTYPES
11910 && (TREE_CODE (type) == INTEGER_TYPE
11911 || TREE_CODE (type) == ENUMERAL_TYPE)
11912 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
11913 DECL_ARG_TYPE (decl) = integer_type_node;
11914 if (!any_error && init)
11917 init = check_default_argument (decl, init);
11922 if (decls == NULL_TREE)
11929 TREE_CHAIN (last_decl) = decl;
11932 list_node = tree_cons (init, type, NULL_TREE);
11933 if (result == NULL_TREE)
11935 result = list_node;
11936 last_result = result;
11940 TREE_CHAIN (last_result) = list_node;
11941 last_result = list_node;
11945 TREE_CHAIN (last_result) = NULL_TREE;
11946 /* If there are no parameters, and the function does not end
11947 with `...', then last_decl will be NULL_TREE. */
11948 if (last_decl != NULL_TREE)
11949 TREE_CHAIN (last_decl) = NULL_TREE;
11953 last_function_parms = decls;
11958 /* Called from the parser to update an element of TYPE_ARG_TYPES for some
11959 FUNCTION_TYPE with the newly parsed version of its default argument, which
11960 was previously digested as text. See snarf_defarg et al in lex.c. */
11963 replace_defarg (arg, init)
11966 if (! processing_template_decl
11967 && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
11968 cp_pedwarn ("invalid type `%T' for default argument to `%T'",
11969 TREE_TYPE (init), TREE_VALUE (arg));
11970 TREE_PURPOSE (arg) = init;
11973 /* D is a constructor or overloaded `operator='. Returns non-zero if
11974 D's arguments allow it to be a copy constructor, or copy assignment
11983 if (!DECL_FUNCTION_MEMBER_P (d))
11986 t = FUNCTION_ARG_CHAIN (d);
11987 if (DECL_CONSTRUCTOR_P (d) && DECL_HAS_IN_CHARGE_PARM_P (d))
11988 t = TREE_CHAIN (t);
11989 if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
11990 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
11991 == DECL_CONTEXT (d))
11992 && (TREE_CHAIN (t) == NULL_TREE
11993 || TREE_CHAIN (t) == void_list_node
11994 || TREE_PURPOSE (TREE_CHAIN (t))))
11999 /* These memoizing functions keep track of special properties which
12000 a class may have. `grok_ctor_properties' notices whether a class
12001 has a constructor of the form X(X&), and also complains
12002 if the class has a constructor of the form X(X).
12003 `grok_op_properties' takes notice of the various forms of
12004 operator= which are defined, as well as what sorts of type conversion
12005 may apply. Both functions take a FUNCTION_DECL as an argument. */
12008 grok_ctor_properties (ctype, decl)
12011 tree parmtypes = FUNCTION_ARG_CHAIN (decl);
12012 tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
12014 /* When a type has virtual baseclasses, a magical first int argument is
12015 added to any ctor so we can tell if the class has been initialized
12016 yet. This could screw things up in this function, so we deliberately
12017 ignore the leading int if we're in that situation. */
12018 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
12020 my_friendly_assert (parmtypes
12021 && TREE_VALUE (parmtypes) == integer_type_node,
12023 parmtypes = TREE_CHAIN (parmtypes);
12024 parmtype = TREE_VALUE (parmtypes);
12029 A non-template constructor for class X is a copy constructor if
12030 its first parameter is of type X&, const X&, volatile X& or const
12031 volatile X&, and either there are no other parameters or else all
12032 other parameters have default arguments. */
12033 if (TREE_CODE (parmtype) == REFERENCE_TYPE
12034 && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
12035 && (TREE_CHAIN (parmtypes) == NULL_TREE
12036 || TREE_CHAIN (parmtypes) == void_list_node
12037 || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
12038 && !(DECL_TEMPLATE_INSTANTIATION (decl)
12039 && is_member_template (DECL_TI_TEMPLATE (decl))))
12041 TYPE_HAS_INIT_REF (ctype) = 1;
12042 if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
12043 TYPE_HAS_CONST_INIT_REF (ctype) = 1;
12047 A declaration of a constructor for a class X is ill-formed if its
12048 first parameter is of type (optionally cv-qualified) X and either
12049 there are no other parameters or else all other parameters have
12052 We *don't* complain about member template instantiations that
12053 have this form, though; they can occur as we try to decide what
12054 constructor to use during overload resolution. Since overload
12055 resolution will never prefer such a constructor to the
12056 non-template copy constructor (which is either explicitly or
12057 implicitly defined), there's no need to worry about their
12058 existence. Theoretically, they should never even be
12059 instantiated, but that's hard to forestall. */
12060 else if (TYPE_MAIN_VARIANT (parmtype) == ctype
12061 && (TREE_CHAIN (parmtypes) == NULL_TREE
12062 || TREE_CHAIN (parmtypes) == void_list_node
12063 || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
12064 && !(DECL_TEMPLATE_INSTANTIATION (decl)
12065 && is_member_template (DECL_TI_TEMPLATE (decl))))
12067 cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
12069 SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
12072 else if (TREE_CODE (parmtype) == VOID_TYPE
12073 || TREE_PURPOSE (parmtypes) != NULL_TREE)
12074 TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
12079 /* An operator with this name can be either unary or binary. */
12085 return (name == ansi_opname [(int) INDIRECT_REF]
12086 || name == ansi_opname [(int) ADDR_EXPR]
12087 || name == ansi_opname [(int) NEGATE_EXPR]
12088 || name == ansi_opname[(int) POSTINCREMENT_EXPR]
12089 || name == ansi_opname[(int) POSTDECREMENT_EXPR]
12090 || name == ansi_opname [(int) CONVERT_EXPR]);
12093 /* An operator with this name can only be unary. */
12099 return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
12100 || name == ansi_opname [(int) BIT_NOT_EXPR]
12101 || name == ansi_opname [(int) COMPONENT_REF]
12102 || IDENTIFIER_TYPENAME_P (name));
12105 /* Do a little sanity-checking on how they declared their operator. */
12108 grok_op_properties (decl, virtualp, friendp)
12110 int virtualp, friendp;
12112 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
12113 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
12114 tree name = DECL_NAME (decl);
12116 if (current_class_type == NULL_TREE)
12123 A user-declared copy assignment operator X::operator= is a
12124 non-static non-template member function of class X with
12125 exactly one parameter of type X, X&, const X&, volatile X& or
12126 const volatile X&. */
12127 if (name == ansi_opname[(int) MODIFY_EXPR]
12128 && !(DECL_TEMPLATE_INSTANTIATION (decl)
12129 && is_member_template (DECL_TI_TEMPLATE (decl))))
12131 else if (name == ansi_opname[(int) CALL_EXPR])
12132 TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
12133 else if (name == ansi_opname[(int) ARRAY_REF])
12134 TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
12135 else if (name == ansi_opname[(int) COMPONENT_REF]
12136 || name == ansi_opname[(int) MEMBER_REF])
12137 TYPE_OVERLOADS_ARROW (current_class_type) = 1;
12138 else if (name == ansi_opname[(int) NEW_EXPR])
12139 TYPE_HAS_NEW_OPERATOR (current_class_type) = 1;
12140 else if (name == ansi_opname[(int) DELETE_EXPR])
12141 TYPE_GETS_DELETE (current_class_type) |= 1;
12142 else if (name == ansi_opname[(int) VEC_NEW_EXPR])
12143 TYPE_HAS_ARRAY_NEW_OPERATOR (current_class_type) = 1;
12144 else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
12145 TYPE_GETS_DELETE (current_class_type) |= 2;
12148 if (name == ansi_opname[(int) NEW_EXPR]
12149 || name == ansi_opname[(int) VEC_NEW_EXPR])
12151 /* When the compiler encounters the definition of A::operator new, it
12152 doesn't look at the class declaration to find out if it's static. */
12154 revert_static_member_fn (decl);
12156 /* Take care of function decl if we had syntax errors. */
12157 if (argtypes == NULL_TREE)
12159 = build_function_type (ptr_type_node,
12160 hash_tree_chain (integer_type_node,
12163 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
12165 else if (name == ansi_opname[(int) DELETE_EXPR]
12166 || name == ansi_opname[(int) VEC_DELETE_EXPR])
12169 revert_static_member_fn (decl);
12171 if (argtypes == NULL_TREE)
12173 = build_function_type (void_type_node,
12174 hash_tree_chain (ptr_type_node,
12177 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
12181 /* An operator function must either be a non-static member function
12182 or have at least one parameter of a class, a reference to a class,
12183 an enumeration, or a reference to an enumeration. 13.4.0.6 */
12184 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
12186 if (DECL_CONV_FN_P (decl)
12187 || name == ansi_opname[(int) CALL_EXPR]
12188 || name == ansi_opname[(int) MODIFY_EXPR]
12189 || name == ansi_opname[(int) COMPONENT_REF]
12190 || name == ansi_opname[(int) ARRAY_REF])
12191 cp_error ("`%D' must be a nonstatic member function", decl);
12196 if (DECL_STATIC_FUNCTION_P (decl))
12197 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
12200 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
12202 tree arg = TREE_VALUE (p);
12203 if (TREE_CODE (arg) == REFERENCE_TYPE)
12204 arg = TREE_TYPE (arg);
12206 /* This lets bad template code slip through. */
12207 if (IS_AGGR_TYPE (arg)
12208 || TREE_CODE (arg) == ENUMERAL_TYPE
12209 || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
12210 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
12214 ("`%D' must have an argument of class or enumerated type",
12221 if (name == ansi_opname[(int) CALL_EXPR])
12222 return; /* No restrictions on args. */
12224 if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
12226 tree t = TREE_TYPE (name);
12229 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
12230 const char *what = 0;
12233 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
12235 if (TREE_CODE (t) == VOID_TYPE)
12237 else if (t == current_class_type)
12238 what = "the same type";
12239 /* Don't force t to be complete here. */
12240 else if (IS_AGGR_TYPE (t)
12241 && COMPLETE_TYPE_P (t)
12242 && DERIVED_FROM_P (t, current_class_type))
12243 what = "a base class";
12246 warning ("conversion to %s%s will never use a type conversion operator",
12247 ref ? "a reference to " : "", what);
12251 if (name == ansi_opname[(int) MODIFY_EXPR])
12255 if (list_length (argtypes) != 3 && methodp)
12257 cp_error ("`%D' must take exactly one argument", decl);
12260 parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
12262 if (copy_assignment_arg_p (parmtype, virtualp)
12265 TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
12266 if (TREE_CODE (parmtype) != REFERENCE_TYPE
12267 || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
12268 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
12271 else if (name == ansi_opname[(int) COND_EXPR])
12274 cp_error ("ISO C++ prohibits overloading operator ?:");
12276 else if (ambi_op_p (name))
12278 if (list_length (argtypes) == 2)
12280 else if (list_length (argtypes) == 3)
12282 if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
12283 || name == ansi_opname[(int) POSTDECREMENT_EXPR])
12284 && ! processing_template_decl
12285 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
12288 cp_error ("postfix `%D' must take `int' as its argument",
12292 ("postfix `%D' must take `int' as its second argument",
12299 cp_error ("`%D' must take either zero or one argument", decl);
12301 cp_error ("`%D' must take either one or two arguments", decl);
12304 /* More Effective C++ rule 6. */
12306 && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12307 || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
12309 tree arg = TREE_VALUE (argtypes);
12310 tree ret = TREE_TYPE (TREE_TYPE (decl));
12311 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
12312 arg = TREE_TYPE (arg);
12313 arg = TYPE_MAIN_VARIANT (arg);
12314 if (list_length (argtypes) == 2)
12316 if (TREE_CODE (ret) != REFERENCE_TYPE
12317 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
12319 cp_warning ("prefix `%D' should return `%T'", decl,
12320 build_reference_type (arg));
12324 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
12325 cp_warning ("postfix `%D' should return `%T'", decl, arg);
12329 else if (unary_op_p (name))
12331 if (list_length (argtypes) != 2)
12334 cp_error ("`%D' must take `void'", decl);
12336 cp_error ("`%D' must take exactly one argument", decl);
12339 else /* if (binary_op_p (name)) */
12341 if (list_length (argtypes) != 3)
12344 cp_error ("`%D' must take exactly one argument", decl);
12346 cp_error ("`%D' must take exactly two arguments", decl);
12349 /* More Effective C++ rule 7. */
12351 && (name == ansi_opname [TRUTH_ANDIF_EXPR]
12352 || name == ansi_opname [TRUTH_ORIF_EXPR]
12353 || name == ansi_opname [COMPOUND_EXPR]))
12354 cp_warning ("user-defined `%D' always evaluates both arguments",
12358 /* Effective C++ rule 23. */
12360 && list_length (argtypes) == 3
12361 && (name == ansi_opname [PLUS_EXPR]
12362 || name == ansi_opname [MINUS_EXPR]
12363 || name == ansi_opname [TRUNC_DIV_EXPR]
12364 || name == ansi_opname [MULT_EXPR])
12365 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
12366 cp_warning ("`%D' should return by value", decl);
12369 for (; argtypes && argtypes != void_list_node;
12370 argtypes = TREE_CHAIN (argtypes))
12371 if (TREE_PURPOSE (argtypes))
12373 TREE_PURPOSE (argtypes) = NULL_TREE;
12374 if (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12375 || name == ansi_opname[(int) POSTDECREMENT_EXPR])
12378 cp_pedwarn ("`%D' cannot have default arguments", decl);
12381 cp_error ("`%D' cannot have default arguments", decl);
12387 static const char *
12389 enum tag_types code;
12402 my_friendly_abort (981122);
12406 /* Get the struct, enum or union (CODE says which) with tag NAME.
12407 Define the tag as a forward-reference if it is not defined.
12409 C++: If a class derivation is given, process it here, and report
12410 an error if multiple derivation declarations are not identical.
12412 If this is a definition, come in through xref_tag and only look in
12413 the current frame for the name (since C++ allows new names in any
12417 xref_tag (code_type_node, name, globalize)
12418 tree code_type_node;
12422 enum tag_types tag_code;
12423 enum tree_code code;
12424 register tree ref, t;
12425 struct binding_level *b = current_binding_level;
12427 tree attributes = NULL_TREE;
12428 tree context = NULL_TREE;
12430 /* If we are called from the parser, code_type_node will sometimes be a
12431 TREE_LIST. This indicates that the user wrote
12432 "class __attribute__ ((foo)) bar". Extract the attributes so we can
12434 if (TREE_CODE (code_type_node) == TREE_LIST)
12436 attributes = TREE_PURPOSE (code_type_node);
12437 code_type_node = TREE_VALUE (code_type_node);
12440 tag_code = (enum tag_types) tree_low_cst (code_type_node, 1);
12445 code = RECORD_TYPE;
12451 code = ENUMERAL_TYPE;
12454 my_friendly_abort (18);
12457 /* If a cross reference is requested, look up the type
12458 already defined for this tag and return it. */
12462 name = TYPE_IDENTIFIER (t);
12466 t = IDENTIFIER_TYPE_VALUE (name);
12468 if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
12469 && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
12474 /* If we know we are defining this tag, only look it up in
12475 this scope and don't try to find it as a type. */
12476 ref = lookup_tag (code, name, b, 1);
12482 /* [dcl.type.elab] If the identifier resolves to a
12483 typedef-name or a template type-parameter, the
12484 elaborated-type-specifier is ill-formed. */
12485 if (t != TYPE_MAIN_VARIANT (t)
12486 || (CLASS_TYPE_P (t) && TYPE_WAS_ANONYMOUS (t)))
12487 cp_pedwarn ("using typedef-name `%D' after `%s'",
12488 TYPE_NAME (t), tag_name (tag_code));
12489 else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
12490 cp_error ("using template type parameter `%T' after `%s'",
12491 t, tag_name (tag_code));
12496 ref = lookup_tag (code, name, b, 0);
12500 /* Try finding it as a type declaration. If that wins,
12502 ref = lookup_name (name, 1);
12504 if (ref != NULL_TREE
12505 && processing_template_decl
12506 && DECL_CLASS_TEMPLATE_P (ref)
12507 && template_class_depth (current_class_type) == 0)
12508 /* Since GLOBALIZE is true, we're declaring a global
12509 template, so we want this type. */
12510 ref = DECL_TEMPLATE_RESULT (ref);
12512 if (ref && TREE_CODE (ref) == TYPE_DECL
12513 && TREE_CODE (TREE_TYPE (ref)) == code)
12514 ref = TREE_TYPE (ref);
12519 if (ref && current_class_type
12520 && template_class_depth (current_class_type)
12521 && PROCESSING_REAL_TEMPLATE_DECL_P ())
12523 /* Since GLOBALIZE is non-zero, we are not looking at a
12524 definition of this tag. Since, in addition, we are currently
12525 processing a (member) template declaration of a template
12526 class, we must be very careful; consider:
12533 { template <class V>
12534 friend struct S1; };
12536 Here, the S2::S1 declaration should not be confused with the
12537 outer declaration. In particular, the inner version should
12538 have a template parameter of level 2, not level 1. This
12539 would be particularly important if the member declaration
12542 template <class V = U> friend struct S1;
12544 say, when we should tsubst into `U' when instantiating
12545 S2. On the other hand, when presented with:
12555 we must find the inner binding eventually. We
12556 accomplish this by making sure that the new type we
12557 create to represent this declaration has the right
12559 context = TYPE_CONTEXT (ref);
12566 /* If no such tag is yet defined, create a forward-reference node
12567 and record it as the "definition".
12568 When a real declaration of this type is found,
12569 the forward-reference will be altered into a real type. */
12570 if (code == ENUMERAL_TYPE)
12572 cp_error ("use of enum `%#D' without previous declaration", name);
12574 ref = make_node (ENUMERAL_TYPE);
12576 /* Give the type a default layout like unsigned int
12577 to avoid crashing if it does not get defined. */
12578 TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12579 TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
12580 TREE_UNSIGNED (ref) = 1;
12581 TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12582 TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12583 TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12585 /* Enable us to recognize when a type is created in class context.
12586 To do nested classes correctly, this should probably be cleared
12587 out when we leave this classes scope. Currently this in only
12588 done in `start_enum'. */
12590 pushtag (name, ref, globalize);
12594 struct binding_level *old_b = class_binding_level;
12596 ref = make_aggr_type (code);
12597 TYPE_CONTEXT (ref) = context;
12599 #ifdef NONNESTED_CLASSES
12600 /* Class types don't nest the way enums do. */
12601 class_binding_level = (struct binding_level *)0;
12603 pushtag (name, ref, globalize);
12604 class_binding_level = old_b;
12609 if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
12610 redeclare_class_template (ref, current_template_parms);
12613 /* Until the type is defined, tentatively accept whatever
12614 structure tag the user hands us. */
12615 if (!COMPLETE_TYPE_P (ref)
12616 && ref != current_class_type
12617 /* Have to check this, in case we have contradictory tag info. */
12618 && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12620 if (tag_code == class_type)
12621 CLASSTYPE_DECLARED_CLASS (ref) = 1;
12622 else if (tag_code == record_type)
12623 CLASSTYPE_DECLARED_CLASS (ref) = 0;
12626 TREE_TYPE (ref) = attributes;
12632 xref_tag_from_type (old, id, globalize)
12636 tree code_type_node;
12638 if (TREE_CODE (old) == RECORD_TYPE)
12639 code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12640 ? class_type_node : record_type_node);
12642 code_type_node = union_type_node;
12644 if (id == NULL_TREE)
12645 id = TYPE_IDENTIFIER (old);
12647 return xref_tag (code_type_node, id, globalize);
12650 /* REF is a type (named NAME), for which we have just seen some
12651 baseclasses. BINFO is a list of those baseclasses; the
12652 TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
12653 the base-class. CODE_TYPE_NODE indicates whether REF is a class,
12654 struct, or union. */
12657 xref_basetypes (code_type_node, name, ref, binfo)
12658 tree code_type_node;
12662 /* In the declaration `A : X, Y, ... Z' we mark all the types
12663 (A, X, Y, ..., Z) so we can check for duplicates. */
12668 enum tag_types tag_code = (enum tag_types) tree_low_cst (code_type_node, 1);
12670 if (tag_code == union_type)
12672 cp_error ("derived union `%T' invalid", ref);
12676 len = list_length (binfo);
12678 /* First, make sure that any templates in base-classes are
12679 instantiated. This ensures that if we call ourselves recursively
12680 we do not get confused about which classes are marked and which
12682 for (base = binfo; base; base = TREE_CHAIN (base))
12683 complete_type (TREE_VALUE (base));
12685 SET_CLASSTYPE_MARKED (ref);
12686 BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12688 for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12690 /* The base of a derived struct is public by default. */
12692 = (TREE_PURPOSE (binfo) == access_public_node
12693 || TREE_PURPOSE (binfo) == access_public_virtual_node
12694 || (tag_code != class_type
12695 && (TREE_PURPOSE (binfo) == access_default_node
12696 || TREE_PURPOSE (binfo) == access_default_virtual_node)));
12698 = (TREE_PURPOSE (binfo) == access_protected_node
12699 || TREE_PURPOSE (binfo) == access_protected_virtual_node);
12701 = (TREE_PURPOSE (binfo) == access_private_virtual_node
12702 || TREE_PURPOSE (binfo) == access_protected_virtual_node
12703 || TREE_PURPOSE (binfo) == access_public_virtual_node
12704 || TREE_PURPOSE (binfo) == access_default_virtual_node);
12705 tree basetype = TREE_VALUE (binfo);
12708 if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12709 basetype = TREE_TYPE (basetype);
12711 || (TREE_CODE (basetype) != RECORD_TYPE
12712 && TREE_CODE (basetype) != TYPENAME_TYPE
12713 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
12714 && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
12716 cp_error ("base type `%T' fails to be a struct or class type",
12717 TREE_VALUE (binfo));
12721 GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
12723 /* This code replaces similar code in layout_basetypes.
12724 We put the complete_type first for implicit `typename'. */
12725 if (!COMPLETE_TYPE_P (basetype)
12726 && ! (current_template_parms && uses_template_parms (basetype)))
12728 cp_error ("base class `%T' has incomplete type", basetype);
12733 if (CLASSTYPE_MARKED (basetype))
12735 if (basetype == ref)
12736 cp_error ("recursive type `%T' undefined", basetype);
12738 cp_error ("duplicate base type `%T' invalid", basetype);
12742 if (TYPE_FOR_JAVA (basetype)
12743 && (current_lang_stack
12744 == &VARRAY_TREE (current_lang_base, 0)))
12745 TYPE_FOR_JAVA (ref) = 1;
12747 /* Note that the BINFO records which describe individual
12748 inheritances are *not* shared in the lattice! They
12749 cannot be shared because a given baseclass may be
12750 inherited with different `accessibility' by different
12751 derived classes. (Each BINFO record describing an
12752 individual inheritance contains flags which say what
12753 the `accessibility' of that particular inheritance is.) */
12756 = make_binfo (size_zero_node, basetype,
12757 CLASS_TYPE_P (basetype)
12758 ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12759 CLASS_TYPE_P (basetype)
12760 ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
12762 TREE_VEC_ELT (binfos, i) = base_binfo;
12763 TREE_VIA_PUBLIC (base_binfo) = via_public;
12764 TREE_VIA_PROTECTED (base_binfo) = via_protected;
12765 TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12766 BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12768 /* We need to unshare the binfos now so that lookups during class
12769 definition work. */
12770 unshare_base_binfos (base_binfo);
12772 SET_CLASSTYPE_MARKED (basetype);
12774 /* We are free to modify these bits because they are meaningless
12775 at top level, and BASETYPE is a top-level type. */
12776 if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
12778 TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
12779 /* Converting to a virtual base class requires looking
12780 up the offset of the virtual base. */
12781 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
12784 if (CLASS_TYPE_P (basetype))
12786 TYPE_HAS_NEW_OPERATOR (ref)
12787 |= TYPE_HAS_NEW_OPERATOR (basetype);
12788 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
12789 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
12790 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12791 /* If the base-class uses multiple inheritance, so do we. */
12792 TYPE_USES_MULTIPLE_INHERITANCE (ref)
12793 |= TYPE_USES_MULTIPLE_INHERITANCE (basetype);
12794 /* Likewise, if converting to a base of the base may require
12795 code, then we may need to generate code to convert to a
12797 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref)
12798 |= TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (basetype);
12805 TREE_VEC_LENGTH (binfos) = i;
12807 BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
12811 TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
12812 /* If there is more than one non-empty they cannot be at the same
12814 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
12817 /* Unmark all the types. */
12819 CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
12820 CLEAR_CLASSTYPE_MARKED (ref);
12822 /* Now that we know all the base-classes, set up the list of virtual
12824 get_vbase_types (ref);
12828 /* Begin compiling the definition of an enumeration type.
12829 NAME is its name (or null if anonymous).
12830 Returns the type object, as yet incomplete.
12831 Also records info about it so that build_enumerator
12832 may be used to declare the individual values as they are read. */
12838 register tree enumtype = NULL_TREE;
12839 struct binding_level *b = current_binding_level;
12841 /* If this is the real definition for a previous forward reference,
12842 fill in the contents in the same object that used to be the
12843 forward reference. */
12845 if (name != NULL_TREE)
12846 enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
12848 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12850 cp_error ("multiple definition of `%#T'", enumtype);
12851 cp_error_at ("previous definition here", enumtype);
12852 /* Clear out TYPE_VALUES, and start again. */
12853 TYPE_VALUES (enumtype) = NULL_TREE;
12857 enumtype = make_node (ENUMERAL_TYPE);
12858 pushtag (name, enumtype, 0);
12861 if (current_class_type)
12862 TREE_ADDRESSABLE (b->tags) = 1;
12864 GNU_xref_decl (current_function_decl, enumtype);
12868 /* After processing and defining all the values of an enumeration type,
12869 install their decls in the enumeration type and finish it off.
12870 ENUMTYPE is the type object and VALUES a list of name-value pairs.
12871 Returns ENUMTYPE. */
12874 finish_enum (enumtype)
12877 register tree minnode = NULL_TREE, maxnode = NULL_TREE;
12878 /* Calculate the maximum value of any enumerator in this type. */
12880 tree values = TYPE_VALUES (enumtype);
12885 for (pair = values; pair; pair = TREE_CHAIN (pair))
12890 /* The TREE_VALUE is a CONST_DECL for this enumeration
12892 decl = TREE_VALUE (pair);
12896 Following the closing brace of an enum-specifier, each
12897 enumerator has the type of its enumeration. Prior to the
12898 closing brace, the type of each enumerator is the type of
12899 its initializing value. */
12900 TREE_TYPE (decl) = enumtype;
12902 /* The DECL_INITIAL will be NULL if we are processing a
12903 template declaration and this enumeration constant had no
12904 explicit initializer. */
12905 value = DECL_INITIAL (decl);
12906 if (value && !processing_template_decl)
12908 /* Set the TREE_TYPE for the VALUE as well. That's so
12909 that when we call decl_constant_value we get an
12910 entity of the right type (but with the constant
12911 value). Since we shouldn't ever call
12912 decl_constant_value on a template type, there's no
12913 reason to do that when processing_template_decl.
12914 And, if the expression is something like a
12915 TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
12916 wreak havoc on the intended type of the expression.
12918 Of course, there's also no point in trying to compute
12919 minimum or maximum values if we're in a template. */
12920 TREE_TYPE (value) = enumtype;
12923 minnode = maxnode = value;
12924 else if (tree_int_cst_lt (maxnode, value))
12926 else if (tree_int_cst_lt (value, minnode))
12930 if (processing_template_decl)
12931 /* If this is just a template, leave the CONST_DECL
12932 alone. That way tsubst_copy will find CONST_DECLs for
12933 CONST_DECLs, and not INTEGER_CSTs. */
12936 /* In the list we're building up, we want the enumeration
12937 values, not the CONST_DECLs. */
12938 TREE_VALUE (pair) = value;
12942 maxnode = minnode = integer_zero_node;
12944 TYPE_VALUES (enumtype) = nreverse (values);
12946 if (processing_template_decl)
12948 tree scope = current_scope ();
12949 if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12950 add_tree (build_min (TAG_DEFN, enumtype));
12954 int unsignedp = tree_int_cst_sgn (minnode) >= 0;
12955 int lowprec = min_precision (minnode, unsignedp);
12956 int highprec = min_precision (maxnode, unsignedp);
12957 int precision = MAX (lowprec, highprec);
12960 TYPE_SIZE (enumtype) = NULL_TREE;
12962 /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'. */
12964 TYPE_PRECISION (enumtype) = precision;
12966 fixup_unsigned_type (enumtype);
12968 fixup_signed_type (enumtype);
12970 if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
12971 /* Use the width of the narrowest normal C type which is wide
12973 TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
12976 TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
12978 TYPE_SIZE (enumtype) = 0;
12979 layout_type (enumtype);
12981 /* Fix up all variant types of this enum type. */
12982 for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
12983 tem = TYPE_NEXT_VARIANT (tem))
12985 TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
12986 TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
12987 TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
12988 TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
12989 TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
12990 TYPE_MODE (tem) = TYPE_MODE (enumtype);
12991 TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
12992 TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
12993 TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
12996 /* Finish debugging output for this type. */
12997 rest_of_type_compilation (enumtype, namespace_bindings_p ());
13003 /* Build and install a CONST_DECL for an enumeration constant of the
13004 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
13005 Assignment of sequential values by default is handled here. */
13008 build_enumerator (name, value, enumtype)
13018 /* Remove no-op casts from the value. */
13020 STRIP_TYPE_NOPS (value);
13022 if (! processing_template_decl)
13024 /* Validate and default VALUE. */
13025 if (value != NULL_TREE)
13027 value = decl_constant_value (value);
13029 if (TREE_CODE (value) == INTEGER_CST)
13031 value = default_conversion (value);
13032 constant_expression_warning (value);
13036 cp_error ("enumerator value for `%D' not integer constant", name);
13041 /* Default based on previous value. */
13042 if (value == NULL_TREE && ! processing_template_decl)
13046 if (TYPE_VALUES (enumtype))
13048 /* The next value is the previous value ... */
13049 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
13050 /* ... plus one. */
13051 value = build_binary_op (PLUS_EXPR,
13055 if (tree_int_cst_lt (value, prev_value))
13056 cp_error ("overflow in enumeration values at `%D'", name);
13059 value = integer_zero_node;
13062 /* Remove no-op casts from the value. */
13064 STRIP_TYPE_NOPS (value);
13066 /* To fix MAX_VAL enum consts. (bkoz) */
13067 TREE_TYPE (value) = integer_type_node;
13071 /* We always have to copy here; not all INTEGER_CSTs are unshared.
13072 Even in other cases, we will later (in finish_enum) be setting
13073 the type of VALUE. But, we don't need to make a copy if this
13074 VALUE is one of the enumeration constants for this same
13075 enumeration type. */
13076 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
13077 if (TREE_VALUE (values) == value)
13079 /* If we didn't break out of the loop, then we do need a copy. */
13080 if (!values && value)
13081 value = copy_node (value);
13083 /* C++ associates enums with global, function, or class declarations. */
13084 context = current_scope ();
13086 /* Build the actual enumeration constant. Note that the enumeration
13087 constants have the type of their initializers until the
13088 enumeration is complete:
13092 Following the closing brace of an enum-specifier, each enumer-
13093 ator has the type of its enumeration. Prior to the closing
13094 brace, the type of each enumerator is the type of its
13095 initializing value.
13097 In finish_enum we will reset the type. Of course, if we're
13098 processing a template, there may be no value. */
13099 type = value ? TREE_TYPE (value) : NULL_TREE;
13101 if (context && context == current_class_type)
13102 /* This enum declaration is local to the class. We need the full
13103 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
13104 decl = build_lang_decl (CONST_DECL, name, type);
13106 /* It's a global enum, or it's local to a function. (Note local to
13107 a function could mean local to a class method. */
13108 decl = build_decl (CONST_DECL, name, type);
13110 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
13111 DECL_INITIAL (decl) = value;
13112 TREE_READONLY (decl) = 1;
13114 if (context && context == current_class_type)
13115 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
13116 on the TYPE_FIELDS list for `S'. (That's so that you can say
13117 things like `S::i' later.) */
13118 finish_member_declaration (decl);
13122 GNU_xref_decl (current_function_decl, decl);
13125 /* Add this enumeration constant to the list for this type. */
13126 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
13130 static int function_depth;
13132 /* We're defining DECL. Make sure that it's type is OK. */
13135 check_function_type (decl)
13138 tree fntype = TREE_TYPE (decl);
13139 tree return_type = complete_type (TREE_TYPE (fntype));
13141 /* In a function definition, arg types must be complete. */
13142 require_complete_types_for_parms (current_function_parms);
13144 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
13146 cp_error ("return type `%#T' is incomplete", TREE_TYPE (fntype));
13148 /* Make it return void instead, but don't change the
13149 type of the DECL_RESULT, in case we have a named return value. */
13150 if (TREE_CODE (fntype) == METHOD_TYPE)
13152 tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
13154 = build_cplus_method_type (ctype,
13156 FUNCTION_ARG_CHAIN (decl));
13160 = build_function_type (void_type_node,
13161 TYPE_ARG_TYPES (TREE_TYPE (decl)));
13163 = build_exception_variant (fntype,
13164 TYPE_RAISES_EXCEPTIONS (fntype));
13167 abstract_virtuals_error (decl, TREE_TYPE (fntype));
13170 /* Create the FUNCTION_DECL for a function definition.
13171 DECLSPECS and DECLARATOR are the parts of the declaration;
13172 they describe the function's name and the type it returns,
13173 but twisted together in a fashion that parallels the syntax of C.
13175 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
13176 DECLARATOR is really the DECL for the function we are about to
13177 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
13178 indicating that the function is an inline defined in-class, and
13179 SF_EXPAND indicating that we should generate RTL for this
13182 This function creates a binding context for the function body
13183 as well as setting up the FUNCTION_DECL in current_function_decl.
13185 Returns 1 on success. If the DECLARATOR is not suitable for a function
13186 (it defines a datum instead), we return 0, which tells
13187 yyparse to report a parse error.
13189 For C++, we must first check whether that datum makes any sense.
13190 For example, "class A local_a(1,2);" means that variable local_a
13191 is an aggregate of type A, which should have a constructor
13192 applied to it with the argument list [1, 2]. */
13195 start_function (declspecs, declarator, attrs, flags)
13196 tree declspecs, declarator, attrs;
13200 tree ctype = NULL_TREE;
13203 extern int have_extern_spec;
13204 extern int used_extern_spec;
13205 int doing_friend = 0;
13206 struct binding_level *bl;
13208 /* Sanity check. */
13209 my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
13210 my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
13212 /* This should only be done once on the top most decl. */
13213 if (have_extern_spec && !used_extern_spec)
13215 declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
13216 used_extern_spec = 1;
13219 if (flags & SF_PRE_PARSED)
13221 decl1 = declarator;
13223 fntype = TREE_TYPE (decl1);
13224 if (TREE_CODE (fntype) == METHOD_TYPE)
13225 ctype = TYPE_METHOD_BASETYPE (fntype);
13227 /* ISO C++ 11.4/5. A friend function defined in a class is in
13228 the (lexical) scope of the class in which it is defined. */
13229 if (!ctype && DECL_FRIEND_P (decl1))
13231 ctype = DECL_FRIEND_CONTEXT (decl1);
13233 /* CTYPE could be null here if we're dealing with a template;
13234 for example, `inline friend float foo()' inside a template
13235 will have no CTYPE set. */
13236 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
13242 last_function_parms = DECL_ARGUMENTS (decl1);
13243 last_function_parm_tags = NULL_TREE;
13247 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
13248 /* If the declarator is not suitable for a function definition,
13249 cause a syntax error. */
13250 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
13252 fntype = TREE_TYPE (decl1);
13254 restype = TREE_TYPE (fntype);
13255 if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
13257 cp_error ("semicolon missing after declaration of `%#T'", restype);
13258 shadow_tag (build_tree_list (NULL_TREE, restype));
13259 CLASSTYPE_GOT_SEMICOLON (restype) = 1;
13260 if (TREE_CODE (fntype) == FUNCTION_TYPE)
13261 fntype = build_function_type (integer_type_node,
13262 TYPE_ARG_TYPES (fntype));
13264 fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
13266 TYPE_ARG_TYPES (fntype));
13267 TREE_TYPE (decl1) = fntype;
13270 if (TREE_CODE (fntype) == METHOD_TYPE)
13271 ctype = TYPE_METHOD_BASETYPE (fntype);
13272 else if (DECL_MAIN_P (decl1))
13274 /* If this doesn't return integer_type, complain. */
13275 if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
13277 if (pedantic || warn_return_type)
13278 pedwarn ("return type for `main' changed to `int'");
13279 TREE_TYPE (decl1) = fntype = default_function_type;
13284 /* Sometimes we don't notice that a function is a static member, and
13285 build a METHOD_TYPE for it. Fix that up now. */
13286 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
13287 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
13289 revert_static_member_fn (decl1);
13290 last_function_parms = TREE_CHAIN (last_function_parms);
13294 /* Warn if function was previously implicitly declared
13295 (but not if we warned then). */
13296 if (! warn_implicit
13297 && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
13298 cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
13300 /* Set up current_class_type, and enter the scope of the class, if
13303 push_nested_class (ctype, 1);
13304 else if (DECL_STATIC_FUNCTION_P (decl1))
13305 push_nested_class (DECL_CONTEXT (decl1), 2);
13307 /* Now that we have entered the scope of the class, we must restore
13308 the bindings for any template parameters surrounding DECL1, if it
13309 is an inline member template. (Order is important; consider the
13310 case where a template parameter has the same name as a field of
13311 the class.) It is not until after this point that
13312 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
13313 if (flags & SF_INCLASS_INLINE)
13314 maybe_begin_member_template_processing (decl1);
13316 /* Effective C++ rule 15. See also c_expand_return. */
13318 && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
13319 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
13320 cp_warning ("`operator=' should return a reference to `*this'");
13322 /* Make the init_value nonzero so pushdecl knows this is not tentative.
13323 error_mark_node is replaced below (in poplevel) with the BLOCK. */
13324 if (!DECL_INITIAL (decl1))
13325 DECL_INITIAL (decl1) = error_mark_node;
13327 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
13328 SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
13331 /* This function exists in static storage.
13332 (This does not mean `static' in the C sense!) */
13333 TREE_STATIC (decl1) = 1;
13335 /* We must call push_template_decl after current_class_type is set
13336 up. (If we are processing inline definitions after exiting a
13337 class scope, current_class_type will be NULL_TREE until set above
13338 by push_nested_class.) */
13339 if (processing_template_decl)
13340 decl1 = push_template_decl (decl1);
13342 /* We are now in the scope of the function being defined. */
13343 current_function_decl = decl1;
13345 /* Save the parm names or decls from this function's declarator
13346 where store_parm_decls will find them. */
13347 current_function_parms = last_function_parms;
13348 current_function_parm_tags = last_function_parm_tags;
13350 /* Make sure the parameter and return types are reasonable. When
13351 you declare a function, these types can be incomplete, but they
13352 must be complete when you define the function. */
13353 if (! processing_template_decl)
13354 check_function_type (decl1);
13356 /* Build the return declaration for the function. */
13357 restype = TREE_TYPE (fntype);
13358 if (!processing_template_decl)
13360 if (!DECL_RESULT (decl1))
13362 DECL_RESULT (decl1)
13363 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13364 c_apply_type_quals_to_decl (CP_TYPE_QUALS (restype),
13365 DECL_RESULT (decl1));
13369 /* Just use `void'. Nobody will ever look at this anyhow. */
13370 DECL_RESULT (decl1) = build_decl (RESULT_DECL, 0, void_type_node);
13372 /* Initialize RTL machinery. We cannot do this until
13373 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
13374 even when processing a template; this is how we get
13375 CFUN set up, and our per-function variables initialized. */
13376 bl = current_binding_level;
13377 init_function_start (decl1, input_filename, lineno);
13378 current_binding_level = bl;
13379 expanding_p = (flags & SF_EXPAND) != 0;
13381 /* Even though we're inside a function body, we still don't want to
13382 call expand_expr to calculate the size of a variable-sized array.
13383 We haven't necessarily assigned RTL to all variables yet, so it's
13384 not safe to try to expand expressions involving them. */
13385 immediate_size_expand = 0;
13386 cfun->x_dont_save_pending_sizes_p = 1;
13388 /* If we're building a statement-tree, start the tree now. */
13389 if (processing_template_decl || !expanding_p)
13390 begin_stmt_tree (&DECL_SAVED_TREE (decl1));
13392 /* Let the user know we're compiling this function. */
13393 if (processing_template_decl || !building_stmt_tree ())
13394 announce_function (decl1);
13396 /* Record the decl so that the function name is defined.
13397 If we already have a decl for this name, and it is a FUNCTION_DECL,
13398 use the old decl. */
13399 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
13401 /* A specialization is not used to guide overload resolution. */
13402 if ((flag_guiding_decls
13403 || !DECL_TEMPLATE_SPECIALIZATION (decl1))
13404 && ! DECL_FUNCTION_MEMBER_P (decl1))
13405 decl1 = pushdecl (decl1);
13408 /* We need to set the DECL_CONTEXT. */
13409 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13410 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13411 /* And make sure we have enough default args. */
13412 check_default_args (decl1);
13414 fntype = TREE_TYPE (decl1);
13417 /* Reset these in case the call to pushdecl changed them. */
13418 current_function_decl = decl1;
13419 cfun->decl = decl1;
13421 /* Initialize the per-function data. */
13422 if (!DECL_PENDING_INLINE_P (decl1) && DECL_SAVED_FUNCTION_DATA (decl1))
13424 /* If we already parsed this function, and we're just expanding it
13425 now, restore saved state. */
13426 struct binding_level *bl = current_binding_level;
13427 *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (decl1);
13428 current_binding_level = bl;
13430 /* This function is being processed in whole-function mode; we
13431 already did semantic analysis. */
13432 cfun->x_whole_function_mode_p = 1;
13434 /* If we decided that we didn't want to inline this function,
13435 make sure the back-end knows that. */
13436 if (!current_function_cannot_inline)
13437 current_function_cannot_inline = cp_function_chain->cannot_inline;
13439 /* We don't need the saved data anymore. */
13440 free (DECL_SAVED_FUNCTION_DATA (decl1));
13441 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
13443 else if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
13445 /* We know that this was set up by `grokclassfn'. We do not
13446 wait until `store_parm_decls', since evil parse errors may
13447 never get us to that point. Here we keep the consistency
13448 between `current_class_type' and `current_class_ptr'. */
13449 tree t = DECL_ARGUMENTS (decl1);
13451 my_friendly_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL,
13453 my_friendly_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE,
13456 cp_function_chain->x_current_class_ref
13457 = build_indirect_ref (t, NULL_PTR);
13458 cp_function_chain->x_current_class_ptr = t;
13460 /* Constructors and destructors need to know whether they're "in
13461 charge" of initializing virtual base classes. */
13462 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
13463 current_in_charge_parm = TREE_CHAIN (t);
13466 if (DECL_INTERFACE_KNOWN (decl1))
13468 tree ctx = decl_function_context (decl1);
13470 if (DECL_NOT_REALLY_EXTERN (decl1))
13471 DECL_EXTERNAL (decl1) = 0;
13473 if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx)
13474 && TREE_PUBLIC (ctx))
13475 /* This is a function in a local class in an extern inline
13477 comdat_linkage (decl1);
13479 /* If this function belongs to an interface, it is public.
13480 If it belongs to someone else's interface, it is also external.
13481 This only affects inlines and template instantiations. */
13482 else if (interface_unknown == 0
13483 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13484 || flag_alt_external_templates))
13486 if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
13487 || processing_template_decl)
13489 DECL_EXTERNAL (decl1)
13491 || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines
13492 && !DECL_VINDEX (decl1)));
13494 /* For WIN32 we also want to put these in linkonce sections. */
13495 maybe_make_one_only (decl1);
13498 DECL_EXTERNAL (decl1) = 0;
13499 DECL_NOT_REALLY_EXTERN (decl1) = 0;
13500 DECL_INTERFACE_KNOWN (decl1) = 1;
13502 else if (interface_unknown && interface_only
13503 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13504 || flag_alt_external_templates))
13506 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13507 interface, we will have interface_only set but not
13508 interface_known. In that case, we don't want to use the normal
13509 heuristics because someone will supply a #pragma implementation
13510 elsewhere, and deducing it here would produce a conflict. */
13511 comdat_linkage (decl1);
13512 DECL_EXTERNAL (decl1) = 0;
13513 DECL_INTERFACE_KNOWN (decl1) = 1;
13514 DECL_DEFER_OUTPUT (decl1) = 1;
13518 /* This is a definition, not a reference.
13519 So clear DECL_EXTERNAL. */
13520 DECL_EXTERNAL (decl1) = 0;
13522 if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
13523 && ! DECL_INTERFACE_KNOWN (decl1)
13524 /* Don't try to defer nested functions for now. */
13525 && ! decl_function_context (decl1))
13526 DECL_DEFER_OUTPUT (decl1) = 1;
13528 DECL_INTERFACE_KNOWN (decl1) = 1;
13531 if (doing_semantic_analysis_p ())
13534 current_binding_level->parm_flag = 1;
13538 cplus_decl_attributes (decl1, NULL_TREE, attrs);
13540 if (!building_stmt_tree ())
13542 GNU_xref_function (decl1, current_function_parms);
13543 make_function_rtl (decl1);
13546 /* Promote the value to int before returning it. */
13547 if (C_PROMOTING_INTEGER_TYPE_P (restype))
13548 restype = type_promotes_to (restype);
13550 /* If this fcn was already referenced via a block-scope `extern' decl
13551 (or an implicit decl), propagate certain information about the usage. */
13552 if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
13553 TREE_ADDRESSABLE (decl1) = 1;
13555 if (DECL_RESULT (decl1) == NULL_TREE)
13557 DECL_RESULT (decl1)
13558 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13559 TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13560 TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
13565 if (DECL_DESTRUCTOR_P (decl1))
13567 dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13568 DECL_CONTEXT (dtor_label) = current_function_decl;
13570 /* Under the old ABI we return `this' from constructors, so we make
13571 ordinary `return' statements in constructors jump to CTOR_LABEL;
13572 from there we return `this'. Under the new ABI, we don't bother
13573 with any of this. By not setting CTOR_LABEL the remainder of the
13574 machinery is automatically disabled. */
13575 else if (!flag_new_abi && DECL_CONSTRUCTOR_P (decl1))
13577 ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13578 DECL_CONTEXT (ctor_label) = current_function_decl;
13584 /* Called after store_parm_decls for a function-try-block. */
13587 expand_start_early_try_stmts ()
13589 expand_start_try_stmts ();
13592 /* Store the parameter declarations into the current function declaration.
13593 This is called after parsing the parameter declarations, before
13594 digesting the body of the function.
13596 Also install to binding contour return value identifier, if any. */
13599 store_parm_decls ()
13601 register tree fndecl = current_function_decl;
13602 register tree parm;
13603 int parms_have_cleanups = 0;
13604 tree cleanups = NULL_TREE;
13606 /* This is a list of types declared among parms in a prototype. */
13607 tree parmtags = current_function_parm_tags;
13609 /* This is a chain of any other decls that came in among the parm
13610 declarations. If a parm is declared with enum {foo, bar} x;
13611 then CONST_DECLs for foo and bar are put here. */
13612 tree nonparms = NULL_TREE;
13614 /* Create a binding level for the parms. */
13615 if (!building_stmt_tree ())
13616 expand_start_bindings (2);
13618 if (current_function_parms)
13620 /* This case is when the function was defined with an ANSI prototype.
13621 The parms already have decls, so we need not do anything here
13622 except record them as in effect
13623 and complain if any redundant old-style parm decls were written. */
13625 tree specparms = current_function_parms;
13628 if (doing_semantic_analysis_p ())
13630 /* Must clear this because it might contain TYPE_DECLs declared
13632 storedecls (NULL_TREE);
13634 /* If we're doing semantic analysis, then we'll call pushdecl
13635 for each of these. We must do them in reverse order so that
13636 they end in the correct forward order. */
13637 specparms = nreverse (specparms);
13640 for (parm = specparms; parm; parm = next)
13642 next = TREE_CHAIN (parm);
13643 if (TREE_CODE (parm) == PARM_DECL)
13645 tree type = TREE_TYPE (parm);
13647 if (doing_semantic_analysis_p ())
13651 if (DECL_NAME (parm) == NULL_TREE
13652 || TREE_CODE (parm) != VOID_TYPE)
13655 cp_error ("parameter `%D' declared void", parm);
13657 cleanup = (processing_template_decl
13659 : maybe_build_cleanup (parm));
13662 cleanups = tree_cons (parm, cleanup, cleanups);
13664 else if (type != error_mark_node
13665 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
13666 parms_have_cleanups = 1;
13670 /* If we find an enum constant or a type tag,
13671 put it aside for the moment. */
13672 TREE_CHAIN (parm) = NULL_TREE;
13673 nonparms = chainon (nonparms, parm);
13677 if (doing_semantic_analysis_p ())
13679 /* Get the decls in their original chain order
13680 and record in the function. This is all and only the
13681 PARM_DECLs that were pushed into scope by the loop above. */
13682 DECL_ARGUMENTS (fndecl) = getdecls ();
13683 storetags (chainon (parmtags, gettags ()));
13687 DECL_ARGUMENTS (fndecl) = NULL_TREE;
13689 /* Now store the final chain of decls for the arguments
13690 as the decl-chain of the current lexical scope.
13691 Put the enumerators in as well, at the front so that
13692 DECL_ARGUMENTS is not modified. */
13693 if (doing_semantic_analysis_p ())
13694 storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
13696 /* Initialize the RTL code for the function. */
13697 DECL_SAVED_INSNS (fndecl) = 0;
13698 if (! building_stmt_tree ())
13699 expand_function_start (fndecl, parms_have_cleanups);
13701 current_function_parms_stored = 1;
13703 /* If this function is `main', emit a call to `__main'
13704 to run global initializers, etc. */
13705 if (DECL_MAIN_P (fndecl) && !building_stmt_tree ())
13706 expand_main_function ();
13708 /* Now that we have initialized the parms, we can start their
13709 cleanups. We cannot do this before, since expand_decl_cleanup
13710 should not be called before the parm can be used. */
13713 finish_decl_cleanup (TREE_PURPOSE (cleanups),
13714 TREE_VALUE (cleanups));
13715 cleanups = TREE_CHAIN (cleanups);
13718 /* Create a binding contour which can be used to catch
13719 cleanup-generated temporaries. Also, if the return value needs or
13720 has initialization, deal with that now. */
13721 if (parms_have_cleanups)
13724 if (!building_stmt_tree ())
13725 expand_start_bindings (2);
13728 /* Do the starting of the exception specifications, if we have any. */
13729 if (flag_exceptions && !processing_template_decl
13730 && flag_enforce_eh_specs
13731 && building_stmt_tree ()
13732 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13733 current_eh_spec_try_block = expand_start_eh_spec ();
13736 /* Bind a name and initialization to the return value of
13737 the current function. */
13740 store_return_init (decl)
13743 /* If this named return value comes in a register, put it in a
13744 pseudo-register. */
13745 if (DECL_REGISTER (decl))
13747 original_result_rtx = DECL_RTL (decl);
13748 /* Note that the mode of the old DECL_RTL may be wider than the
13749 mode of DECL_RESULT, depending on the calling conventions for
13750 the processor. For example, on the Alpha, a 32-bit integer
13751 is returned in a DImode register -- the DECL_RESULT has
13752 SImode but the DECL_RTL for the DECL_RESULT has DImode. So,
13753 here, we use the mode the back-end has already assigned for
13754 the return value. */
13755 DECL_RTL (decl) = gen_reg_rtx (GET_MODE (original_result_rtx));
13760 /* We have finished doing semantic analysis on DECL, but have not yet
13761 generated RTL for its body. Save away our current state, so that
13762 when we want to generate RTL later we know what to do. */
13765 save_function_data (decl)
13768 struct language_function *f;
13770 /* Save the language-specific per-function data so that we can
13771 get it back when we really expand this function. */
13772 my_friendly_assert (!DECL_PENDING_INLINE_P (decl),
13776 f = ((struct language_function *)
13777 xmalloc (sizeof (struct language_function)));
13778 bcopy ((char *) cp_function_chain, (char *) f,
13779 sizeof (struct language_function));
13780 DECL_SAVED_FUNCTION_DATA (decl) = f;
13782 /* Clear out the bits we don't need. */
13783 f->x_base_init_list = NULL_TREE;
13784 f->x_member_init_list = NULL_TREE;
13785 f->x_stmt_tree.x_last_stmt = NULL_TREE;
13786 f->x_stmt_tree.x_last_expr_type = NULL_TREE;
13787 f->x_result_rtx = NULL_RTX;
13788 f->x_named_label_uses = NULL;
13789 f->bindings = NULL;
13791 /* When we get back here again, we will be expanding. */
13792 f->x_expanding_p = 1;
13794 /* If we've already decided that we cannot inline this function, we
13795 must remember that fact when we actually go to expand the
13797 f->cannot_inline = current_function_cannot_inline;
13800 /* At the end of every constructor we generate to code to return
13801 `this'. Do that now. */
13804 finish_constructor_body ()
13806 /* Any return from a constructor will end up here. */
13808 add_tree (build_min_nt (LABEL_STMT, ctor_label));
13810 /* Clear CTOR_LABEL so that finish_return_stmt knows to really
13811 generate the return, rather than a goto to CTOR_LABEL. */
13812 ctor_label = NULL_TREE;
13813 /* In check_return_expr we translate an empty return from a
13814 constructor to a return of `this'. */
13815 finish_return_stmt (NULL_TREE);
13816 /* Mark the end of the constructor. */
13817 add_tree (build_min_nt (CTOR_STMT));
13820 /* At the end of every destructor we generate code to restore virtual
13821 function tables to the values desired by base classes and to call
13822 to base class destructors. Do that now. */
13825 finish_destructor_body ()
13827 tree compound_stmt;
13832 /* Create a block to contain all the extra code. */
13833 compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
13835 /* Any return from a destructor will end up here. */
13836 add_tree (build_min_nt (LABEL_STMT, dtor_label));
13838 /* Generate the code to call destructor on base class. If this
13839 destructor belongs to a class with virtual functions, then set
13840 the virtual function table pointer to represent the type of our
13843 /* This side-effect makes call to `build_delete' generate the code
13844 we have to have at the end of this destructor. `build_delete'
13845 will set the flag again. */
13846 TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
13848 exprstmt = build_delete (current_class_type,
13850 sfk_base_destructor,
13851 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL,
13854 if (exprstmt != error_mark_node
13855 && (TREE_CODE (exprstmt) != NOP_EXPR
13856 || TREE_OPERAND (exprstmt, 0) != integer_zero_node
13857 || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
13859 if (exprstmt != void_zero_node)
13860 /* Don't call `expand_expr_stmt' if we're not going to do
13861 anything, since -Wall will give a diagnostic. */
13862 finish_expr_stmt (exprstmt);
13864 /* Run destructors for all virtual baseclasses. */
13865 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13870 if_stmt = begin_if_stmt ();
13871 finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
13872 current_in_charge_parm,
13876 vbases = CLASSTYPE_VBASECLASSES (current_class_type);
13877 /* The CLASSTYPE_VBASECLASSES list is in initialization
13878 order, so we have to march through it in reverse order. */
13879 for (vbases = nreverse (copy_list (vbases));
13881 vbases = TREE_CHAIN (vbases))
13883 tree vbase = TREE_VALUE (vbases);
13885 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (BINFO_TYPE (vbase)))
13887 tree vb = get_vbase
13888 (BINFO_TYPE (vbase),
13889 TYPE_BINFO (current_class_type));
13891 (build_scoped_method_call
13892 (current_class_ref, vb, base_dtor_identifier,
13897 finish_then_clause (if_stmt);
13902 virtual_size = c_sizeof (current_class_type);
13904 /* At the end, call delete if that's what's requested. */
13906 /* FDIS sez: At the point of definition of a virtual destructor
13907 (including an implicit definition), non-placement operator delete
13908 shall be looked up in the scope of the destructor's class and if
13909 found shall be accessible and unambiguous.
13911 This is somewhat unclear, but I take it to mean that if the class
13912 only defines placement deletes we don't do anything here. So we
13913 pass LOOKUP_SPECULATIVELY; delete_sanity will complain for us if
13914 they ever try to delete one of these. */
13915 exprstmt = build_op_delete_call
13916 (DELETE_EXPR, current_class_ptr, virtual_size,
13917 LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
13919 if_stmt = begin_if_stmt ();
13920 finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
13921 current_in_charge_parm,
13924 finish_expr_stmt (exprstmt);
13925 finish_then_clause (if_stmt);
13928 /* Close the block we started above. */
13929 finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
13932 /* Finish up a function declaration and compile that function
13933 all the way to assembler language output. The free the storage
13934 for the function definition.
13936 FLAGS is a bitwise or of the following values:
13938 An extra call to poplevel (and expand_end_bindings) must be
13939 made to take care of the binding contour for the base
13940 initializers. This is only relevant for constructors.
13942 We just finished processing the body of an in-class inline
13943 function definition. (This processing will have taken place
13944 after the class definition is complete.) */
13947 finish_function (flags)
13950 register tree fndecl = current_function_decl;
13951 tree fntype, ctype = NULL_TREE;
13952 /* Label to use if this function is supposed to return a value. */
13953 tree no_return_label = NULL_TREE;
13954 int call_poplevel = (flags & 1) != 0;
13955 int inclass_inline = (flags & 2) != 0;
13958 int current_line = lineno;
13960 /* When we get some parse errors, we can end up without a
13961 current_function_decl, so cope. */
13962 if (fndecl == NULL_TREE)
13963 return error_mark_node;
13965 nested = function_depth > 1;
13966 fntype = TREE_TYPE (fndecl);
13968 /* TREE_READONLY (fndecl) = 1;
13969 This caused &foo to be of type ptr-to-const-function
13970 which then got a warning when stored in a ptr-to-function variable. */
13972 /* This happens on strange parse errors. */
13973 if (! current_function_parms_stored)
13976 store_parm_decls ();
13979 /* For a cloned function, we've already got all the code we need;
13980 there's no need to add any extra bits. */
13981 if (building_stmt_tree () && DECL_CLONED_FUNCTION_P (fndecl))
13983 else if (building_stmt_tree ())
13985 if (DECL_CONSTRUCTOR_P (fndecl))
13987 finish_constructor_body ();
13991 else if (DECL_DESTRUCTOR_P (fndecl) && !processing_template_decl)
13992 finish_destructor_body ();
13993 else if (DECL_MAIN_P (fndecl))
13995 /* Make it so that `main' always returns 0 by default. */
13997 finish_return_stmt (integer_one_node);
13999 finish_return_stmt (integer_zero_node);
14003 /* Finish dealing with exception specifiers. */
14004 if (flag_exceptions && !processing_template_decl
14005 && flag_enforce_eh_specs
14006 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
14007 expand_end_eh_spec (TYPE_RAISES_EXCEPTIONS
14008 (TREE_TYPE (current_function_decl)),
14009 current_eh_spec_try_block);
14014 if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
14016 /* Keep this code around in case we later want to control debug info
14017 based on whether a type is "used". (jason 1999-11-11) */
14019 tree ttype = target_type (fntype);
14022 if (IS_AGGR_TYPE (ttype))
14023 /* Let debugger know it should output info for this type. */
14024 note_debug_info_needed (ttype);
14026 for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
14028 ttype = target_type (TREE_TYPE (parmdecl));
14029 if (IS_AGGR_TYPE (ttype))
14030 /* Let debugger know it should output info for this type. */
14031 note_debug_info_needed (ttype);
14036 /* Clean house because we will need to reorder insns here. */
14037 do_pending_stack_adjust ();
14041 else if (DECL_CONSTRUCTOR_P (fndecl))
14046 else if (return_label != NULL_RTX
14047 && flag_this_is_variable <= 0
14048 && current_function_return_value == NULL_TREE
14049 && ! DECL_NAME (DECL_RESULT (current_function_decl)))
14050 no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
14052 if (flag_exceptions)
14053 expand_exception_blocks ();
14055 /* If this function is supposed to return a value, ensure that
14056 we do not fall into the cleanups by mistake. The end of our
14057 function will look like this:
14059 user code (may have return stmt somewhere)
14060 goto no_return_label
14065 NOTE_INSN_FUNCTION_END
14069 If the user omits a return stmt in the USER CODE section, we
14070 will have a control path which reaches NOTE_INSN_FUNCTION_END.
14071 Otherwise, we won't. */
14072 if (no_return_label)
14074 DECL_CONTEXT (no_return_label) = fndecl;
14075 DECL_INITIAL (no_return_label) = error_mark_node;
14076 DECL_SOURCE_FILE (no_return_label) = input_filename;
14077 DECL_SOURCE_LINE (no_return_label) = current_line;
14078 expand_goto (no_return_label);
14083 /* Remove the binding contour which is used
14084 to catch cleanup-generated temporaries. */
14085 expand_end_bindings (0, 0, 0);
14086 poplevel (0, 0, 0);
14088 /* Emit label at beginning of cleanup code for parameters. */
14089 emit_label (cleanup_label);
14092 /* Get return value into register if that's where it's supposed
14094 if (original_result_rtx)
14095 fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
14097 /* Finish building code that will trigger warnings if users forget
14098 to make their functions return values. */
14099 if (no_return_label || cleanup_label)
14100 emit_jump (return_label);
14101 if (no_return_label)
14103 /* We don't need to call `expand_*_return' here because we
14104 don't need any cleanups here--this path of code is only
14105 for error checking purposes. */
14106 expand_label (no_return_label);
14109 /* We hard-wired immediate_size_expand to zero in
14110 start_function. Expand_function_end will decrement this
14111 variable. So, we set the variable to one here, so that after
14112 the decrement it will remain zero. */
14113 immediate_size_expand = 1;
14115 /* Generate rtl for function exit. */
14116 expand_function_end (input_filename, current_line, 1);
14119 /* We have to save this value here in case
14120 maybe_end_member_template_processing decides to pop all the
14121 template parameters. */
14122 expand_p = !building_stmt_tree ();
14124 /* If we're saving up tree structure, tie off the function now. */
14126 finish_stmt_tree (&DECL_SAVED_TREE (fndecl));
14128 /* This must come after expand_function_end because cleanups might
14129 have declarations (from inline functions) that need to go into
14130 this function's blocks. */
14131 if (doing_semantic_analysis_p ())
14133 if (current_binding_level->parm_flag != 1)
14134 my_friendly_abort (122);
14135 poplevel (1, 0, 1);
14138 /* Remember that we were in class scope. */
14139 if (current_class_name)
14140 ctype = current_class_type;
14142 /* Must mark the RESULT_DECL as being in this function. */
14143 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
14145 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
14146 to the FUNCTION_DECL node itself. */
14147 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
14149 /* Save away current state, if appropriate. */
14150 if (!expanding_p && !processing_template_decl)
14151 save_function_data (fndecl);
14153 /* If this function calls `setjmp' it cannot be inlined. When
14154 `longjmp' is called it is not guaranteed to restore the value of
14155 local variables that have been modified since the call to
14156 `setjmp'. So, if were to inline this function into some caller
14157 `c', then when we `longjmp', we might not restore all variables
14158 in `c'. (It might seem, at first blush, that there's no way for
14159 this function to modify local variables in `c', but their
14160 addresses may have been stored somewhere accessible to this
14162 if (!expanding_p && !processing_template_decl && calls_setjmp_p (fndecl))
14163 DECL_UNINLINABLE (fndecl) = 1;
14170 /* So we can tell if jump_optimize sets it to 1. */
14173 /* Before we call rest_of_compilation (which will pop the
14174 CURRENT_FUNCTION), we must save these values. */
14175 returns_null = current_function_returns_null;
14176 returns_value = current_function_returns_value;
14178 /* If this is a nested function (like a template instantiation
14179 that we're compiling in the midst of compiling something
14180 else), push a new GC context. That will keep local variables
14181 on the stack from being collected while we're doing the
14182 compilation of this function. */
14183 if (function_depth > 1)
14184 ggc_push_context ();
14186 /* Run the optimizers and output the assembler code for this
14188 rest_of_compilation (fndecl);
14190 /* Undo the call to ggc_push_context above. */
14191 if (function_depth > 1)
14192 ggc_pop_context ();
14194 if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
14196 /* Set DECL_EXTERNAL so that assemble_external will be called as
14197 necessary. We'll clear it again in finish_file. */
14198 if (! DECL_EXTERNAL (fndecl))
14199 DECL_NOT_REALLY_EXTERN (fndecl) = 1;
14200 DECL_EXTERNAL (fndecl) = 1;
14205 /* Keep this code around in case we later want to control debug info
14206 based on whether a type is "used". (jason 1999-11-11) */
14208 if (ctype && TREE_ASM_WRITTEN (fndecl))
14209 note_debug_info_needed (ctype);
14212 returns_null |= can_reach_end;
14214 /* Since we don't normally go through c_expand_return for constructors,
14215 this normally gets the wrong value.
14216 Also, named return values have their return codes emitted after
14217 NOTE_INSN_FUNCTION_END, confusing jump.c. */
14218 if (DECL_CONSTRUCTOR_P (fndecl)
14219 || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
14222 if (TREE_THIS_VOLATILE (fndecl) && returns_null)
14223 cp_warning ("`noreturn' function `%D' does return", fndecl);
14224 else if ((warn_return_type || pedantic)
14226 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE)
14228 /* If this function returns non-void and control can drop through,
14230 cp_warning ("control reaches end of non-void function `%D'", fndecl);
14232 /* With just -W, complain only if function returns both with
14233 and without a value. */
14234 else if (extra_warnings && returns_value && returns_null)
14235 warning ("this function may return with or without a value");
14239 /* Clear out memory we no longer need. */
14240 free_after_parsing (cfun);
14241 /* Since we never call rest_of_compilation, we never clear
14242 CFUN. Do so explicitly. */
14243 free_after_compilation (cfun);
14247 /* If this is a in-class inline definition, we may have to pop the
14248 bindings for the template parameters that we added in
14249 maybe_begin_member_template_processing when start_function was
14251 if (inclass_inline)
14252 maybe_end_member_template_processing ();
14254 /* Leave the scope of the class. */
14256 pop_nested_class ();
14260 if (!DECL_SAVED_INSNS (fndecl) && !DECL_SAVED_FUNCTION_DATA (fndecl)
14261 && !(flag_inline_trees && DECL_INLINE (fndecl)))
14265 /* Stop pointing to the local nodes about to be freed. */
14266 /* But DECL_INITIAL must remain nonzero so we know this
14267 was an actual function definition. */
14268 DECL_INITIAL (fndecl) = error_mark_node;
14269 for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
14270 DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
14273 if (DECL_STATIC_CONSTRUCTOR (fndecl))
14274 static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors);
14275 if (DECL_STATIC_DESTRUCTOR (fndecl))
14276 static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors);
14281 /* Let the error reporting routines know that we're outside a
14282 function. For a nested function, this value is used in
14283 pop_cp_function_context and then reset via pop_function_context. */
14284 current_function_decl = NULL_TREE;
14285 /* We don't really care about obstacks, but the middle-end
14286 sometimes cares on what obstck things are located. */
14287 permanent_allocation (1);
14293 /* Create the FUNCTION_DECL for a function definition.
14294 DECLSPECS and DECLARATOR are the parts of the declaration;
14295 they describe the return type and the name of the function,
14296 but twisted together in a fashion that parallels the syntax of C.
14298 This function creates a binding context for the function body
14299 as well as setting up the FUNCTION_DECL in current_function_decl.
14301 Returns a FUNCTION_DECL on success.
14303 If the DECLARATOR is not suitable for a function (it defines a datum
14304 instead), we return 0, which tells yyparse to report a parse error.
14306 May return void_type_node indicating that this method is actually
14307 a friend. See grokfield for more details.
14309 Came here with a `.pushlevel' .
14311 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14312 CHANGES TO CODE IN `grokfield'. */
14315 start_method (declspecs, declarator, attrlist)
14316 tree declarator, declspecs, attrlist;
14318 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
14321 /* Something too ugly to handle. */
14322 if (fndecl == NULL_TREE)
14325 /* Pass friends other than inline friend functions back. */
14326 if (fndecl == void_type_node)
14329 if (TREE_CODE (fndecl) != FUNCTION_DECL)
14330 /* Not a function, tell parser to report parse error. */
14333 if (DECL_IN_AGGR_P (fndecl))
14335 if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
14337 if (DECL_CONTEXT (fndecl)
14338 && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
14339 cp_error ("`%D' is already defined in class %s", fndecl,
14340 TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
14342 return void_type_node;
14345 check_template_shadow (fndecl);
14347 DECL_THIS_INLINE (fndecl) = 1;
14349 if (flag_default_inline)
14350 DECL_INLINE (fndecl) = 1;
14352 /* We process method specializations in finish_struct_1. */
14353 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
14354 fndecl = push_template_decl (fndecl);
14356 if (! DECL_FRIEND_P (fndecl))
14358 if (TREE_CHAIN (fndecl))
14360 fndecl = copy_node (fndecl);
14361 TREE_CHAIN (fndecl) = NULL_TREE;
14364 if (DECL_CONSTRUCTOR_P (fndecl))
14366 if (! grok_ctor_properties (current_class_type, fndecl))
14367 return void_type_node;
14369 else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
14370 grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
14373 cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0);
14375 /* Make a place for the parms */
14377 current_binding_level->parm_flag = 1;
14379 DECL_IN_AGGR_P (fndecl) = 1;
14383 /* Go through the motions of finishing a function definition.
14384 We don't compile this method until after the whole class has
14387 FINISH_METHOD must return something that looks as though it
14388 came from GROKFIELD (since we are defining a method, after all).
14390 This is called after parsing the body of the function definition.
14391 STMTS is the chain of statements that makes up the function body.
14393 DECL is the ..._DECL that `start_method' provided. */
14396 finish_method (decl)
14399 register tree fndecl = decl;
14402 register tree link;
14404 if (decl == void_type_node)
14407 old_initial = DECL_INITIAL (fndecl);
14409 /* Undo the level for the parms (from start_method).
14410 This is like poplevel, but it causes nothing to be
14411 saved. Saving information here confuses symbol-table
14412 output routines. Besides, this information will
14413 be correctly output when this method is actually
14416 /* Clear out the meanings of the local variables of this level;
14417 also record in each decl which block it belongs to. */
14419 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
14421 if (DECL_NAME (link) != NULL_TREE)
14422 pop_binding (DECL_NAME (link), link);
14423 my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
14424 DECL_CONTEXT (link) = NULL_TREE;
14427 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
14428 (HOST_WIDE_INT) current_binding_level->level_chain,
14429 current_binding_level->parm_flag,
14430 current_binding_level->keep);
14432 poplevel (0, 0, 0);
14434 DECL_INITIAL (fndecl) = old_initial;
14436 /* We used to check if the context of FNDECL was different from
14437 current_class_type as another way to get inside here. This didn't work
14438 for String.cc in libg++. */
14439 if (DECL_FRIEND_P (fndecl))
14441 CLASSTYPE_INLINE_FRIENDS (current_class_type)
14442 = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
14443 decl = void_type_node;
14449 /* Called when a new struct TYPE is defined.
14450 If this structure or union completes the type of any previous
14451 variable declaration, lay it out and output its rtl. */
14454 hack_incomplete_structures (type)
14458 struct binding_level *level;
14460 if (!type) /* Don't do this for class templates. */
14463 if (namespace_bindings_p ())
14466 list = &namespace_scope_incomplete;
14470 level = innermost_nonclass_level ();
14471 list = &level->incomplete;
14478 tree decl = TREE_VALUE (*list);
14479 if ((decl && TREE_TYPE (decl) == type)
14480 || (TREE_TYPE (decl)
14481 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14482 && TREE_TYPE (TREE_TYPE (decl)) == type))
14484 int toplevel = toplevel_bindings_p ();
14485 if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14486 && TREE_TYPE (TREE_TYPE (decl)) == type)
14487 layout_type (TREE_TYPE (decl));
14488 layout_decl (decl, 0);
14489 rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
14493 expand_decl (decl);
14494 cleanup = maybe_build_cleanup (decl);
14495 expand_decl_init (decl);
14496 if (! expand_decl_cleanup (decl, cleanup))
14497 cp_error ("parser lost in parsing declaration of `%D'",
14500 *list = TREE_CHAIN (*list);
14503 list = &TREE_CHAIN (*list);
14506 /* Keep looking through artificial binding levels generated
14507 for local variables. */
14508 if (level && level->keep == 2)
14510 level = level->level_chain;
14511 list = &level->incomplete;
14518 /* If DECL is of a type which needs a cleanup, build that cleanup
14522 maybe_build_cleanup (decl)
14525 tree type = TREE_TYPE (decl);
14527 if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
14529 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
14532 if (TREE_CODE (type) == ARRAY_TYPE)
14536 mark_addressable (decl);
14537 rval = build_unary_op (ADDR_EXPR, decl, 0);
14540 /* Optimize for space over speed here. */
14541 if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14542 || flag_expensive_optimizations)
14543 flags |= LOOKUP_NONVIRTUAL;
14545 rval = build_delete (TREE_TYPE (rval), rval,
14546 sfk_complete_destructor, flags, 0);
14548 if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14549 && ! TYPE_HAS_DESTRUCTOR (type))
14550 rval = build_compound_expr (tree_cons (NULL_TREE, rval,
14551 build_tree_list (NULL_TREE, build_vbase_delete (type, decl))));
14558 /* Expand a C++ expression at the statement level.
14559 This is needed to ferret out nodes which have UNKNOWN_TYPE.
14560 The C++ type checker should get all of these out when
14561 expressions are combined with other, type-providing, expressions,
14562 leaving only orphan expressions, such as:
14564 &class::bar; / / takes its address, but does nothing with it. */
14567 cplus_expand_expr_stmt (exp)
14571 /* We should do this eventually, but right now this causes regex.o from
14572 libg++ to miscompile, and tString to core dump. */
14573 exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
14576 /* If we don't do this, we end up down inside expand_expr
14577 trying to do TYPE_MODE on the ERROR_MARK, and really
14578 go outside the bounds of the type. */
14579 if (exp != error_mark_node)
14580 expand_expr_stmt (exp);
14583 /* When a stmt has been parsed, this function is called. */
14588 /* Always assume this statement was not an expression statement. If
14589 it actually was an expression statement, its our callers
14590 responsibility to fix this up. */
14591 last_expr_type = NULL_TREE;
14594 /* DECL was originally constructed as a non-static member function,
14595 but turned out to be static. Update it accordingly. */
14598 revert_static_member_fn (decl)
14602 tree function = TREE_TYPE (decl);
14603 tree args = TYPE_ARG_TYPES (function);
14605 if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args)))
14606 != TYPE_UNQUALIFIED)
14607 cp_error ("static member function `%#D' declared with type qualifiers",
14610 args = TREE_CHAIN (args);
14611 tmp = build_function_type (TREE_TYPE (function), args);
14612 tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
14613 tmp = build_exception_variant (tmp,
14614 TYPE_RAISES_EXCEPTIONS (function));
14615 TREE_TYPE (decl) = tmp;
14616 if (DECL_ARGUMENTS (decl))
14617 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
14618 DECL_STATIC_FUNCTION_P (decl) = 1;
14621 /* Initialize the variables used during compilation of a C++
14625 push_cp_function_context (f)
14626 struct function *f;
14628 struct language_function *p
14629 = ((struct language_function *)
14630 xcalloc (1, sizeof (struct language_function)));
14633 /* It takes an explicit call to expand_body to generate RTL for a
14637 /* Whenever we start a new function, we destroy temporaries in the
14639 stmts_are_full_exprs_p = 1;
14642 /* Free the language-specific parts of F, now that we've finished
14643 compiling the function. */
14646 pop_cp_function_context (f)
14647 struct function *f;
14650 free (f->language);
14654 /* Mark P for GC. */
14657 mark_lang_function (p)
14658 struct language_function *p;
14663 ggc_mark_tree (p->x_named_labels);
14664 ggc_mark_tree (p->x_ctor_label);
14665 ggc_mark_tree (p->x_dtor_label);
14666 ggc_mark_tree (p->x_base_init_list);
14667 ggc_mark_tree (p->x_member_init_list);
14668 ggc_mark_tree (p->x_current_class_ptr);
14669 ggc_mark_tree (p->x_current_class_ref);
14670 ggc_mark_tree (p->x_eh_spec_try_block);
14671 ggc_mark_tree (p->x_scope_stmt_stack);
14673 ggc_mark_rtx (p->x_result_rtx);
14675 mark_stmt_tree (&p->x_stmt_tree);
14676 mark_binding_level (&p->bindings);
14679 /* Mark the language-specific data in F for GC. */
14682 mark_cp_function_context (f)
14683 struct function *f;
14685 mark_lang_function (f->language);
14689 lang_mark_false_label_stack (l)
14690 struct label_node *l;
14692 /* C++ doesn't use false_label_stack. It better be NULL. */
14693 my_friendly_assert (l == NULL, 19990904);
14700 enum tree_code code = TREE_CODE (t);
14701 if (code == IDENTIFIER_NODE)
14703 struct lang_identifier *li = (struct lang_identifier *) t;
14704 struct lang_id2 *li2 = li->x;
14705 ggc_mark_tree (li->namespace_bindings);
14706 ggc_mark_tree (li->bindings);
14707 ggc_mark_tree (li->class_value);
14708 ggc_mark_tree (li->class_template_info);
14712 ggc_mark_tree (li2->label_value);
14713 ggc_mark_tree (li2->implicit_decl);
14714 ggc_mark_tree (li2->error_locus);
14717 else if (code == CPLUS_BINDING)
14719 if (BINDING_HAS_LEVEL_P (t))
14720 mark_binding_level (&BINDING_LEVEL (t));
14722 ggc_mark_tree (BINDING_SCOPE (t));
14723 ggc_mark_tree (BINDING_VALUE (t));
14725 else if (code == OVERLOAD)
14726 ggc_mark_tree (OVL_FUNCTION (t));
14727 else if (code == TEMPLATE_PARM_INDEX)
14728 ggc_mark_tree (TEMPLATE_PARM_DECL (t));
14729 else if (TREE_CODE_CLASS (code) == 'd')
14731 struct lang_decl *ld = DECL_LANG_SPECIFIC (t);
14736 if (!DECL_GLOBAL_CTOR_P (t)
14737 && !DECL_GLOBAL_DTOR_P (t)
14738 && !DECL_THUNK_P (t))
14739 ggc_mark_tree (ld->decl_flags.u2.access);
14740 ggc_mark_tree (ld->decl_flags.context);
14741 if (TREE_CODE (t) != NAMESPACE_DECL)
14742 ggc_mark_tree (ld->decl_flags.u.template_info);
14744 mark_binding_level (&NAMESPACE_LEVEL (t));
14745 if (CAN_HAVE_FULL_LANG_DECL_P (t))
14747 ggc_mark_tree (ld->befriending_classes);
14748 ggc_mark_tree (ld->saved_tree);
14749 ggc_mark_tree (ld->cloned_function);
14750 ggc_mark_tree (ld->vtt_parm);
14751 if (TREE_CODE (t) == TYPE_DECL)
14752 ggc_mark_tree (ld->u.sorted_fields);
14753 else if (TREE_CODE (t) == FUNCTION_DECL
14754 && !DECL_PENDING_INLINE_P (t))
14755 mark_lang_function (DECL_SAVED_FUNCTION_DATA (t));
14759 else if (TREE_CODE_CLASS (code) == 't')
14761 struct lang_type *lt = TYPE_LANG_SPECIFIC (t);
14763 if (lt && !(TREE_CODE (t) == POINTER_TYPE
14764 && TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE))
14767 ggc_mark_tree (lt->vfields);
14768 ggc_mark_tree (lt->vbases);
14769 ggc_mark_tree (lt->tags);
14770 ggc_mark_tree (lt->size);
14771 ggc_mark_tree (lt->pure_virtuals);
14772 ggc_mark_tree (lt->friend_classes);
14773 ggc_mark_tree (lt->rtti);
14774 ggc_mark_tree (lt->methods);
14775 ggc_mark_tree (lt->template_info);
14776 ggc_mark_tree (lt->befriending_classes);
14779 /* In the case of pointer-to-member function types, the
14780 TYPE_LANG_SPECIFIC is really just a tree. */
14781 ggc_mark_tree ((tree) lt);