* Makefile.in (typeck2.o): Depend on output.h.
[official-gcc.git] / gcc / cp / decl.c
blob80aec15def56d44969dd24efbf905c28c3239cb2
1 /* Process declarations and variables for C compiler.
2 Copyright (C) 1988, 92-98, 1999 Free Software Foundation, Inc.
3 Contributed by Michael Tiemann (tiemann@cygnus.com)
5 This file is part of GNU CC.
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING. If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
23 /* Process declarations and symbol lookup for C front end.
24 Also constructs types; the standard scalar types at initialization,
25 and structure, union, array and enum types when they are declared. */
27 /* ??? not all decl nodes are given the most useful possible
28 line numbers. For example, the CONST_DECLs for enum values. */
30 #include "config.h"
31 #include "system.h"
32 #include "tree.h"
33 #include "rtl.h"
34 #include "flags.h"
35 #include "cp-tree.h"
36 #include "decl.h"
37 #include "lex.h"
38 #include <signal.h>
39 #include "obstack.h"
40 #include "defaults.h"
41 #include "output.h"
42 #include "except.h"
43 #include "toplev.h"
44 #include "../hash.h"
45 #include "defaults.h"
46 #include "ggc.h"
48 #define obstack_chunk_alloc xmalloc
49 #define obstack_chunk_free free
51 extern struct obstack permanent_obstack;
52 extern struct obstack* saveable_obstack;
54 extern int current_class_depth;
56 extern tree static_ctors, static_dtors;
58 extern tree global_namespace;
60 extern int (*valid_lang_attribute) PROTO ((tree, tree, tree, tree));
62 /* Use garbage collection. */
64 int ggc_p = 1;
66 #ifndef WCHAR_UNSIGNED
67 #define WCHAR_UNSIGNED 0
68 #endif
70 #ifndef CHAR_TYPE_SIZE
71 #define CHAR_TYPE_SIZE BITS_PER_UNIT
72 #endif
74 #ifndef BOOL_TYPE_SIZE
75 #ifdef SLOW_BYTE_ACCESS
76 #define BOOL_TYPE_SIZE ((SLOW_BYTE_ACCESS) ? (POINTER_SIZE) : (CHAR_TYPE_SIZE))
77 #else
78 #define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
79 #endif
80 #endif
82 /* We let tm.h override the types used here, to handle trivial differences
83 such as the choice of unsigned int or long unsigned int for size_t.
84 When machines start needing nontrivial differences in the size type,
85 it would be best to do something here to figure out automatically
86 from other information what type to use. */
88 #ifndef SIZE_TYPE
89 #define SIZE_TYPE "long unsigned int"
90 #endif
92 #ifndef PTRDIFF_TYPE
93 #define PTRDIFF_TYPE "long int"
94 #endif
96 #ifndef WCHAR_TYPE
97 #define WCHAR_TYPE "int"
98 #endif
100 static tree grokparms PROTO((tree, int));
101 static const char *redeclaration_error_message PROTO((tree, tree));
103 static void push_binding_level PROTO((struct binding_level *, int,
104 int));
105 static void pop_binding_level PROTO((void));
106 static void suspend_binding_level PROTO((void));
107 static void resume_binding_level PROTO((struct binding_level *));
108 static struct binding_level *make_binding_level PROTO((void));
109 static void declare_namespace_level PROTO((void));
110 static void signal_catch PROTO((int)) ATTRIBUTE_NORETURN;
111 static void storedecls PROTO((tree));
112 static void require_complete_types_for_parms PROTO((tree));
113 static void push_overloaded_decl_1 PROTO((tree));
114 static int ambi_op_p PROTO((tree));
115 static int unary_op_p PROTO((tree));
116 static tree store_bindings PROTO((tree, tree));
117 static tree lookup_tag_reverse PROTO((tree, tree));
118 static tree obscure_complex_init PROTO((tree, tree));
119 static tree maybe_build_cleanup_1 PROTO((tree, tree));
120 static tree lookup_name_real PROTO((tree, int, int, int));
121 static void warn_extern_redeclared_static PROTO((tree, tree));
122 static void grok_reference_init PROTO((tree, tree, tree));
123 static tree grokfndecl PROTO((tree, tree, tree, tree, int,
124 enum overload_flags, tree,
125 tree, int, int, int, int, int, int, tree));
126 static tree grokvardecl PROTO((tree, tree, RID_BIT_TYPE *, int, int, tree));
127 static tree lookup_tag PROTO((enum tree_code, tree,
128 struct binding_level *, int));
129 static void set_identifier_type_value_with_scope
130 PROTO((tree, tree, struct binding_level *));
131 static void record_builtin_type PROTO((enum rid, const char *, tree));
132 static void record_unknown_type PROTO((tree, const char *));
133 static int member_function_or_else PROTO((tree, tree, const char *));
134 static void bad_specifiers PROTO((tree, const char *, int, int, int, int,
135 int));
136 static void lang_print_error_function PROTO((const char *));
137 static tree maybe_process_template_type_declaration PROTO((tree, int, struct binding_level*));
138 static void check_for_uninitialized_const_var PROTO((tree));
139 static unsigned long typename_hash PROTO((hash_table_key));
140 static boolean typename_compare PROTO((hash_table_key, hash_table_key));
141 static void push_binding PROTO((tree, tree, struct binding_level*));
142 static int add_binding PROTO((tree, tree));
143 static void pop_binding PROTO((tree, tree));
144 static tree local_variable_p PROTO((tree *, int *, void *));
145 static tree find_binding PROTO((tree, tree));
146 static tree select_decl PROTO((tree, int));
147 static int lookup_flags PROTO((int, int));
148 static tree qualify_lookup PROTO((tree, int));
149 static tree record_builtin_java_type PROTO((const char *, int));
150 static const char *tag_name PROTO((enum tag_types code));
151 static void find_class_binding_level PROTO((void));
152 static struct binding_level *innermost_nonclass_level PROTO((void));
153 static void warn_about_implicit_typename_lookup PROTO((tree, tree));
154 static int walk_namespaces_r PROTO((tree, walk_namespaces_fn, void *));
155 static int walk_globals_r PROTO((tree, void *));
156 static void add_decl_to_level PROTO((tree, struct binding_level *));
157 static tree make_label_decl PROTO((tree, int));
158 static void pop_label PROTO((tree));
159 static void pop_labels PROTO((tree));
160 static void maybe_deduce_size_from_array_init PROTO((tree, tree));
161 static void layout_var_decl PROTO((tree));
162 static void maybe_commonize_var PROTO((tree));
163 static tree check_initializer PROTO((tree, tree));
164 static void make_rtl_for_nonlocal_decl PROTO((tree, tree, const char *));
165 static void push_cp_function_context PROTO((struct function *));
166 static void pop_cp_function_context PROTO((struct function *));
167 static void mark_binding_level PROTO((void *));
168 static void mark_cp_function_context PROTO((struct function *));
169 static void mark_saved_scope PROTO((void *));
170 static void mark_lang_function PROTO((struct language_function *));
171 static void mark_stmt_tree PROTO((struct stmt_tree *));
172 static void save_function_data PROTO((tree));
173 static void check_function_type PROTO((tree));
174 static void destroy_local_static PROTO((tree));
175 static void destroy_local_var PROTO((tree));
176 static void finish_constructor_body PROTO((void));
177 static void finish_destructor_body PROTO((void));
179 #if defined (DEBUG_CP_BINDING_LEVELS)
180 static void indent PROTO((void));
181 #endif
183 /* Erroneous argument lists can use this *IFF* they do not modify it. */
184 tree error_mark_list;
186 /* The following symbols are subsumed in the cp_global_trees array, and
187 listed here individually for documentation purposes.
189 C++ extensions
190 tree wchar_decl_node;
191 tree void_zero_node;
193 tree vtable_entry_type;
194 tree delta_type_node;
195 #if 0
196 Old rtti stuff.
197 tree __baselist_desc_type_node;
198 tree __i_desc_type_node, __m_desc_type_node;
199 tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
200 #endif
201 tree __t_desc_type_node;
202 #if 0
203 tree __tp_desc_type_node;
204 #endif
205 tree __access_mode_type_node;
206 tree __bltn_desc_type_node, __user_desc_type_node, __class_desc_type_node;
207 tree __ptr_desc_type_node, __attr_desc_type_node, __func_desc_type_node;
208 tree __ptmf_desc_type_node, __ptmd_desc_type_node;
209 #if 0
210 Not needed yet? May be needed one day?
211 tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
212 tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
213 tree __ptmf_desc_array_type, __ptmd_desc_array_type;
214 #endif
216 tree class_star_type_node;
217 tree class_type_node, record_type_node, union_type_node, enum_type_node;
218 tree unknown_type_node;
220 Array type `vtable_entry_type[]'
222 tree vtbl_type_node;
223 tree vtbl_ptr_type_node;
225 Nnamespace std
227 tree std_node;
229 A FUNCTION_DECL which can call `abort'. Not necessarily the
230 one that the user will declare, but sufficient to be called
231 by routines that want to abort the program.
233 tree abort_fndecl;
235 The FUNCTION_DECL for the default `::operator delete'.
237 tree global_delete_fndecl;
239 Used by RTTI
240 tree type_info_type_node, tinfo_fn_id, tinfo_fn_type;
244 tree cp_global_trees[CPTI_MAX];
246 /* Indicates that there is a type value in some namespace, although
247 that is not necessarily in scope at the moment. */
249 static tree global_type_node;
251 /* Namespace std. */
252 int in_std;
254 /* Expect only namespace names now. */
255 static int only_namespace_names;
257 /* In a destructor, the last insn emitted after the start of the
258 function and the parms. */
260 #define last_dtor_insn cp_function_chain->x_last_dtor_insn
262 /* In a constructor, the last insn emitted after the start of the
263 function and the parms, the exception specification and any
264 function-try-block. The constructor initializers are emitted after
265 this insn. */
267 #define last_parm_cleanup_insn cp_function_chain->x_last_parm_cleanup_insn
269 /* If original DECL_RESULT of current function was a register,
270 but due to being an addressable named return value, would up
271 on the stack, this variable holds the named return value's
272 original location. */
274 #define original_result_rtx cp_function_chain->x_result_rtx
276 struct named_label_list
278 struct binding_level *binding_level;
279 tree names_in_scope;
280 tree label_decl;
281 const char *filename_o_goto;
282 int lineno_o_goto;
283 struct named_label_list *next;
286 /* Used only for jumps to as-yet undefined labels, since jumps to
287 defined labels can have their validity checked by stmt.c. */
289 #define named_label_uses cp_function_chain->x_named_label_uses
291 /* A list of objects which have constructors or destructors
292 which reside in the global scope. The decl is stored in
293 the TREE_VALUE slot and the initializer is stored
294 in the TREE_PURPOSE slot. */
295 tree static_aggregates;
297 /* -- end of C++ */
299 /* A node for the integer constants 2, and 3. */
301 tree integer_two_node, integer_three_node;
303 /* While defining an enum type, this is 1 plus the last enumerator
304 constant value. */
306 static tree enum_next_value;
308 /* Nonzero means that there was overflow computing enum_next_value. */
310 static int enum_overflow;
312 /* Parsing a function declarator leaves here a chain of structure
313 and enum types declared in the parmlist. */
315 static tree last_function_parm_tags;
317 /* Similar, for last_function_parm_tags. */
318 tree last_function_parms;
319 static tree current_function_parm_tags;
321 /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
322 that have names. Here so we can clear out their names' definitions
323 at the end of the function. The TREE_VALUE is a LABEL_DECL; the
324 TREE_PURPOSE is the previous binding of the label. */
326 #define named_labels cp_function_chain->x_named_labels
328 /* The FUNCTION_DECL for the function currently being compiled,
329 or 0 if between functions. */
330 tree current_function_decl;
332 /* Set to 0 at beginning of a function definition, and whenever
333 a label (case or named) is defined. Set to value of expression
334 returned from function when that value can be transformed into
335 a named return value. */
337 tree current_function_return_value;
339 /* Nonzero means give `double' the same size as `float'. */
341 extern int flag_short_double;
343 /* Nonzero means don't recognize any builtin functions. */
345 extern int flag_no_builtin;
347 /* Nonzero means don't recognize the non-ANSI builtin functions.
348 -ansi sets this. */
350 extern int flag_no_nonansi_builtin;
352 /* Nonzero if we want to support huge (> 2^(sizeof(short)*8-1) bytes)
353 objects. */
354 extern int flag_huge_objects;
356 /* Nonzero if we want to conserve space in the .o files. We do this
357 by putting uninitialized data and runtime initialized data into
358 .common instead of .data at the expense of not flagging multiple
359 definitions. */
360 extern int flag_conserve_space;
362 /* C and C++ flags are in decl2.c. */
364 /* Flag used when debugging spew.c */
366 extern int spew_debug;
368 /* A expression of value 0 with the same precision as a sizetype
369 node, but signed. */
370 tree signed_size_zero_node;
372 /* The name of the anonymous namespace, throughout this translation
373 unit. */
374 tree anonymous_namespace_name;
377 /* For each binding contour we allocate a binding_level structure
378 which records the names defined in that contour.
379 Contours include:
380 0) the global one
381 1) one for each function definition,
382 where internal declarations of the parameters appear.
383 2) one for each compound statement,
384 to record its declarations.
386 The current meaning of a name can be found by searching the levels
387 from the current one out to the global one.
389 Off to the side, may be the class_binding_level. This exists only
390 to catch class-local declarations. It is otherwise nonexistent.
392 Also there may be binding levels that catch cleanups that must be
393 run when exceptions occur. Thus, to see whether a name is bound in
394 the current scope, it is not enough to look in the
395 CURRENT_BINDING_LEVEL. You should use lookup_name_current_level
396 instead. */
398 /* Note that the information in the `names' component of the global contour
399 is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers. */
401 struct binding_level
403 /* A chain of _DECL nodes for all variables, constants, functions,
404 and typedef types. These are in the reverse of the order
405 supplied. There may be OVERLOADs on this list, too, but they
406 are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD. */
407 tree names;
409 /* A list of structure, union and enum definitions, for looking up
410 tag names.
411 It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
412 or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
413 or ENUMERAL_TYPE node.
415 C++: the TREE_VALUE nodes can be simple types for
416 component_bindings. */
417 tree tags;
419 /* A list of USING_DECL nodes. */
420 tree usings;
422 /* A list of used namespaces. PURPOSE is the namespace,
423 VALUE the common ancestor with this binding_level's namespace. */
424 tree using_directives;
426 /* If this binding level is the binding level for a class, then
427 class_shadowed is a TREE_LIST. The TREE_PURPOSE of each node
428 is the name of an entity bound in the class; the TREE_VALUE is
429 the IDENTIFIER_CLASS_VALUE before we entered the class. Thus,
430 when leaving class scope, we can restore the
431 IDENTIFIER_CLASS_VALUE by walking this list. The TREE_TYPE is
432 the DECL bound by this name in the class. */
433 tree class_shadowed;
435 /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
436 is used for all binding levels. */
437 tree type_shadowed;
439 /* A TREE_LIST. Each TREE_VALUE is the LABEL_DECL for a local
440 label in this scope. The TREE_PURPOSE is the previous value of
441 the IDENTIFIER_LABEL VALUE. */
442 tree shadowed_labels;
444 /* For each level (except not the global one),
445 a chain of BLOCK nodes for all the levels
446 that were entered and exited one level down. */
447 tree blocks;
449 /* The BLOCK node for this level, if one has been preallocated.
450 If 0, the BLOCK is allocated (if needed) when the level is popped. */
451 tree this_block;
453 /* The binding level which this one is contained in (inherits from). */
454 struct binding_level *level_chain;
456 /* List of decls in `names' that have incomplete
457 structure or union types. */
458 tree incomplete;
460 /* List of VAR_DECLS saved from a previous for statement.
461 These would be dead in ANSI-conforming code, but might
462 be referenced in ARM-era code. These are stored in a
463 TREE_LIST; the TREE_VALUE is the actual declaration. */
464 tree dead_vars_from_for;
466 /* 1 for the level that holds the parameters of a function.
467 2 for the level that holds a class declaration.
468 3 for levels that hold parameter declarations. */
469 unsigned parm_flag : 4;
471 /* 1 means make a BLOCK for this level regardless of all else.
472 2 for temporary binding contours created by the compiler. */
473 unsigned keep : 3;
475 /* Nonzero if this level "doesn't exist" for tags. */
476 unsigned tag_transparent : 1;
478 /* Nonzero if this level can safely have additional
479 cleanup-needing variables added to it. */
480 unsigned more_cleanups_ok : 1;
481 unsigned have_cleanups : 1;
483 /* Nonzero if this level is for storing the decls for template
484 parameters and generic decls; these decls will be discarded and
485 replaced with a TEMPLATE_DECL. */
486 unsigned pseudo_global : 1;
488 /* This is set for a namespace binding level. */
489 unsigned namespace_p : 1;
491 /* True if this level is that of a for-statement where we need to
492 worry about ambiguous (ARM or ANSI) scope rules. */
493 unsigned is_for_scope : 1;
495 /* True if this level corresponds to an EH region, as for a try block. */
496 unsigned eh_region : 1;
498 /* One bit left for this word. */
500 #if defined(DEBUG_CP_BINDING_LEVELS)
501 /* Binding depth at which this level began. */
502 unsigned binding_depth;
503 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
506 #define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
508 /* The binding level currently in effect. */
510 #define current_binding_level \
511 (current_function \
512 ? cp_function_chain->bindings \
513 : scope_chain->bindings)
515 /* The binding level of the current class, if any. */
517 #define class_binding_level scope_chain->class_bindings
519 /* A chain of binding_level structures awaiting reuse. */
521 static struct binding_level *free_binding_level;
523 /* The outermost binding level, for names of file scope.
524 This is created when the compiler is started and exists
525 through the entire run. */
527 static struct binding_level *global_binding_level;
529 /* Nonzero means unconditionally make a BLOCK for the next level pushed. */
531 static int keep_next_level_flag;
533 #if defined(DEBUG_CP_BINDING_LEVELS)
534 static int binding_depth = 0;
535 static int is_class_level = 0;
537 static void
538 indent ()
540 register unsigned i;
542 for (i = 0; i < binding_depth*2; i++)
543 putc (' ', stderr);
545 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
547 static tree pushdecl_with_scope PROTO((tree, struct binding_level *));
549 static void
550 push_binding_level (newlevel, tag_transparent, keep)
551 struct binding_level *newlevel;
552 int tag_transparent, keep;
554 /* Add this level to the front of the chain (stack) of levels that
555 are active. */
556 bzero ((char*) newlevel, sizeof (struct binding_level));
557 newlevel->level_chain = current_binding_level;
558 current_binding_level = newlevel;
559 newlevel->tag_transparent = tag_transparent;
560 newlevel->more_cleanups_ok = 1;
562 /* We are called before expand_start_bindings, but after
563 expand_eh_region_start for a try block; so we check this now,
564 before the EH block is covered up. */
565 newlevel->eh_region = is_eh_region ();
567 newlevel->keep = keep;
568 #if defined(DEBUG_CP_BINDING_LEVELS)
569 newlevel->binding_depth = binding_depth;
570 indent ();
571 fprintf (stderr, "push %s level 0x%08x line %d\n",
572 (is_class_level) ? "class" : "block", newlevel, lineno);
573 is_class_level = 0;
574 binding_depth++;
575 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
578 /* Find the innermost enclosing class scope, and reset
579 CLASS_BINDING_LEVEL appropriately. */
581 static void
582 find_class_binding_level ()
584 struct binding_level *level = current_binding_level;
586 while (level && level->parm_flag != 2)
587 level = level->level_chain;
588 if (level && level->parm_flag == 2)
589 class_binding_level = level;
590 else
591 class_binding_level = 0;
594 static void
595 pop_binding_level ()
597 if (global_binding_level)
599 /* Cannot pop a level, if there are none left to pop. */
600 if (current_binding_level == global_binding_level)
601 my_friendly_abort (123);
603 /* Pop the current level, and free the structure for reuse. */
604 #if defined(DEBUG_CP_BINDING_LEVELS)
605 binding_depth--;
606 indent ();
607 fprintf (stderr, "pop %s level 0x%08x line %d\n",
608 (is_class_level) ? "class" : "block",
609 current_binding_level, lineno);
610 if (is_class_level != (current_binding_level == class_binding_level))
612 indent ();
613 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
615 is_class_level = 0;
616 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
618 register struct binding_level *level = current_binding_level;
619 current_binding_level = current_binding_level->level_chain;
620 level->level_chain = free_binding_level;
621 #if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
622 if (level->binding_depth != binding_depth)
623 abort ();
624 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
625 free_binding_level = level;
626 find_class_binding_level ();
630 static void
631 suspend_binding_level ()
633 if (class_binding_level)
634 current_binding_level = class_binding_level;
636 if (global_binding_level)
638 /* Cannot suspend a level, if there are none left to suspend. */
639 if (current_binding_level == global_binding_level)
640 my_friendly_abort (123);
642 /* Suspend the current level. */
643 #if defined(DEBUG_CP_BINDING_LEVELS)
644 binding_depth--;
645 indent ();
646 fprintf (stderr, "suspend %s level 0x%08x line %d\n",
647 (is_class_level) ? "class" : "block",
648 current_binding_level, lineno);
649 if (is_class_level != (current_binding_level == class_binding_level))
651 indent ();
652 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
654 is_class_level = 0;
655 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
656 current_binding_level = current_binding_level->level_chain;
657 find_class_binding_level ();
660 static void
661 resume_binding_level (b)
662 struct binding_level *b;
664 /* Resuming binding levels is meant only for namespaces,
665 and those cannot nest into classes. */
666 my_friendly_assert(!class_binding_level, 386);
667 /* Also, resuming a non-directly nested namespace is a no-no. */
668 my_friendly_assert(b->level_chain == current_binding_level, 386);
669 current_binding_level = b;
670 #if defined(DEBUG_CP_BINDING_LEVELS)
671 b->binding_depth = binding_depth;
672 indent ();
673 fprintf (stderr, "resume %s level 0x%08x line %d\n",
674 (is_class_level) ? "class" : "block", b, lineno);
675 is_class_level = 0;
676 binding_depth++;
677 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
680 /* Create a new `struct binding_level'. */
682 static
683 struct binding_level *
684 make_binding_level ()
686 /* NOSTRICT */
687 return (struct binding_level *) xmalloc (sizeof (struct binding_level));
690 /* Nonzero if we are currently in the global binding level. */
693 global_bindings_p ()
695 return current_binding_level == global_binding_level;
698 /* Return the innermost binding level that is not for a class scope. */
700 static struct binding_level *
701 innermost_nonclass_level ()
703 struct binding_level *b;
705 b = current_binding_level;
706 while (b->parm_flag == 2)
707 b = b->level_chain;
709 return b;
712 /* Nonzero if we are currently in a toplevel binding level. This
713 means either the global binding level or a namespace in a toplevel
714 binding level. Since there are no non-toplevel namespace levels,
715 this really means any namespace or pseudo-global level. We also
716 include a class whose context is toplevel. */
719 toplevel_bindings_p ()
721 struct binding_level *b = innermost_nonclass_level ();
723 return b->namespace_p || b->pseudo_global;
726 /* Nonzero if this is a namespace scope, or if we are defining a class
727 which is itself at namespace scope, or whose enclosing class is
728 such a class, etc. */
731 namespace_bindings_p ()
733 struct binding_level *b = innermost_nonclass_level ();
735 return b->namespace_p;
738 /* If KEEP is non-zero, make a BLOCK node for the next binding level,
739 unconditionally. Otherwise, use the normal logic to decide whether
740 or not to create a BLOCK. */
742 void
743 keep_next_level (keep)
744 int keep;
746 keep_next_level_flag = keep;
749 /* Nonzero if the current level needs to have a BLOCK made. */
752 kept_level_p ()
754 return (current_binding_level->blocks != NULL_TREE
755 || current_binding_level->keep
756 || current_binding_level->names != NULL_TREE
757 || (current_binding_level->tags != NULL_TREE
758 && !current_binding_level->tag_transparent));
761 void
762 declare_pseudo_global_level ()
764 current_binding_level->pseudo_global = 1;
767 static void
768 declare_namespace_level ()
770 current_binding_level->namespace_p = 1;
774 pseudo_global_level_p ()
776 return current_binding_level->pseudo_global;
779 void
780 set_class_shadows (shadows)
781 tree shadows;
783 class_binding_level->class_shadowed = shadows;
786 /* Enter a new binding level.
787 If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
788 not for that of tags. */
790 void
791 pushlevel (tag_transparent)
792 int tag_transparent;
794 struct binding_level *newlevel;
796 if (current_function && !doing_semantic_analysis_p ())
797 return;
799 /* Reuse or create a struct for this binding level. */
800 #if defined(DEBUG_CP_BINDING_LEVELS)
801 if (0)
802 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
803 if (free_binding_level)
804 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
806 newlevel = free_binding_level;
807 free_binding_level = free_binding_level->level_chain;
809 else
810 newlevel = make_binding_level ();
812 push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
813 GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
814 keep_next_level_flag = 0;
817 void
818 note_level_for_for ()
820 current_binding_level->is_for_scope = 1;
823 /* For a binding between a name and an entity at a block scope,
824 this is the `struct binding_level' for the block. */
825 #define BINDING_LEVEL(NODE) \
826 (((struct tree_binding*)NODE)->scope.level)
828 /* Make DECL the innermost binding for ID. The LEVEL is the binding
829 level at which this declaration is being bound. */
831 static void
832 push_binding (id, decl, level)
833 tree id;
834 tree decl;
835 struct binding_level* level;
837 tree binding;
839 binding = make_node (CPLUS_BINDING);
841 /* Now, fill in the binding information. */
842 BINDING_VALUE (binding) = decl;
843 BINDING_TYPE (binding) = NULL_TREE;
844 BINDING_LEVEL (binding) = level;
845 INHERITED_VALUE_BINDING_P (binding) = 0;
846 LOCAL_BINDING_P (binding) = (level != class_binding_level);
847 BINDING_HAS_LEVEL_P (binding) = 1;
849 /* And put it on the front of the list of bindings for ID. */
850 TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
851 IDENTIFIER_BINDING (id) = binding;
854 /* ID is already bound in the current scope. But, DECL is an
855 additional binding for ID in the same scope. This is the `struct
856 stat' hack whereby a non-typedef class-name or enum-name can be
857 bound at the same level as some other kind of entity. It's the
858 responsibility of the caller to check that inserting this name is
859 legal here. Returns nonzero if the new binding was successful. */
860 static int
861 add_binding (id, decl)
862 tree id;
863 tree decl;
865 tree binding = IDENTIFIER_BINDING (id);
866 int ok = 1;
868 if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
869 /* The new name is the type name. */
870 BINDING_TYPE (binding) = decl;
871 else if (!BINDING_VALUE (binding))
872 /* This situation arises when push_class_level_binding moves an
873 inherited type-binding out of the way to make room for a new
874 value binding. */
875 BINDING_VALUE (binding) = decl;
876 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
877 && DECL_ARTIFICIAL (BINDING_VALUE (binding)))
879 /* The old binding was a type name. It was placed in
880 BINDING_VALUE because it was thought, at the point it was
881 declared, to be the only entity with such a name. Move the
882 type name into the type slot; it is now hidden by the new
883 binding. */
884 BINDING_TYPE (binding) = BINDING_VALUE (binding);
885 BINDING_VALUE (binding) = decl;
886 INHERITED_VALUE_BINDING_P (binding) = 0;
888 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
889 && TREE_CODE (decl) == TYPE_DECL
890 && DECL_NAME (decl) == DECL_NAME (BINDING_VALUE (binding))
891 && same_type_p (TREE_TYPE (decl),
892 TREE_TYPE (BINDING_VALUE (binding))))
893 /* We have two typedef-names, both naming the same type to have
894 the same name. This is OK because of:
896 [dcl.typedef]
898 In a given scope, a typedef specifier can be used to redefine
899 the name of any type declared in that scope to refer to the
900 type to which it already refers. */
901 ok = 0;
902 else
904 cp_error ("declaration of `%#D'", decl);
905 cp_error_at ("conflicts with previous declaration `%#D'",
906 BINDING_VALUE (binding));
907 ok = 0;
910 return ok;
913 /* Add DECL to the list of things declared in B. */
915 static void
916 add_decl_to_level (decl, b)
917 tree decl;
918 struct binding_level *b;
920 /* We build up the list in reverse order, and reverse it later if
921 necessary. */
922 TREE_CHAIN (decl) = b->names;
923 b->names = decl;
926 /* Bind DECL to ID in the current_binding_level, assumed to be a local
927 binding level. If PUSH_USING is set in FLAGS, we know that DECL
928 doesn't really belong to this binding level, that it got here
929 through a using-declaration. */
931 void
932 push_local_binding (id, decl, flags)
933 tree id;
934 tree decl;
935 int flags;
937 struct binding_level *b;
939 /* Skip over any local classes. This makes sense if we call
940 push_local_binding with a friend decl of a local class. */
941 b = current_binding_level;
942 while (b->parm_flag == 2)
943 b = b->level_chain;
945 if (lookup_name_current_level (id))
947 /* Supplement the existing binding. */
948 if (!add_binding (id, decl))
949 /* It didn't work. Something else must be bound at this
950 level. Do not add DECL to the list of things to pop
951 later. */
952 return;
954 else
955 /* Create a new binding. */
956 push_binding (id, decl, b);
958 if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
959 /* We must put the OVERLOAD into a TREE_LIST since the
960 TREE_CHAIN of an OVERLOAD is already used. Similarly for
961 decls that got here through a using-declaration. */
962 decl = build_tree_list (NULL_TREE, decl);
964 /* And put DECL on the list of things declared by the current
965 binding level. */
966 add_decl_to_level (decl, b);
969 /* Bind DECL to ID in the class_binding_level. Returns nonzero if the
970 binding was successful. */
973 push_class_binding (id, decl)
974 tree id;
975 tree decl;
977 int result = 1;
978 tree binding = IDENTIFIER_BINDING (id);
979 tree context;
981 /* Note that we declared this value so that we can issue an error if
982 this an illegal redeclaration of a name already used for some
983 other purpose. */
984 note_name_declared_in_class (id, decl);
986 if (binding && BINDING_LEVEL (binding) == class_binding_level)
987 /* Supplement the existing binding. */
988 result = add_binding (id, decl);
989 else
990 /* Create a new binding. */
991 push_binding (id, decl, class_binding_level);
993 /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
994 class-level declaration. Note that we do not use DECL here
995 because of the possibility of the `struct stat' hack; if DECL is
996 a class-name or enum-name we might prefer a field-name, or some
997 such. */
998 IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
1000 /* If this is a binding from a base class, mark it as such. */
1001 binding = IDENTIFIER_BINDING (id);
1002 if (BINDING_VALUE (binding) == decl && TREE_CODE (decl) != TREE_LIST)
1004 /* Any implicit typename must be from a base-class. The
1005 context for an implicit typename declaration is always
1006 the derived class in which the lookup was done, so the checks
1007 based on the context of DECL below will not trigger. */
1008 if (IMPLICIT_TYPENAME_TYPE_DECL_P (decl))
1009 INHERITED_VALUE_BINDING_P (binding) = 1;
1010 else
1012 if (TREE_CODE (decl) == OVERLOAD)
1013 context = DECL_REAL_CONTEXT (OVL_CURRENT (decl));
1014 else
1016 my_friendly_assert (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd',
1018 context = DECL_REAL_CONTEXT (decl);
1021 if (is_properly_derived_from (current_class_type, context))
1022 INHERITED_VALUE_BINDING_P (binding) = 1;
1023 else
1024 INHERITED_VALUE_BINDING_P (binding) = 0;
1027 else if (BINDING_VALUE (binding) == decl)
1028 /* We only encounter a TREE_LIST when push_class_decls detects an
1029 ambiguity. Such an ambiguity can be overridden by a definition
1030 in this class. */
1031 INHERITED_VALUE_BINDING_P (binding) = 1;
1033 return result;
1036 /* Remove the binding for DECL which should be the innermost binding
1037 for ID. */
1039 static void
1040 pop_binding (id, decl)
1041 tree id;
1042 tree decl;
1044 tree binding;
1046 if (id == NULL_TREE)
1047 /* It's easiest to write the loops that call this function without
1048 checking whether or not the entities involved have names. We
1049 get here for such an entity. */
1050 return;
1052 /* Get the innermost binding for ID. */
1053 binding = IDENTIFIER_BINDING (id);
1055 /* The name should be bound. */
1056 my_friendly_assert (binding != NULL_TREE, 0);
1058 /* The DECL will be either the ordinary binding or the type
1059 binding for this identifier. Remove that binding. */
1060 if (BINDING_VALUE (binding) == decl)
1061 BINDING_VALUE (binding) = NULL_TREE;
1062 else if (BINDING_TYPE (binding) == decl)
1063 BINDING_TYPE (binding) = NULL_TREE;
1064 else
1065 my_friendly_abort (0);
1067 if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
1068 /* We're completely done with the innermost binding for this
1069 identifier. Unhook it from the list of bindings. */
1070 IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
1073 /* When a label goes out of scope, check to see if that label was used
1074 in a valid manner, and issue any appropriate warnings or errors. */
1076 static void
1077 pop_label (link)
1078 tree link;
1080 tree label = TREE_VALUE (link);
1082 if (!processing_template_decl && doing_semantic_analysis_p ())
1084 if (DECL_INITIAL (label) == NULL_TREE)
1086 cp_error_at ("label `%D' used but not defined", label);
1087 /* Avoid crashing later. */
1088 define_label (input_filename, 1, DECL_NAME (label));
1090 else if (warn_unused && !TREE_USED (label))
1091 cp_warning_at ("label `%D' defined but not used", label);
1094 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), TREE_PURPOSE (link));
1097 /* At the end of a function, all labels declared within the fucntion
1098 go out of scope. BLOCK is the top-level block for the
1099 function. */
1101 static void
1102 pop_labels (block)
1103 tree block;
1105 tree link;
1107 /* Clear out the definitions of all label names, since their scopes
1108 end here. */
1109 for (link = named_labels; link; link = TREE_CHAIN (link))
1111 pop_label (link);
1112 /* Put the labels into the "variables" of the top-level block,
1113 so debugger can see them. */
1114 TREE_CHAIN (TREE_VALUE (link)) = BLOCK_VARS (block);
1115 BLOCK_VARS (block) = TREE_VALUE (link);
1118 named_labels = NULL_TREE;
1121 /* Exit a binding level.
1122 Pop the level off, and restore the state of the identifier-decl mappings
1123 that were in effect when this level was entered.
1125 If KEEP == 1, this level had explicit declarations, so
1126 and create a "block" (a BLOCK node) for the level
1127 to record its declarations and subblocks for symbol table output.
1129 If FUNCTIONBODY is nonzero, this level is the body of a function,
1130 so create a block as if KEEP were set and also clear out all
1131 label names.
1133 If REVERSE is nonzero, reverse the order of decls before putting
1134 them into the BLOCK. */
1136 tree
1137 poplevel (keep, reverse, functionbody)
1138 int keep;
1139 int reverse;
1140 int functionbody;
1142 register tree link;
1143 /* The chain of decls was accumulated in reverse order.
1144 Put it into forward order, just for cleanliness. */
1145 tree decls;
1146 int tmp = functionbody;
1147 int real_functionbody;
1148 tree tags;
1149 tree subblocks;
1150 tree block = NULL_TREE;
1151 tree decl;
1152 int block_previously_created;
1153 int leaving_for_scope;
1155 if (current_function && !doing_semantic_analysis_p ())
1156 return NULL_TREE;
1158 my_friendly_assert (current_binding_level->parm_flag != 2,
1159 19990916);
1161 real_functionbody = (current_binding_level->keep == 2
1162 ? ((functionbody = 0), tmp) : functionbody);
1163 tags = functionbody >= 0 ? current_binding_level->tags : 0;
1164 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1166 my_friendly_assert (!current_binding_level->class_shadowed,
1167 19990414);
1169 /* We used to use KEEP == 2 to indicate that the new block should go
1170 at the beginning of the list of blocks at this binding level,
1171 rather than the end. This hack is no longer used. */
1172 my_friendly_assert (keep == 0 || keep == 1, 0);
1174 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1175 (HOST_WIDE_INT) current_binding_level->level_chain,
1176 current_binding_level->parm_flag,
1177 current_binding_level->keep);
1179 if (current_binding_level->keep == 1)
1180 keep = 1;
1182 /* Get the decls in the order they were written.
1183 Usually current_binding_level->names is in reverse order.
1184 But parameter decls were previously put in forward order. */
1186 if (reverse)
1187 current_binding_level->names
1188 = decls = nreverse (current_binding_level->names);
1189 else
1190 decls = current_binding_level->names;
1192 /* Output any nested inline functions within this block
1193 if they weren't already output. */
1195 for (decl = decls; decl; decl = TREE_CHAIN (decl))
1196 if (TREE_CODE (decl) == FUNCTION_DECL
1197 && ! TREE_ASM_WRITTEN (decl)
1198 && DECL_INITIAL (decl) != NULL_TREE
1199 && TREE_ADDRESSABLE (decl)
1200 && decl_function_context (decl) == current_function_decl)
1202 /* If this decl was copied from a file-scope decl
1203 on account of a block-scope extern decl,
1204 propagate TREE_ADDRESSABLE to the file-scope decl. */
1205 if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1206 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1207 else
1209 push_function_context ();
1210 output_inline_function (decl);
1211 pop_function_context ();
1215 /* If there were any declarations or structure tags in that level,
1216 or if this level is a function body,
1217 create a BLOCK to record them for the life of this function. */
1219 block = NULL_TREE;
1220 block_previously_created = (current_binding_level->this_block != NULL_TREE);
1221 if (block_previously_created)
1222 block = current_binding_level->this_block;
1223 else if (keep == 1 || functionbody)
1224 block = make_node (BLOCK);
1225 if (block != NULL_TREE)
1227 if (block_previously_created)
1229 if (decls || tags || subblocks)
1231 if (BLOCK_VARS (block))
1232 warning ("internal compiler error: debugging info corrupted");
1234 BLOCK_VARS (block) = decls;
1236 /* We can have previous subblocks and new subblocks when
1237 doing fixup_gotos with complex cleanups. We chain the new
1238 subblocks onto the end of any pre-existing subblocks. */
1239 BLOCK_SUBBLOCKS (block) = chainon (BLOCK_SUBBLOCKS (block),
1240 subblocks);
1243 else
1245 BLOCK_VARS (block) = decls;
1246 BLOCK_SUBBLOCKS (block) = subblocks;
1250 /* In each subblock, record that this is its superior. */
1252 if (keep >= 0)
1253 for (link = subblocks; link; link = TREE_CHAIN (link))
1254 BLOCK_SUPERCONTEXT (link) = block;
1256 /* We still support the old for-scope rules, whereby the variables
1257 in a for-init statement were in scope after the for-statement
1258 ended. We only use the new rules in flag_new_for_scope is
1259 nonzero. */
1260 leaving_for_scope
1261 = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1263 /* Remove declarations for all the DECLs in this level. */
1264 for (link = decls; link; link = TREE_CHAIN (link))
1266 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL)
1268 tree outer_binding
1269 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1270 tree ns_binding;
1272 if (!outer_binding)
1273 ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
1274 else
1275 ns_binding = NULL_TREE;
1277 if (outer_binding
1278 && (BINDING_LEVEL (outer_binding)
1279 == current_binding_level->level_chain))
1280 /* We have something like:
1282 int i;
1283 for (int i; ;);
1285 and we are leaving the `for' scope. There's no reason to
1286 keep the binding of the inner `i' in this case. */
1287 pop_binding (DECL_NAME (link), link);
1288 else if ((outer_binding
1289 && (TREE_CODE (BINDING_VALUE (outer_binding))
1290 == TYPE_DECL))
1291 || (ns_binding
1292 && TREE_CODE (ns_binding) == TYPE_DECL))
1293 /* Here, we have something like:
1295 typedef int I;
1297 void f () {
1298 for (int I; ;);
1301 We must pop the for-scope binding so we know what's a
1302 type and what isn't. */
1303 pop_binding (DECL_NAME (link), link);
1304 else
1306 /* Mark this VAR_DECL as dead so that we can tell we left it
1307 there only for backward compatibility. */
1308 DECL_DEAD_FOR_LOCAL (link) = 1;
1310 /* Keep track of what should of have happenned when we
1311 popped the binding. */
1312 if (outer_binding && BINDING_VALUE (outer_binding))
1313 DECL_SHADOWED_FOR_VAR (link)
1314 = BINDING_VALUE (outer_binding);
1316 /* Add it to the list of dead variables in the next
1317 outermost binding to that we can remove these when we
1318 leave that binding. */
1319 current_binding_level->level_chain->dead_vars_from_for
1320 = tree_cons (NULL_TREE, link,
1321 current_binding_level->level_chain->
1322 dead_vars_from_for);
1324 /* Although we don't pop the CPLUS_BINDING, we do clear
1325 its BINDING_LEVEL since the level is going away now. */
1326 BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1327 = 0;
1330 else
1332 /* Remove the binding. */
1333 decl = link;
1334 if (TREE_CODE (decl) == TREE_LIST)
1335 decl = TREE_VALUE (decl);
1336 if (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd')
1337 pop_binding (DECL_NAME (decl), decl);
1338 else if (TREE_CODE (decl) == OVERLOAD)
1339 pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
1340 else
1341 my_friendly_abort (0);
1345 /* Remove declarations for any `for' variables from inner scopes
1346 that we kept around. */
1347 for (link = current_binding_level->dead_vars_from_for;
1348 link; link = TREE_CHAIN (link))
1349 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
1351 /* Restore the IDENTIFIER_TYPE_VALUEs. */
1352 for (link = current_binding_level->type_shadowed;
1353 link; link = TREE_CHAIN (link))
1354 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
1356 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
1357 for (link = current_binding_level->shadowed_labels;
1358 link;
1359 link = TREE_CHAIN (link))
1360 pop_label (link);
1362 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1363 list if a `using' declaration put them there. The debugging
1364 back-ends won't understand OVERLOAD, so we remove them here.
1365 Because the BLOCK_VARS are (temporarily) shared with
1366 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1367 popped all the bindings. */
1368 if (block)
1370 tree* d;
1372 for (d = &BLOCK_VARS (block); *d; )
1374 if (TREE_CODE (*d) == TREE_LIST)
1375 *d = TREE_CHAIN (*d);
1376 else
1377 d = &TREE_CHAIN (*d);
1381 /* If the level being exited is the top level of a function,
1382 check over all the labels. */
1383 if (functionbody)
1385 /* Since this is the top level block of a function, the vars are
1386 the function's parameters. Don't leave them in the BLOCK
1387 because they are found in the FUNCTION_DECL instead. */
1388 BLOCK_VARS (block) = 0;
1389 pop_labels (block);
1392 /* Any uses of undefined labels now operate under constraints
1393 of next binding contour. */
1394 if (current_function)
1396 struct binding_level *level_chain;
1397 level_chain = current_binding_level->level_chain;
1398 if (level_chain)
1400 struct named_label_list *labels;
1401 for (labels = named_label_uses; labels; labels = labels->next)
1402 if (labels->binding_level == current_binding_level)
1404 labels->binding_level = level_chain;
1405 labels->names_in_scope = level_chain->names;
1410 tmp = current_binding_level->keep;
1412 pop_binding_level ();
1413 if (functionbody)
1414 DECL_INITIAL (current_function_decl) = block;
1415 else if (block)
1417 if (!block_previously_created)
1418 current_binding_level->blocks
1419 = chainon (current_binding_level->blocks, block);
1421 /* If we did not make a block for the level just exited,
1422 any blocks made for inner levels
1423 (since they cannot be recorded as subblocks in that level)
1424 must be carried forward so they will later become subblocks
1425 of something else. */
1426 else if (subblocks)
1427 current_binding_level->blocks
1428 = chainon (current_binding_level->blocks, subblocks);
1430 /* Take care of compiler's internal binding structures. */
1431 if (tmp == 2)
1433 add_scope_stmt (/*begin_p=*/0, /*partial_p=*/1);
1434 /* Each and every BLOCK node created here in `poplevel' is important
1435 (e.g. for proper debugging information) so if we created one
1436 earlier, mark it as "used". */
1437 if (block)
1438 TREE_USED (block) = 1;
1439 block = poplevel (keep, reverse, functionbody);
1442 /* Each and every BLOCK node created here in `poplevel' is important
1443 (e.g. for proper debugging information) so if we created one
1444 earlier, mark it as "used". */
1445 if (block)
1446 TREE_USED (block) = 1;
1447 return block;
1450 /* Delete the node BLOCK from the current binding level.
1451 This is used for the block inside a stmt expr ({...})
1452 so that the block can be reinserted where appropriate. */
1454 void
1455 delete_block (block)
1456 tree block;
1458 tree t;
1459 if (current_binding_level->blocks == block)
1460 current_binding_level->blocks = TREE_CHAIN (block);
1461 for (t = current_binding_level->blocks; t;)
1463 if (TREE_CHAIN (t) == block)
1464 TREE_CHAIN (t) = TREE_CHAIN (block);
1465 else
1466 t = TREE_CHAIN (t);
1468 TREE_CHAIN (block) = NULL_TREE;
1469 /* Clear TREE_USED which is always set by poplevel.
1470 The flag is set again if insert_block is called. */
1471 TREE_USED (block) = 0;
1474 /* Insert BLOCK at the end of the list of subblocks of the
1475 current binding level. This is used when a BIND_EXPR is expanded,
1476 to handle the BLOCK node inside the BIND_EXPR. */
1478 void
1479 insert_block (block)
1480 tree block;
1482 TREE_USED (block) = 1;
1483 current_binding_level->blocks
1484 = chainon (current_binding_level->blocks, block);
1487 /* Set the BLOCK node for the innermost scope
1488 (the one we are currently in). */
1490 void
1491 set_block (block)
1492 register tree block;
1494 current_binding_level->this_block = block;
1497 /* Do a pushlevel for class declarations. */
1499 void
1500 pushlevel_class ()
1502 register struct binding_level *newlevel;
1504 /* Reuse or create a struct for this binding level. */
1505 #if defined(DEBUG_CP_BINDING_LEVELS)
1506 if (0)
1507 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1508 if (free_binding_level)
1509 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1511 newlevel = free_binding_level;
1512 free_binding_level = free_binding_level->level_chain;
1514 else
1515 newlevel = make_binding_level ();
1517 #if defined(DEBUG_CP_BINDING_LEVELS)
1518 is_class_level = 1;
1519 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1521 push_binding_level (newlevel, 0, 0);
1523 class_binding_level = current_binding_level;
1524 class_binding_level->parm_flag = 2;
1527 /* ...and a poplevel for class declarations. */
1529 void
1530 poplevel_class ()
1532 register struct binding_level *level = class_binding_level;
1533 tree shadowed;
1535 my_friendly_assert (level != 0, 354);
1537 /* If we're leaving a toplevel class, don't bother to do the setting
1538 of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
1539 shouldn't even be used when current_class_type isn't set, and second,
1540 if we don't touch it here, we're able to use the cache effect if the
1541 next time we're entering a class scope, it is the same class. */
1542 if (current_class_depth != 1)
1544 struct binding_level* b;
1546 /* Clear out our IDENTIFIER_CLASS_VALUEs. */
1547 for (shadowed = level->class_shadowed;
1548 shadowed;
1549 shadowed = TREE_CHAIN (shadowed))
1550 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = NULL_TREE;
1552 /* Find the next enclosing class, and recreate
1553 IDENTIFIER_CLASS_VALUEs appropriate for that class. */
1554 b = level->level_chain;
1555 while (b && b->parm_flag != 2)
1556 b = b->level_chain;
1558 if (b)
1559 for (shadowed = b->class_shadowed;
1560 shadowed;
1561 shadowed = TREE_CHAIN (shadowed))
1563 tree t;
1565 t = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
1566 while (t && BINDING_LEVEL (t) != b)
1567 t = TREE_CHAIN (t);
1569 if (t)
1570 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed))
1571 = BINDING_VALUE (t);
1574 else
1575 /* Remember to save what IDENTIFIER's were bound in this scope so we
1576 can recover from cache misses. */
1578 previous_class_type = current_class_type;
1579 previous_class_values = class_binding_level->class_shadowed;
1581 for (shadowed = level->type_shadowed;
1582 shadowed;
1583 shadowed = TREE_CHAIN (shadowed))
1584 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
1586 /* Remove the bindings for all of the class-level declarations. */
1587 for (shadowed = level->class_shadowed;
1588 shadowed;
1589 shadowed = TREE_CHAIN (shadowed))
1590 pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
1592 GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1593 (HOST_WIDE_INT) class_binding_level->level_chain,
1594 class_binding_level->parm_flag,
1595 class_binding_level->keep);
1597 /* Now, pop out of the binding level which we created up in the
1598 `pushlevel_class' routine. */
1599 #if defined(DEBUG_CP_BINDING_LEVELS)
1600 is_class_level = 1;
1601 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1603 pop_binding_level ();
1606 /* We are entering the scope of a class. Clear IDENTIFIER_CLASS_VALUE
1607 for any names in enclosing classes. */
1609 void
1610 clear_identifier_class_values ()
1612 tree t;
1614 if (!class_binding_level)
1615 return;
1617 for (t = class_binding_level->class_shadowed;
1619 t = TREE_CHAIN (t))
1620 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
1623 /* Returns non-zero if T is a virtual function table. */
1626 vtable_decl_p (t, data)
1627 tree t;
1628 void *data ATTRIBUTE_UNUSED;
1630 return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
1633 /* Returns non-zero if T is a TYPE_DECL for a type with virtual
1634 functions. */
1637 vtype_decl_p (t, data)
1638 tree t;
1639 void *data ATTRIBUTE_UNUSED;
1641 return (TREE_CODE (t) == TYPE_DECL
1642 && TREE_TYPE (t) != error_mark_node
1643 && TYPE_LANG_SPECIFIC (TREE_TYPE (t))
1644 && CLASSTYPE_VSIZE (TREE_TYPE (t)));
1647 /* Return the declarations that are members of the namespace NS. */
1649 tree
1650 cp_namespace_decls (ns)
1651 tree ns;
1653 return NAMESPACE_LEVEL (ns)->names;
1656 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
1657 itself, calling F for each. The DATA is passed to F as well. */
1659 static int
1660 walk_namespaces_r (namespace, f, data)
1661 tree namespace;
1662 walk_namespaces_fn f;
1663 void *data;
1665 tree current;
1666 int result = 0;
1668 result |= (*f) (namespace, data);
1670 for (current = cp_namespace_decls (namespace);
1671 current;
1672 current = TREE_CHAIN (current))
1674 if (TREE_CODE (current) != NAMESPACE_DECL
1675 || DECL_NAMESPACE_ALIAS (current))
1676 continue;
1677 if (!DECL_LANG_SPECIFIC (current))
1679 /* Hmm. std. */
1680 my_friendly_assert (current == std_node, 393);
1681 continue;
1684 /* We found a namespace. */
1685 result |= walk_namespaces_r (current, f, data);
1688 return result;
1691 /* Walk all the namespaces, calling F for each. The DATA is passed to
1692 F as well. */
1695 walk_namespaces (f, data)
1696 walk_namespaces_fn f;
1697 void *data;
1699 return walk_namespaces_r (global_namespace, f, data);
1702 struct walk_globals_data {
1703 walk_globals_pred p;
1704 walk_globals_fn f;
1705 void *data;
1708 /* Walk the global declarations in NAMESPACE. Whenever one is found
1709 for which P returns non-zero, call F with its address. If any call
1710 to F returns a non-zero value, return a non-zero value. */
1712 static int
1713 walk_globals_r (namespace, data)
1714 tree namespace;
1715 void *data;
1717 struct walk_globals_data* wgd = (struct walk_globals_data *) data;
1718 walk_globals_pred p = wgd->p;
1719 walk_globals_fn f = wgd->f;
1720 void *d = wgd->data;
1721 tree *t;
1722 int result = 0;
1724 t = &NAMESPACE_LEVEL (namespace)->names;
1726 while (*t)
1728 tree glbl = *t;
1730 if ((*p) (glbl, d))
1731 result |= (*f) (t, d);
1733 /* If F changed *T, then *T still points at the next item to
1734 examine. */
1735 if (*t == glbl)
1736 t = &TREE_CHAIN (*t);
1739 return result;
1742 /* Walk the global declarations. Whenever one is found for which P
1743 returns non-zero, call F with its address. If any call to F
1744 returns a non-zero value, return a non-zero value. */
1747 walk_globals (p, f, data)
1748 walk_globals_pred p;
1749 walk_globals_fn f;
1750 void *data;
1752 struct walk_globals_data wgd;
1753 wgd.p = p;
1754 wgd.f = f;
1755 wgd.data = data;
1757 return walk_namespaces (walk_globals_r, &wgd);
1760 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
1761 DATA is non-NULL, this is the last time we will call
1762 wrapup_global_declarations for this NAMESPACE. */
1765 wrapup_globals_for_namespace (namespace, data)
1766 tree namespace;
1767 void *data;
1769 tree globals = cp_namespace_decls (namespace);
1770 int len = list_length (globals);
1771 tree *vec = (tree *) alloca (sizeof (tree) * len);
1772 int i;
1773 int result;
1774 tree decl;
1775 int last_time = (data != 0);
1777 if (last_time && namespace == global_namespace)
1778 /* Let compile_file handle the global namespace. */
1779 return 0;
1781 /* Process the decls in reverse order--earliest first.
1782 Put them into VEC from back to front, then take out from front. */
1784 for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
1785 vec[len - i - 1] = decl;
1787 if (last_time)
1789 check_global_declarations (vec, len);
1790 return 0;
1793 /* Temporarily mark vtables as external. That prevents
1794 wrapup_global_declarations from writing them out; we must process
1795 them ourselves in finish_vtable_vardecl. */
1796 for (i = 0; i < len; ++i)
1797 if (vtable_decl_p (vec[i], /*data=*/0) && !DECL_EXTERNAL (vec[i]))
1799 DECL_NOT_REALLY_EXTERN (vec[i]) = 1;
1800 DECL_EXTERNAL (vec[i]) = 1;
1803 /* Write out any globals that need to be output. */
1804 result = wrapup_global_declarations (vec, len);
1806 /* Undo the hack to DECL_EXTERNAL above. */
1807 for (i = 0; i < len; ++i)
1808 if (vtable_decl_p (vec[i], /*data=*/0)
1809 && DECL_NOT_REALLY_EXTERN (vec[i]))
1811 DECL_NOT_REALLY_EXTERN (vec[i]) = 0;
1812 DECL_EXTERNAL (vec[i]) = 0;
1815 return result;
1819 /* Mark ARG (which is really a struct binding_level **) for GC. */
1821 static void
1822 mark_binding_level (arg)
1823 void *arg;
1825 struct binding_level *lvl = *(struct binding_level **)arg;
1827 while (lvl)
1829 ggc_mark_tree (lvl->names);
1830 ggc_mark_tree (lvl->tags);
1831 ggc_mark_tree (lvl->usings);
1832 ggc_mark_tree (lvl->using_directives);
1833 ggc_mark_tree (lvl->class_shadowed);
1834 ggc_mark_tree (lvl->type_shadowed);
1835 ggc_mark_tree (lvl->shadowed_labels);
1836 ggc_mark_tree (lvl->blocks);
1837 ggc_mark_tree (lvl->this_block);
1838 ggc_mark_tree (lvl->incomplete);
1839 ggc_mark_tree (lvl->dead_vars_from_for);
1841 lvl = lvl->level_chain;
1845 /* For debugging. */
1846 static int no_print_functions = 0;
1847 static int no_print_builtins = 0;
1849 void
1850 print_binding_level (lvl)
1851 struct binding_level *lvl;
1853 tree t;
1854 int i = 0, len;
1855 fprintf (stderr, " blocks=");
1856 fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
1857 fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
1858 list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
1859 if (lvl->tag_transparent)
1860 fprintf (stderr, " tag-transparent");
1861 if (lvl->more_cleanups_ok)
1862 fprintf (stderr, " more-cleanups-ok");
1863 if (lvl->have_cleanups)
1864 fprintf (stderr, " have-cleanups");
1865 fprintf (stderr, "\n");
1866 if (lvl->names)
1868 fprintf (stderr, " names:\t");
1869 /* We can probably fit 3 names to a line? */
1870 for (t = lvl->names; t; t = TREE_CHAIN (t))
1872 if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL))
1873 continue;
1874 if (no_print_builtins
1875 && (TREE_CODE (t) == TYPE_DECL)
1876 && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
1877 continue;
1879 /* Function decls tend to have longer names. */
1880 if (TREE_CODE (t) == FUNCTION_DECL)
1881 len = 3;
1882 else
1883 len = 2;
1884 i += len;
1885 if (i > 6)
1887 fprintf (stderr, "\n\t");
1888 i = len;
1890 print_node_brief (stderr, "", t, 0);
1891 if (t == error_mark_node)
1892 break;
1894 if (i)
1895 fprintf (stderr, "\n");
1897 if (lvl->tags)
1899 fprintf (stderr, " tags:\t");
1900 i = 0;
1901 for (t = lvl->tags; t; t = TREE_CHAIN (t))
1903 if (TREE_PURPOSE (t) == NULL_TREE)
1904 len = 3;
1905 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1906 len = 2;
1907 else
1908 len = 4;
1909 i += len;
1910 if (i > 5)
1912 fprintf (stderr, "\n\t");
1913 i = len;
1915 if (TREE_PURPOSE (t) == NULL_TREE)
1917 print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
1918 fprintf (stderr, ">");
1920 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1921 print_node_brief (stderr, "", TREE_VALUE (t), 0);
1922 else
1924 print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
1925 print_node_brief (stderr, "", TREE_VALUE (t), 0);
1926 fprintf (stderr, ">");
1929 if (i)
1930 fprintf (stderr, "\n");
1932 if (lvl->class_shadowed)
1934 fprintf (stderr, " class-shadowed:");
1935 for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
1937 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1939 fprintf (stderr, "\n");
1941 if (lvl->type_shadowed)
1943 fprintf (stderr, " type-shadowed:");
1944 for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
1946 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1948 fprintf (stderr, "\n");
1952 void
1953 print_other_binding_stack (stack)
1954 struct binding_level *stack;
1956 struct binding_level *level;
1957 for (level = stack; level != global_binding_level; level = level->level_chain)
1959 fprintf (stderr, "binding level ");
1960 fprintf (stderr, HOST_PTR_PRINTF, level);
1961 fprintf (stderr, "\n");
1962 print_binding_level (level);
1966 void
1967 print_binding_stack ()
1969 struct binding_level *b;
1970 fprintf (stderr, "current_binding_level=");
1971 fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
1972 fprintf (stderr, "\nclass_binding_level=");
1973 fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
1974 fprintf (stderr, "\nglobal_binding_level=");
1975 fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
1976 fprintf (stderr, "\n");
1977 if (class_binding_level)
1979 for (b = class_binding_level; b; b = b->level_chain)
1980 if (b == current_binding_level)
1981 break;
1982 if (b)
1983 b = class_binding_level;
1984 else
1985 b = current_binding_level;
1987 else
1988 b = current_binding_level;
1989 print_other_binding_stack (b);
1990 fprintf (stderr, "global:\n");
1991 print_binding_level (global_binding_level);
1994 /* Namespace binding access routines: The namespace_bindings field of
1995 the identifier is polymorphic, with three possible values:
1996 NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
1997 indicating the BINDING_VALUE of global_namespace. */
1999 /* Check whether the a binding for the name to scope is known.
2000 Assumes that the bindings of the name are already a list
2001 of bindings. Returns the binding found, or NULL_TREE. */
2003 static tree
2004 find_binding (name, scope)
2005 tree name;
2006 tree scope;
2008 tree iter, prev = NULL_TREE;
2010 scope = ORIGINAL_NAMESPACE (scope);
2012 for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
2013 iter = TREE_CHAIN (iter))
2015 my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
2016 if (BINDING_SCOPE (iter) == scope)
2018 /* Move binding found to the front of the list, so
2019 subsequent lookups will find it faster. */
2020 if (prev)
2022 TREE_CHAIN (prev) = TREE_CHAIN (iter);
2023 TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
2024 IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
2026 return iter;
2028 prev = iter;
2030 return NULL_TREE;
2033 /* Always returns a binding for name in scope. If the
2034 namespace_bindings is not a list, convert it to one first.
2035 If no binding is found, make a new one. */
2037 tree
2038 binding_for_name (name, scope)
2039 tree name;
2040 tree scope;
2042 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2043 tree result;
2045 scope = ORIGINAL_NAMESPACE (scope);
2047 if (b && TREE_CODE (b) != CPLUS_BINDING)
2049 /* Get rid of optimization for global scope. */
2050 IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
2051 BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
2052 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2054 if (b && (result = find_binding (name, scope)))
2055 return result;
2056 /* Not found, make a new permanent one. */
2057 push_obstacks (&permanent_obstack, &permanent_obstack);
2058 result = make_node (CPLUS_BINDING);
2059 TREE_CHAIN (result) = b;
2060 IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
2061 BINDING_SCOPE (result) = scope;
2062 BINDING_TYPE (result) = NULL_TREE;
2063 BINDING_VALUE (result) = NULL_TREE;
2064 pop_obstacks ();
2065 return result;
2068 /* Return the binding value for name in scope, considering that
2069 namespace_binding may or may not be a list of CPLUS_BINDINGS. */
2071 tree
2072 namespace_binding (name, scope)
2073 tree name;
2074 tree scope;
2076 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2077 if (b == NULL_TREE)
2078 return NULL_TREE;
2079 if (scope == NULL_TREE)
2080 scope = global_namespace;
2081 if (TREE_CODE (b) != CPLUS_BINDING)
2082 return (scope == global_namespace) ? b : NULL_TREE;
2083 name = find_binding (name,scope);
2084 if (name == NULL_TREE)
2085 return name;
2086 return BINDING_VALUE (name);
2089 /* Set the binding value for name in scope. If modifying the binding
2090 of global_namespace is attempted, try to optimize it. */
2092 void
2093 set_namespace_binding (name, scope, val)
2094 tree name;
2095 tree scope;
2096 tree val;
2098 tree b;
2100 if (scope == NULL_TREE)
2101 scope = global_namespace;
2103 if (scope == global_namespace)
2105 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2106 if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
2108 IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
2109 return;
2112 b = binding_for_name (name, scope);
2113 BINDING_VALUE (b) = val;
2116 /* Push into the scope of the NAME namespace. If NAME is NULL_TREE, then we
2117 select a name that is unique to this compilation unit. */
2119 void
2120 push_namespace (name)
2121 tree name;
2123 tree d = NULL_TREE;
2124 int need_new = 1;
2125 int implicit_use = 0;
2126 int global = 0;
2127 if (!global_namespace)
2129 /* This must be ::. */
2130 my_friendly_assert (name == get_identifier ("::"), 377);
2131 global = 1;
2133 else if (!name)
2135 /* The name of anonymous namespace is unique for the translation
2136 unit. */
2137 if (!anonymous_namespace_name)
2138 anonymous_namespace_name = get_file_function_name ('N');
2139 name = anonymous_namespace_name;
2140 d = IDENTIFIER_NAMESPACE_VALUE (name);
2141 if (d)
2142 /* Reopening anonymous namespace. */
2143 need_new = 0;
2144 implicit_use = 1;
2146 else if (current_namespace == global_namespace
2147 && name == DECL_NAME (std_node))
2149 in_std++;
2150 return;
2152 else
2154 /* Check whether this is an extended namespace definition. */
2155 d = IDENTIFIER_NAMESPACE_VALUE (name);
2156 if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
2158 need_new = 0;
2159 if (DECL_NAMESPACE_ALIAS (d))
2161 cp_error ("namespace alias `%D' not allowed here, assuming `%D'",
2162 d, DECL_NAMESPACE_ALIAS (d));
2163 d = DECL_NAMESPACE_ALIAS (d);
2168 if (need_new)
2170 /* Make a new namespace, binding the name to it. */
2171 d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2172 /* The global namespace is not pushed, and the global binding
2173 level is set elsewhere. */
2174 if (!global)
2176 d = pushdecl (d);
2177 pushlevel (0);
2178 declare_namespace_level ();
2179 NAMESPACE_LEVEL (d) = current_binding_level;
2182 else
2183 resume_binding_level (NAMESPACE_LEVEL (d));
2185 if (implicit_use)
2186 do_using_directive (d);
2187 /* Enter the name space. */
2188 current_namespace = d;
2191 /* Pop from the scope of the current namespace. */
2193 void
2194 pop_namespace ()
2196 if (current_namespace == global_namespace)
2198 my_friendly_assert (in_std>0, 980421);
2199 in_std--;
2200 return;
2202 current_namespace = CP_DECL_CONTEXT (current_namespace);
2203 /* The binding level is not popped, as it might be re-opened later. */
2204 suspend_binding_level ();
2207 /* Push into the scope of the namespace NS, even if it is deeply
2208 nested within another namespace. */
2210 void
2211 push_nested_namespace (ns)
2212 tree ns;
2214 if (ns == global_namespace)
2215 push_to_top_level ();
2216 else
2218 push_nested_namespace (CP_DECL_CONTEXT (ns));
2219 push_namespace (DECL_NAME (ns));
2223 /* Pop back from the scope of the namespace NS, which was previously
2224 entered with push_nested_namespace. */
2226 void
2227 pop_nested_namespace (ns)
2228 tree ns;
2230 while (ns != global_namespace)
2232 pop_namespace ();
2233 ns = CP_DECL_CONTEXT (ns);
2236 pop_from_top_level ();
2240 /* Subroutines for reverting temporarily to top-level for instantiation
2241 of templates and such. We actually need to clear out the class- and
2242 local-value slots of all identifiers, so that only the global values
2243 are at all visible. Simply setting current_binding_level to the global
2244 scope isn't enough, because more binding levels may be pushed. */
2245 struct saved_scope *scope_chain;
2247 /* Mark ST for GC. */
2249 static void
2250 mark_stmt_tree (st)
2251 struct stmt_tree *st;
2253 ggc_mark_tree (st->x_last_stmt);
2254 ggc_mark_tree (st->x_last_expr_type);
2257 /* Mark ARG (which is really a struct saved_scope **) for GC. */
2259 static void
2260 mark_saved_scope (arg)
2261 void *arg;
2263 struct saved_scope *t = *(struct saved_scope **)arg;
2264 while (t)
2266 mark_binding_level (&t->class_bindings);
2267 ggc_mark_tree (t->old_bindings);
2268 ggc_mark_tree (t->old_namespace);
2269 ggc_mark_tree (t->class_name);
2270 ggc_mark_tree (t->class_type);
2271 ggc_mark_tree (t->access_specifier);
2272 ggc_mark_tree (t->function_decl);
2273 if (t->lang_base)
2274 ggc_mark_tree_varray (t->lang_base);
2275 ggc_mark_tree (t->lang_name);
2276 ggc_mark_tree (t->x_function_parms);
2277 ggc_mark_tree (t->template_parms);
2278 ggc_mark_tree (t->x_previous_class_type);
2279 ggc_mark_tree (t->x_previous_class_values);
2280 ggc_mark_tree (t->x_saved_tree);
2282 mark_stmt_tree (&t->x_stmt_tree);
2283 mark_binding_level (&t->bindings);
2284 t = t->prev;
2288 static tree
2289 store_bindings (names, old_bindings)
2290 tree names, old_bindings;
2292 tree t;
2293 for (t = names; t; t = TREE_CHAIN (t))
2295 tree binding, t1, id;
2297 if (TREE_CODE (t) == TREE_LIST)
2298 id = TREE_PURPOSE (t);
2299 else
2300 id = DECL_NAME (t);
2302 if (!id
2303 /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2304 we have no IDENTIFIER_BINDING if we have left the class
2305 scope, but cached the class-level declarations. */
2306 || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
2307 continue;
2309 for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
2310 if (TREE_VEC_ELT (t1, 0) == id)
2311 goto skip_it;
2313 binding = make_tree_vec (4);
2315 if (id)
2317 my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
2318 TREE_VEC_ELT (binding, 0) = id;
2319 TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
2320 TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
2321 TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
2322 IDENTIFIER_BINDING (id) = NULL_TREE;
2323 IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
2325 TREE_CHAIN (binding) = old_bindings;
2326 old_bindings = binding;
2327 skip_it:
2330 return old_bindings;
2333 void
2334 maybe_push_to_top_level (pseudo)
2335 int pseudo;
2337 struct saved_scope *s;
2338 struct binding_level *b;
2339 tree old_bindings;
2340 int need_pop;
2342 s = (struct saved_scope *) xcalloc (1, sizeof (struct saved_scope));
2344 b = scope_chain ? current_binding_level : 0;
2346 /* If we're in the middle of some function, save our state. */
2347 if (current_function)
2349 need_pop = 1;
2350 push_function_context_to (NULL_TREE);
2352 else
2353 need_pop = 0;
2355 old_bindings = NULL_TREE;
2356 if (scope_chain && previous_class_type)
2357 old_bindings = store_bindings (previous_class_values, old_bindings);
2359 /* Have to include global_binding_level, because class-level decls
2360 aren't listed anywhere useful. */
2361 for (; b; b = b->level_chain)
2363 tree t;
2365 /* Template IDs are inserted into the global level. If they were
2366 inserted into namespace level, finish_file wouldn't find them
2367 when doing pending instantiations. Therefore, don't stop at
2368 namespace level, but continue until :: . */
2369 if (b == global_binding_level || (pseudo && b->pseudo_global))
2370 break;
2372 old_bindings = store_bindings (b->names, old_bindings);
2373 /* We also need to check class_shadowed to save class-level type
2374 bindings, since pushclass doesn't fill in b->names. */
2375 if (b->parm_flag == 2)
2376 old_bindings = store_bindings (b->class_shadowed, old_bindings);
2378 /* Unwind type-value slots back to top level. */
2379 for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2380 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2382 s->prev = scope_chain;
2383 s->old_bindings = old_bindings;
2384 s->bindings = b;
2385 s->need_pop_function_context = need_pop;
2386 s->function_decl = current_function_decl;
2388 scope_chain = s;
2389 current_function_decl = NULL_TREE;
2390 VARRAY_TREE_INIT (current_lang_base, 10, "current_lang_base");
2391 current_lang_stack = &VARRAY_TREE (current_lang_base, 0);
2392 current_lang_name = lang_name_cplusplus;
2393 strict_prototype = strict_prototypes_lang_cplusplus;
2394 current_namespace = global_namespace;
2396 push_obstacks (&permanent_obstack, &permanent_obstack);
2399 void
2400 push_to_top_level ()
2402 maybe_push_to_top_level (0);
2405 void
2406 pop_from_top_level ()
2408 struct saved_scope *s = scope_chain;
2409 tree t;
2411 /* Clear out class-level bindings cache. */
2412 if (previous_class_type)
2413 invalidate_class_lookup_cache ();
2415 pop_obstacks ();
2417 VARRAY_FREE (current_lang_base);
2419 scope_chain = s->prev;
2420 for (t = s->old_bindings; t; t = TREE_CHAIN (t))
2422 tree id = TREE_VEC_ELT (t, 0);
2423 if (id)
2425 SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
2426 IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
2427 IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
2431 if (current_lang_name == lang_name_cplusplus)
2432 strict_prototype = strict_prototypes_lang_cplusplus;
2433 else if (current_lang_name == lang_name_c)
2434 strict_prototype = strict_prototypes_lang_c;
2436 /* If we were in the middle of compiling a function, restore our
2437 state. */
2438 if (s->need_pop_function_context)
2439 pop_function_context_from (NULL_TREE);
2440 current_function_decl = s->function_decl;
2442 free (s);
2445 /* Push a definition of struct, union or enum tag "name".
2446 into binding_level "b". "type" should be the type node,
2447 We assume that the tag "name" is not already defined.
2449 Note that the definition may really be just a forward reference.
2450 In that case, the TYPE_SIZE will be a NULL_TREE.
2452 C++ gratuitously puts all these tags in the name space. */
2454 /* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2455 record the shadowed value for this binding contour. TYPE is
2456 the type that ID maps to. */
2458 static void
2459 set_identifier_type_value_with_scope (id, type, b)
2460 tree id;
2461 tree type;
2462 struct binding_level *b;
2464 if (!b->namespace_p)
2466 /* Shadow the marker, not the real thing, so that the marker
2467 gets restored later. */
2468 tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
2469 b->type_shadowed
2470 = tree_cons (id, old_type_value, b->type_shadowed);
2472 else
2474 tree binding = binding_for_name (id, current_namespace);
2475 BINDING_TYPE (binding) = type;
2476 /* Store marker instead of real type. */
2477 type = global_type_node;
2479 SET_IDENTIFIER_TYPE_VALUE (id, type);
2482 /* As set_identifier_type_value_with_scope, but using current_binding_level. */
2484 void
2485 set_identifier_type_value (id, type)
2486 tree id;
2487 tree type;
2489 set_identifier_type_value_with_scope (id, type, current_binding_level);
2492 /* Return the type associated with id. */
2494 tree
2495 identifier_type_value (id)
2496 tree id;
2498 /* There is no type with that name, anywhere. */
2499 if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2500 return NULL_TREE;
2501 /* This is not the type marker, but the real thing. */
2502 if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2503 return REAL_IDENTIFIER_TYPE_VALUE (id);
2504 /* Have to search for it. It must be on the global level, now.
2505 Ask lookup_name not to return non-types. */
2506 id = lookup_name_real (id, 2, 1, 0);
2507 if (id)
2508 return TREE_TYPE (id);
2509 return NULL_TREE;
2512 /* Pop off extraneous binding levels left over due to syntax errors.
2514 We don't pop past namespaces, as they might be valid. */
2516 void
2517 pop_everything ()
2519 #ifdef DEBUG_CP_BINDING_LEVELS
2520 fprintf (stderr, "XXX entering pop_everything ()\n");
2521 #endif
2522 while (!toplevel_bindings_p ())
2524 if (current_binding_level->parm_flag == 2)
2525 pop_nested_class ();
2526 else
2527 poplevel (0, 0, 0);
2529 #ifdef DEBUG_CP_BINDING_LEVELS
2530 fprintf (stderr, "XXX leaving pop_everything ()\n");
2531 #endif
2534 /* The type TYPE is being declared. If it is a class template, or a
2535 specialization of a class template, do any processing required and
2536 perform error-checking. If IS_FRIEND is non-zero, this TYPE is
2537 being declared a friend. B is the binding level at which this TYPE
2538 should be bound.
2540 Returns the TYPE_DECL for TYPE, which may have been altered by this
2541 processing. */
2543 static tree
2544 maybe_process_template_type_declaration (type, globalize, b)
2545 tree type;
2546 int globalize;
2547 struct binding_level* b;
2549 tree decl = TYPE_NAME (type);
2551 if (processing_template_parmlist)
2552 /* You can't declare a new template type in a template parameter
2553 list. But, you can declare a non-template type:
2555 template <class A*> struct S;
2557 is a forward-declaration of `A'. */
2559 else
2561 maybe_check_template_type (type);
2563 my_friendly_assert (IS_AGGR_TYPE (type)
2564 || TREE_CODE (type) == ENUMERAL_TYPE, 0);
2567 if (processing_template_decl)
2569 /* This may change after the call to
2570 push_template_decl_real, but we want the original value. */
2571 tree name = DECL_NAME (decl);
2573 decl = push_template_decl_real (decl, globalize);
2574 /* If the current binding level is the binding level for the
2575 template parameters (see the comment in
2576 begin_template_parm_list) and the enclosing level is a class
2577 scope, and we're not looking at a friend, push the
2578 declaration of the member class into the class scope. In the
2579 friend case, push_template_decl will already have put the
2580 friend into global scope, if appropriate. */
2581 if (TREE_CODE (type) != ENUMERAL_TYPE
2582 && !globalize && b->pseudo_global
2583 && b->level_chain->parm_flag == 2)
2585 finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
2586 /* Put this tag on the list of tags for the class, since
2587 that won't happen below because B is not the class
2588 binding level, but is instead the pseudo-global level. */
2589 b->level_chain->tags =
2590 tree_cons (name, type, b->level_chain->tags);
2591 if (TYPE_SIZE (current_class_type) == NULL_TREE)
2592 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2597 return decl;
2600 /* In C++, you don't have to write `struct S' to refer to `S'; you
2601 can just use `S'. We accomplish this by creating a TYPE_DECL as
2602 if the user had written `typedef struct S S'. Create and return
2603 the TYPE_DECL for TYPE. */
2605 tree
2606 create_implicit_typedef (name, type)
2607 tree name;
2608 tree type;
2610 tree decl;
2612 decl = build_decl (TYPE_DECL, name, type);
2613 SET_DECL_ARTIFICIAL (decl);
2614 /* There are other implicit type declarations, like the one *within*
2615 a class that allows you to write `S::S'. We must distinguish
2616 amongst these. */
2617 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
2618 TYPE_NAME (type) = decl;
2620 return decl;
2623 /* Push a tag name NAME for struct/class/union/enum type TYPE.
2624 Normally put it into the inner-most non-tag-transparent scope,
2625 but if GLOBALIZE is true, put it in the inner-most non-class scope.
2626 The latter is needed for implicit declarations. */
2628 void
2629 pushtag (name, type, globalize)
2630 tree name, type;
2631 int globalize;
2633 register struct binding_level *b;
2635 b = current_binding_level;
2636 while (b->tag_transparent
2637 || (globalize && b->parm_flag == 2))
2638 b = b->level_chain;
2640 b->tags = tree_cons (name, type, b->tags);
2642 if (name)
2644 /* Do C++ gratuitous typedefing. */
2645 if (IDENTIFIER_TYPE_VALUE (name) != type)
2647 register tree d = NULL_TREE;
2648 int in_class = 0;
2649 tree context = TYPE_CONTEXT (type);
2651 if (! context)
2653 tree cs = current_scope ();
2655 if (! globalize)
2656 context = cs;
2657 else if (cs != NULL_TREE
2658 && TREE_CODE_CLASS (TREE_CODE (cs)) == 't')
2659 /* When declaring a friend class of a local class, we want
2660 to inject the newly named class into the scope
2661 containing the local class, not the namespace scope. */
2662 context = hack_decl_function_context (get_type_decl (cs));
2664 if (!context)
2665 context = current_namespace;
2667 if ((b->pseudo_global && b->level_chain->parm_flag == 2)
2668 || b->parm_flag == 2)
2669 in_class = 1;
2671 if (current_lang_name == lang_name_java)
2672 TYPE_FOR_JAVA (type) = 1;
2674 d = create_implicit_typedef (name, type);
2675 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2676 if (! in_class)
2677 set_identifier_type_value_with_scope (name, type, b);
2679 d = maybe_process_template_type_declaration (type,
2680 globalize, b);
2682 if (b->parm_flag == 2)
2684 if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
2685 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2686 class. But if it's a member template class, we
2687 want the TEMPLATE_DECL, not the TYPE_DECL, so this
2688 is done later. */
2689 finish_member_declaration (d);
2690 else
2691 pushdecl_class_level (d);
2693 else
2694 d = pushdecl_with_scope (d, b);
2696 if (ANON_AGGRNAME_P (name))
2697 DECL_IGNORED_P (d) = 1;
2699 TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2700 DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
2701 if (!uses_template_parms (type))
2702 DECL_ASSEMBLER_NAME (d)
2703 = get_identifier (build_overload_name (type, 1, 1));
2705 if (b->parm_flag == 2)
2707 if (TYPE_SIZE (current_class_type) == NULL_TREE)
2708 CLASSTYPE_TAGS (current_class_type) = b->tags;
2712 if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2713 /* Use the canonical TYPE_DECL for this node. */
2714 TYPE_STUB_DECL (type) = TYPE_NAME (type);
2715 else
2717 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2718 will be the tagged type we just added to the current
2719 binding level. This fake NULL-named TYPE_DECL node helps
2720 dwarfout.c to know when it needs to output a
2721 representation of a tagged type, and it also gives us a
2722 convenient place to record the "scope start" address for
2723 the tagged type. */
2725 tree d = build_decl (TYPE_DECL, NULL_TREE, type);
2726 TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2730 /* Counter used to create anonymous type names. */
2732 static int anon_cnt = 0;
2734 /* Return an IDENTIFIER which can be used as a name for
2735 anonymous structs and unions. */
2737 tree
2738 make_anon_name ()
2740 char buf[32];
2742 sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2743 return get_identifier (buf);
2746 /* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2747 This keeps dbxout from getting confused. */
2749 void
2750 clear_anon_tags ()
2752 register struct binding_level *b;
2753 register tree tags;
2754 static int last_cnt = 0;
2756 /* Fast out if no new anon names were declared. */
2757 if (last_cnt == anon_cnt)
2758 return;
2760 b = current_binding_level;
2761 while (b->tag_transparent)
2762 b = b->level_chain;
2763 tags = b->tags;
2764 while (tags)
2766 /* A NULL purpose means we have already processed all tags
2767 from here to the end of the list. */
2768 if (TREE_PURPOSE (tags) == NULL_TREE)
2769 break;
2770 if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2771 TREE_PURPOSE (tags) = NULL_TREE;
2772 tags = TREE_CHAIN (tags);
2774 last_cnt = anon_cnt;
2777 /* Subroutine of duplicate_decls: return truthvalue of whether
2778 or not types of these decls match.
2780 For C++, we must compare the parameter list so that `int' can match
2781 `int&' in a parameter position, but `int&' is not confused with
2782 `const int&'. */
2785 decls_match (newdecl, olddecl)
2786 tree newdecl, olddecl;
2788 int types_match;
2790 if (newdecl == olddecl)
2791 return 1;
2793 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
2794 /* If the two DECLs are not even the same kind of thing, we're not
2795 interested in their types. */
2796 return 0;
2798 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2800 tree f1 = TREE_TYPE (newdecl);
2801 tree f2 = TREE_TYPE (olddecl);
2802 tree p1 = TYPE_ARG_TYPES (f1);
2803 tree p2 = TYPE_ARG_TYPES (f2);
2805 if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl)
2806 && ! (DECL_LANGUAGE (newdecl) == lang_c
2807 && DECL_LANGUAGE (olddecl) == lang_c))
2808 return 0;
2810 /* When we parse a static member function definition,
2811 we put together a FUNCTION_DECL which thinks its type
2812 is METHOD_TYPE. Change that to FUNCTION_TYPE, and
2813 proceed. */
2814 if (TREE_CODE (f1) == METHOD_TYPE && DECL_STATIC_FUNCTION_P (olddecl))
2815 revert_static_member_fn (&newdecl, &f1, &p1);
2816 else if (TREE_CODE (f2) == METHOD_TYPE
2817 && DECL_STATIC_FUNCTION_P (newdecl))
2818 revert_static_member_fn (&olddecl, &f2, &p2);
2820 /* Here we must take care of the case where new default
2821 parameters are specified. Also, warn if an old
2822 declaration becomes ambiguous because default
2823 parameters may cause the two to be ambiguous. */
2824 if (TREE_CODE (f1) != TREE_CODE (f2))
2826 if (TREE_CODE (f1) == OFFSET_TYPE)
2827 cp_compiler_error ("`%D' redeclared as member function", newdecl);
2828 else
2829 cp_compiler_error ("`%D' redeclared as non-member function", newdecl);
2830 return 0;
2833 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
2835 if (! strict_prototypes_lang_c && DECL_LANGUAGE (olddecl) == lang_c
2836 && p2 == NULL_TREE)
2838 types_match = self_promoting_args_p (p1);
2839 if (p1 == void_list_node)
2840 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2842 else if (!strict_prototypes_lang_c && DECL_LANGUAGE (olddecl)==lang_c
2843 && DECL_LANGUAGE (newdecl) == lang_c && p1 == NULL_TREE)
2845 types_match = self_promoting_args_p (p2);
2846 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2848 else
2849 types_match = compparms (p1, p2);
2851 else
2852 types_match = 0;
2854 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2856 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
2857 DECL_TEMPLATE_PARMS (olddecl)))
2858 return 0;
2860 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2861 types_match = 1;
2862 else
2863 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
2864 DECL_TEMPLATE_RESULT (newdecl));
2866 else
2868 if (TREE_TYPE (newdecl) == error_mark_node)
2869 types_match = TREE_TYPE (olddecl) == error_mark_node;
2870 else if (TREE_TYPE (olddecl) == NULL_TREE)
2871 types_match = TREE_TYPE (newdecl) == NULL_TREE;
2872 else if (TREE_TYPE (newdecl) == NULL_TREE)
2873 types_match = 0;
2874 else
2875 types_match = comptypes (TREE_TYPE (newdecl),
2876 TREE_TYPE (olddecl),
2877 COMPARE_REDECLARATION);
2880 return types_match;
2883 /* If NEWDECL is `static' and an `extern' was seen previously,
2884 warn about it. OLDDECL is the previous declaration.
2886 Note that this does not apply to the C++ case of declaring
2887 a variable `extern const' and then later `const'.
2889 Don't complain about built-in functions, since they are beyond
2890 the user's control. */
2892 static void
2893 warn_extern_redeclared_static (newdecl, olddecl)
2894 tree newdecl, olddecl;
2896 static const char *explicit_extern_static_warning
2897 = "`%D' was declared `extern' and later `static'";
2898 static const char *implicit_extern_static_warning
2899 = "`%D' was declared implicitly `extern' and later `static'";
2901 tree name;
2903 if (TREE_CODE (newdecl) == TYPE_DECL)
2904 return;
2906 /* Don't get confused by static member functions; that's a different
2907 use of `static'. */
2908 if (TREE_CODE (newdecl) == FUNCTION_DECL
2909 && DECL_STATIC_FUNCTION_P (newdecl))
2910 return;
2912 /* If the old declaration was `static', or the new one isn't, then
2913 then everything is OK. */
2914 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
2915 return;
2917 /* It's OK to declare a builtin function as `static'. */
2918 if (TREE_CODE (olddecl) == FUNCTION_DECL
2919 && DECL_ARTIFICIAL (olddecl))
2920 return;
2922 name = DECL_ASSEMBLER_NAME (newdecl);
2923 cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
2924 ? implicit_extern_static_warning
2925 : explicit_extern_static_warning, newdecl);
2926 cp_pedwarn_at ("previous declaration of `%D'", olddecl);
2929 /* Handle when a new declaration NEWDECL has the same name as an old
2930 one OLDDECL in the same binding contour. Prints an error message
2931 if appropriate.
2933 If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
2934 Otherwise, return 0. */
2937 duplicate_decls (newdecl, olddecl)
2938 tree newdecl, olddecl;
2940 unsigned olddecl_uid = DECL_UID (olddecl);
2941 int olddecl_friend = 0, types_match = 0;
2942 int new_defines_function = 0;
2944 if (newdecl == olddecl)
2945 return 1;
2947 types_match = decls_match (newdecl, olddecl);
2949 /* If either the type of the new decl or the type of the old decl is an
2950 error_mark_node, then that implies that we have already issued an
2951 error (earlier) for some bogus type specification, and in that case,
2952 it is rather pointless to harass the user with yet more error message
2953 about the same declaration, so just pretend the types match here. */
2954 if (TREE_TYPE (newdecl) == error_mark_node
2955 || TREE_TYPE (olddecl) == error_mark_node)
2956 types_match = 1;
2958 /* Check for redeclaration and other discrepancies. */
2959 if (TREE_CODE (olddecl) == FUNCTION_DECL
2960 && DECL_ARTIFICIAL (olddecl))
2962 if (TREE_CODE (newdecl) != FUNCTION_DECL)
2964 /* If you declare a built-in or predefined function name as static,
2965 the old definition is overridden, but optionally warn this was a
2966 bad choice of name. */
2967 if (! TREE_PUBLIC (newdecl))
2969 if (warn_shadow)
2970 cp_warning ("shadowing %s function `%#D'",
2971 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
2972 olddecl);
2973 /* Discard the old built-in function. */
2974 return 0;
2976 /* If the built-in is not ansi, then programs can override
2977 it even globally without an error. */
2978 else if (! DECL_BUILT_IN (olddecl))
2979 cp_warning ("library function `%#D' redeclared as non-function `%#D'",
2980 olddecl, newdecl);
2981 else
2983 cp_error ("declaration of `%#D'", newdecl);
2984 cp_error ("conflicts with built-in declaration `%#D'",
2985 olddecl);
2987 return 0;
2989 else if (!types_match)
2991 if ((DECL_LANGUAGE (newdecl) == lang_c
2992 && DECL_LANGUAGE (olddecl) == lang_c)
2993 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
2994 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
2996 /* A near match; override the builtin. */
2998 if (TREE_PUBLIC (newdecl))
3000 cp_warning ("new declaration `%#D'", newdecl);
3001 cp_warning ("ambiguates built-in declaration `%#D'",
3002 olddecl);
3004 else if (warn_shadow)
3005 cp_warning ("shadowing %s function `%#D'",
3006 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3007 olddecl);
3009 else
3010 /* Discard the old built-in function. */
3011 return 0;
3014 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
3016 /* If a builtin function is redeclared as `static', merge
3017 the declarations, but make the original one static. */
3018 DECL_THIS_STATIC (olddecl) = 1;
3019 TREE_PUBLIC (olddecl) = 0;
3021 /* Make the olddeclaration consistent with the new one so that
3022 all remnants of the builtin-ness of this function will be
3023 banished. */
3024 DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3025 DECL_RTL (olddecl) = DECL_RTL (newdecl);
3026 DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3027 SET_IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (newdecl),
3028 newdecl);
3031 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
3033 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
3034 && TREE_CODE (newdecl) != TYPE_DECL
3035 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
3036 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
3037 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
3038 && TREE_CODE (olddecl) != TYPE_DECL
3039 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
3040 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
3041 == TYPE_DECL))))
3043 /* We do nothing special here, because C++ does such nasty
3044 things with TYPE_DECLs. Instead, just let the TYPE_DECL
3045 get shadowed, and know that if we need to find a TYPE_DECL
3046 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3047 slot of the identifier. */
3048 return 0;
3051 if ((TREE_CODE (newdecl) == FUNCTION_DECL
3052 && DECL_FUNCTION_TEMPLATE_P (olddecl))
3053 || (TREE_CODE (olddecl) == FUNCTION_DECL
3054 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
3055 return 0;
3057 cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
3058 if (TREE_CODE (olddecl) == TREE_LIST)
3059 olddecl = TREE_VALUE (olddecl);
3060 cp_error_at ("previous declaration of `%#D'", olddecl);
3062 /* New decl is completely inconsistent with the old one =>
3063 tell caller to replace the old one. */
3065 return 0;
3067 else if (!types_match)
3069 if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl))
3070 /* These are certainly not duplicate declarations; they're
3071 from different scopes. */
3072 return 0;
3074 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3076 /* The name of a class template may not be declared to refer to
3077 any other template, class, function, object, namespace, value,
3078 or type in the same scope. */
3079 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
3080 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3082 cp_error ("declaration of template `%#D'", newdecl);
3083 cp_error_at ("conflicts with previous declaration `%#D'",
3084 olddecl);
3086 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
3087 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3088 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
3089 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
3090 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3091 DECL_TEMPLATE_PARMS (olddecl)))
3093 cp_error ("new declaration `%#D'", newdecl);
3094 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3096 return 0;
3098 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3100 if (DECL_LANGUAGE (newdecl) == lang_c
3101 && DECL_LANGUAGE (olddecl) == lang_c)
3103 cp_error ("declaration of C function `%#D' conflicts with",
3104 newdecl);
3105 cp_error_at ("previous declaration `%#D' here", olddecl);
3107 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3108 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3110 cp_error ("new declaration `%#D'", newdecl);
3111 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3113 else
3114 return 0;
3117 /* Already complained about this, so don't do so again. */
3118 else if (current_class_type == NULL_TREE
3119 || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3121 cp_error ("conflicting types for `%#D'", newdecl);
3122 cp_error_at ("previous declaration as `%#D'", olddecl);
3125 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3126 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3127 && (!DECL_TEMPLATE_INFO (newdecl)
3128 || (DECL_TI_TEMPLATE (newdecl)
3129 != DECL_TI_TEMPLATE (olddecl))))
3130 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3131 && (!DECL_TEMPLATE_INFO (olddecl)
3132 || (DECL_TI_TEMPLATE (olddecl)
3133 != DECL_TI_TEMPLATE (newdecl))))))
3134 /* It's OK to have a template specialization and a non-template
3135 with the same type, or to have specializations of two
3136 different templates with the same type. Note that if one is a
3137 specialization, and the other is an instantiation of the same
3138 template, that we do not exit at this point. That situation
3139 can occur if we instantiate a template class, and then
3140 specialize one of its methods. This situation is legal, but
3141 the declarations must be merged in the usual way. */
3142 return 0;
3143 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3144 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
3145 && !DECL_USE_TEMPLATE (newdecl))
3146 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3147 && !DECL_USE_TEMPLATE (olddecl))))
3148 /* One of the declarations is a template instantiation, and the
3149 other is not a template at all. That's OK. */
3150 return 0;
3151 else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3152 && DECL_NAMESPACE_ALIAS (newdecl)
3153 && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3154 /* Redeclaration of namespace alias, ignore it. */
3155 return 1;
3156 else
3158 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
3159 if (errmsg)
3161 cp_error (errmsg, newdecl);
3162 if (DECL_NAME (olddecl) != NULL_TREE)
3163 cp_error_at ((DECL_INITIAL (olddecl)
3164 && namespace_bindings_p ())
3165 ? "`%#D' previously defined here"
3166 : "`%#D' previously declared here", olddecl);
3168 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3169 && DECL_INITIAL (olddecl) != NULL_TREE
3170 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3171 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3173 /* Prototype decl follows defn w/o prototype. */
3174 cp_warning_at ("prototype for `%#D'", newdecl);
3175 cp_warning_at ("follows non-prototype definition here", olddecl);
3177 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3178 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
3180 /* extern "C" int foo ();
3181 int foo () { bar (); }
3182 is OK. */
3183 if (current_lang_stack
3184 == &VARRAY_TREE (current_lang_base, 0))
3185 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3186 else
3188 cp_error_at ("previous declaration of `%#D' with %L linkage",
3189 olddecl, DECL_LANGUAGE (olddecl));
3190 cp_error ("conflicts with new declaration with %L linkage",
3191 DECL_LANGUAGE (newdecl));
3195 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
3197 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
3199 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3200 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3201 int i = 1;
3203 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3204 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
3206 for (; t1 && t1 != void_list_node;
3207 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3208 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3210 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3211 TREE_PURPOSE (t2)))
3213 if (pedantic)
3215 cp_pedwarn ("default argument given for parameter %d of `%#D'",
3216 i, newdecl);
3217 cp_pedwarn_at ("after previous specification in `%#D'",
3218 olddecl);
3221 else
3223 cp_error ("default argument given for parameter %d of `%#D'",
3224 i, newdecl);
3225 cp_error_at ("after previous specification in `%#D'",
3226 olddecl);
3230 if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
3231 && TREE_ADDRESSABLE (olddecl) && warn_inline)
3233 cp_warning ("`%#D' was used before it was declared inline",
3234 newdecl);
3235 cp_warning_at ("previous non-inline declaration here",
3236 olddecl);
3241 /* If new decl is `static' and an `extern' was seen previously,
3242 warn about it. */
3243 warn_extern_redeclared_static (newdecl, olddecl);
3245 /* We have committed to returning 1 at this point. */
3246 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3248 /* Now that functions must hold information normally held
3249 by field decls, there is extra work to do so that
3250 declaration information does not get destroyed during
3251 definition. */
3252 if (DECL_VINDEX (olddecl))
3253 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
3254 if (DECL_CONTEXT (olddecl))
3255 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
3256 if (DECL_CLASS_CONTEXT (olddecl))
3257 DECL_CLASS_CONTEXT (newdecl) = DECL_CLASS_CONTEXT (olddecl);
3258 if (DECL_PENDING_INLINE_INFO (newdecl) == (struct pending_inline *)0)
3259 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
3260 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3261 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
3262 DECL_ABSTRACT_VIRTUAL_P (newdecl) |= DECL_ABSTRACT_VIRTUAL_P (olddecl);
3263 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
3264 DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
3265 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
3266 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
3268 /* Optionally warn about more than one declaration for the same
3269 name, but don't warn about a function declaration followed by a
3270 definition. */
3271 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3272 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3273 /* Don't warn about extern decl followed by definition. */
3274 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3275 /* Don't warn about friends, let add_friend take care of it. */
3276 && ! DECL_FRIEND_P (newdecl))
3278 cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3279 cp_warning_at ("previous declaration of `%D'", olddecl);
3283 /* Deal with C++: must preserve virtual function table size. */
3284 if (TREE_CODE (olddecl) == TYPE_DECL)
3286 register tree newtype = TREE_TYPE (newdecl);
3287 register tree oldtype = TREE_TYPE (olddecl);
3289 if (newtype != error_mark_node && oldtype != error_mark_node
3290 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3292 CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3293 CLASSTYPE_FRIEND_CLASSES (newtype)
3294 = CLASSTYPE_FRIEND_CLASSES (oldtype);
3298 /* Copy all the DECL_... slots specified in the new decl
3299 except for any that we copy here from the old type. */
3300 DECL_MACHINE_ATTRIBUTES (newdecl)
3301 = merge_machine_decl_attributes (olddecl, newdecl);
3303 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3305 if (! duplicate_decls (DECL_TEMPLATE_RESULT (newdecl),
3306 DECL_TEMPLATE_RESULT (olddecl)))
3307 cp_error ("invalid redeclaration of %D", newdecl);
3308 TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
3309 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
3310 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3311 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
3313 return 1;
3316 if (types_match)
3318 /* Automatically handles default parameters. */
3319 tree oldtype = TREE_TYPE (olddecl);
3320 tree newtype;
3322 /* Make sure we put the new type in the same obstack as the old one. */
3323 if (oldtype)
3324 push_obstacks (TYPE_OBSTACK (oldtype), TYPE_OBSTACK (oldtype));
3325 else
3326 push_permanent_obstack ();
3328 /* Merge the data types specified in the two decls. */
3329 newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3331 if (TREE_CODE (newdecl) == VAR_DECL)
3332 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3333 /* Do this after calling `common_type' so that default
3334 parameters don't confuse us. */
3335 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3336 && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3337 != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3339 TREE_TYPE (newdecl) = build_exception_variant (newtype,
3340 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
3341 TREE_TYPE (olddecl) = build_exception_variant (newtype,
3342 TYPE_RAISES_EXCEPTIONS (oldtype));
3344 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3345 && DECL_SOURCE_LINE (olddecl) != 0
3346 && flag_exceptions
3347 && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
3348 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
3350 cp_error ("declaration of `%F' throws different exceptions",
3351 newdecl);
3352 cp_error_at ("to previous declaration `%F'", olddecl);
3355 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3357 /* Lay the type out, unless already done. */
3358 if (! same_type_p (newtype, oldtype)
3359 && TREE_TYPE (newdecl) != error_mark_node
3360 && !(processing_template_decl && uses_template_parms (newdecl)))
3361 layout_type (TREE_TYPE (newdecl));
3363 if ((TREE_CODE (newdecl) == VAR_DECL
3364 || TREE_CODE (newdecl) == PARM_DECL
3365 || TREE_CODE (newdecl) == RESULT_DECL
3366 || TREE_CODE (newdecl) == FIELD_DECL
3367 || TREE_CODE (newdecl) == TYPE_DECL)
3368 && !(processing_template_decl && uses_template_parms (newdecl)))
3369 layout_decl (newdecl, 0);
3371 /* Merge the type qualifiers. */
3372 if (TREE_READONLY (newdecl))
3373 TREE_READONLY (olddecl) = 1;
3374 if (TREE_THIS_VOLATILE (newdecl))
3375 TREE_THIS_VOLATILE (olddecl) = 1;
3377 /* Merge the initialization information. */
3378 if (DECL_INITIAL (newdecl) == NULL_TREE
3379 && DECL_INITIAL (olddecl) != NULL_TREE)
3381 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3382 DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3383 DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
3384 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
3385 && DECL_LANG_SPECIFIC (newdecl)
3386 && DECL_LANG_SPECIFIC (olddecl))
3387 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
3390 /* Merge the section attribute.
3391 We want to issue an error if the sections conflict but that must be
3392 done later in decl_attributes since we are called before attributes
3393 are assigned. */
3394 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3395 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3397 /* Keep the old rtl since we can safely use it. */
3398 DECL_RTL (newdecl) = DECL_RTL (olddecl);
3400 pop_obstacks ();
3402 /* If cannot merge, then use the new type and qualifiers,
3403 and don't preserve the old rtl. */
3404 else
3406 /* Clean out any memory we had of the old declaration. */
3407 tree oldstatic = value_member (olddecl, static_aggregates);
3408 if (oldstatic)
3409 TREE_VALUE (oldstatic) = error_mark_node;
3411 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3412 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3413 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3414 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3417 /* Merge the storage class information. */
3418 DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
3419 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
3420 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3421 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3422 if (! DECL_EXTERNAL (olddecl))
3423 DECL_EXTERNAL (newdecl) = 0;
3425 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
3427 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3428 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
3429 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
3430 DECL_TEMPLATE_INSTANTIATED (newdecl)
3431 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
3432 /* Don't really know how much of the language-specific
3433 values we should copy from old to new. */
3434 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3435 DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3436 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
3437 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3438 olddecl_friend = DECL_FRIEND_P (olddecl);
3440 /* Only functions have DECL_BEFRIENDING_CLASSES. */
3441 if (TREE_CODE (newdecl) == FUNCTION_DECL
3442 || DECL_FUNCTION_TEMPLATE_P (newdecl))
3443 DECL_BEFRIENDING_CLASSES (newdecl)
3444 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3445 DECL_BEFRIENDING_CLASSES (olddecl));
3448 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3450 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
3451 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
3453 /* If newdecl is not a specialization, then it is not a
3454 template-related function at all. And that means that we
3455 shoud have exited above, returning 0. */
3456 my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3459 if (TREE_USED (olddecl))
3460 /* From [temp.expl.spec]:
3462 If a template, a member template or the member of a class
3463 template is explicitly specialized then that
3464 specialization shall be declared before the first use of
3465 that specialization that would cause an implicit
3466 instantiation to take place, in every translation unit in
3467 which such a use occurs. */
3468 cp_error ("explicit specialization of %D after first use",
3469 olddecl);
3471 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3473 DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3475 /* If either decl says `inline', this fn is inline, unless its
3476 definition was passed already. */
3477 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3478 DECL_INLINE (olddecl) = 1;
3479 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3481 if (! types_match)
3483 DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3484 DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3485 DECL_RTL (olddecl) = DECL_RTL (newdecl);
3487 if (! types_match || new_defines_function)
3489 /* These need to be copied so that the names are available.
3490 Note that if the types do match, we'll preserve inline
3491 info and other bits, but if not, we won't. */
3492 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3493 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
3495 if (new_defines_function)
3496 /* If defining a function declared with other language
3497 linkage, use the previously declared language linkage. */
3498 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3499 else if (types_match)
3501 /* If redeclaring a builtin function, and not a definition,
3502 it stays built in. */
3503 if (DECL_BUILT_IN (olddecl))
3505 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
3506 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
3507 /* If we're keeping the built-in definition, keep the rtl,
3508 regardless of declaration matches. */
3509 DECL_RTL (newdecl) = DECL_RTL (olddecl);
3511 else
3512 DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
3514 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
3515 if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
3516 /* Previously saved insns go together with
3517 the function's previous definition. */
3518 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3519 /* Don't clear out the arguments if we're redefining a function. */
3520 if (DECL_ARGUMENTS (olddecl))
3521 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3523 if (DECL_LANG_SPECIFIC (olddecl))
3524 DECL_MAIN_VARIANT (newdecl) = DECL_MAIN_VARIANT (olddecl);
3527 if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3529 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3532 /* Now preserve various other info from the definition. */
3533 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3534 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3535 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
3536 DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
3538 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3540 int function_size;
3542 function_size = sizeof (struct tree_decl);
3544 bcopy ((char *) newdecl + sizeof (struct tree_common),
3545 (char *) olddecl + sizeof (struct tree_common),
3546 function_size - sizeof (struct tree_common));
3548 if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3550 /* If newdecl is a template instantiation, it is possible that
3551 the following sequence of events has occurred:
3553 o A friend function was declared in a class template. The
3554 class template was instantiated.
3556 o The instantiation of the friend declaration was
3557 recorded on the instantiation list, and is newdecl.
3559 o Later, however, instantiate_class_template called pushdecl
3560 on the newdecl to perform name injection. But, pushdecl in
3561 turn called duplicate_decls when it discovered that another
3562 declaration of a global function with the same name already
3563 existed.
3565 o Here, in duplicate_decls, we decided to clobber newdecl.
3567 If we're going to do that, we'd better make sure that
3568 olddecl, and not newdecl, is on the list of
3569 instantiations so that if we try to do the instantiation
3570 again we won't get the clobbered declaration. */
3572 tree tmpl = DECL_TI_TEMPLATE (newdecl);
3573 tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
3575 for (; decls; decls = TREE_CHAIN (decls))
3576 if (TREE_VALUE (decls) == newdecl)
3577 TREE_VALUE (decls) = olddecl;
3580 else
3582 bcopy ((char *) newdecl + sizeof (struct tree_common),
3583 (char *) olddecl + sizeof (struct tree_common),
3584 sizeof (struct tree_decl) - sizeof (struct tree_common)
3585 + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3588 DECL_UID (olddecl) = olddecl_uid;
3589 if (olddecl_friend)
3590 DECL_FRIEND_P (olddecl) = 1;
3592 /* NEWDECL contains the merged attribute lists.
3593 Update OLDDECL to be the same. */
3594 DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3596 return 1;
3599 /* Record a decl-node X as belonging to the current lexical scope.
3600 Check for errors (such as an incompatible declaration for the same
3601 name already seen in the same scope).
3603 Returns either X or an old decl for the same name.
3604 If an old decl is returned, it may have been smashed
3605 to agree with what X says. */
3607 tree
3608 pushdecl (x)
3609 tree x;
3611 register tree t;
3612 register tree name;
3613 int need_new_binding;
3615 /* We shouldn't be calling pushdecl when we're generating RTL for a
3616 function that we already did semantic analysis on previously. */
3617 my_friendly_assert (!current_function || doing_semantic_analysis_p (),
3618 19990913);
3620 name = DECL_ASSEMBLER_NAME (x);
3621 need_new_binding = 1;
3623 if (DECL_TEMPLATE_PARM_P (x))
3624 /* Template parameters have no context; they are not X::T even
3625 when declared within a class or namespace. */
3627 else
3629 if (current_function_decl && x != current_function_decl
3630 /* A local declaration for a function doesn't constitute
3631 nesting. */
3632 && !(TREE_CODE (x) == FUNCTION_DECL && !DECL_INITIAL (x))
3633 /* A local declaration for an `extern' variable is in the
3634 scoped of the current namespace, not the current
3635 function. */
3636 && !(TREE_CODE (x) == VAR_DECL && DECL_EXTERNAL (x))
3637 /* Don't change DECL_CONTEXT of virtual methods. */
3638 && (TREE_CODE (x) != FUNCTION_DECL || !DECL_VIRTUAL_P (x))
3639 && !DECL_CONTEXT (x))
3640 DECL_CONTEXT (x) = current_function_decl;
3641 if (!DECL_CONTEXT (x))
3642 DECL_CONTEXT (x) = FROB_CONTEXT (current_namespace);
3645 /* Type are looked up using the DECL_NAME, as that is what the rest of the
3646 compiler wants to use. */
3647 if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
3648 || TREE_CODE (x) == NAMESPACE_DECL)
3649 name = DECL_NAME (x);
3651 if (name)
3653 #if 0
3654 /* Not needed...see below. */
3655 char *file;
3656 int line;
3657 #endif
3658 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3659 name = TREE_OPERAND (name, 0);
3661 /* Namespace-scoped variables are not found in the current level. */
3662 if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x))
3663 t = namespace_binding (name, DECL_CONTEXT (x));
3664 else
3665 t = lookup_name_current_level (name);
3666 if (t == error_mark_node)
3668 /* error_mark_node is 0 for a while during initialization! */
3669 t = NULL_TREE;
3670 cp_error_at ("`%#D' used prior to declaration", x);
3673 else if (t != NULL_TREE)
3675 #if 0
3676 /* This is turned off until I have time to do it right (bpk). */
3677 /* With the code below that uses it... */
3678 file = DECL_SOURCE_FILE (t);
3679 line = DECL_SOURCE_LINE (t);
3680 #endif
3681 if (TREE_CODE (t) == PARM_DECL)
3683 if (DECL_CONTEXT (t) == NULL_TREE)
3684 fatal ("parse errors have confused me too much");
3686 /* Check for duplicate params. */
3687 if (duplicate_decls (x, t))
3688 return t;
3690 else if (((TREE_CODE (x) == FUNCTION_DECL && DECL_LANGUAGE (x) == lang_c)
3691 || DECL_FUNCTION_TEMPLATE_P (x))
3692 && is_overloaded_fn (t))
3693 /* Don't do anything just yet. */;
3694 else if (t == wchar_decl_node)
3696 if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
3697 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
3699 /* Throw away the redeclaration. */
3700 return t;
3702 else if (TREE_CODE (t) != TREE_CODE (x))
3704 if (duplicate_decls (x, t))
3705 return t;
3707 else if (duplicate_decls (x, t))
3709 #if 0
3710 /* This is turned off until I have time to do it right (bpk). */
3712 /* Also warn if they did a prototype with `static' on it, but
3713 then later left the `static' off. */
3714 if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
3716 if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3717 return t;
3719 if (extra_warnings)
3721 cp_warning ("`static' missing from declaration of `%D'",
3723 warning_with_file_and_line (file, line,
3724 "previous declaration of `%s'",
3725 decl_as_string (t, 0));
3728 /* Now fix things so it'll do what they expect. */
3729 if (current_function_decl)
3730 TREE_PUBLIC (current_function_decl) = 0;
3732 /* Due to interference in memory reclamation (X may be
3733 obstack-deallocated at this point), we must guard against
3734 one really special case. [jason: This should be handled
3735 by start_function] */
3736 if (current_function_decl == x)
3737 current_function_decl = t;
3738 #endif
3739 if (TREE_CODE (t) == TYPE_DECL)
3740 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
3741 else if (TREE_CODE (t) == FUNCTION_DECL)
3742 check_default_args (t);
3744 return t;
3746 else if (DECL_MAIN_P (x))
3748 /* A redeclaration of main, but not a duplicate of the
3749 previous one.
3751 [basic.start.main]
3753 This function shall not be overloaded. */
3754 cp_error_at ("invalid redeclaration of `%D'", t);
3755 cp_error ("as `%D'", x);
3756 /* We don't try to push this declaration since that
3757 causes a crash. */
3758 return x;
3762 check_template_shadow (x);
3764 /* If this is a function conjured up by the backend, massage it
3765 so it looks friendly. */
3766 if (TREE_CODE (x) == FUNCTION_DECL
3767 && ! DECL_LANG_SPECIFIC (x))
3769 retrofit_lang_decl (x);
3770 DECL_LANGUAGE (x) = lang_c;
3773 if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_FUNCTION_MEMBER_P (x))
3775 t = push_overloaded_decl (x, PUSH_LOCAL);
3776 if (t != x)
3777 return t;
3778 if (!namespace_bindings_p ())
3779 /* We do not need to create a binding for this name;
3780 push_overloaded_decl will have already done so if
3781 necessary. */
3782 need_new_binding = 0;
3784 else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
3786 t = push_overloaded_decl (x, PUSH_GLOBAL);
3787 if (t == x)
3788 add_decl_to_level (x, NAMESPACE_LEVEL (CP_DECL_CONTEXT (t)));
3789 return t;
3792 /* If declaring a type as a typedef, copy the type (unless we're
3793 at line 0), and install this TYPE_DECL as the new type's typedef
3794 name. See the extensive comment in ../c-decl.c (pushdecl). */
3795 if (TREE_CODE (x) == TYPE_DECL)
3797 tree type = TREE_TYPE (x);
3798 if (DECL_SOURCE_LINE (x) == 0)
3800 if (TYPE_NAME (type) == 0)
3801 TYPE_NAME (type) = x;
3803 else if (type != error_mark_node && TYPE_NAME (type) != x
3804 /* We don't want to copy the type when all we're
3805 doing is making a TYPE_DECL for the purposes of
3806 inlining. */
3807 && (!TYPE_NAME (type)
3808 || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
3810 push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
3812 DECL_ORIGINAL_TYPE (x) = type;
3813 type = build_type_copy (type);
3814 TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
3815 TYPE_NAME (type) = x;
3816 TREE_TYPE (x) = type;
3818 pop_obstacks ();
3821 if (type != error_mark_node
3822 && TYPE_NAME (type)
3823 && TYPE_IDENTIFIER (type))
3824 set_identifier_type_value_with_scope (DECL_NAME (x), type,
3825 current_binding_level);
3829 /* Multiple external decls of the same identifier ought to match.
3831 We get warnings about inline functions where they are defined.
3832 We get warnings about other functions from push_overloaded_decl.
3834 Avoid duplicate warnings where they are used. */
3835 if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
3837 tree decl;
3839 if (IDENTIFIER_NAMESPACE_VALUE (name) != NULL_TREE
3840 && (DECL_EXTERNAL (IDENTIFIER_NAMESPACE_VALUE (name))
3841 || TREE_PUBLIC (IDENTIFIER_NAMESPACE_VALUE (name))))
3842 decl = IDENTIFIER_NAMESPACE_VALUE (name);
3843 else
3844 decl = NULL_TREE;
3846 if (decl
3847 /* If different sort of thing, we already gave an error. */
3848 && TREE_CODE (decl) == TREE_CODE (x)
3849 && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
3851 cp_pedwarn ("type mismatch with previous external decl", x);
3852 cp_pedwarn_at ("previous external decl of `%#D'", decl);
3856 /* This name is new in its binding level.
3857 Install the new declaration and return it. */
3858 if (namespace_bindings_p ())
3860 /* Install a global value. */
3862 /* If the first global decl has external linkage,
3863 warn if we later see static one. */
3864 if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
3865 TREE_PUBLIC (name) = 1;
3867 if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
3868 && t != NULL_TREE)
3869 /* For an ordinary function, we create a binding from
3870 the mangled name (i.e., NAME) to the DECL. But, for
3871 an `extern "C"' function, the mangled name and the
3872 ordinary name are the same so we need not do this. */
3873 && !(TREE_CODE (x) == FUNCTION_DECL &&
3874 DECL_LANGUAGE (x) == lang_c))
3876 if (TREE_CODE (x) == FUNCTION_DECL)
3877 my_friendly_assert
3878 ((IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
3879 || (IDENTIFIER_GLOBAL_VALUE (name) == x), 378);
3880 SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
3883 /* Don't forget if the function was used via an implicit decl. */
3884 if (IDENTIFIER_IMPLICIT_DECL (name)
3885 && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
3886 TREE_USED (x) = 1;
3888 /* Don't forget if its address was taken in that way. */
3889 if (IDENTIFIER_IMPLICIT_DECL (name)
3890 && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
3891 TREE_ADDRESSABLE (x) = 1;
3893 /* Warn about mismatches against previous implicit decl. */
3894 if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
3895 /* If this real decl matches the implicit, don't complain. */
3896 && ! (TREE_CODE (x) == FUNCTION_DECL
3897 && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
3898 cp_warning
3899 ("`%D' was previously implicitly declared to return `int'", x);
3901 /* If new decl is `static' and an `extern' was seen previously,
3902 warn about it. */
3903 if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
3904 warn_extern_redeclared_static (x, t);
3906 else
3908 /* Here to install a non-global value. */
3909 tree oldlocal = IDENTIFIER_VALUE (name);
3910 tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
3912 if (need_new_binding)
3914 push_local_binding (name, x, 0);
3915 /* Because push_local_binding will hook X on to the
3916 current_binding_level's name list, we don't want to
3917 do that again below. */
3918 need_new_binding = 0;
3921 /* If this is a TYPE_DECL, push it into the type value slot. */
3922 if (TREE_CODE (x) == TYPE_DECL)
3923 set_identifier_type_value_with_scope (name, TREE_TYPE (x),
3924 current_binding_level);
3926 /* Clear out any TYPE_DECL shadowed by a namespace so that
3927 we won't think this is a type. The C struct hack doesn't
3928 go through namespaces. */
3929 if (TREE_CODE (x) == NAMESPACE_DECL)
3930 set_identifier_type_value_with_scope (name, NULL_TREE,
3931 current_binding_level);
3933 /* If this is an extern function declaration, see if we
3934 have a global definition or declaration for the function. */
3935 if (oldlocal == NULL_TREE
3936 && DECL_EXTERNAL (x)
3937 && oldglobal != NULL_TREE
3938 && TREE_CODE (x) == FUNCTION_DECL
3939 && TREE_CODE (oldglobal) == FUNCTION_DECL)
3941 /* We have one. Their types must agree. */
3942 if (decls_match (x, oldglobal))
3943 /* OK */;
3944 else
3946 cp_warning ("extern declaration of `%#D' doesn't match", x);
3947 cp_warning_at ("global declaration `%#D'", oldglobal);
3950 /* If we have a local external declaration,
3951 and no file-scope declaration has yet been seen,
3952 then if we later have a file-scope decl it must not be static. */
3953 if (oldlocal == NULL_TREE
3954 && oldglobal == NULL_TREE
3955 && DECL_EXTERNAL (x)
3956 && TREE_PUBLIC (x))
3957 TREE_PUBLIC (name) = 1;
3959 if (DECL_FROM_INLINE (x))
3960 /* Inline decls shadow nothing. */;
3962 /* Warn if shadowing an argument at the top level of the body. */
3963 else if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
3964 && TREE_CODE (oldlocal) == PARM_DECL
3965 /* Don't complain if it's from an enclosing function. */
3966 && DECL_CONTEXT (oldlocal) == current_function_decl
3967 && TREE_CODE (x) != PARM_DECL)
3969 /* Go to where the parms should be and see if we
3970 find them there. */
3971 struct binding_level *b = current_binding_level->level_chain;
3973 if (cleanup_label)
3974 b = b->level_chain;
3976 /* ARM $8.3 */
3977 if (b->parm_flag == 1)
3978 cp_error ("declaration of `%#D' shadows a parameter", name);
3980 else if (warn_shadow && oldlocal != NULL_TREE
3981 && current_binding_level->is_for_scope
3982 && !DECL_DEAD_FOR_LOCAL (oldlocal))
3984 warning ("variable `%s' shadows local",
3985 IDENTIFIER_POINTER (name));
3986 cp_warning_at (" this is the shadowed declaration", oldlocal);
3988 /* Maybe warn if shadowing something else. */
3989 else if (warn_shadow && !DECL_EXTERNAL (x)
3990 /* No shadow warnings for internally generated vars. */
3991 && ! DECL_ARTIFICIAL (x)
3992 /* No shadow warnings for vars made for inlining. */
3993 && ! DECL_FROM_INLINE (x))
3995 const char *warnstring = NULL;
3997 if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
3998 warnstring = "declaration of `%s' shadows a parameter";
3999 else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
4000 && current_class_ptr
4001 && !TREE_STATIC (name))
4002 warnstring = "declaration of `%s' shadows a member of `this'";
4003 else if (oldlocal != NULL_TREE)
4004 warnstring = "declaration of `%s' shadows previous local";
4005 else if (oldglobal != NULL_TREE)
4006 /* XXX shadow warnings in outer-more namespaces */
4007 warnstring = "declaration of `%s' shadows global declaration";
4009 if (warnstring)
4010 warning (warnstring, IDENTIFIER_POINTER (name));
4014 if (TREE_CODE (x) == FUNCTION_DECL)
4015 check_default_args (x);
4017 /* Keep count of variables in this level with incomplete type. */
4018 if (TREE_CODE (x) == VAR_DECL
4019 && TREE_TYPE (x) != error_mark_node
4020 && ((TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
4021 && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
4022 /* RTTI TD entries are created while defining the type_info. */
4023 || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
4024 && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
4025 current_binding_level->incomplete
4026 = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
4029 if (need_new_binding)
4030 add_decl_to_level (x,
4031 DECL_NAMESPACE_SCOPE_P (x)
4032 ? NAMESPACE_LEVEL (CP_DECL_CONTEXT (x))
4033 : current_binding_level);
4035 return x;
4038 /* Same as pushdecl, but define X in binding-level LEVEL. We rely on the
4039 caller to set DECL_CONTEXT properly. */
4041 static tree
4042 pushdecl_with_scope (x, level)
4043 tree x;
4044 struct binding_level *level;
4046 register struct binding_level *b;
4047 tree function_decl = current_function_decl;
4049 current_function_decl = NULL_TREE;
4050 if (level->parm_flag == 2)
4052 b = class_binding_level;
4053 class_binding_level = level;
4054 pushdecl_class_level (x);
4055 class_binding_level = b;
4057 else
4059 b = current_binding_level;
4060 current_binding_level = level;
4061 x = pushdecl (x);
4062 current_binding_level = b;
4064 current_function_decl = function_decl;
4065 return x;
4068 /* Like pushdecl, only it places X in the current namespace,
4069 if appropriate. */
4071 tree
4072 pushdecl_namespace_level (x)
4073 tree x;
4075 register struct binding_level *b = current_binding_level;
4076 register tree t;
4078 t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
4080 /* Now, the type_shadowed stack may screw us. Munge it so it does
4081 what we want. */
4082 if (TREE_CODE (x) == TYPE_DECL)
4084 tree name = DECL_NAME (x);
4085 tree newval;
4086 tree *ptr = (tree *)0;
4087 for (; b != global_binding_level; b = b->level_chain)
4089 tree shadowed = b->type_shadowed;
4090 for (; shadowed; shadowed = TREE_CHAIN (shadowed))
4091 if (TREE_PURPOSE (shadowed) == name)
4093 ptr = &TREE_VALUE (shadowed);
4094 /* Can't break out of the loop here because sometimes
4095 a binding level will have duplicate bindings for
4096 PT names. It's gross, but I haven't time to fix it. */
4099 newval = TREE_TYPE (x);
4100 if (ptr == (tree *)0)
4102 /* @@ This shouldn't be needed. My test case "zstring.cc" trips
4103 up here if this is changed to an assertion. --KR */
4104 SET_IDENTIFIER_TYPE_VALUE (name, newval);
4106 else
4108 *ptr = newval;
4111 return t;
4114 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4115 if appropriate. */
4117 tree
4118 pushdecl_top_level (x)
4119 tree x;
4121 push_to_top_level ();
4122 x = pushdecl_namespace_level (x);
4123 pop_from_top_level ();
4124 return x;
4127 /* Make the declaration of X appear in CLASS scope. */
4129 void
4130 pushdecl_class_level (x)
4131 tree x;
4133 /* Don't use DECL_ASSEMBLER_NAME here! Everything that looks in class
4134 scope looks for the pre-mangled name. */
4135 register tree name;
4137 if (TREE_CODE (x) == OVERLOAD)
4138 x = OVL_CURRENT (x);
4139 name = DECL_NAME (x);
4141 if (name)
4143 push_class_level_binding (name, x);
4144 if (TREE_CODE (x) == TYPE_DECL)
4145 set_identifier_type_value (name, TREE_TYPE (x));
4147 else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
4149 tree f;
4151 for (f = TYPE_FIELDS (TREE_TYPE (x));
4153 f = TREE_CHAIN (f))
4154 pushdecl_class_level (f);
4158 /* Enter DECL into the symbol table, if that's appropriate. Returns
4159 DECL, or a modified version thereof. */
4161 tree
4162 maybe_push_decl (decl)
4163 tree decl;
4165 tree type = TREE_TYPE (decl);
4167 /* Add this decl to the current binding level, but not if it comes
4168 from another scope, e.g. a static member variable. TEM may equal
4169 DECL or it may be a previous decl of the same name. */
4170 if ((TREE_CODE (decl) != PARM_DECL
4171 && DECL_CONTEXT (decl) != NULL_TREE
4172 /* Definitions of namespace members outside their namespace are
4173 possible. */
4174 && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4175 || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
4176 || TREE_CODE (type) == UNKNOWN_TYPE
4177 /* The declaration of a template specialization does not affect
4178 the functions available for overload resolution, so we do not
4179 call pushdecl. */
4180 || (TREE_CODE (decl) == FUNCTION_DECL
4181 && DECL_TEMPLATE_SPECIALIZATION (decl)))
4182 return decl;
4183 else
4184 return pushdecl (decl);
4187 #if 0
4188 /* This function is used to push the mangled decls for nested types into
4189 the appropriate scope. Previously pushdecl_top_level was used, but that
4190 is incorrect for members of local classes. */
4192 void
4193 pushdecl_nonclass_level (x)
4194 tree x;
4196 struct binding_level *b = current_binding_level;
4198 my_friendly_assert (b->parm_flag != 2, 180);
4200 #if 0
4201 /* Get out of template binding levels */
4202 while (b->pseudo_global)
4203 b = b->level_chain;
4204 #endif
4206 pushdecl_with_scope (x, b);
4208 #endif
4210 /* Make the declaration(s) of X appear in CLASS scope
4211 under the name NAME. */
4213 void
4214 push_class_level_binding (name, x)
4215 tree name;
4216 tree x;
4218 tree binding;
4219 /* The class_binding_level will be NULL if x is a template
4220 parameter name in a member template. */
4221 if (!class_binding_level)
4222 return;
4224 /* Make sure that this new member does not have the same name
4225 as a template parameter. */
4226 if (TYPE_BEING_DEFINED (current_class_type))
4227 check_template_shadow (x);
4229 /* If this declaration shadows a declaration from an enclosing
4230 class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4231 we leave this class. Record the shadowed declaration here. */
4232 binding = IDENTIFIER_BINDING (name);
4233 if (binding
4234 && ((TREE_CODE (x) == OVERLOAD
4235 && BINDING_VALUE (binding)
4236 && is_overloaded_fn (BINDING_VALUE (binding)))
4237 || INHERITED_VALUE_BINDING_P (binding)))
4239 tree shadow;
4240 tree old_decl;
4242 /* If the old binding was from a base class, and was for a tag
4243 name, slide it over to make room for the new binding. The
4244 old binding is still visible if explicitly qualified with a
4245 class-key. */
4246 if (INHERITED_VALUE_BINDING_P (binding)
4247 && BINDING_VALUE (binding)
4248 && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
4249 && DECL_ARTIFICIAL (BINDING_VALUE (binding))
4250 && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
4252 old_decl = BINDING_TYPE (binding);
4253 BINDING_TYPE (binding) = BINDING_VALUE (binding);
4254 BINDING_VALUE (binding) = NULL_TREE;
4255 INHERITED_VALUE_BINDING_P (binding) = 0;
4257 else
4258 old_decl = BINDING_VALUE (binding);
4260 /* There was already a binding for X containing fewer
4261 functions than are named in X. Find the previous
4262 declaration of X on the class-shadowed list, and update it. */
4263 for (shadow = class_binding_level->class_shadowed;
4264 shadow;
4265 shadow = TREE_CHAIN (shadow))
4266 if (TREE_PURPOSE (shadow) == name
4267 && TREE_TYPE (shadow) == old_decl)
4269 BINDING_VALUE (binding) = x;
4270 INHERITED_VALUE_BINDING_P (binding) = 0;
4271 TREE_TYPE (shadow) = x;
4272 return;
4276 /* If we didn't replace an existing binding, put the binding on the
4277 stack of bindings for the identifier, and update
4278 IDENTIFIER_CLASS_VALUE. */
4279 if (push_class_binding (name, x))
4281 class_binding_level->class_shadowed
4282 = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
4283 class_binding_level->class_shadowed);
4284 /* Record the value we are binding NAME to so that we can know
4285 what to pop later. */
4286 TREE_TYPE (class_binding_level->class_shadowed) = x;
4290 /* Insert another USING_DECL into the current binding level,
4291 returning this declaration. If this is a redeclaration,
4292 do nothing and return NULL_TREE. */
4294 tree
4295 push_using_decl (scope, name)
4296 tree scope;
4297 tree name;
4299 tree decl;
4301 my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4302 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4303 for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4304 if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4305 break;
4306 if (decl)
4307 return NULL_TREE;
4308 decl = build_lang_decl (USING_DECL, name, void_type_node);
4309 DECL_INITIAL (decl) = scope;
4310 TREE_CHAIN (decl) = current_binding_level->usings;
4311 current_binding_level->usings = decl;
4312 return decl;
4315 /* Add namespace to using_directives. Return NULL_TREE if nothing was
4316 changed (i.e. there was already a directive), or the fresh
4317 TREE_LIST otherwise. */
4319 tree
4320 push_using_directive (used)
4321 tree used;
4323 tree ud = current_binding_level->using_directives;
4324 tree iter, ancestor;
4326 /* Check if we already have this. */
4327 if (purpose_member (used, ud) != NULL_TREE)
4328 return NULL_TREE;
4330 /* Recursively add all namespaces used. */
4331 for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4332 push_using_directive (TREE_PURPOSE (iter));
4334 ancestor = namespace_ancestor (current_decl_namespace (), used);
4335 ud = current_binding_level->using_directives;
4336 ud = tree_cons (used, ancestor, ud);
4337 current_binding_level->using_directives = ud;
4338 return ud;
4341 /* DECL is a FUNCTION_DECL for a non-member function, which may have
4342 other definitions already in place. We get around this by making
4343 the value of the identifier point to a list of all the things that
4344 want to be referenced by that name. It is then up to the users of
4345 that name to decide what to do with that list.
4347 DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its DECL_RESULT
4348 slot. It is dealt with the same way.
4350 FLAGS is a bitwise-or of the following values:
4351 PUSH_LOCAL: Bind DECL in the current scope, rather than at
4352 namespace scope.
4353 PUSH_USING: DECL is being pushed as the result of a using
4354 declaration.
4356 The value returned may be a previous declaration if we guessed wrong
4357 about what language DECL should belong to (C or C++). Otherwise,
4358 it's always DECL (and never something that's not a _DECL). */
4360 tree
4361 push_overloaded_decl (decl, flags)
4362 tree decl;
4363 int flags;
4365 tree name = DECL_NAME (decl);
4366 tree old;
4367 tree new_binding;
4368 int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
4370 if (doing_global)
4371 old = namespace_binding (name, DECL_CONTEXT (decl));
4372 else
4373 old = lookup_name_current_level (name);
4375 if (old)
4377 if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
4379 tree t = TREE_TYPE (old);
4380 if (IS_AGGR_TYPE (t) && warn_shadow
4381 && (! DECL_IN_SYSTEM_HEADER (decl)
4382 || ! DECL_IN_SYSTEM_HEADER (old)))
4383 cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
4384 old = NULL_TREE;
4386 else if (is_overloaded_fn (old))
4388 tree tmp;
4390 for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
4392 tree fn = OVL_CURRENT (tmp);
4394 if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4395 && !(flags & PUSH_USING)
4396 && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4397 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4398 cp_error ("`%#D' conflicts with previous using declaration `%#D'",
4399 decl, fn);
4401 if (duplicate_decls (decl, fn))
4402 return fn;
4405 else
4407 cp_error_at ("previous non-function declaration `%#D'", old);
4408 cp_error ("conflicts with function declaration `%#D'", decl);
4409 return decl;
4413 if (old || TREE_CODE (decl) == TEMPLATE_DECL)
4415 if (old && TREE_CODE (old) != OVERLOAD)
4416 new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4417 else
4418 new_binding = ovl_cons (decl, old);
4419 if (flags & PUSH_USING)
4420 OVL_USED (new_binding) = 1;
4422 else
4423 /* NAME is not ambiguous. */
4424 new_binding = decl;
4426 if (doing_global)
4427 set_namespace_binding (name, current_namespace, new_binding);
4428 else
4430 /* We only create an OVERLOAD if there was a previous binding at
4431 this level, or if decl is a template. In the former case, we
4432 need to remove the old binding and replace it with the new
4433 binding. We must also run through the NAMES on the binding
4434 level where the name was bound to update the chain. */
4436 if (TREE_CODE (new_binding) == OVERLOAD && old)
4438 tree *d;
4440 for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4442 d = &TREE_CHAIN (*d))
4443 if (*d == old
4444 || (TREE_CODE (*d) == TREE_LIST
4445 && TREE_VALUE (*d) == old))
4447 if (TREE_CODE (*d) == TREE_LIST)
4448 /* Just replace the old binding with the new. */
4449 TREE_VALUE (*d) = new_binding;
4450 else
4451 /* Build a TREE_LIST to wrap the OVERLOAD. */
4452 *d = tree_cons (NULL_TREE, new_binding,
4453 TREE_CHAIN (*d));
4455 /* And update the CPLUS_BINDING node. */
4456 BINDING_VALUE (IDENTIFIER_BINDING (name))
4457 = new_binding;
4458 return decl;
4461 /* We should always find a previous binding in this case. */
4462 my_friendly_abort (0);
4465 /* Install the new binding. */
4466 push_local_binding (name, new_binding, flags);
4469 return decl;
4472 /* Generate an implicit declaration for identifier FUNCTIONID
4473 as a function of type int (). Print a warning if appropriate. */
4475 tree
4476 implicitly_declare (functionid)
4477 tree functionid;
4479 register tree decl;
4480 int temp = allocation_temporary_p ();
4482 push_obstacks_nochange ();
4484 /* Save the decl permanently so we can warn if definition follows.
4485 In ANSI C, warn_implicit is usually false, so the saves little space.
4486 But in C++, it's usually true, hence the extra code. */
4487 if (temp && (! warn_implicit || toplevel_bindings_p ()))
4488 end_temporary_allocation ();
4490 /* We used to reuse an old implicit decl here,
4491 but this loses with inline functions because it can clobber
4492 the saved decl chains. */
4493 decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4495 DECL_EXTERNAL (decl) = 1;
4496 TREE_PUBLIC (decl) = 1;
4498 /* ANSI standard says implicit declarations are in the innermost block.
4499 So we record the decl in the standard fashion. */
4500 pushdecl (decl);
4501 rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4503 if (warn_implicit
4504 /* Only one warning per identifier. */
4505 && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4507 cp_pedwarn ("implicit declaration of function `%#D'", decl);
4510 SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4512 pop_obstacks ();
4514 return decl;
4517 /* Return zero if the declaration NEWDECL is valid
4518 when the declaration OLDDECL (assumed to be for the same name)
4519 has already been seen.
4520 Otherwise return an error message format string with a %s
4521 where the identifier should go. */
4523 static const char *
4524 redeclaration_error_message (newdecl, olddecl)
4525 tree newdecl, olddecl;
4527 if (TREE_CODE (newdecl) == TYPE_DECL)
4529 /* Because C++ can put things into name space for free,
4530 constructs like "typedef struct foo { ... } foo"
4531 would look like an erroneous redeclaration. */
4532 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
4533 return 0;
4534 else
4535 return "redefinition of `%#D'";
4537 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4539 /* If this is a pure function, its olddecl will actually be
4540 the original initialization to `0' (which we force to call
4541 abort()). Don't complain about redefinition in this case. */
4542 if (DECL_LANG_SPECIFIC (olddecl) && DECL_ABSTRACT_VIRTUAL_P (olddecl))
4543 return 0;
4545 /* If both functions come from different namespaces, this is not
4546 a redeclaration - this is a conflict with a used function. */
4547 if (DECL_NAMESPACE_SCOPE_P (olddecl)
4548 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
4549 return "`%D' conflicts with used function";
4551 /* We'll complain about linkage mismatches in
4552 warn_extern_redeclared_static. */
4554 /* Defining the same name twice is no good. */
4555 if (DECL_INITIAL (olddecl) != NULL_TREE
4556 && DECL_INITIAL (newdecl) != NULL_TREE)
4558 if (DECL_NAME (olddecl) == NULL_TREE)
4559 return "`%#D' not declared in class";
4560 else
4561 return "redefinition of `%#D'";
4563 return 0;
4565 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4567 if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
4568 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4569 && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4570 || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
4571 && TYPE_SIZE (TREE_TYPE (newdecl))
4572 && TYPE_SIZE (TREE_TYPE (olddecl))))
4573 return "redefinition of `%#D'";
4574 return 0;
4576 else if (toplevel_bindings_p ())
4578 /* Objects declared at top level: */
4579 /* If at least one is a reference, it's ok. */
4580 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
4581 return 0;
4582 /* Reject two definitions. */
4583 return "redefinition of `%#D'";
4585 else
4587 /* Objects declared with block scope: */
4588 /* Reject two definitions, and reject a definition
4589 together with an external reference. */
4590 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
4591 return "redeclaration of `%#D'";
4592 return 0;
4596 /* Create a new label, named ID. */
4598 static tree
4599 make_label_decl (id, local_p)
4600 tree id;
4601 int local_p;
4603 tree decl;
4605 decl = build_decl (LABEL_DECL, id, void_type_node);
4606 if (expanding_p)
4607 /* Make sure every label has an rtx. */
4608 label_rtx (decl);
4610 DECL_CONTEXT (decl) = current_function_decl;
4611 DECL_MODE (decl) = VOIDmode;
4612 C_DECLARED_LABEL_FLAG (decl) = local_p;
4614 /* Say where one reference is to the label, for the sake of the
4615 error if it is not defined. */
4616 DECL_SOURCE_LINE (decl) = lineno;
4617 DECL_SOURCE_FILE (decl) = input_filename;
4619 /* Record the fact that this identifier is bound to this label. */
4620 SET_IDENTIFIER_LABEL_VALUE (id, decl);
4622 /* Record this label on the list of used labels so that we can check
4623 at the end of the function to see whether or not the label was
4624 actually defined. */
4625 if ((named_label_uses == NULL || named_label_uses->label_decl != decl)
4626 && (named_label_uses == NULL
4627 || named_label_uses->names_in_scope != current_binding_level->names
4628 || named_label_uses->label_decl != decl))
4630 struct named_label_list *new_ent;
4631 new_ent
4632 = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
4633 new_ent->label_decl = decl;
4634 new_ent->names_in_scope = current_binding_level->names;
4635 new_ent->binding_level = current_binding_level;
4636 new_ent->lineno_o_goto = lineno;
4637 new_ent->filename_o_goto = input_filename;
4638 new_ent->next = named_label_uses;
4639 named_label_uses = new_ent;
4642 return decl;
4645 /* Look for a label named ID in the current function. If one cannot
4646 be found, create one. (We keep track of used, but undefined,
4647 labels, and complain about them at the end of a function.) */
4649 tree
4650 lookup_label (id)
4651 tree id;
4653 tree decl;
4655 /* You can't use labels at global scope. */
4656 if (current_function_decl == NULL_TREE)
4658 error ("label `%s' referenced outside of any function",
4659 IDENTIFIER_POINTER (id));
4660 return NULL_TREE;
4663 /* See if we've already got this label. */
4664 decl = IDENTIFIER_LABEL_VALUE (id);
4665 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
4666 return decl;
4668 /* Record this label on the list of labels used in this function.
4669 We do this before calling make_label_decl so that we get the
4670 IDENTIFIER_LABEL_VALUE before the new label is declared. */
4671 named_labels = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4672 named_labels);
4673 /* We need a new label. */
4674 decl = make_label_decl (id, /*local_p=*/0);
4675 /* Now fill in the information we didn't have before. */
4676 TREE_VALUE (named_labels) = decl;
4678 return decl;
4681 /* Declare a local label named ID. */
4683 tree
4684 declare_local_label (id)
4685 tree id;
4687 tree decl;
4689 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
4690 this scope we can restore the old value of
4691 IDENTIFIER_TYPE_VALUE. */
4692 current_binding_level->shadowed_labels
4693 = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4694 current_binding_level->shadowed_labels);
4695 /* Look for the label. */
4696 decl = make_label_decl (id, /*local_p=*/1);
4697 /* Now fill in the information we didn't have before. */
4698 TREE_VALUE (current_binding_level->shadowed_labels) = decl;
4700 return decl;
4703 /* Define a label, specifying the location in the source file.
4704 Return the LABEL_DECL node for the label, if the definition is valid.
4705 Otherwise return 0. */
4707 tree
4708 define_label (filename, line, name)
4709 char *filename;
4710 int line;
4711 tree name;
4713 tree decl = lookup_label (name);
4715 /* After labels, make any new cleanups go into their
4716 own new (temporary) binding contour. */
4717 current_binding_level->more_cleanups_ok = 0;
4719 if (name == get_identifier ("wchar_t"))
4720 cp_pedwarn ("label named wchar_t");
4722 if (DECL_INITIAL (decl) != NULL_TREE)
4724 cp_error ("duplicate label `%D'", decl);
4725 return 0;
4727 else
4729 struct named_label_list *uses, *prev;
4730 int identified = 0;
4731 int saw_eh = 0;
4733 /* Mark label as having been defined. */
4734 DECL_INITIAL (decl) = error_mark_node;
4735 /* Say where in the source. */
4736 DECL_SOURCE_FILE (decl) = filename;
4737 DECL_SOURCE_LINE (decl) = line;
4739 prev = NULL;
4740 uses = named_label_uses;
4741 while (uses != NULL)
4742 if (uses->label_decl == decl)
4744 struct binding_level *b = current_binding_level;
4745 while (b)
4747 tree new_decls = b->names;
4748 tree old_decls = (b == uses->binding_level)
4749 ? uses->names_in_scope : NULL_TREE;
4750 while (new_decls != old_decls)
4752 if (TREE_CODE (new_decls) == VAR_DECL
4753 /* Don't complain about crossing initialization
4754 of internal entities. They can't be accessed,
4755 and they should be cleaned up
4756 by the time we get to the label. */
4757 && ! DECL_ARTIFICIAL (new_decls)
4758 && !(DECL_INITIAL (new_decls) == NULL_TREE
4759 && pod_type_p (TREE_TYPE (new_decls))))
4761 /* This is really only important if we're crossing
4762 an initialization. The POD stuff is just
4763 pedantry; why should it matter if the class
4764 contains a field of pointer to member type? */
4765 int problem = (DECL_INITIAL (new_decls)
4766 || (TYPE_NEEDS_CONSTRUCTING
4767 (TREE_TYPE (new_decls))));
4769 if (! identified)
4771 if (problem)
4773 cp_error ("jump to label `%D'", decl);
4774 error_with_file_and_line
4775 (uses->filename_o_goto,
4776 uses->lineno_o_goto, " from here");
4778 else
4780 cp_pedwarn ("jump to label `%D'", decl);
4781 pedwarn_with_file_and_line
4782 (uses->filename_o_goto,
4783 uses->lineno_o_goto, " from here");
4785 identified = 1;
4788 if (problem)
4789 cp_error_at (" crosses initialization of `%#D'",
4790 new_decls);
4791 else
4792 cp_pedwarn_at (" enters scope of non-POD `%#D'",
4793 new_decls);
4795 new_decls = TREE_CHAIN (new_decls);
4797 if (b == uses->binding_level)
4798 break;
4799 if (b->eh_region && ! saw_eh)
4801 if (! identified)
4803 cp_error ("jump to label `%D'", decl);
4804 error_with_file_and_line
4805 (uses->filename_o_goto,
4806 uses->lineno_o_goto, " from here");
4807 identified = 1;
4809 error (" enters exception handling block");
4810 saw_eh = 1;
4812 b = b->level_chain;
4815 if (prev != NULL)
4816 prev->next = uses->next;
4817 else
4818 named_label_uses = uses->next;
4820 uses = uses->next;
4822 else
4824 prev = uses;
4825 uses = uses->next;
4827 current_function_return_value = NULL_TREE;
4828 return decl;
4832 struct cp_switch
4834 struct binding_level *level;
4835 struct cp_switch *next;
4838 static struct cp_switch *switch_stack;
4840 void
4841 push_switch ()
4843 struct cp_switch *p
4844 = (struct cp_switch *) oballoc (sizeof (struct cp_switch));
4845 p->level = current_binding_level;
4846 p->next = switch_stack;
4847 switch_stack = p;
4850 void
4851 pop_switch ()
4853 switch_stack = switch_stack->next;
4856 /* Note that we've seen a definition of a case label, and complain if this
4857 is a bad place for one. */
4859 void
4860 define_case_label ()
4862 tree cleanup = last_cleanup_this_contour ();
4863 struct binding_level *b = current_binding_level;
4864 int identified = 0;
4866 if (! switch_stack)
4867 /* Don't crash; we'll complain in do_case. */
4868 return;
4870 if (cleanup)
4872 static int explained = 0;
4873 cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
4874 warning ("where case label appears here");
4875 if (!explained)
4877 warning ("(enclose actions of previous case statements requiring");
4878 warning ("destructors in their own binding contours.)");
4879 explained = 1;
4883 for (; b && b != switch_stack->level; b = b->level_chain)
4885 tree new_decls = b->names;
4886 for (; new_decls; new_decls = TREE_CHAIN (new_decls))
4888 if (TREE_CODE (new_decls) == VAR_DECL
4889 /* Don't complain about crossing initialization
4890 of internal entities. They can't be accessed,
4891 and they should be cleaned up
4892 by the time we get to the label. */
4893 && ! DECL_ARTIFICIAL (new_decls)
4894 && ((DECL_INITIAL (new_decls) != NULL_TREE
4895 && DECL_INITIAL (new_decls) != error_mark_node)
4896 || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
4898 if (! identified)
4899 error ("jump to case label");
4900 identified = 1;
4901 cp_error_at (" crosses initialization of `%#D'",
4902 new_decls);
4907 /* After labels, make any new cleanups go into their
4908 own new (temporary) binding contour. */
4910 current_binding_level->more_cleanups_ok = 0;
4911 current_function_return_value = NULL_TREE;
4914 /* Return the list of declarations of the current level.
4915 Note that this list is in reverse order unless/until
4916 you nreverse it; and when you do nreverse it, you must
4917 store the result back using `storedecls' or you will lose. */
4919 tree
4920 getdecls ()
4922 return current_binding_level->names;
4925 /* Return the list of type-tags (for structs, etc) of the current level. */
4927 tree
4928 gettags ()
4930 return current_binding_level->tags;
4933 /* Store the list of declarations of the current level.
4934 This is done for the parameter declarations of a function being defined,
4935 after they are modified in the light of any missing parameters. */
4937 static void
4938 storedecls (decls)
4939 tree decls;
4941 current_binding_level->names = decls;
4944 /* Similarly, store the list of tags of the current level. */
4946 void
4947 storetags (tags)
4948 tree tags;
4950 current_binding_level->tags = tags;
4953 /* Given NAME, an IDENTIFIER_NODE,
4954 return the structure (or union or enum) definition for that name.
4955 Searches binding levels from BINDING_LEVEL up to the global level.
4956 If THISLEVEL_ONLY is nonzero, searches only the specified context
4957 (but skips any tag-transparent contexts to find one that is
4958 meaningful for tags).
4959 FORM says which kind of type the caller wants;
4960 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
4961 If the wrong kind of type is found, and it's not a template, an error is
4962 reported. */
4964 static tree
4965 lookup_tag (form, name, binding_level, thislevel_only)
4966 enum tree_code form;
4967 tree name;
4968 struct binding_level *binding_level;
4969 int thislevel_only;
4971 register struct binding_level *level;
4972 /* Non-zero if, we should look past a pseudo-global level, even if
4973 THISLEVEL_ONLY. */
4974 int allow_pseudo_global = 1;
4976 for (level = binding_level; level; level = level->level_chain)
4978 register tree tail;
4979 if (ANON_AGGRNAME_P (name))
4980 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4982 /* There's no need for error checking here, because
4983 anon names are unique throughout the compilation. */
4984 if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
4985 return TREE_VALUE (tail);
4987 else if (level->namespace_p)
4988 /* Do namespace lookup. */
4989 for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
4991 tree old = binding_for_name (name, tail);
4993 /* If we just skipped past a pseudo global level, even
4994 though THISLEVEL_ONLY, and we find a template class
4995 declaration, then we use the _TYPE node for the
4996 template. See the example below. */
4997 if (thislevel_only && !allow_pseudo_global
4998 && old && BINDING_VALUE (old)
4999 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
5000 old = TREE_TYPE (BINDING_VALUE (old));
5001 else
5002 old = BINDING_TYPE (old);
5004 /* If it has an original type, it is a typedef, and we
5005 should not return it. */
5006 if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
5007 old = NULL_TREE;
5008 if (old && TREE_CODE (old) != form
5009 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
5011 cp_error ("`%#D' redeclared as %C", old, form);
5012 return NULL_TREE;
5014 if (old)
5015 return old;
5016 if (thislevel_only || tail == global_namespace)
5017 return NULL_TREE;
5019 else
5020 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5022 if (TREE_PURPOSE (tail) == name)
5024 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
5025 /* Should tighten this up; it'll probably permit
5026 UNION_TYPE and a struct template, for example. */
5027 if (code != form
5028 && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
5030 /* Definition isn't the kind we were looking for. */
5031 cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
5032 form);
5033 return NULL_TREE;
5035 return TREE_VALUE (tail);
5038 if (thislevel_only && ! level->tag_transparent)
5040 if (level->pseudo_global && allow_pseudo_global)
5042 /* We must deal with cases like this:
5044 template <class T> struct S;
5045 template <class T> struct S {};
5047 When looking up `S', for the second declaration, we
5048 would like to find the first declaration. But, we
5049 are in the pseudo-global level created for the
5050 template parameters, rather than the (surrounding)
5051 namespace level. Thus, we keep going one more level,
5052 even though THISLEVEL_ONLY is non-zero. */
5053 allow_pseudo_global = 0;
5054 continue;
5056 else
5057 return NULL_TREE;
5060 return NULL_TREE;
5063 #if 0
5064 void
5065 set_current_level_tags_transparency (tags_transparent)
5066 int tags_transparent;
5068 current_binding_level->tag_transparent = tags_transparent;
5070 #endif
5072 /* Given a type, find the tag that was defined for it and return the tag name.
5073 Otherwise return 0. However, the value can never be 0
5074 in the cases in which this is used.
5076 C++: If NAME is non-zero, this is the new name to install. This is
5077 done when replacing anonymous tags with real tag names. */
5079 static tree
5080 lookup_tag_reverse (type, name)
5081 tree type;
5082 tree name;
5084 register struct binding_level *level;
5086 for (level = current_binding_level; level; level = level->level_chain)
5088 register tree tail;
5089 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5091 if (TREE_VALUE (tail) == type)
5093 if (name)
5094 TREE_PURPOSE (tail) = name;
5095 return TREE_PURPOSE (tail);
5099 return NULL_TREE;
5102 /* Look up NAME in the NAMESPACE. */
5104 tree
5105 lookup_namespace_name (namespace, name)
5106 tree namespace, name;
5108 tree val;
5109 tree template_id = NULL_TREE;
5111 my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
5113 if (TREE_CODE (name) == NAMESPACE_DECL)
5114 /* This happens for A::B<int> when B is a namespace. */
5115 return name;
5116 else if (TREE_CODE (name) == TEMPLATE_DECL)
5118 /* This happens for A::B where B is a template, and there are no
5119 template arguments. */
5120 cp_error ("invalid use of `%D'", name);
5121 return error_mark_node;
5124 namespace = ORIGINAL_NAMESPACE (namespace);
5126 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5128 template_id = name;
5129 name = TREE_OPERAND (name, 0);
5130 if (TREE_CODE (name) == OVERLOAD)
5131 name = DECL_NAME (OVL_CURRENT (name));
5132 else if (TREE_CODE_CLASS (TREE_CODE (name)) == 'd')
5133 name = DECL_NAME (name);
5136 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
5138 val = make_node (CPLUS_BINDING);
5139 if (!qualified_lookup_using_namespace (name, namespace, val, 0))
5140 return error_mark_node;
5142 if (BINDING_VALUE (val))
5144 val = BINDING_VALUE (val);
5146 if (template_id)
5148 if (DECL_CLASS_TEMPLATE_P (val))
5149 val = lookup_template_class (val,
5150 TREE_OPERAND (template_id, 1),
5151 /*in_decl=*/NULL_TREE,
5152 /*context=*/NULL_TREE,
5153 /*entering_scope=*/0);
5154 else if (DECL_FUNCTION_TEMPLATE_P (val)
5155 || TREE_CODE (val) == OVERLOAD)
5156 val = lookup_template_function (val,
5157 TREE_OPERAND (template_id, 1));
5158 else
5160 cp_error ("`%D::%D' is not a template",
5161 namespace, name);
5162 return error_mark_node;
5166 /* If we have a single function from a using decl, pull it out. */
5167 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5168 val = OVL_FUNCTION (val);
5169 return val;
5172 cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
5173 return error_mark_node;
5176 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
5178 static unsigned long
5179 typename_hash (k)
5180 hash_table_key k;
5182 unsigned long hash;
5183 tree t;
5185 t = (tree) k;
5186 hash = (((unsigned long) TYPE_CONTEXT (t))
5187 ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5189 return hash;
5192 /* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
5194 static boolean
5195 typename_compare (k1, k2)
5196 hash_table_key k1;
5197 hash_table_key k2;
5199 tree t1;
5200 tree t2;
5201 tree d1;
5202 tree d2;
5204 t1 = (tree) k1;
5205 t2 = (tree) k2;
5206 d1 = TYPE_NAME (t1);
5207 d2 = TYPE_NAME (t2);
5209 return (DECL_NAME (d1) == DECL_NAME (d2)
5210 && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
5211 && ((TREE_TYPE (t1) != NULL_TREE)
5212 == (TREE_TYPE (t2) != NULL_TREE))
5213 && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5214 && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5217 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
5218 the type of `T', NAME is the IDENTIFIER_NODE for `t'. If BASE_TYPE
5219 is non-NULL, this type is being created by the implicit typename
5220 extension, and BASE_TYPE is a type named `t' in some base class of
5221 `T' which depends on template parameters.
5223 Returns the new TYPENAME_TYPE. */
5225 tree
5226 build_typename_type (context, name, fullname, base_type)
5227 tree context;
5228 tree name;
5229 tree fullname;
5230 tree base_type;
5232 tree t;
5233 tree d;
5234 struct hash_entry* e;
5236 static struct hash_table ht;
5238 push_obstacks (&permanent_obstack, &permanent_obstack);
5240 if (!ht.table)
5242 static struct hash_table *h = &ht;
5243 if (!hash_table_init (&ht, &hash_newfunc, &typename_hash,
5244 &typename_compare))
5245 fatal ("virtual memory exhausted");
5246 ggc_add_tree_hash_table_root (&h, 1);
5249 /* Build the TYPENAME_TYPE. */
5250 t = make_lang_type (TYPENAME_TYPE);
5251 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5252 TYPENAME_TYPE_FULLNAME (t) = fullname;
5253 TREE_TYPE (t) = base_type;
5255 /* Build the corresponding TYPE_DECL. */
5256 d = build_decl (TYPE_DECL, name, t);
5257 TYPE_NAME (TREE_TYPE (d)) = d;
5258 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5259 DECL_CONTEXT (d) = FROB_CONTEXT (context);
5260 DECL_ARTIFICIAL (d) = 1;
5262 /* See if we already have this type. */
5263 e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5264 if (e)
5265 t = (tree) e->key;
5266 else
5267 /* Insert the type into the table. */
5268 hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5270 pop_obstacks ();
5272 return t;
5275 /* Resolve `typename CONTEXT::NAME'. Returns an appropriate type,
5276 unless an error occurs, in which case error_mark_node is returned.
5277 If COMPLAIN zero, don't complain about any errors that occur. */
5279 tree
5280 make_typename_type (context, name, complain)
5281 tree context, name;
5282 int complain;
5284 tree fullname;
5286 if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
5288 if (!(TYPE_LANG_SPECIFIC (name)
5289 && (CLASSTYPE_IS_TEMPLATE (name)
5290 || CLASSTYPE_USE_TEMPLATE (name))))
5291 name = TYPE_IDENTIFIER (name);
5292 else
5293 /* Create a TEMPLATE_ID_EXPR for the type. */
5294 name = build_nt (TEMPLATE_ID_EXPR,
5295 CLASSTYPE_TI_TEMPLATE (name),
5296 CLASSTYPE_TI_ARGS (name));
5298 else if (TREE_CODE (name) == TYPE_DECL)
5299 name = DECL_NAME (name);
5301 fullname = name;
5303 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5305 name = TREE_OPERAND (name, 0);
5306 if (TREE_CODE (name) == TEMPLATE_DECL)
5307 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5309 if (TREE_CODE (name) != IDENTIFIER_NODE)
5310 my_friendly_abort (2000);
5312 if (TREE_CODE (context) == NAMESPACE_DECL)
5314 /* We can get here from typename_sub0 in the explicit_template_type
5315 expansion. Just fail. */
5316 if (complain)
5317 cp_error ("no class template named `%#T' in `%#T'",
5318 name, context);
5319 return error_mark_node;
5322 if (! uses_template_parms (context)
5323 || currently_open_class (context))
5325 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5327 tree tmpl = NULL_TREE;
5328 if (IS_AGGR_TYPE (context))
5329 tmpl = lookup_field (context, name, 0, 0);
5330 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5332 if (complain)
5333 cp_error ("no class template named `%#T' in `%#T'",
5334 name, context);
5335 return error_mark_node;
5338 return lookup_template_class (tmpl,
5339 TREE_OPERAND (fullname, 1),
5340 NULL_TREE, context,
5341 /*entering_scope=*/0);
5343 else
5345 tree t;
5347 if (!IS_AGGR_TYPE (context))
5349 if (complain)
5350 cp_error ("no type named `%#T' in `%#T'", name, context);
5351 return error_mark_node;
5354 t = lookup_field (context, name, 0, 1);
5355 if (t)
5356 return TREE_TYPE (t);
5360 /* If the CONTEXT is not a template type, then either the field is
5361 there now or its never going to be. */
5362 if (!uses_template_parms (context))
5364 if (complain)
5365 cp_error ("no type named `%#T' in `%#T'", name, context);
5366 return error_mark_node;
5370 return build_typename_type (context, name, fullname, NULL_TREE);
5373 /* Select the right _DECL from multiple choices. */
5375 static tree
5376 select_decl (binding, flags)
5377 tree binding;
5378 int flags;
5380 tree val;
5381 val = BINDING_VALUE (binding);
5382 if (LOOKUP_NAMESPACES_ONLY (flags))
5384 /* We are not interested in types. */
5385 if (val && TREE_CODE (val) == NAMESPACE_DECL)
5386 return val;
5387 return NULL_TREE;
5390 /* If we could have a type and
5391 we have nothing or we need a type and have none. */
5392 if (BINDING_TYPE (binding)
5393 && (!val || ((flags & LOOKUP_PREFER_TYPES)
5394 && TREE_CODE (val) != TYPE_DECL)))
5395 val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5396 /* Don't return non-types if we really prefer types. */
5397 else if (val && LOOKUP_TYPES_ONLY (flags) && TREE_CODE (val) != TYPE_DECL
5398 && (TREE_CODE (val) != TEMPLATE_DECL
5399 || !DECL_CLASS_TEMPLATE_P (val)))
5400 val = NULL_TREE;
5402 return val;
5405 /* Unscoped lookup of a global: iterate over current namespaces,
5406 considering using-directives. If SPACESP is non-NULL, store a list
5407 of the namespaces we've considered in it. */
5409 tree
5410 unqualified_namespace_lookup (name, flags, spacesp)
5411 tree name;
5412 int flags;
5413 tree *spacesp;
5415 tree b = make_node (CPLUS_BINDING);
5416 tree initial = current_decl_namespace();
5417 tree scope = initial;
5418 tree siter;
5419 struct binding_level *level;
5420 tree val = NULL_TREE;
5422 if (spacesp)
5423 *spacesp = NULL_TREE;
5425 for (; !val; scope = CP_DECL_CONTEXT (scope))
5427 if (spacesp)
5428 *spacesp = tree_cons (scope, NULL_TREE, *spacesp);
5429 val = binding_for_name (name, scope);
5431 /* Initialize binding for this context. */
5432 BINDING_VALUE (b) = BINDING_VALUE (val);
5433 BINDING_TYPE (b) = BINDING_TYPE (val);
5435 /* Add all _DECLs seen through local using-directives. */
5436 for (level = current_binding_level;
5437 !level->namespace_p;
5438 level = level->level_chain)
5439 if (!lookup_using_namespace (name, b, level->using_directives,
5440 scope, flags, spacesp))
5441 /* Give up because of error. */
5442 return error_mark_node;
5444 /* Add all _DECLs seen through global using-directives. */
5445 /* XXX local and global using lists should work equally. */
5446 siter = initial;
5447 while (1)
5449 if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter),
5450 scope, flags, spacesp))
5451 /* Give up because of error. */
5452 return error_mark_node;
5453 if (siter == scope) break;
5454 siter = CP_DECL_CONTEXT (siter);
5457 val = select_decl (b, flags);
5458 if (scope == global_namespace)
5459 break;
5461 return val;
5464 /* Combine prefer_type and namespaces_only into flags. */
5466 static int
5467 lookup_flags (prefer_type, namespaces_only)
5468 int prefer_type, namespaces_only;
5470 if (namespaces_only)
5471 return LOOKUP_PREFER_NAMESPACES;
5472 if (prefer_type > 1)
5473 return LOOKUP_PREFER_TYPES;
5474 if (prefer_type > 0)
5475 return LOOKUP_PREFER_BOTH;
5476 return 0;
5479 /* Given a lookup that returned VAL, use FLAGS to decide if we want to
5480 ignore it or not. Subroutine of lookup_name_real. */
5482 static tree
5483 qualify_lookup (val, flags)
5484 tree val;
5485 int flags;
5487 if (val == NULL_TREE)
5488 return val;
5489 if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5490 return val;
5491 if ((flags & LOOKUP_PREFER_TYPES)
5492 && (TREE_CODE (val) == TYPE_DECL
5493 || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5494 && DECL_CLASS_TEMPLATE_P (val))))
5495 return val;
5496 if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
5497 return NULL_TREE;
5498 return val;
5501 /* Any other BINDING overrides an implicit TYPENAME. Warn about
5502 that. */
5504 static void
5505 warn_about_implicit_typename_lookup (typename, binding)
5506 tree typename;
5507 tree binding;
5509 tree subtype = TREE_TYPE (TREE_TYPE (typename));
5510 tree name = DECL_NAME (typename);
5512 if (! (TREE_CODE (binding) == TEMPLATE_DECL
5513 && CLASSTYPE_TEMPLATE_INFO (subtype)
5514 && CLASSTYPE_TI_TEMPLATE (subtype) == binding)
5515 && ! (TREE_CODE (binding) == TYPE_DECL
5516 && same_type_p (TREE_TYPE (binding), subtype)))
5518 cp_warning ("lookup of `%D' finds `%#D'",
5519 name, binding);
5520 cp_warning (" instead of `%D' from dependent base class",
5521 typename);
5522 cp_warning (" (use `typename %T::%D' if that's what you meant)",
5523 constructor_name (current_class_type), name);
5527 /* Look up NAME in the current binding level and its superiors in the
5528 namespace of variables, functions and typedefs. Return a ..._DECL
5529 node of some kind representing its definition if there is only one
5530 such declaration, or return a TREE_LIST with all the overloaded
5531 definitions if there are many, or return 0 if it is undefined.
5533 If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5534 If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
5535 If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
5536 Otherwise we prefer non-TYPE_DECLs.
5538 If NONCLASS is non-zero, we don't look for the NAME in class scope,
5539 using IDENTIFIER_CLASS_VALUE. */
5541 static tree
5542 lookup_name_real (name, prefer_type, nonclass, namespaces_only)
5543 tree name;
5544 int prefer_type, nonclass, namespaces_only;
5546 tree t;
5547 tree val = NULL_TREE;
5548 int yylex = 0;
5549 tree from_obj = NULL_TREE;
5550 int flags;
5551 int val_is_implicit_typename = 0;
5553 /* Hack: copy flag set by parser, if set. */
5554 if (only_namespace_names)
5555 namespaces_only = 1;
5557 if (prefer_type == -2)
5559 extern int looking_for_typename;
5560 tree type = NULL_TREE;
5562 yylex = 1;
5563 prefer_type = looking_for_typename;
5565 flags = lookup_flags (prefer_type, namespaces_only);
5566 /* If the next thing is '<', class templates are types. */
5567 if (looking_for_template)
5568 flags |= LOOKUP_TEMPLATES_EXPECTED;
5570 /* std:: becomes :: for now. */
5571 if (got_scope == std_node)
5572 got_scope = void_type_node;
5574 if (got_scope)
5575 type = got_scope;
5576 else if (got_object != error_mark_node)
5577 type = got_object;
5579 if (type)
5581 if (type == error_mark_node)
5582 return error_mark_node;
5583 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5584 type = TREE_TYPE (type);
5586 if (TYPE_P (type))
5587 type = complete_type (type);
5589 if (TREE_CODE (type) == VOID_TYPE)
5590 type = global_namespace;
5591 if (TREE_CODE (type) == NAMESPACE_DECL)
5593 val = make_node (CPLUS_BINDING);
5594 flags |= LOOKUP_COMPLAIN;
5595 if (!qualified_lookup_using_namespace (name, type, val, flags))
5596 return NULL_TREE;
5597 val = select_decl (val, flags);
5599 else if (! IS_AGGR_TYPE (type)
5600 || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5601 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
5602 || TREE_CODE (type) == TYPENAME_TYPE)
5603 /* Someone else will give an error about this if needed. */
5604 val = NULL_TREE;
5605 else if (type == current_class_type)
5606 val = IDENTIFIER_CLASS_VALUE (name);
5607 else
5608 val = lookup_member (type, name, 0, prefer_type);
5610 else
5611 val = NULL_TREE;
5613 if (got_scope)
5614 goto done;
5615 else if (got_object && val)
5616 from_obj = val;
5618 else
5620 flags = lookup_flags (prefer_type, namespaces_only);
5621 /* If we're not parsing, we need to complain. */
5622 flags |= LOOKUP_COMPLAIN;
5625 /* First, look in non-namespace scopes. */
5627 if (current_class_type == NULL_TREE)
5628 nonclass = 1;
5630 for (t = IDENTIFIER_BINDING (name); t; t = TREE_CHAIN (t))
5632 tree binding;
5634 if (!LOCAL_BINDING_P (t) && nonclass)
5635 /* We're not looking for class-scoped bindings, so keep going. */
5636 continue;
5638 /* If this is the kind of thing we're looking for, we're done. */
5639 if (qualify_lookup (BINDING_VALUE (t), flags))
5640 binding = BINDING_VALUE (t);
5641 else if ((flags & LOOKUP_PREFER_TYPES)
5642 && qualify_lookup (BINDING_TYPE (t), flags))
5643 binding = BINDING_TYPE (t);
5644 else
5645 binding = NULL_TREE;
5647 if (binding
5648 && (!val || !IMPLICIT_TYPENAME_TYPE_DECL_P (binding)))
5650 if (val_is_implicit_typename && !yylex)
5651 warn_about_implicit_typename_lookup (val, binding);
5652 val = binding;
5653 val_is_implicit_typename
5654 = IMPLICIT_TYPENAME_TYPE_DECL_P (val);
5655 if (!val_is_implicit_typename)
5656 break;
5660 /* Now lookup in namespace scopes. */
5661 if (!val || val_is_implicit_typename)
5663 t = unqualified_namespace_lookup (name, flags, 0);
5664 if (t)
5666 if (val_is_implicit_typename && !yylex)
5667 warn_about_implicit_typename_lookup (val, t);
5668 val = t;
5672 done:
5673 if (val)
5675 /* This should only warn about types used in qualified-ids. */
5676 if (from_obj && from_obj != val)
5678 if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
5679 && TREE_CODE (val) == TYPE_DECL
5680 && TREE_TYPE (from_obj) != TREE_TYPE (val))
5682 cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
5683 name, got_object, TREE_TYPE (from_obj));
5684 cp_pedwarn (" does not match lookup in the current scope (`%#T')",
5685 TREE_TYPE (val));
5688 /* We don't change val to from_obj if got_object depends on
5689 template parms because that breaks implicit typename for
5690 destructor calls. */
5691 if (! uses_template_parms (got_object))
5692 val = from_obj;
5695 /* If we have a single function from a using decl, pull it out. */
5696 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5697 val = OVL_FUNCTION (val);
5699 else if (from_obj)
5700 val = from_obj;
5702 return val;
5705 tree
5706 lookup_name_nonclass (name)
5707 tree name;
5709 return lookup_name_real (name, 0, 1, 0);
5712 tree
5713 lookup_function_nonclass (name, args)
5714 tree name;
5715 tree args;
5717 return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
5720 tree
5721 lookup_name_namespace_only (name)
5722 tree name;
5724 /* type-or-namespace, nonclass, namespace_only */
5725 return lookup_name_real (name, 1, 1, 1);
5728 tree
5729 lookup_name (name, prefer_type)
5730 tree name;
5731 int prefer_type;
5733 return lookup_name_real (name, prefer_type, 0, 0);
5736 /* Similar to `lookup_name' but look only in the innermost non-class
5737 binding level. */
5739 tree
5740 lookup_name_current_level (name)
5741 tree name;
5743 struct binding_level *b;
5744 tree t = NULL_TREE;
5746 b = current_binding_level;
5747 while (b->parm_flag == 2)
5748 b = b->level_chain;
5750 if (b->namespace_p)
5752 t = IDENTIFIER_NAMESPACE_VALUE (name);
5754 /* extern "C" function() */
5755 if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
5756 t = TREE_VALUE (t);
5758 else if (IDENTIFIER_BINDING (name)
5759 && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
5761 while (1)
5763 if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
5764 return IDENTIFIER_VALUE (name);
5766 if (b->keep == 2)
5767 b = b->level_chain;
5768 else
5769 break;
5773 return t;
5776 /* Like lookup_name_current_level, but for types. */
5778 tree
5779 lookup_type_current_level (name)
5780 tree name;
5782 register tree t = NULL_TREE;
5784 my_friendly_assert (! current_binding_level->namespace_p, 980716);
5786 if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
5787 && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
5789 struct binding_level *b = current_binding_level;
5790 while (1)
5792 if (purpose_member (name, b->type_shadowed))
5793 return REAL_IDENTIFIER_TYPE_VALUE (name);
5794 if (b->keep == 2)
5795 b = b->level_chain;
5796 else
5797 break;
5801 return t;
5804 void
5805 begin_only_namespace_names ()
5807 only_namespace_names = 1;
5810 void
5811 end_only_namespace_names ()
5813 only_namespace_names = 0;
5816 /* Arrange for the user to get a source line number, even when the
5817 compiler is going down in flames, so that she at least has a
5818 chance of working around problems in the compiler. We used to
5819 call error(), but that let the segmentation fault continue
5820 through; now, it's much more passive by asking them to send the
5821 maintainers mail about the problem. */
5823 static void
5824 signal_catch (sig)
5825 int sig ATTRIBUTE_UNUSED;
5827 signal (SIGSEGV, SIG_DFL);
5828 #ifdef SIGIOT
5829 signal (SIGIOT, SIG_DFL);
5830 #endif
5831 #ifdef SIGILL
5832 signal (SIGILL, SIG_DFL);
5833 #endif
5834 #ifdef SIGABRT
5835 signal (SIGABRT, SIG_DFL);
5836 #endif
5837 #ifdef SIGBUS
5838 signal (SIGBUS, SIG_DFL);
5839 #endif
5840 my_friendly_abort (0);
5843 /* Push the declarations of builtin types into the namespace.
5844 RID_INDEX, if < RID_MAX is the index of the builtin type
5845 in the array RID_POINTERS. NAME is the name used when looking
5846 up the builtin type. TYPE is the _TYPE node for the builtin type. */
5848 static void
5849 record_builtin_type (rid_index, name, type)
5850 enum rid rid_index;
5851 const char *name;
5852 tree type;
5854 tree rname = NULL_TREE, tname = NULL_TREE;
5855 tree tdecl = NULL_TREE;
5857 if ((int) rid_index < (int) RID_MAX)
5858 rname = ridpointers[(int) rid_index];
5859 if (name)
5860 tname = get_identifier (name);
5862 TYPE_BUILT_IN (type) = 1;
5864 if (tname)
5866 tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
5867 set_identifier_type_value (tname, NULL_TREE);
5868 if ((int) rid_index < (int) RID_MAX)
5869 /* Built-in types live in the global namespace. */
5870 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
5872 if (rname != NULL_TREE)
5874 if (tname != NULL_TREE)
5876 set_identifier_type_value (rname, NULL_TREE);
5877 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
5879 else
5881 tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
5882 set_identifier_type_value (rname, NULL_TREE);
5887 /* Record one of the standard Java types.
5888 * Declare it as having the given NAME.
5889 * If SIZE > 0, it is the size of one of the integral types;
5890 * otherwise it is the negative of the size of one of the other types. */
5892 static tree
5893 record_builtin_java_type (name, size)
5894 const char *name;
5895 int size;
5897 tree type, decl;
5898 if (size > 0)
5899 type = make_signed_type (size);
5900 else if (size > -32)
5901 { /* "__java_char" or ""__java_boolean". */
5902 type = make_unsigned_type (-size);
5903 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
5905 else
5906 { /* "__java_float" or ""__java_double". */
5907 type = make_node (REAL_TYPE);
5908 TYPE_PRECISION (type) = - size;
5909 layout_type (type);
5911 record_builtin_type (RID_MAX, name, type);
5912 decl = TYPE_NAME (type);
5914 /* Suppress generate debug symbol entries for these types,
5915 since for normal C++ they are just clutter.
5916 However, push_lang_context undoes this if extern "Java" is seen. */
5917 DECL_IGNORED_P (decl) = 1;
5919 TYPE_FOR_JAVA (type) = 1;
5920 return type;
5923 /* Push a type into the namespace so that the back-ends ignore it. */
5925 static void
5926 record_unknown_type (type, name)
5927 tree type;
5928 const char *name;
5930 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
5931 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
5932 DECL_IGNORED_P (decl) = 1;
5933 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5934 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
5935 TYPE_ALIGN (type) = 1;
5936 TYPE_MODE (type) = TYPE_MODE (void_type_node);
5939 /* Push overloaded decl, in global scope, with one argument so it
5940 can be used as a callback from define_function. */
5942 static void
5943 push_overloaded_decl_1 (x)
5944 tree x;
5946 pushdecl (x);
5949 inline tree
5950 auto_function (name, type)
5951 tree name, type;
5953 return define_function
5954 (IDENTIFIER_POINTER (name), type, push_overloaded_decl_1,
5955 IDENTIFIER_POINTER (build_decl_overload (name, TYPE_ARG_TYPES (type),
5956 0)));
5959 /* Create the predefined scalar types of C,
5960 and some nodes representing standard constants (0, 1, (void *)0).
5961 Initialize the global binding level.
5962 Make definitions for built-in primitive functions. */
5964 void
5965 init_decl_processing ()
5967 tree fields[20];
5968 int wchar_type_size;
5969 tree array_domain_type;
5971 /* Have to make these distinct before we try using them. */
5972 lang_name_cplusplus = get_identifier ("C++");
5973 lang_name_c = get_identifier ("C");
5974 lang_name_java = get_identifier ("Java");
5976 /* Let the back-end now how to save and restore language-specific
5977 per-function globals. */
5978 init_lang_status = &push_cp_function_context;
5979 free_lang_status = &pop_cp_function_context;
5980 mark_lang_status = &mark_cp_function_context;
5982 cp_parse_init ();
5983 init_decl2 ();
5984 init_pt ();
5986 /* Create the global variables. */
5987 push_to_top_level ();
5989 /* Enter the global namespace. */
5990 my_friendly_assert (global_namespace == NULL_TREE, 375);
5991 push_namespace (get_identifier ("::"));
5992 global_namespace = current_namespace;
5993 current_lang_name = NULL_TREE;
5995 if (flag_strict_prototype == 2)
5996 flag_strict_prototype = pedantic;
5997 if (! flag_permissive && ! pedantic)
5998 flag_pedantic_errors = 1;
6000 strict_prototypes_lang_c = flag_strict_prototype;
6002 /* Initially, C. */
6003 current_lang_name = lang_name_c;
6005 current_function_decl = NULL_TREE;
6006 current_binding_level = NULL_BINDING_LEVEL;
6007 free_binding_level = NULL_BINDING_LEVEL;
6009 /* Because most segmentation signals can be traced back into user
6010 code, catch them and at least give the user a chance of working
6011 around compiler bugs. */
6012 signal (SIGSEGV, signal_catch);
6014 /* We will also catch aborts in the back-end through signal_catch and
6015 give the user a chance to see where the error might be, and to defeat
6016 aborts in the back-end when there have been errors previously in their
6017 code. */
6018 #ifdef SIGIOT
6019 signal (SIGIOT, signal_catch);
6020 #endif
6021 #ifdef SIGILL
6022 signal (SIGILL, signal_catch);
6023 #endif
6024 #ifdef SIGABRT
6025 signal (SIGABRT, signal_catch);
6026 #endif
6027 #ifdef SIGBUS
6028 signal (SIGBUS, signal_catch);
6029 #endif
6031 build_common_tree_nodes (flag_signed_char);
6033 error_mark_list = build_tree_list (error_mark_node, error_mark_node);
6034 TREE_TYPE (error_mark_list) = error_mark_node;
6036 /* Make the binding_level structure for global names. */
6037 pushlevel (0);
6038 global_binding_level = current_binding_level;
6039 /* The global level is the namespace level of ::. */
6040 NAMESPACE_LEVEL (global_namespace) = global_binding_level;
6041 declare_namespace_level ();
6043 this_identifier = get_identifier (THIS_NAME);
6044 in_charge_identifier = get_identifier (IN_CHARGE_NAME);
6045 ctor_identifier = get_identifier (CTOR_NAME);
6046 dtor_identifier = get_identifier (DTOR_NAME);
6047 pfn_identifier = get_identifier (VTABLE_PFN_NAME);
6048 index_identifier = get_identifier (VTABLE_INDEX_NAME);
6049 delta_identifier = get_identifier (VTABLE_DELTA_NAME);
6050 delta2_identifier = get_identifier (VTABLE_DELTA2_NAME);
6051 pfn_or_delta2_identifier = get_identifier ("__pfn_or_delta2");
6053 /* Define `int' and `char' first so that dbx will output them first. */
6054 record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
6055 record_builtin_type (RID_CHAR, "char", char_type_node);
6057 /* `signed' is the same as `int' */
6058 record_builtin_type (RID_SIGNED, NULL_PTR, integer_type_node);
6059 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
6060 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
6061 record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
6062 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
6063 record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
6064 record_builtin_type (RID_MAX, "long long unsigned int",
6065 long_long_unsigned_type_node);
6066 record_builtin_type (RID_MAX, "long long unsigned",
6067 long_long_unsigned_type_node);
6068 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
6069 record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
6070 record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
6072 ptrdiff_type_node
6073 = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
6075 /* Define both `signed char' and `unsigned char'. */
6076 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
6077 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
6079 /* `unsigned long' is the standard type for sizeof.
6080 Note that stddef.h uses `unsigned long',
6081 and this must agree, even if long and int are the same size. */
6082 set_sizetype
6083 (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
6085 /* Create the widest literal types. */
6086 widest_integer_literal_type_node = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
6087 pushdecl (build_decl (TYPE_DECL, NULL_TREE,
6088 widest_integer_literal_type_node));
6090 widest_unsigned_literal_type_node = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
6091 pushdecl (build_decl (TYPE_DECL, NULL_TREE,
6092 widest_unsigned_literal_type_node));
6094 /* These are types that type_for_size and type_for_mode use. */
6095 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
6096 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
6097 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
6098 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
6099 #if HOST_BITS_PER_WIDE_INT >= 64
6100 pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
6101 #endif
6102 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
6103 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
6104 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
6105 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
6106 #if HOST_BITS_PER_WIDE_INT >= 64
6107 pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
6108 #endif
6110 build_common_tree_nodes_2 (flag_short_double);
6112 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6113 java_short_type_node = record_builtin_java_type ("__java_short", 16);
6114 java_int_type_node = record_builtin_java_type ("__java_int", 32);
6115 java_long_type_node = record_builtin_java_type ("__java_long", 64);
6116 java_float_type_node = record_builtin_java_type ("__java_float", -32);
6117 java_double_type_node = record_builtin_java_type ("__java_double", -64);
6118 java_char_type_node = record_builtin_java_type ("__java_char", -16);
6119 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
6121 integer_two_node = build_int_2 (2, 0);
6122 TREE_TYPE (integer_two_node) = integer_type_node;
6123 integer_three_node = build_int_2 (3, 0);
6124 TREE_TYPE (integer_three_node) = integer_type_node;
6126 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6127 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
6128 TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6129 TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6130 TYPE_PRECISION (boolean_type_node) = 1;
6131 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6132 boolean_false_node = build_int_2 (0, 0);
6133 TREE_TYPE (boolean_false_node) = boolean_type_node;
6134 boolean_true_node = build_int_2 (1, 0);
6135 TREE_TYPE (boolean_true_node) = boolean_type_node;
6137 signed_size_zero_node = build_int_2 (0, 0); record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
6138 record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
6139 record_builtin_type (RID_MAX, "long double", long_double_type_node);
6141 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
6142 complex_integer_type_node));
6143 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
6144 complex_float_type_node));
6145 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
6146 complex_double_type_node));
6147 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
6148 complex_long_double_type_node));
6150 TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6152 record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
6153 void_list_node = build_tree_list (NULL_TREE, void_type_node);
6154 TREE_PARMLIST (void_list_node) = 1;
6156 /* Used for expressions that do nothing, but are not errors. */
6157 void_zero_node = build_int_2 (0, 0);
6158 TREE_TYPE (void_zero_node) = void_type_node;
6160 string_type_node = build_pointer_type (char_type_node);
6161 const_string_type_node
6162 = build_pointer_type (build_qualified_type (char_type_node,
6163 TYPE_QUAL_CONST));
6164 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
6165 #if 0
6166 record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6167 #endif
6169 /* Make a type to be the domain of a few array types
6170 whose domains don't really matter.
6171 200 is small enough that it always fits in size_t
6172 and large enough that it can hold most function names for the
6173 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
6174 array_domain_type = build_index_type (build_int_2 (200, 0));
6176 /* Make a type for arrays of characters.
6177 With luck nothing will ever really depend on the length of this
6178 array type. */
6179 char_array_type_node
6180 = build_array_type (char_type_node, array_domain_type);
6181 /* Likewise for arrays of ints. */
6182 int_array_type_node
6183 = build_array_type (integer_type_node, array_domain_type);
6185 /* This is just some anonymous class type. Nobody should ever
6186 need to look inside this envelope. */
6187 class_star_type_node = build_pointer_type (make_lang_type (RECORD_TYPE));
6189 if (flag_huge_objects)
6190 delta_type_node = long_integer_type_node;
6191 else
6192 delta_type_node = short_integer_type_node;
6194 default_function_type
6195 = build_function_type (integer_type_node, NULL_TREE);
6197 ptr_type_node = build_pointer_type (void_type_node);
6198 const_ptr_type_node
6199 = build_pointer_type (build_qualified_type (void_type_node,
6200 TYPE_QUAL_CONST));
6201 c_common_nodes_and_builtins (1, flag_no_builtin, flag_no_nonansi_builtin);
6202 lang_type_promotes_to = convert_type_from_ellipsis;
6204 void_ftype_ptr
6205 = build_exception_variant (void_ftype_ptr, empty_except_spec);
6207 /* C++ extensions */
6209 unknown_type_node = make_node (UNKNOWN_TYPE);
6210 record_unknown_type (unknown_type_node, "unknown type");
6212 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
6213 TREE_TYPE (unknown_type_node) = unknown_type_node;
6215 TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
6217 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6218 result. */
6219 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6220 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6222 /* This is special for C++ so functions can be overloaded. */
6223 wchar_type_node = get_identifier (flag_short_wchar
6224 ? "short unsigned int"
6225 : WCHAR_TYPE);
6226 wchar_type_node = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (wchar_type_node));
6227 wchar_type_size = TYPE_PRECISION (wchar_type_node);
6228 signed_wchar_type_node = make_signed_type (wchar_type_size);
6229 unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
6230 wchar_type_node
6231 = TREE_UNSIGNED (wchar_type_node)
6232 ? unsigned_wchar_type_node
6233 : signed_wchar_type_node;
6234 record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
6236 /* Artificial declaration of wchar_t -- can be bashed */
6237 wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
6238 wchar_type_node);
6239 pushdecl (wchar_decl_node);
6241 /* This is for wide string constants. */
6242 wchar_array_type_node
6243 = build_array_type (wchar_type_node, array_domain_type);
6245 if (flag_vtable_thunks)
6247 /* Make sure we get a unique function type, so we can give
6248 its pointer type a name. (This wins for gdb.) */
6249 tree vfunc_type = make_node (FUNCTION_TYPE);
6250 TREE_TYPE (vfunc_type) = integer_type_node;
6251 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6252 layout_type (vfunc_type);
6254 vtable_entry_type = build_pointer_type (vfunc_type);
6256 else
6258 vtable_entry_type = make_lang_type (RECORD_TYPE);
6259 fields[0] = build_lang_decl (FIELD_DECL, delta_identifier,
6260 delta_type_node);
6261 fields[1] = build_lang_decl (FIELD_DECL, index_identifier,
6262 delta_type_node);
6263 fields[2] = build_lang_decl (FIELD_DECL, pfn_identifier,
6264 ptr_type_node);
6265 finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6266 double_type_node);
6268 /* Make this part of an invisible union. */
6269 fields[3] = copy_node (fields[2]);
6270 TREE_TYPE (fields[3]) = delta_type_node;
6271 DECL_NAME (fields[3]) = delta2_identifier;
6272 DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6273 DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
6274 TREE_UNSIGNED (fields[3]) = 0;
6275 TREE_CHAIN (fields[2]) = fields[3];
6276 vtable_entry_type = build_qualified_type (vtable_entry_type,
6277 TYPE_QUAL_CONST);
6279 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
6281 vtbl_type_node
6282 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
6283 layout_type (vtbl_type_node);
6284 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
6285 record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
6286 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6287 layout_type (vtbl_ptr_type_node);
6288 record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
6290 std_node = build_decl (NAMESPACE_DECL,
6291 get_identifier (flag_honor_std ? "fake std":"std"),
6292 void_type_node);
6293 pushdecl (std_node);
6295 global_type_node = make_node (LANG_TYPE);
6296 record_unknown_type (global_type_node, "global type");
6298 /* Now, C++. */
6299 current_lang_name = lang_name_cplusplus;
6302 tree bad_alloc_type_node, newtype, deltype;
6303 if (flag_honor_std)
6304 push_namespace (get_identifier ("std"));
6305 bad_alloc_type_node = xref_tag
6306 (class_type_node, get_identifier ("bad_alloc"), 1);
6307 if (flag_honor_std)
6308 pop_namespace ();
6309 newtype = build_exception_variant
6310 (ptr_ftype_sizetype, add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1));
6311 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
6312 auto_function (ansi_opname[(int) NEW_EXPR], newtype);
6313 auto_function (ansi_opname[(int) VEC_NEW_EXPR], newtype);
6314 global_delete_fndecl = auto_function (ansi_opname[(int) DELETE_EXPR],
6315 deltype);
6316 auto_function (ansi_opname[(int) VEC_DELETE_EXPR], deltype);
6319 abort_fndecl
6320 = define_function ("__pure_virtual", void_ftype, 0, 0);
6322 /* Perform other language dependent initializations. */
6323 init_class_processing ();
6324 init_init_processing ();
6325 init_search_processing ();
6326 init_rtti_processing ();
6328 if (flag_exceptions)
6329 init_exception_processing ();
6330 if (flag_no_inline)
6332 flag_inline_functions = 0;
6335 if (! supports_one_only ())
6336 flag_weak = 0;
6338 /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__. */
6339 declare_function_name ();
6341 /* Prepare to check format strings against argument lists. */
6342 init_function_format_info ();
6344 /* Show we use EH for cleanups. */
6345 using_eh_for_cleanups ();
6347 print_error_function = lang_print_error_function;
6348 lang_get_alias_set = &c_get_alias_set;
6349 valid_lang_attribute = cp_valid_lang_attribute;
6351 /* Maintain consistency. Perhaps we should just complain if they
6352 say -fwritable-strings? */
6353 if (flag_writable_strings)
6354 flag_const_strings = 0;
6356 /* Add GC roots for all of our global variables. */
6357 ggc_add_tree_root (c_global_trees, sizeof c_global_trees / sizeof(tree));
6358 ggc_add_tree_root (cp_global_trees, sizeof cp_global_trees / sizeof(tree));
6359 ggc_add_tree_root (&integer_three_node, 1);
6360 ggc_add_tree_root (&integer_two_node, 1);
6361 ggc_add_tree_root (&signed_size_zero_node, 1);
6362 ggc_add_tree_root (&size_one_node, 1);
6363 ggc_add_tree_root (&size_zero_node, 1);
6364 ggc_add_root (&global_binding_level, 1, sizeof global_binding_level,
6365 mark_binding_level);
6366 ggc_add_root (&scope_chain, 1, sizeof scope_chain, &mark_saved_scope);
6367 ggc_add_tree_root (&static_ctors, 1);
6368 ggc_add_tree_root (&static_dtors, 1);
6369 ggc_add_tree_root (&lastiddecl, 1);
6371 ggc_add_tree_root (&enum_next_value, 1);
6372 ggc_add_tree_root (&last_function_parm_tags, 1);
6373 ggc_add_tree_root (&current_function_return_value, 1);
6374 ggc_add_tree_root (&current_function_parms, 1);
6375 ggc_add_tree_root (&current_function_parm_tags, 1);
6376 ggc_add_tree_root (&last_function_parms, 1);
6377 ggc_add_tree_root (&error_mark_list, 1);
6379 ggc_add_tree_root (&global_namespace, 1);
6380 ggc_add_tree_root (&global_type_node, 1);
6381 ggc_add_tree_root (&anonymous_namespace_name, 1);
6383 ggc_add_tree_root (&got_object, 1);
6384 ggc_add_tree_root (&got_scope, 1);
6386 ggc_add_tree_root (&current_lang_name, 1);
6387 ggc_add_tree_root (&static_aggregates, 1);
6390 /* Function to print any language-specific context for an error message. */
6392 static void
6393 lang_print_error_function (file)
6394 const char *file;
6396 default_print_error_function (file);
6397 maybe_print_template_context ();
6400 /* Make a definition for a builtin function named NAME and whose data type
6401 is TYPE. TYPE should be a function type with argument types.
6403 If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6404 the name to be called if we can't opencode the function. */
6406 tree
6407 define_function (name, type, pfn, library_name)
6408 const char *name;
6409 tree type;
6410 void (*pfn) PROTO((tree));
6411 const char *library_name;
6413 tree decl = build_lang_decl (FUNCTION_DECL, get_identifier (name), type);
6414 DECL_EXTERNAL (decl) = 1;
6415 TREE_PUBLIC (decl) = 1;
6416 DECL_ARTIFICIAL (decl) = 1;
6418 my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
6419 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
6421 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6422 we cannot change DECL_ASSEMBLER_NAME until we have installed this
6423 function in the namespace. */
6424 if (pfn) (*pfn) (decl);
6425 if (library_name)
6426 DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
6427 make_function_rtl (decl);
6428 return decl;
6432 /* Wrapper around define_function, for the benefit of
6433 c_common_nodes_and_builtins.
6434 FUNCTION_CODE tells later passes how to compile calls to this function.
6435 See tree.h for its possible values. */
6437 tree
6438 builtin_function (name, type, code, class, libname)
6439 const char *name;
6440 tree type;
6441 int code;
6442 enum built_in_class class;
6443 const char *libname;
6445 tree decl = define_function (name, type, (void (*) PROTO((tree)))pushdecl,
6446 libname);
6447 DECL_BUILT_IN_CLASS (decl) = class;
6448 DECL_FUNCTION_CODE (decl) = code;
6449 return decl;
6452 /* When we call finish_struct for an anonymous union, we create
6453 default copy constructors and such. But, an anonymous union
6454 shouldn't have such things; this function undoes the damage to the
6455 anonymous union type T.
6457 (The reason that we create the synthesized methods is that we don't
6458 distinguish `union { int i; }' from `typedef union { int i; } U'.
6459 The first is an anonymous union; the second is just an ordinary
6460 union type.) */
6462 void
6463 fixup_anonymous_aggr (t)
6464 tree t;
6466 tree *q;
6468 /* Wipe out memory of synthesized methods */
6469 TYPE_HAS_CONSTRUCTOR (t) = 0;
6470 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6471 TYPE_HAS_INIT_REF (t) = 0;
6472 TYPE_HAS_CONST_INIT_REF (t) = 0;
6473 TYPE_HAS_ASSIGN_REF (t) = 0;
6474 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6476 /* Splice the implicitly generated functions out of the TYPE_METHODS
6477 list. */
6478 q = &TYPE_METHODS (t);
6479 while (*q)
6481 if (DECL_ARTIFICIAL (*q))
6482 *q = TREE_CHAIN (*q);
6483 else
6484 q = &TREE_CHAIN (*q);
6487 /* ANSI C++ June 5 1992 WP 9.5.3. Anonymous unions may not have
6488 function members. */
6489 if (TYPE_METHODS (t))
6490 error ("an anonymous union cannot have function members");
6493 /* Make sure that a declaration with no declarator is well-formed, i.e.
6494 just defines a tagged type or anonymous union.
6496 Returns the type defined, if any. */
6498 tree
6499 check_tag_decl (declspecs)
6500 tree declspecs;
6502 int found_type = 0;
6503 tree ob_modifier = NULL_TREE;
6504 register tree link;
6505 register tree t = NULL_TREE;
6507 for (link = declspecs; link; link = TREE_CHAIN (link))
6509 register tree value = TREE_VALUE (link);
6511 if (TYPE_P (value))
6513 ++found_type;
6515 if (IS_AGGR_TYPE (value) || TREE_CODE (value) == ENUMERAL_TYPE)
6517 my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
6518 t = value;
6521 else if (value == ridpointers[(int) RID_FRIEND])
6523 if (current_class_type == NULL_TREE
6524 || current_scope () != current_class_type)
6525 ob_modifier = value;
6527 else if (value == ridpointers[(int) RID_STATIC]
6528 || value == ridpointers[(int) RID_EXTERN]
6529 || value == ridpointers[(int) RID_AUTO]
6530 || value == ridpointers[(int) RID_REGISTER]
6531 || value == ridpointers[(int) RID_INLINE]
6532 || value == ridpointers[(int) RID_VIRTUAL]
6533 || value == ridpointers[(int) RID_CONST]
6534 || value == ridpointers[(int) RID_VOLATILE]
6535 || value == ridpointers[(int) RID_EXPLICIT])
6536 ob_modifier = value;
6539 if (found_type > 1)
6540 error ("multiple types in one declaration");
6542 /* Inside a class, we might be in a friend or access declaration.
6543 Until we have a good way of detecting the latter, don't warn. */
6544 if (t == NULL_TREE && ! current_class_type)
6545 pedwarn ("declaration does not declare anything");
6547 /* Check for an anonymous union. We're careful
6548 accessing TYPE_IDENTIFIER because some built-in types, like
6549 pointer-to-member types, do not have TYPE_NAME. */
6550 else if (t && IS_AGGR_TYPE_CODE (TREE_CODE (t))
6551 && TYPE_NAME (t)
6552 && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
6554 /* Anonymous unions are objects, so they can have specifiers. */;
6555 SET_ANON_AGGR_TYPE_P (t);
6557 if (TREE_CODE (t) != UNION_TYPE && pedantic && ! in_system_header)
6558 pedwarn ("ISO C++ prohibits anonymous structs");
6561 else if (ob_modifier)
6563 if (ob_modifier == ridpointers[(int) RID_INLINE]
6564 || ob_modifier == ridpointers[(int) RID_VIRTUAL])
6565 cp_error ("`%D' can only be specified for functions", ob_modifier);
6566 else if (ob_modifier == ridpointers[(int) RID_FRIEND])
6567 cp_error ("`%D' can only be specified inside a class", ob_modifier);
6568 else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
6569 cp_error ("`%D' can only be specified for constructors",
6570 ob_modifier);
6571 else
6572 cp_error ("`%D' can only be specified for objects and functions",
6573 ob_modifier);
6576 return t;
6579 /* Called when a declaration is seen that contains no names to declare.
6580 If its type is a reference to a structure, union or enum inherited
6581 from a containing scope, shadow that tag name for the current scope
6582 with a forward reference.
6583 If its type defines a new named structure or union
6584 or defines an enum, it is valid but we need not do anything here.
6585 Otherwise, it is an error.
6587 C++: may have to grok the declspecs to learn about static,
6588 complain for anonymous unions. */
6590 void
6591 shadow_tag (declspecs)
6592 tree declspecs;
6594 tree t = check_tag_decl (declspecs);
6596 if (t)
6597 maybe_process_partial_specialization (t);
6599 /* This is where the variables in an anonymous union are
6600 declared. An anonymous union declaration looks like:
6601 union { ... } ;
6602 because there is no declarator after the union, the parser
6603 sends that declaration here. */
6604 if (t && ANON_AGGR_TYPE_P (t))
6606 fixup_anonymous_aggr (t);
6608 if (TYPE_FIELDS (t))
6610 tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
6611 NULL_TREE);
6612 finish_anon_union (decl);
6617 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
6619 tree
6620 groktypename (typename)
6621 tree typename;
6623 if (TREE_CODE (typename) != TREE_LIST)
6624 return typename;
6625 return grokdeclarator (TREE_VALUE (typename),
6626 TREE_PURPOSE (typename),
6627 TYPENAME, 0, NULL_TREE);
6630 /* Decode a declarator in an ordinary declaration or data definition.
6631 This is called as soon as the type information and variable name
6632 have been parsed, before parsing the initializer if any.
6633 Here we create the ..._DECL node, fill in its type,
6634 and put it on the list of decls for the current context.
6635 The ..._DECL node is returned as the value.
6637 Exception: for arrays where the length is not specified,
6638 the type is left null, to be filled in by `cp_finish_decl'.
6640 Function definitions do not come here; they go to start_function
6641 instead. However, external and forward declarations of functions
6642 do go through here. Structure field declarations are done by
6643 grokfield and not through here. */
6645 /* Set this to zero to debug not using the temporary obstack
6646 to parse initializers. */
6647 int debug_temp_inits = 1;
6649 tree
6650 start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
6651 tree declarator, declspecs;
6652 int initialized;
6653 tree attributes, prefix_attributes;
6655 register tree decl;
6656 register tree type, tem;
6657 tree context;
6658 extern int have_extern_spec;
6659 extern int used_extern_spec;
6660 tree attrlist;
6662 #if 0
6663 /* See code below that used this. */
6664 int init_written = initialized;
6665 #endif
6667 /* This should only be done once on the top most decl. */
6668 if (have_extern_spec && !used_extern_spec)
6670 declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
6671 declspecs);
6672 used_extern_spec = 1;
6675 if (attributes || prefix_attributes)
6676 attrlist = build_scratch_list (attributes, prefix_attributes);
6677 else
6678 attrlist = NULL_TREE;
6680 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
6681 attrlist);
6683 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
6684 return NULL_TREE;
6686 type = TREE_TYPE (decl);
6688 if (type == error_mark_node)
6689 return NULL_TREE;
6691 context
6692 = (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
6693 ? DECL_CLASS_CONTEXT (decl)
6694 : DECL_CONTEXT (decl);
6696 if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
6697 && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
6699 /* When parsing the initializer, lookup should use the object's
6700 namespace. */
6701 push_decl_namespace (context);
6704 /* We are only interested in class contexts, later. */
6705 if (context && TREE_CODE (context) == NAMESPACE_DECL)
6706 context = NULL_TREE;
6708 if (initialized)
6709 /* Is it valid for this decl to have an initializer at all?
6710 If not, set INITIALIZED to zero, which will indirectly
6711 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
6712 switch (TREE_CODE (decl))
6714 case TYPE_DECL:
6715 /* typedef foo = bar means give foo the same type as bar.
6716 We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
6717 Any other case of an initialization in a TYPE_DECL is an error. */
6718 if (pedantic || list_length (declspecs) > 1)
6720 cp_error ("typedef `%D' is initialized", decl);
6721 initialized = 0;
6723 break;
6725 case FUNCTION_DECL:
6726 cp_error ("function `%#D' is initialized like a variable", decl);
6727 initialized = 0;
6728 break;
6730 default:
6731 break;
6734 if (initialized)
6736 if (! toplevel_bindings_p ()
6737 && DECL_EXTERNAL (decl))
6738 cp_warning ("declaration of `%#D' has `extern' and is initialized",
6739 decl);
6740 DECL_EXTERNAL (decl) = 0;
6741 if (toplevel_bindings_p ())
6742 TREE_STATIC (decl) = 1;
6744 /* Tell `pushdecl' this is an initialized decl
6745 even though we don't yet have the initializer expression.
6746 Also tell `cp_finish_decl' it may store the real initializer. */
6747 DECL_INITIAL (decl) = error_mark_node;
6750 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
6751 SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
6752 #endif
6754 /* Set attributes here so if duplicate decl, will have proper attributes. */
6755 cplus_decl_attributes (decl, attributes, prefix_attributes);
6757 if (context && TYPE_SIZE (complete_type (context)) != NULL_TREE)
6759 push_nested_class (context, 2);
6761 if (TREE_CODE (decl) == VAR_DECL)
6763 tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
6764 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
6765 cp_error ("`%#D' is not a static member of `%#T'", decl, context);
6766 else
6768 if (DECL_CONTEXT (field) != context)
6770 cp_pedwarn ("ANSI C++ does not permit `%T::%D' to be defined as `%T::%D'",
6771 DECL_CONTEXT (field), DECL_NAME (decl),
6772 context, DECL_NAME (decl));
6773 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
6775 /* Static data member are tricky; an in-class initialization
6776 still doesn't provide a definition, so the in-class
6777 declaration will have DECL_EXTERNAL set, but will have an
6778 initialization. Thus, duplicate_decls won't warn
6779 about this situation, and so we check here. */
6780 if (DECL_INITIAL (decl) && DECL_INITIAL (field))
6781 cp_error ("duplicate initialization of %D", decl);
6782 if (duplicate_decls (decl, field))
6783 decl = field;
6786 else
6788 tree field = check_classfn (context, decl);
6789 if (field && duplicate_decls (decl, field))
6790 decl = field;
6793 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
6794 DECL_IN_AGGR_P (decl) = 0;
6795 if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
6796 || CLASSTYPE_USE_TEMPLATE (context))
6798 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
6799 /* [temp.expl.spec] An explicit specialization of a static data
6800 member of a template is a definition if the declaration
6801 includes an initializer; otherwise, it is a declaration.
6803 We check for processing_specialization so this only applies
6804 to the new specialization syntax. */
6805 if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
6806 DECL_EXTERNAL (decl) = 1;
6809 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
6810 cp_pedwarn ("declaration of `%#D' outside of class is not definition",
6811 decl);
6814 /* Enter this declaration into the symbol table. */
6815 tem = maybe_push_decl (decl);
6817 if (processing_template_decl)
6819 if (at_function_scope_p ())
6820 push_permanent_obstack ();
6821 tem = push_template_decl (tem);
6822 if (at_function_scope_p ())
6823 pop_obstacks ();
6827 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
6828 /* Tell the back-end to use or not use .common as appropriate. If we say
6829 -fconserve-space, we want this to save .data space, at the expense of
6830 wrong semantics. If we say -fno-conserve-space, we want this to
6831 produce errors about redefs; to do this we force variables into the
6832 data segment. */
6833 DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
6834 #endif
6836 if (! processing_template_decl)
6837 start_decl_1 (tem);
6839 /* Corresponding pop_obstacks is done in `cp_finish_decl'. */
6840 push_obstacks_nochange ();
6842 return tem;
6845 void
6846 start_decl_1 (decl)
6847 tree decl;
6849 tree type = TREE_TYPE (decl);
6850 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
6852 if (type == error_mark_node)
6853 return;
6855 /* If this type of object needs a cleanup, but we're not allowed to
6856 add any more objects with cleanups to the current scope, create a
6857 new binding level. */
6858 if (TYPE_NEEDS_DESTRUCTOR (type)
6859 && current_binding_level->more_cleanups_ok == 0)
6861 keep_next_level (2);
6862 pushlevel (1);
6863 clear_last_expr ();
6864 add_scope_stmt (/*begin_p=*/1, /*partial_p=*/1);
6867 if (initialized)
6868 /* Is it valid for this decl to have an initializer at all?
6869 If not, set INITIALIZED to zero, which will indirectly
6870 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
6872 /* Don't allow initializations for incomplete types except for
6873 arrays which might be completed by the initialization. */
6874 if (TYPE_SIZE (complete_type (type)) != NULL_TREE)
6875 ; /* A complete type is ok. */
6876 else if (TREE_CODE (type) != ARRAY_TYPE)
6878 cp_error ("variable `%#D' has initializer but incomplete type",
6879 decl);
6880 initialized = 0;
6881 type = TREE_TYPE (decl) = error_mark_node;
6883 else if (TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
6885 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
6886 cp_error ("elements of array `%#D' have incomplete type", decl);
6887 /* else we already gave an error in start_decl. */
6888 initialized = 0;
6892 if (!initialized
6893 && TREE_CODE (decl) != TYPE_DECL
6894 && TREE_CODE (decl) != TEMPLATE_DECL
6895 && IS_AGGR_TYPE (type) && ! DECL_EXTERNAL (decl))
6897 if ((! processing_template_decl || ! uses_template_parms (type))
6898 && TYPE_SIZE (complete_type (type)) == NULL_TREE)
6900 cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
6901 decl);
6902 /* Change the type so that assemble_variable will give
6903 DECL an rtl we can live with: (mem (const_int 0)). */
6904 type = TREE_TYPE (decl) = error_mark_node;
6906 else
6908 /* If any base type in the hierarchy of TYPE needs a constructor,
6909 then we set initialized to 1. This way any nodes which are
6910 created for the purposes of initializing this aggregate
6911 will live as long as it does. This is necessary for global
6912 aggregates which do not have their initializers processed until
6913 the end of the file. */
6914 initialized = TYPE_NEEDS_CONSTRUCTING (type);
6918 if (! initialized)
6919 DECL_INITIAL (decl) = NULL_TREE;
6922 /* Handle initialization of references.
6923 These three arguments are from `cp_finish_decl', and have the
6924 same meaning here that they do there.
6926 Quotes on semantics can be found in ARM 8.4.3. */
6928 static void
6929 grok_reference_init (decl, type, init)
6930 tree decl, type, init;
6932 tree tmp;
6934 if (init == NULL_TREE)
6936 if ((DECL_LANG_SPECIFIC (decl) == 0
6937 || DECL_IN_AGGR_P (decl) == 0)
6938 && ! DECL_THIS_EXTERN (decl))
6939 cp_error ("`%D' declared as reference but not initialized", decl);
6940 return;
6943 if (init == error_mark_node)
6944 return;
6946 if (TREE_CODE (init) == CONSTRUCTOR)
6948 cp_error ("ANSI C++ forbids use of initializer list to initialize reference `%D'", decl);
6949 return;
6952 if (TREE_CODE (init) == TREE_LIST)
6953 init = build_compound_expr (init);
6955 if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
6956 init = convert_from_reference (init);
6958 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
6959 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
6961 /* Note: default conversion is only called in very special cases. */
6962 init = default_conversion (init);
6965 /* Convert INIT to the reference type TYPE. This may involve the
6966 creation of a temporary, whose lifetime must be the same as that
6967 of the reference. If so, a DECL_STMT for the temporary will be
6968 added just after the DECL_STMT for DECL. That's why we don't set
6969 DECL_INITIAL for local references (instead assigning to them
6970 explicitly); we need to allow the temporary to be initialized
6971 first. */
6972 tmp = convert_to_reference
6973 (type, init, CONV_IMPLICIT,
6974 LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
6976 if (tmp == error_mark_node)
6977 return;
6978 else if (tmp != NULL_TREE)
6980 init = tmp;
6981 tmp = save_expr (tmp);
6982 if (building_stmt_tree ())
6984 /* Initialize the declaration. */
6985 tmp = build (INIT_EXPR, TREE_TYPE (decl), decl, tmp);
6986 finish_expr_stmt (tmp);
6988 else
6989 DECL_INITIAL (decl) = tmp;
6991 else
6993 cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
6994 return;
6997 if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
6999 expand_static_init (decl, DECL_INITIAL (decl));
7000 DECL_INITIAL (decl) = NULL_TREE;
7002 return;
7005 /* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7006 mucking with forces it does not comprehend (i.e. initialization with a
7007 constructor). If we are at global scope and won't go into COMMON, fill
7008 it in with a dummy CONSTRUCTOR to force the variable into .data;
7009 otherwise we can use error_mark_node. */
7011 static tree
7012 obscure_complex_init (decl, init)
7013 tree decl, init;
7015 if (! flag_no_inline && TREE_STATIC (decl))
7017 if (extract_init (decl, init))
7018 return NULL_TREE;
7021 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7022 if (toplevel_bindings_p () && ! DECL_COMMON (decl))
7023 DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7024 NULL_TREE);
7025 else
7026 #endif
7027 DECL_INITIAL (decl) = error_mark_node;
7029 return init;
7032 /* When parsing `int a[] = {1, 2};' we don't know the size of the
7033 array until we finish parsing the initializer. If that's the
7034 situation we're in, update DECL accordingly. */
7036 static void
7037 maybe_deduce_size_from_array_init (decl, init)
7038 tree decl;
7039 tree init;
7041 tree type = TREE_TYPE (decl);
7043 if (TREE_CODE (type) == ARRAY_TYPE
7044 && TYPE_DOMAIN (type) == NULL_TREE
7045 && TREE_CODE (decl) != TYPE_DECL)
7047 int do_default
7048 = (TREE_STATIC (decl)
7049 /* Even if pedantic, an external linkage array
7050 may have incomplete type at first. */
7051 ? pedantic && ! DECL_EXTERNAL (decl)
7052 : !DECL_EXTERNAL (decl));
7053 tree initializer = init ? init : DECL_INITIAL (decl);
7054 int failure = complete_array_type (type, initializer, do_default);
7056 if (failure == 1)
7057 cp_error ("initializer fails to determine size of `%D'", decl);
7059 if (failure == 2)
7061 if (do_default)
7062 cp_error ("array size missing in `%D'", decl);
7063 /* If a `static' var's size isn't known, make it extern as
7064 well as static, so it does not get allocated. If it's not
7065 `static', then don't mark it extern; finish_incomplete_decl
7066 will give it a default size and it will get allocated. */
7067 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7068 DECL_EXTERNAL (decl) = 1;
7071 if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7072 && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7073 integer_zero_node))
7074 cp_error ("zero-size array `%D'", decl);
7076 layout_decl (decl, 0);
7080 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
7081 any appropriate error messages regarding the layout. */
7083 static void
7084 layout_var_decl (decl)
7085 tree decl;
7087 tree type = TREE_TYPE (decl);
7088 tree ttype = target_type (type);
7090 /* If we haven't already layed out this declaration, do so now.
7091 Note that we must not call complete type for an external object
7092 because it's type might involve templates that we are not
7093 supposed to isntantiate yet. (And it's perfectly legal to say
7094 `extern X x' for some incomplete type `X'.) */
7095 if (!DECL_EXTERNAL (decl))
7096 complete_type (type);
7097 if (!DECL_SIZE (decl)&& TYPE_SIZE (type))
7098 layout_decl (decl, 0);
7100 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
7102 /* An automatic variable with an incomplete type: that is an error.
7103 Don't talk about array types here, since we took care of that
7104 message in grokdeclarator. */
7105 cp_error ("storage size of `%D' isn't known", decl);
7106 TREE_TYPE (decl) = error_mark_node;
7108 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7109 /* Let debugger know it should output info for this type. */
7110 note_debug_info_needed (ttype);
7112 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7113 note_debug_info_needed (DECL_CONTEXT (decl));
7115 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7116 && DECL_SIZE (decl) != NULL_TREE
7117 && ! TREE_CONSTANT (DECL_SIZE (decl)))
7119 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7120 constant_expression_warning (DECL_SIZE (decl));
7121 else
7122 cp_error ("storage size of `%D' isn't constant", decl);
7126 /* If a local static variable is declared in an inline function, or if
7127 we have a weak definition, we must endeavor to create only one
7128 instance of the variable at link-time. */
7130 static void
7131 maybe_commonize_var (decl)
7132 tree decl;
7134 /* Static data in a function with comdat linkage also has comdat
7135 linkage. */
7136 if (TREE_STATIC (decl)
7137 /* Don't mess with __FUNCTION__. */
7138 && ! TREE_ASM_WRITTEN (decl)
7139 && current_function_decl
7140 && DECL_CONTEXT (decl) == current_function_decl
7141 && (DECL_THIS_INLINE (current_function_decl)
7142 || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7143 && TREE_PUBLIC (current_function_decl))
7145 /* Rather than try to get this right with inlining, we suppress
7146 inlining of such functions. */
7147 current_function_cannot_inline
7148 = "function with static variable cannot be inline";
7150 /* If flag_weak, we don't need to mess with this, as we can just
7151 make the function weak, and let it refer to its unique local
7152 copy. This works because we don't allow the function to be
7153 inlined. */
7154 if (! flag_weak)
7156 if (DECL_INTERFACE_KNOWN (current_function_decl))
7158 TREE_PUBLIC (decl) = 1;
7159 DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7161 else if (DECL_INITIAL (decl) == NULL_TREE
7162 || DECL_INITIAL (decl) == error_mark_node)
7164 TREE_PUBLIC (decl) = 1;
7165 DECL_COMMON (decl) = 1;
7167 /* else we lose. We can only do this if we can use common,
7168 which we can't if it has been initialized. */
7170 if (TREE_PUBLIC (decl))
7171 DECL_ASSEMBLER_NAME (decl)
7172 = build_static_name (current_function_decl, DECL_NAME (decl));
7173 else if (! DECL_ARTIFICIAL (decl))
7175 cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7176 cp_warning_at (" you can work around this by removing the initializer", decl);
7180 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
7181 /* Set it up again; we might have set DECL_INITIAL since the last
7182 time. */
7183 comdat_linkage (decl);
7186 /* Issue an error message if DECL is an uninitialized const variable. */
7188 static void
7189 check_for_uninitialized_const_var (decl)
7190 tree decl;
7192 tree type = TREE_TYPE (decl);
7194 /* ``Unless explicitly declared extern, a const object does not have
7195 external linkage and must be initialized. ($8.4; $12.1)'' ARM
7196 7.1.6 */
7197 if (TREE_CODE (decl) == VAR_DECL
7198 && TREE_CODE (type) != REFERENCE_TYPE
7199 && CP_TYPE_CONST_P (type)
7200 && !TYPE_NEEDS_CONSTRUCTING (type)
7201 && !DECL_INITIAL (decl))
7202 cp_error ("uninitialized const `%D'", decl);
7205 /* Verify INIT (the initializer for DECL), and record the
7206 initialization in DECL_INITIAL, if appropriate. Returns a new
7207 value for INIT. */
7209 static tree
7210 check_initializer (decl, init)
7211 tree decl;
7212 tree init;
7214 tree type;
7216 if (TREE_CODE (decl) == FIELD_DECL)
7217 return init;
7219 type = TREE_TYPE (decl);
7221 /* If `start_decl' didn't like having an initialization, ignore it now. */
7222 if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7223 init = NULL_TREE;
7225 /* Check the initializer. */
7226 if (init)
7228 /* Things that are going to be initialized need to have complete
7229 type. */
7230 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
7232 if (type == error_mark_node)
7233 /* We will have already complained. */
7234 init = NULL_TREE;
7235 else if (TYPE_SIZE (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
7237 cp_error ("variable-sized object `%D' may not be initialized", decl);
7238 init = NULL_TREE;
7240 else if (TREE_CODE (type) == ARRAY_TYPE
7241 && !TYPE_SIZE (TREE_TYPE (type)))
7243 cp_error ("elements of array `%#D' have incomplete type", decl);
7244 init = NULL_TREE;
7246 else if (!TYPE_SIZE (type))
7248 cp_error ("`%D' has incomplete type", decl);
7249 TREE_TYPE (decl) = error_mark_node;
7250 init = NULL_TREE;
7254 if (TREE_CODE (decl) == CONST_DECL)
7256 my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7258 DECL_INITIAL (decl) = init;
7260 /* This will keep us from needing to worry about our obstacks. */
7261 my_friendly_assert (init != NULL_TREE, 149);
7262 init = NULL_TREE;
7264 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
7266 if (TREE_STATIC (decl))
7267 make_decl_rtl (decl, NULL_PTR, toplevel_bindings_p ());
7268 grok_reference_init (decl, type, init);
7269 init = NULL_TREE;
7271 else if (init)
7273 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7275 if (TREE_CODE (type) == ARRAY_TYPE)
7276 init = digest_init (type, init, (tree *) 0);
7277 else if (TREE_CODE (init) == CONSTRUCTOR
7278 && TREE_HAS_CONSTRUCTOR (init))
7280 if (TYPE_NON_AGGREGATE_CLASS (type))
7282 cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7283 decl);
7284 init = error_mark_node;
7286 else
7287 goto dont_use_constructor;
7290 else
7292 dont_use_constructor:
7293 if (TREE_CODE (init) != TREE_VEC)
7294 init = store_init_value (decl, init);
7297 if (init)
7298 /* We must hide the initializer so that expand_decl
7299 won't try to do something it does not understand. */
7300 init = obscure_complex_init (decl, init);
7302 else if (DECL_EXTERNAL (decl))
7304 else if (TREE_CODE_CLASS (TREE_CODE (type)) == 't'
7305 && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7307 tree core_type = strip_array_types (type);
7309 if (! TYPE_NEEDS_CONSTRUCTING (core_type))
7311 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
7312 cp_error ("structure `%D' with uninitialized const members", decl);
7313 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
7314 cp_error ("structure `%D' with uninitialized reference members",
7315 decl);
7318 check_for_uninitialized_const_var (decl);
7320 if (TYPE_SIZE (type) != NULL_TREE
7321 && TYPE_NEEDS_CONSTRUCTING (type))
7322 init = obscure_complex_init (decl, NULL_TREE);
7325 else
7326 check_for_uninitialized_const_var (decl);
7328 return init;
7331 /* If DECL is not a local variable, give it RTL. */
7333 static void
7334 make_rtl_for_nonlocal_decl (decl, init, asmspec)
7335 tree decl;
7336 tree init;
7337 const char *asmspec;
7339 int toplev;
7340 tree type;
7342 type = TREE_TYPE (decl);
7343 toplev = toplevel_bindings_p ();
7345 /* Handle non-variables up front. */
7346 if (TREE_CODE (decl) != VAR_DECL)
7348 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7349 return;
7352 /* Set the DECL_ASSEMBLER_NAME for the variable. */
7353 if (asmspec)
7354 DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7356 if (DECL_VIRTUAL_P (decl))
7357 make_decl_rtl (decl, NULL_PTR, toplev);
7358 else if (TREE_READONLY (decl)
7359 && DECL_INITIAL (decl) != NULL_TREE
7360 && DECL_INITIAL (decl) != error_mark_node
7361 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
7363 DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
7365 if (toplev && ! TREE_PUBLIC (decl))
7367 /* If this is a static const, change its apparent linkage
7368 if it belongs to a #pragma interface. */
7369 if (!interface_unknown)
7371 TREE_PUBLIC (decl) = 1;
7372 DECL_EXTERNAL (decl) = interface_only;
7374 make_decl_rtl (decl, asmspec, toplev);
7376 else if (toplev)
7377 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7379 else if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
7381 my_friendly_assert (TREE_STATIC (decl), 19990828);
7383 if (init == NULL_TREE
7384 #ifdef DEFAULT_STATIC_DEFS
7385 /* If this code is dead, then users must
7386 explicitly declare static member variables
7387 outside the class def'n as well. */
7388 && TYPE_NEEDS_CONSTRUCTING (type)
7389 #endif
7392 DECL_EXTERNAL (decl) = 1;
7393 make_decl_rtl (decl, asmspec, 1);
7395 else
7396 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7398 else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == NAMESPACE_DECL
7399 || (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl)))
7400 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7403 /* Create RTL for the local static variable DECL. */
7405 void
7406 make_rtl_for_local_static (decl)
7407 tree decl;
7409 tree type = TREE_TYPE (decl);
7410 const char *asmspec = NULL;
7412 if (TREE_READONLY (decl)
7413 && DECL_INITIAL (decl) != NULL_TREE
7414 && DECL_INITIAL (decl) != error_mark_node
7415 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
7416 && ! TREE_SIDE_EFFECTS (decl)
7417 && ! TREE_PUBLIC (decl)
7418 && ! DECL_EXTERNAL (decl)
7419 && ! TYPE_NEEDS_DESTRUCTOR (type)
7420 && ! TREE_ADDRESSABLE (decl)
7421 && DECL_MODE (decl) != BLKmode)
7423 /* As an optimization, we try to put register-sized static
7424 constants in a register, rather than writing them out. If we
7425 take the address of the constant later, we'll make RTL for it
7426 at that point. */
7427 DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
7428 store_expr (DECL_INITIAL (decl), DECL_RTL (decl), 0);
7429 TREE_ASM_WRITTEN (decl) = 1;
7430 return;
7433 if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
7435 /* The only way this situaton can occur is if the
7436 user specified a name for this DECL using the
7437 `attribute' syntax. */
7438 asmspec = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
7439 DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
7442 rest_of_decl_compilation (decl, asmspec, /*top_level=*/0, /*at_end=*/0);
7445 /* The old ARM scoping rules injected variables declared in the
7446 initialization statement of a for-statement into the surrounding
7447 scope. We support this usage, in order to be backward-compatible.
7448 DECL is a just-declared VAR_DECL; if necessary inject its
7449 declaration into the surrounding scope. */
7451 void
7452 maybe_inject_for_scope_var (decl)
7453 tree decl;
7455 if (current_binding_level->is_for_scope)
7457 struct binding_level *outer
7458 = current_binding_level->level_chain;
7460 /* Check to see if the same name is already bound at the outer
7461 level, either because it was directly declared, or because a
7462 dead for-decl got preserved. In either case, the code would
7463 not have been valid under the ARM scope rules, so clear
7464 is_for_scope for the current_binding_level.
7466 Otherwise, we need to preserve the temp slot for decl to last
7467 into the outer binding level. */
7469 tree outer_binding
7470 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
7472 if (outer_binding && BINDING_LEVEL (outer_binding) == outer
7473 && (TREE_CODE (BINDING_VALUE (outer_binding))
7474 == VAR_DECL)
7475 && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
7477 BINDING_VALUE (outer_binding)
7478 = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
7479 current_binding_level->is_for_scope = 0;
7481 else if (DECL_IN_MEMORY_P (decl))
7482 preserve_temp_slots (DECL_RTL (decl));
7486 /* Generate code to initialize DECL (a local variable). */
7488 void
7489 initialize_local_var (decl, init, flags)
7490 tree decl;
7491 tree init;
7492 int flags;
7494 tree type = TREE_TYPE (decl);
7496 /* If the type is bogus, don't bother initializing the variable. */
7497 if (type == error_mark_node)
7498 return;
7500 if (DECL_SIZE (decl) == NULL_TREE && !TREE_STATIC (decl))
7502 /* If we used it already as memory, it must stay in memory. */
7503 DECL_INITIAL (decl) = NULL_TREE;
7504 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7507 /* Local statics are handled differently from ordinary automatic
7508 variables. */
7509 if (TREE_STATIC (decl))
7511 if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
7512 || TYPE_NEEDS_DESTRUCTOR (type))
7513 expand_static_init (decl, init);
7514 return;
7517 if (DECL_SIZE (decl) && type != error_mark_node)
7519 int already_used;
7521 /* Compute and store the initial value. */
7522 already_used = TREE_USED (decl) || TREE_USED (type);
7524 if (init || TYPE_NEEDS_CONSTRUCTING (type))
7526 int saved_stmts_are_full_exprs_p;
7528 emit_line_note (DECL_SOURCE_FILE (decl),
7529 DECL_SOURCE_LINE (decl));
7530 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p;
7531 stmts_are_full_exprs_p = 1;
7532 finish_expr_stmt (build_aggr_init (decl, init, flags));
7533 stmts_are_full_exprs_p = saved_stmts_are_full_exprs_p;
7536 /* Set this to 0 so we can tell whether an aggregate which was
7537 initialized was ever used. Don't do this if it has a
7538 destructor, so we don't complain about the 'resource
7539 allocation is initialization' idiom. Now set
7540 attribute((unused)) on types so decls of that type will be
7541 marked used. (see TREE_USED, above.) */
7542 if (TYPE_NEEDS_CONSTRUCTING (type)
7543 && ! already_used
7544 && !TYPE_NEEDS_DESTRUCTOR (type)
7545 && DECL_NAME (decl))
7546 TREE_USED (decl) = 0;
7547 else if (already_used)
7548 TREE_USED (decl) = 1;
7552 /* Generate code to destroy DECL (a local variable). */
7554 void
7555 destroy_local_var (decl)
7556 tree decl;
7558 tree type = TREE_TYPE (decl);
7559 tree cleanup;
7561 /* Only variables get cleaned up. */
7562 if (TREE_CODE (decl) != VAR_DECL)
7563 return;
7565 /* And only things with destructors need cleaning up. */
7566 if (!TYPE_NEEDS_DESTRUCTOR (type))
7567 return;
7569 if (TREE_CODE (decl) == VAR_DECL &&
7570 (DECL_EXTERNAL (decl) || TREE_STATIC (decl)))
7571 /* We don't clean up things that aren't defined in this
7572 translation unit, or that need a static cleanup. The latter
7573 are handled by finish_file. */
7574 return;
7576 /* Compute the cleanup. */
7577 cleanup = maybe_build_cleanup (decl);
7579 /* Record the cleanup required for this declaration. */
7580 if (DECL_SIZE (decl) && TREE_TYPE (decl) != error_mark_node
7581 && cleanup)
7582 finish_decl_cleanup (decl, cleanup);
7585 /* Let the back-end know about DECL. */
7587 void
7588 emit_local_var (decl)
7589 tree decl;
7591 /* Create RTL for this variable. */
7592 if (DECL_RTL (decl))
7593 /* Only a RESULT_DECL should have non-NULL RTL when
7594 arriving here. All other local variables are
7595 assigned RTL in this function. */
7596 my_friendly_assert (TREE_CODE (decl) == RESULT_DECL,
7597 19990828);
7598 else
7600 if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
7601 /* The user must have specified an assembler name for this
7602 variable. Set that up now. */
7603 rest_of_decl_compilation
7604 (decl, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)),
7605 /*top_level=*/0, /*at_end=*/0);
7606 else
7607 expand_decl (decl);
7610 /* Actually do the initialization. */
7611 expand_start_target_temps ();
7612 expand_decl_init (decl);
7613 expand_end_target_temps ();
7616 /* Finish processing of a declaration;
7617 install its line number and initial value.
7618 If the length of an array type is not known before,
7619 it must be determined now, from the initial value, or it is an error.
7621 Call `pop_obstacks' iff NEED_POP is nonzero.
7623 For C++, `cp_finish_decl' must be fairly evasive: it must keep initializers
7624 for aggregates that have constructors alive on the permanent obstack,
7625 so that the global initializing functions can be written at the end.
7627 INIT0 holds the value of an initializer that should be allowed to escape
7628 the normal rules.
7630 FLAGS is LOOKUP_ONLYCONVERTING is the = init syntax was used, else 0
7631 if the (init) syntax was used.
7633 For functions that take default parameters, DECL points to its
7634 "maximal" instantiation. `cp_finish_decl' must then also declared its
7635 subsequently lower and lower forms of instantiation, checking for
7636 ambiguity as it goes. This can be sped up later. */
7638 void
7639 cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
7640 tree decl, init;
7641 tree asmspec_tree;
7642 int need_pop;
7643 int flags;
7645 register tree type;
7646 tree ttype = NULL_TREE;
7647 int temporary = allocation_temporary_p ();
7648 const char *asmspec = NULL;
7649 int was_readonly = 0;
7651 /* If this is 0, then we did not change obstacks. */
7652 if (! decl)
7654 if (init)
7655 error ("assignment (not initialization) in declaration");
7656 return;
7659 /* If a name was specified, get the string. */
7660 if (asmspec_tree)
7661 asmspec = TREE_STRING_POINTER (asmspec_tree);
7663 if (init && TREE_CODE (init) == NAMESPACE_DECL)
7665 cp_error ("Cannot initialize `%D' to namespace `%D'",
7666 decl, init);
7667 init = NULL_TREE;
7670 if (current_class_type
7671 && DECL_REAL_CONTEXT (decl) == current_class_type
7672 && TYPE_BEING_DEFINED (current_class_type)
7673 && (DECL_INITIAL (decl) || init))
7674 DECL_DEFINED_IN_CLASS_P (decl) = 1;
7676 if (TREE_CODE (decl) == VAR_DECL
7677 && DECL_CONTEXT (decl)
7678 && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
7679 && DECL_CONTEXT (decl) != current_namespace
7680 && init)
7682 /* Leave the namespace of the object. */
7683 pop_decl_namespace ();
7686 type = TREE_TYPE (decl);
7688 if (type == error_mark_node)
7690 if (toplevel_bindings_p () && temporary)
7691 end_temporary_allocation ();
7693 return;
7696 /* Add this declaration to the statement-tree. */
7697 if (building_stmt_tree ()
7698 && TREE_CODE (current_scope ()) == FUNCTION_DECL)
7699 add_decl_stmt (decl);
7701 if (TYPE_HAS_MUTABLE_P (type))
7702 TREE_READONLY (decl) = 0;
7704 if (processing_template_decl)
7706 if (init && DECL_INITIAL (decl))
7707 DECL_INITIAL (decl) = init;
7708 goto finish_end0;
7711 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
7712 my_friendly_assert (TREE_CODE (decl) != PARM_DECL, 19990828);
7714 /* Take care of TYPE_DECLs up front. */
7715 if (TREE_CODE (decl) == TYPE_DECL)
7717 if (init && DECL_INITIAL (decl))
7719 /* typedef foo = bar; store the type of bar as the type of foo. */
7720 TREE_TYPE (decl) = type = TREE_TYPE (init);
7721 DECL_INITIAL (decl) = init = NULL_TREE;
7723 if (type != error_mark_node
7724 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
7726 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7727 cp_warning ("shadowing previous type declaration of `%#D'", decl);
7728 set_identifier_type_value (DECL_NAME (decl), type);
7729 CLASSTYPE_GOT_SEMICOLON (type) = 1;
7731 GNU_xref_decl (current_function_decl, decl);
7733 /* If we have installed this as the canonical typedef for this
7734 type, and that type has not been defined yet, delay emitting
7735 the debug information for it, as we will emit it later. */
7736 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7737 && TYPE_SIZE (TREE_TYPE (decl)) == NULL_TREE)
7738 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7740 rest_of_decl_compilation (decl, NULL_PTR,
7741 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
7742 goto finish_end;
7745 if (TREE_CODE (decl) != FUNCTION_DECL)
7746 ttype = target_type (type);
7748 if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
7749 && TYPE_NEEDS_CONSTRUCTING (type))
7751 /* Currently, GNU C++ puts constants in text space, making them
7752 impossible to initialize. In the future, one would hope for
7753 an operating system which understood the difference between
7754 initialization and the running of a program. */
7755 was_readonly = 1;
7756 TREE_READONLY (decl) = 0;
7759 if (TREE_CODE (decl) == FIELD_DECL && asmspec)
7761 /* This must override the asm specifier which was placed by
7762 grokclassfn. Lay this out fresh. */
7763 DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
7764 DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7765 make_decl_rtl (decl, asmspec, 0);
7768 /* Deduce size of array from initialization, if not already known. */
7769 maybe_deduce_size_from_array_init (decl, init);
7770 init = check_initializer (decl, init);
7772 GNU_xref_decl (current_function_decl, decl);
7774 /* For top-level declaration, the initial value was read in
7775 the temporary obstack. MAXINDEX, rtl, etc. to be made below
7776 must go in the permanent obstack; but don't discard the
7777 temporary data yet. */
7779 if (toplevel_bindings_p () && temporary)
7780 end_temporary_allocation ();
7782 if (TREE_CODE (decl) == VAR_DECL)
7783 layout_var_decl (decl);
7785 /* Output the assembler code and/or RTL code for variables and functions,
7786 unless the type is an undefined structure or union.
7787 If not, it will get done when the type is completed. */
7788 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
7789 || TREE_CODE (decl) == RESULT_DECL)
7791 if (TREE_CODE (decl) == VAR_DECL)
7792 maybe_commonize_var (decl);
7794 make_rtl_for_nonlocal_decl (decl, init, asmspec);
7796 if (TREE_CODE (type) == FUNCTION_TYPE
7797 || TREE_CODE (type) == METHOD_TYPE)
7798 abstract_virtuals_error (decl,
7799 strip_array_types (TREE_TYPE (type)));
7800 else
7801 abstract_virtuals_error (decl, strip_array_types (type));
7803 if (TREE_CODE (decl) == FUNCTION_DECL)
7805 else if (DECL_EXTERNAL (decl)
7806 && ! (DECL_LANG_SPECIFIC (decl)
7807 && DECL_NOT_REALLY_EXTERN (decl)))
7809 if (init)
7810 DECL_INITIAL (decl) = init;
7812 else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
7814 /* This is a local declaration. */
7815 if (doing_semantic_analysis_p ())
7816 maybe_inject_for_scope_var (decl);
7817 /* Initialize the local variable. But, if we're building a
7818 statement-tree, we'll do the initialization when we
7819 expand the tree. */
7820 if (processing_template_decl)
7822 if (init || DECL_INITIAL (decl) == error_mark_node)
7823 DECL_INITIAL (decl) = init;
7825 else
7827 /* If we're not building RTL, then we need to do so
7828 now. */
7829 if (!building_stmt_tree ())
7830 emit_local_var (decl);
7831 /* Initialize the variable. */
7832 initialize_local_var (decl, init, flags);
7833 /* Clean up the variable. */
7834 destroy_local_var (decl);
7837 else if (TREE_STATIC (decl) && type != error_mark_node)
7839 /* Cleanups for static variables are handled by `finish_file'. */
7840 if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
7841 || TYPE_NEEDS_DESTRUCTOR (type))
7842 expand_static_init (decl, init);
7844 finish_end0:
7846 /* Undo call to `pushclass' that was done in `start_decl'
7847 due to initialization of qualified member variable.
7848 I.e., Foo::x = 10; */
7850 tree context = DECL_REAL_CONTEXT (decl);
7851 if (context
7852 && TREE_CODE_CLASS (TREE_CODE (context)) == 't'
7853 && (TREE_CODE (decl) == VAR_DECL
7854 /* We also have a pushclass done that we need to undo here
7855 if we're at top level and declare a method. */
7856 || TREE_CODE (decl) == FUNCTION_DECL)
7857 /* If size hasn't been set, we're still defining it,
7858 and therefore inside the class body; don't pop
7859 the binding level.. */
7860 && TYPE_SIZE (context) != NULL_TREE
7861 && context == current_class_type)
7862 pop_nested_class ();
7866 finish_end:
7868 /* If requested, warn about definitions of large data objects. */
7870 if (warn_larger_than
7871 && ! processing_template_decl
7872 && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
7873 && !DECL_EXTERNAL (decl))
7875 register tree decl_size = DECL_SIZE (decl);
7877 if (decl_size && TREE_CODE (decl_size) == INTEGER_CST)
7879 unsigned units = TREE_INT_CST_LOW (decl_size) / BITS_PER_UNIT;
7881 if (units > larger_than_size)
7882 warning_with_decl (decl, "size of `%s' is %u bytes", units);
7886 if (need_pop)
7887 /* Resume permanent allocation, if not within a function. The
7888 corresponding push_obstacks_nochange is in start_decl,
7889 start_method, groktypename, and in grokfield. */
7890 pop_obstacks ();
7892 if (was_readonly)
7893 TREE_READONLY (decl) = 1;
7896 /* This is here for a midend callback from c-common.c */
7898 void
7899 finish_decl (decl, init, asmspec_tree)
7900 tree decl, init;
7901 tree asmspec_tree;
7903 cp_finish_decl (decl, init, asmspec_tree, 1, 0);
7906 /* Generate code to handle the destruction of the function-scoped
7907 static variable DECL. */
7909 static void
7910 destroy_local_static (decl)
7911 tree decl;
7913 tree cleanup, fcall;
7914 tree compound_stmt;
7915 int saved_flag_access_control;
7917 if (atexit_node == 0)
7919 tree atexit_fndecl, PFV, pfvlist;
7920 /* Remember this information until end of file. */
7921 push_obstacks (&permanent_obstack, &permanent_obstack);
7922 PFV = build_pointer_type (build_function_type
7923 (void_type_node, void_list_node));
7925 pfvlist = tree_cons (NULL_TREE, PFV, void_list_node);
7927 push_lang_context (lang_name_c);
7928 /* Note that we do not call pushdecl for this function;
7929 there's no reason that this declaration should be
7930 accessible to anyone. */
7931 atexit_fndecl
7932 = define_function ("atexit",
7933 build_function_type (void_type_node,
7934 pfvlist),
7935 /*pfn=*/0, NULL_PTR);
7936 mark_used (atexit_fndecl);
7937 atexit_node = default_conversion (atexit_fndecl);
7938 pop_lang_context ();
7939 pop_obstacks ();
7942 /* Call build_cleanup before we enter the anonymous function so that
7943 any access checks will be done relative to the current scope,
7944 rather than the scope of the anonymous function. */
7945 build_cleanup (decl);
7947 /* Now start the function. */
7948 cleanup = start_anon_func ();
7950 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
7951 to the original function, rather than the anonymous one. That
7952 will make the back-end think that nested functions are in use,
7953 which causes confusion. */
7954 saved_flag_access_control = flag_access_control;
7955 flag_access_control = 0;
7956 fcall = build_cleanup (decl);
7957 flag_access_control = saved_flag_access_control;
7959 /* Create the body of the anonymous function. */
7960 compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
7961 finish_expr_stmt (fcall);
7962 finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
7963 end_anon_func ();
7965 /* Call atexit with the cleanup function. */
7966 mark_addressable (cleanup);
7967 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
7968 fcall = build_function_call (atexit_node,
7969 tree_cons (NULL_TREE,
7970 cleanup,
7971 NULL_TREE));
7972 finish_expr_stmt (fcall);
7975 void
7976 expand_static_init (decl, init)
7977 tree decl;
7978 tree init;
7980 tree oldstatic = value_member (decl, static_aggregates);
7982 if (oldstatic)
7984 if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
7985 cp_error ("multiple initializations given for `%D'", decl);
7987 else if (! toplevel_bindings_p ())
7989 /* Emit code to perform this initialization but once. */
7990 tree temp;
7991 tree if_stmt;
7992 tree then_clause;
7993 tree assignment;
7994 tree temp_init;
7996 /* Remember this information until end of file. */
7997 push_obstacks (&permanent_obstack, &permanent_obstack);
7999 /* Emit code to perform this initialization but once. This code
8000 looks like:
8002 static int temp = 0;
8003 if (!temp) {
8004 // Do initialization.
8005 temp = 1;
8006 // Register variable for destruction at end of program.
8009 Note that the `temp' variable is only set to 1 *after* the
8010 initialization is complete. This ensures that an exception,
8011 thrown during the construction, will cause the variable to
8012 reinitialized when we pass through this code again, as per:
8014 [stmt.dcl]
8016 If the initialization exits by throwing an exception, the
8017 initialization is not complete, so it will be tried again
8018 the next time control enters the declaration.
8020 In theory, this process should be thread-safe, too; multiple
8021 threads should not be able to initialize the variable more
8022 than once. We don't yet attempt to ensure thread-safety. */
8023 temp = get_temp_name (integer_type_node, 1);
8024 rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
8026 /* Begin the conditional initialization. */
8027 if_stmt = begin_if_stmt ();
8028 finish_if_stmt_cond (build_binary_op (EQ_EXPR, temp,
8029 integer_zero_node),
8030 if_stmt);
8031 then_clause = begin_compound_stmt (/*has_no_scope=*/0);
8033 /* Do the initialization itself. */
8034 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
8035 || (init && TREE_CODE (init) == TREE_LIST))
8036 assignment = build_aggr_init (decl, init, 0);
8037 else if (init)
8038 /* The initialization we're doing here is just a bitwise
8039 copy. */
8040 assignment = build (INIT_EXPR, TREE_TYPE (decl), decl, init);
8041 else
8042 assignment = NULL_TREE;
8044 /* Once the assignment is complete, set TEMP to 1. Since the
8045 construction of the static object is complete at this point,
8046 we want to make sure TEMP is set to 1 even if a temporary
8047 constructed during the initialization throws an exception
8048 when it is destroyed. So, we combine the initialization and
8049 the assignment to TEMP into a single expression, ensuring
8050 that when we call finish_expr_stmt the cleanups will not be
8051 run until after TEMP is set to 1. */
8052 temp_init = build_modify_expr (temp, NOP_EXPR, integer_one_node);
8053 if (assignment)
8055 assignment = tree_cons (NULL_TREE, assignment,
8056 build_tree_list (NULL_TREE,
8057 temp_init));
8058 assignment = build_compound_expr (assignment);
8060 else
8061 assignment = temp_init;
8062 finish_expr_stmt (assignment);
8064 /* Use atexit to register a function for destroying this static
8065 variable. */
8066 if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
8067 destroy_local_static (decl);
8069 finish_compound_stmt (/*has_no_scope=*/0, then_clause);
8070 finish_then_clause (if_stmt);
8071 finish_if_stmt ();
8073 /* Resume old (possibly temporary) allocation. */
8074 pop_obstacks ();
8076 else
8078 /* This code takes into account memory allocation policy of
8079 `start_decl'. Namely, if TYPE_NEEDS_CONSTRUCTING does not
8080 hold for this object, then we must make permanent the storage
8081 currently in the temporary obstack. */
8082 if (!TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
8083 preserve_initializer ();
8084 static_aggregates = tree_cons (init, decl, static_aggregates);
8088 /* Finish the declaration of a catch-parameter. */
8090 tree
8091 start_handler_parms (declspecs, declarator)
8092 tree declspecs;
8093 tree declarator;
8095 tree decl;
8096 if (declspecs)
8098 decl = grokdeclarator (declarator, declspecs, CATCHPARM,
8099 1, NULL_TREE);
8100 if (decl == NULL_TREE)
8101 error ("invalid catch parameter");
8103 else
8104 decl = NULL_TREE;
8106 return decl;
8110 /* Make TYPE a complete type based on INITIAL_VALUE.
8111 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8112 2 if there was no information (in which case assume 0 if DO_DEFAULT). */
8115 complete_array_type (type, initial_value, do_default)
8116 tree type, initial_value;
8117 int do_default;
8119 register tree maxindex = NULL_TREE;
8120 int value = 0;
8122 /* Allocate on the same obstack as TYPE. */
8123 push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8125 if (initial_value)
8127 /* Note MAXINDEX is really the maximum index,
8128 one less than the size. */
8129 if (TREE_CODE (initial_value) == STRING_CST)
8131 int eltsize
8132 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8133 maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8134 / eltsize) - 1, 0);
8136 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8138 tree elts = CONSTRUCTOR_ELTS (initial_value);
8139 maxindex = size_binop (MINUS_EXPR, integer_zero_node, size_one_node);
8140 for (; elts; elts = TREE_CHAIN (elts))
8142 if (TREE_PURPOSE (elts))
8143 maxindex = TREE_PURPOSE (elts);
8144 else
8145 maxindex = size_binop (PLUS_EXPR, maxindex, size_one_node);
8147 maxindex = copy_node (maxindex);
8149 else
8151 /* Make an error message unless that happened already. */
8152 if (initial_value != error_mark_node)
8153 value = 1;
8154 else
8155 initial_value = NULL_TREE;
8157 /* Prevent further error messages. */
8158 maxindex = build_int_2 (0, 0);
8162 if (!maxindex)
8164 if (do_default)
8165 maxindex = build_int_2 (0, 0);
8166 value = 2;
8169 if (maxindex)
8171 tree itype;
8172 tree domain;
8174 domain = build_index_type (maxindex);
8175 TYPE_DOMAIN (type) = domain;
8177 if (! TREE_TYPE (maxindex))
8178 TREE_TYPE (maxindex) = domain;
8179 if (initial_value)
8180 itype = TREE_TYPE (initial_value);
8181 else
8182 itype = NULL;
8183 if (itype && !TYPE_DOMAIN (itype))
8184 TYPE_DOMAIN (itype) = domain;
8185 /* The type of the main variant should never be used for arrays
8186 of different sizes. It should only ever be completed with the
8187 size of the array. */
8188 if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
8189 TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
8192 pop_obstacks();
8194 /* Lay out the type now that we can get the real answer. */
8196 layout_type (type);
8198 return value;
8201 /* Return zero if something is declared to be a member of type
8202 CTYPE when in the context of CUR_TYPE. STRING is the error
8203 message to print in that case. Otherwise, quietly return 1. */
8205 static int
8206 member_function_or_else (ctype, cur_type, string)
8207 tree ctype, cur_type;
8208 const char *string;
8210 if (ctype && ctype != cur_type)
8212 error (string, TYPE_NAME_STRING (ctype));
8213 return 0;
8215 return 1;
8218 /* Subroutine of `grokdeclarator'. */
8220 /* Generate errors possibly applicable for a given set of specifiers.
8221 This is for ARM $7.1.2. */
8223 static void
8224 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8225 tree object;
8226 const char *type;
8227 int virtualp, quals, friendp, raises, inlinep;
8229 if (virtualp)
8230 cp_error ("`%D' declared as a `virtual' %s", object, type);
8231 if (inlinep)
8232 cp_error ("`%D' declared as an `inline' %s", object, type);
8233 if (quals)
8234 cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
8235 object, type);
8236 if (friendp)
8237 cp_error_at ("`%D' declared as a friend", object);
8238 if (raises)
8239 cp_error_at ("`%D' declared with an exception specification", object);
8242 /* CTYPE is class type, or null if non-class.
8243 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8244 or METHOD_TYPE.
8245 DECLARATOR is the function's name.
8246 VIRTUALP is truthvalue of whether the function is virtual or not.
8247 FLAGS are to be passed through to `grokclassfn'.
8248 QUALS are qualifiers indicating whether the function is `const'
8249 or `volatile'.
8250 RAISES is a list of exceptions that this function can raise.
8251 CHECK is 1 if we must find this method in CTYPE, 0 if we should
8252 not look, and -1 if we should not call `grokclassfn' at all.
8254 Returns `NULL_TREE' if something goes wrong, after issuing
8255 applicable error messages. */
8257 static tree
8258 grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
8259 raises, check, friendp, publicp, inlinep, funcdef_flag,
8260 template_count, in_namespace)
8261 tree ctype, type;
8262 tree declarator;
8263 tree orig_declarator;
8264 int virtualp;
8265 enum overload_flags flags;
8266 tree quals, raises;
8267 int check, friendp, publicp, inlinep, funcdef_flag, template_count;
8268 tree in_namespace;
8270 tree cname, decl;
8271 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8272 int has_default_arg = 0;
8273 tree t;
8275 if (ctype)
8276 cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8277 ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8278 else
8279 cname = NULL_TREE;
8281 if (raises)
8283 type = build_exception_variant (type, raises);
8286 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8287 /* Propagate volatile out from type to decl. */
8288 if (TYPE_VOLATILE (type))
8289 TREE_THIS_VOLATILE (decl) = 1;
8291 /* If this decl has namespace scope, set that up. */
8292 if (in_namespace)
8293 set_decl_namespace (decl, in_namespace, friendp);
8294 else if (publicp && ! ctype)
8295 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8297 /* `main' and builtins have implicit 'C' linkage. */
8298 if ((MAIN_NAME_P (declarator)
8299 || (IDENTIFIER_LENGTH (declarator) > 10
8300 && IDENTIFIER_POINTER (declarator)[0] == '_'
8301 && IDENTIFIER_POINTER (declarator)[1] == '_'
8302 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8303 && current_lang_name == lang_name_cplusplus
8304 && ctype == NULL_TREE
8305 /* NULL_TREE means global namespace. */
8306 && DECL_CONTEXT (decl) == NULL_TREE)
8307 DECL_LANGUAGE (decl) = lang_c;
8309 /* Should probably propagate const out from type to decl I bet (mrs). */
8310 if (staticp)
8312 DECL_STATIC_FUNCTION_P (decl) = 1;
8313 DECL_CONTEXT (decl) = ctype;
8316 if (ctype)
8317 DECL_CLASS_CONTEXT (decl) = ctype;
8319 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8321 if (processing_template_decl)
8322 error ("cannot declare `main' to be a template");
8323 if (inlinep)
8324 error ("cannot declare `main' to be inline");
8325 else if (! publicp)
8326 error ("cannot declare `main' to be static");
8327 inlinep = 0;
8328 publicp = 1;
8331 /* Members of anonymous types and local classes have no linkage; make
8332 them internal. */
8333 if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
8334 || hack_decl_function_context (TYPE_MAIN_DECL (ctype))))
8335 publicp = 0;
8337 if (publicp)
8339 /* [basic.link]: A name with no linkage (notably, the name of a class
8340 or enumeration declared in a local scope) shall not be used to
8341 declare an entity with linkage.
8343 Only check this for public decls for now. */
8344 t = no_linkage_check (TREE_TYPE (decl));
8345 if (t)
8347 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8349 if (DECL_LANGUAGE (decl) == lang_c)
8350 /* Allow this; it's pretty common in C. */;
8351 else
8352 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8353 decl);
8355 else
8356 cp_pedwarn ("non-local function `%#D' uses local type `%T'",
8357 decl, t);
8361 TREE_PUBLIC (decl) = publicp;
8362 if (! publicp)
8364 DECL_INTERFACE_KNOWN (decl) = 1;
8365 DECL_NOT_REALLY_EXTERN (decl) = 1;
8368 if (inlinep)
8369 DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8371 DECL_EXTERNAL (decl) = 1;
8372 if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8374 cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8375 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8376 quals = NULL_TREE;
8379 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8380 grok_op_properties (decl, virtualp, check < 0);
8382 if (ctype && hack_decl_function_context (decl))
8383 DECL_NO_STATIC_CHAIN (decl) = 1;
8385 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8386 if (TREE_PURPOSE (t)
8387 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8389 has_default_arg = 1;
8390 break;
8393 if (friendp
8394 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8396 if (funcdef_flag)
8397 cp_error
8398 ("defining explicit specialization `%D' in friend declaration",
8399 orig_declarator);
8400 else
8402 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8404 /* Something like `template <class T> friend void f<T>()'. */
8405 cp_error ("template-id `%D' in declaration of primary template",
8406 orig_declarator);
8407 return NULL_TREE;
8411 /* A friend declaration of the form friend void f<>(). Record
8412 the information in the TEMPLATE_ID_EXPR. */
8413 SET_DECL_IMPLICIT_INSTANTIATION (decl);
8414 DECL_TEMPLATE_INFO (decl)
8415 = tree_cons (TREE_OPERAND (orig_declarator, 0),
8416 TREE_OPERAND (orig_declarator, 1),
8417 NULL_TREE);
8419 if (has_default_arg)
8421 cp_error ("default arguments are not allowed in declaration of friend template specialization `%D'",
8422 decl);
8423 return NULL_TREE;
8426 if (inlinep)
8428 cp_error ("`inline' is not allowed in declaration of friend template specialization `%D'",
8429 decl);
8430 return NULL_TREE;
8435 if (has_default_arg)
8436 add_defarg_fn (decl);
8438 /* Plain overloading: will not be grok'd by grokclassfn. */
8439 if (! ctype && ! processing_template_decl
8440 && DECL_LANGUAGE (decl) != lang_c
8441 && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
8442 set_mangled_name_for_decl (decl);
8444 if (funcdef_flag)
8445 /* Make the init_value nonzero so pushdecl knows this is not
8446 tentative. error_mark_node is replaced later with the BLOCK. */
8447 DECL_INITIAL (decl) = error_mark_node;
8449 /* Caller will do the rest of this. */
8450 if (check < 0)
8451 return decl;
8453 if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
8455 tree tmp;
8456 /* Just handle constructors here. We could do this
8457 inside the following if stmt, but I think
8458 that the code is more legible by breaking this
8459 case out. See comments below for what each of
8460 the following calls is supposed to do. */
8461 DECL_CONSTRUCTOR_P (decl) = 1;
8463 grokclassfn (ctype, decl, flags, quals);
8465 decl = check_explicit_specialization (orig_declarator, decl,
8466 template_count,
8467 2 * (funcdef_flag != 0) +
8468 4 * (friendp != 0));
8469 if (decl == error_mark_node)
8470 return NULL_TREE;
8472 if ((! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8473 && check)
8475 tmp = check_classfn (ctype, decl);
8477 if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8478 tmp = DECL_TEMPLATE_RESULT(tmp);
8480 if (tmp && DECL_ARTIFICIAL (tmp))
8481 cp_error ("definition of implicitly-declared `%D'", tmp);
8482 if (tmp && duplicate_decls (decl, tmp))
8483 return tmp;
8485 if (! grok_ctor_properties (ctype, decl))
8486 return NULL_TREE;
8488 else
8490 tree tmp;
8492 /* Function gets the ugly name, field gets the nice one.
8493 This call may change the type of the function (because
8494 of default parameters)! */
8495 if (ctype != NULL_TREE)
8496 grokclassfn (ctype, decl, flags, quals);
8498 decl = check_explicit_specialization (orig_declarator, decl,
8499 template_count,
8500 2 * (funcdef_flag != 0) +
8501 4 * (friendp != 0));
8502 if (decl == error_mark_node)
8503 return NULL_TREE;
8505 if (ctype != NULL_TREE
8506 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8507 && check)
8509 tmp = check_classfn (ctype, decl);
8511 if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8512 tmp = DECL_TEMPLATE_RESULT (tmp);
8514 if (tmp && DECL_STATIC_FUNCTION_P (tmp)
8515 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8517 /* Remove the `this' parm added by grokclassfn.
8518 XXX Isn't this done in start_function, too? */
8519 revert_static_member_fn (&decl, NULL, NULL);
8520 last_function_parms = TREE_CHAIN (last_function_parms);
8522 if (tmp && DECL_ARTIFICIAL (tmp))
8523 cp_error ("definition of implicitly-declared `%D'", tmp);
8524 if (tmp)
8526 /* Attempt to merge the declarations. This can fail, in
8527 the case of some illegal specialization declarations. */
8528 if (!duplicate_decls (decl, tmp))
8529 cp_error ("no `%#D' member function declared in class `%T'",
8530 decl, ctype);
8531 return tmp;
8535 if (ctype == NULL_TREE || check)
8536 return decl;
8538 if (virtualp)
8540 DECL_VIRTUAL_P (decl) = 1;
8541 if (DECL_VINDEX (decl) == NULL_TREE)
8542 DECL_VINDEX (decl) = error_mark_node;
8543 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
8546 return decl;
8549 static tree
8550 grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
8551 tree type;
8552 tree declarator;
8553 RID_BIT_TYPE *specbits_in;
8554 int initialized;
8555 int constp;
8556 tree in_namespace;
8558 tree decl;
8559 RID_BIT_TYPE specbits;
8561 specbits = *specbits_in;
8563 if (TREE_CODE (type) == OFFSET_TYPE)
8565 /* If you declare a static member so that it
8566 can be initialized, the code will reach here. */
8567 tree basetype = TYPE_OFFSET_BASETYPE (type);
8568 type = TREE_TYPE (type);
8569 decl = build_lang_decl (VAR_DECL, declarator, type);
8570 DECL_CONTEXT (decl) = basetype;
8571 DECL_CLASS_CONTEXT (decl) = basetype;
8572 DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
8574 else
8576 tree context;
8578 if (in_namespace)
8579 context = in_namespace;
8580 else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
8581 context = current_namespace;
8582 else
8583 context = NULL_TREE;
8585 if (processing_template_decl)
8587 /* If we're in a template, we need DECL_LANG_SPECIFIC so that
8588 we can call push_template_decl. */
8589 push_permanent_obstack ();
8590 decl = build_lang_decl (VAR_DECL, declarator, type);
8591 pop_obstacks ();
8593 else
8594 decl = build_decl (VAR_DECL, declarator, type);
8596 if (context)
8597 set_decl_namespace (decl, context, 0);
8599 context = DECL_CONTEXT (decl);
8600 if (declarator && context && current_lang_name != lang_name_c)
8601 DECL_ASSEMBLER_NAME (decl) = build_static_name (context, declarator);
8604 if (in_namespace)
8605 set_decl_namespace (decl, in_namespace, 0);
8607 if (RIDBIT_SETP (RID_EXTERN, specbits))
8609 DECL_THIS_EXTERN (decl) = 1;
8610 DECL_EXTERNAL (decl) = !initialized;
8613 /* In class context, static means one per class,
8614 public access, and static storage. */
8615 if (DECL_CLASS_SCOPE_P (decl))
8617 TREE_PUBLIC (decl) = 1;
8618 TREE_STATIC (decl) = 1;
8619 DECL_EXTERNAL (decl) = 0;
8621 /* At top level, either `static' or no s.c. makes a definition
8622 (perhaps tentative), and absence of `static' makes it public. */
8623 else if (toplevel_bindings_p ())
8625 TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
8626 && (DECL_THIS_EXTERN (decl) || ! constp));
8627 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8629 /* Not at top level, only `static' makes a static definition. */
8630 else
8632 TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
8633 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8636 if (TREE_PUBLIC (decl))
8638 /* [basic.link]: A name with no linkage (notably, the name of a class
8639 or enumeration declared in a local scope) shall not be used to
8640 declare an entity with linkage.
8642 Only check this for public decls for now. */
8643 tree t = no_linkage_check (TREE_TYPE (decl));
8644 if (t)
8646 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8647 /* Ignore for now; `enum { foo } e' is pretty common. */;
8648 else
8649 cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
8650 decl, t);
8654 return decl;
8657 /* Create and return a canonical pointer to member function type, for
8658 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
8660 tree
8661 build_ptrmemfunc_type (type)
8662 tree type;
8664 tree fields[4];
8665 tree t;
8666 tree u;
8667 tree unqualified_variant = NULL_TREE;
8669 /* If a canonical type already exists for this type, use it. We use
8670 this method instead of type_hash_canon, because it only does a
8671 simple equality check on the list of field members. */
8673 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
8674 return t;
8676 /* Make sure that we always have the unqualified pointer-to-member
8677 type first. */
8678 if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
8679 unqualified_variant
8680 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
8682 push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8684 u = make_lang_type (UNION_TYPE);
8685 SET_IS_AGGR_TYPE (u, 0);
8686 fields[0] = build_lang_decl (FIELD_DECL, pfn_identifier, type);
8687 fields[1] = build_lang_decl (FIELD_DECL, delta2_identifier,
8688 delta_type_node);
8689 finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
8690 TYPE_NAME (u) = NULL_TREE;
8692 t = make_lang_type (RECORD_TYPE);
8694 /* Let the front-end know this is a pointer to member function... */
8695 TYPE_PTRMEMFUNC_FLAG (t) = 1;
8696 /* ... and not really an aggregate. */
8697 SET_IS_AGGR_TYPE (t, 0);
8699 fields[0] = build_lang_decl (FIELD_DECL, delta_identifier,
8700 delta_type_node);
8701 fields[1] = build_lang_decl (FIELD_DECL, index_identifier,
8702 delta_type_node);
8703 fields[2] = build_lang_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
8704 finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
8706 pop_obstacks ();
8708 /* Zap out the name so that the back-end will give us the debugging
8709 information for this anonymous RECORD_TYPE. */
8710 TYPE_NAME (t) = NULL_TREE;
8712 /* If this is not the unqualified form of this pointer-to-member
8713 type, set the TYPE_MAIN_VARIANT for this type to be the
8714 unqualified type. Since they are actually RECORD_TYPEs that are
8715 not variants of each other, we must do this manually. */
8716 if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
8718 t = build_qualified_type (t, CP_TYPE_QUALS (type));
8719 TYPE_MAIN_VARIANT (t) = unqualified_variant;
8720 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
8721 TYPE_NEXT_VARIANT (unqualified_variant) = t;
8724 /* Cache this pointer-to-member type so that we can find it again
8725 later. */
8726 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
8728 /* Seems to be wanted. */
8729 CLASSTYPE_GOT_SEMICOLON (t) = 1;
8731 return t;
8734 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
8735 Check to see that the definition is valid. Issue appropriate error
8736 messages. Return 1 if the definition is particularly bad, or 0
8737 otherwise. */
8740 check_static_variable_definition (decl, type)
8741 tree decl;
8742 tree type;
8744 /* Motion 10 at San Diego: If a static const integral data member is
8745 initialized with an integral constant expression, the initializer
8746 may appear either in the declaration (within the class), or in
8747 the definition, but not both. If it appears in the class, the
8748 member is a member constant. The file-scope definition is always
8749 required. */
8750 if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
8752 cp_error ("in-class initialization of static data member of non-integral type `%T'",
8753 type);
8754 /* If we just return the declaration, crashes will sometimes
8755 occur. We therefore return void_type_node, as if this was a
8756 friend declaration, to cause callers to completely ignore
8757 this declaration. */
8758 return 1;
8760 else if (!CP_TYPE_CONST_P (type))
8761 cp_error ("ANSI C++ forbids in-class initialization of non-const static member `%D'",
8762 decl);
8763 else if (pedantic && !INTEGRAL_TYPE_P (type))
8764 cp_pedwarn ("ANSI C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
8766 return 0;
8769 /* Given declspecs and a declarator,
8770 determine the name and type of the object declared
8771 and construct a ..._DECL node for it.
8772 (In one case we can return a ..._TYPE node instead.
8773 For invalid input we sometimes return 0.)
8775 DECLSPECS is a chain of tree_list nodes whose value fields
8776 are the storage classes and type specifiers.
8778 DECL_CONTEXT says which syntactic context this declaration is in:
8779 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8780 FUNCDEF for a function definition. Like NORMAL but a few different
8781 error messages in each case. Return value may be zero meaning
8782 this definition is too screwy to try to parse.
8783 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
8784 handle member functions (which have FIELD context).
8785 Return value may be zero meaning this definition is too screwy to
8786 try to parse.
8787 PARM for a parameter declaration (either within a function prototype
8788 or before a function body). Make a PARM_DECL, or return void_type_node.
8789 CATCHPARM for a parameter declaration before a catch clause.
8790 TYPENAME if for a typename (in a cast or sizeof).
8791 Don't make a DECL node; just return the ..._TYPE node.
8792 FIELD for a struct or union field; make a FIELD_DECL.
8793 BITFIELD for a field with specified width.
8794 INITIALIZED is 1 if the decl has an initializer.
8796 ATTRLIST is a TREE_LIST node with prefix attributes in TREE_VALUE and
8797 normal attributes in TREE_PURPOSE, or NULL_TREE.
8799 In the TYPENAME case, DECLARATOR is really an absolute declarator.
8800 It may also be so in the PARM case, for a prototype where the
8801 argument type is specified but not the name.
8803 This function is where the complicated C meanings of `static'
8804 and `extern' are interpreted.
8806 For C++, if there is any monkey business to do, the function which
8807 calls this one must do it, i.e., prepending instance variables,
8808 renaming overloaded function names, etc.
8810 Note that for this C++, it is an error to define a method within a class
8811 which does not belong to that class.
8813 Except in the case where SCOPE_REFs are implicitly known (such as
8814 methods within a class being redundantly qualified),
8815 declarations which involve SCOPE_REFs are returned as SCOPE_REFs
8816 (class_name::decl_name). The caller must also deal with this.
8818 If a constructor or destructor is seen, and the context is FIELD,
8819 then the type gains the attribute TREE_HAS_x. If such a declaration
8820 is erroneous, NULL_TREE is returned.
8822 QUALS is used only for FUNCDEF and MEMFUNCDEF cases. For a member
8823 function, these are the qualifiers to give to the `this' pointer.
8825 May return void_type_node if the declarator turned out to be a friend.
8826 See grokfield for details. */
8828 enum return_types { return_normal, return_ctor, return_dtor, return_conversion };
8830 tree
8831 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
8832 tree declspecs;
8833 tree declarator;
8834 enum decl_context decl_context;
8835 int initialized;
8836 tree attrlist;
8838 RID_BIT_TYPE specbits;
8839 int nclasses = 0;
8840 tree spec;
8841 tree type = NULL_TREE;
8842 int longlong = 0;
8843 int constp;
8844 int restrictp;
8845 int volatilep;
8846 int type_quals;
8847 int virtualp, explicitp, friendp, inlinep, staticp;
8848 int explicit_int = 0;
8849 int explicit_char = 0;
8850 int defaulted_int = 0;
8851 tree typedef_decl = NULL_TREE;
8852 const char *name;
8853 tree typedef_type = NULL_TREE;
8854 int funcdef_flag = 0;
8855 enum tree_code innermost_code = ERROR_MARK;
8856 int bitfield = 0;
8857 #if 0
8858 /* See the code below that used this. */
8859 tree decl_machine_attr = NULL_TREE;
8860 #endif
8861 /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
8862 All FIELD_DECLs we build here have `init' put into their DECL_INITIAL. */
8863 tree init = NULL_TREE;
8865 /* Keep track of what sort of function is being processed
8866 so that we can warn about default return values, or explicit
8867 return values which do not match prescribed defaults. */
8868 enum return_types return_type = return_normal;
8870 tree dname = NULL_TREE;
8871 tree ctype = current_class_type;
8872 tree ctor_return_type = NULL_TREE;
8873 enum overload_flags flags = NO_SPECIAL;
8874 tree quals = NULL_TREE;
8875 tree raises = NULL_TREE;
8876 int template_count = 0;
8877 tree in_namespace = NULL_TREE;
8878 tree inner_attrs;
8879 int ignore_attrs;
8881 RIDBIT_RESET_ALL (specbits);
8882 if (decl_context == FUNCDEF)
8883 funcdef_flag = 1, decl_context = NORMAL;
8884 else if (decl_context == MEMFUNCDEF)
8885 funcdef_flag = -1, decl_context = FIELD;
8886 else if (decl_context == BITFIELD)
8887 bitfield = 1, decl_context = FIELD;
8889 /* Look inside a declarator for the name being declared
8890 and get it as a string, for an error message. */
8892 tree *next = &declarator;
8893 register tree decl;
8894 name = NULL;
8896 while (next && *next)
8898 decl = *next;
8899 switch (TREE_CODE (decl))
8901 case TREE_LIST:
8902 /* For attributes. */
8903 next = &TREE_VALUE (decl);
8904 break;
8906 case COND_EXPR:
8907 ctype = NULL_TREE;
8908 next = &TREE_OPERAND (decl, 0);
8909 break;
8911 case BIT_NOT_EXPR: /* For C++ destructors! */
8913 tree name = TREE_OPERAND (decl, 0);
8914 tree rename = NULL_TREE;
8916 my_friendly_assert (flags == NO_SPECIAL, 152);
8917 flags = DTOR_FLAG;
8918 return_type = return_dtor;
8919 if (TREE_CODE (name) == TYPE_DECL)
8920 TREE_OPERAND (decl, 0) = name = constructor_name (name);
8921 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
8922 if (ctype == NULL_TREE)
8924 if (current_class_type == NULL_TREE)
8926 error ("destructors must be member functions");
8927 flags = NO_SPECIAL;
8929 else
8931 tree t = constructor_name (current_class_name);
8932 if (t != name)
8933 rename = t;
8936 else
8938 tree t = constructor_name (ctype);
8939 if (t != name)
8940 rename = t;
8943 if (rename)
8945 cp_error ("destructor `%T' must match class name `%T'",
8946 name, rename);
8947 TREE_OPERAND (decl, 0) = rename;
8949 next = &name;
8951 break;
8953 case ADDR_EXPR: /* C++ reference declaration */
8954 /* Fall through. */
8955 case ARRAY_REF:
8956 case INDIRECT_REF:
8957 ctype = NULL_TREE;
8958 innermost_code = TREE_CODE (decl);
8959 next = &TREE_OPERAND (decl, 0);
8960 break;
8962 case CALL_EXPR:
8963 if (parmlist_is_exprlist (CALL_DECLARATOR_PARMS (decl)))
8965 /* This is actually a variable declaration using
8966 constructor syntax. We need to call start_decl and
8967 cp_finish_decl so we can get the variable
8968 initialized... */
8970 tree attributes, prefix_attributes;
8972 *next = TREE_OPERAND (decl, 0);
8973 init = CALL_DECLARATOR_PARMS (decl);
8975 if (attrlist)
8977 attributes = TREE_PURPOSE (attrlist);
8978 prefix_attributes = TREE_VALUE (attrlist);
8980 else
8982 attributes = NULL_TREE;
8983 prefix_attributes = NULL_TREE;
8986 decl = start_decl (declarator, declspecs, 1,
8987 attributes, prefix_attributes);
8988 if (decl)
8990 /* Look for __unused__ attribute */
8991 if (TREE_USED (TREE_TYPE (decl)))
8992 TREE_USED (decl) = 1;
8993 finish_decl (decl, init, NULL_TREE);
8995 else
8996 cp_error ("invalid declarator");
8997 return 0;
8999 innermost_code = TREE_CODE (decl);
9000 if (decl_context == FIELD && ctype == NULL_TREE)
9001 ctype = current_class_type;
9002 if (ctype
9003 && TREE_OPERAND (decl, 0)
9004 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
9005 && ((DECL_NAME (TREE_OPERAND (decl, 0))
9006 == constructor_name_full (ctype))
9007 || (DECL_NAME (TREE_OPERAND (decl, 0))
9008 == constructor_name (ctype)))))
9009 TREE_OPERAND (decl, 0) = constructor_name (ctype);
9010 next = &TREE_OPERAND (decl, 0);
9011 decl = *next;
9012 if (ctype != NULL_TREE
9013 && decl != NULL_TREE && flags != DTOR_FLAG
9014 && decl == constructor_name (ctype))
9016 return_type = return_ctor;
9017 ctor_return_type = ctype;
9019 ctype = NULL_TREE;
9020 break;
9022 case TEMPLATE_ID_EXPR:
9024 tree fns = TREE_OPERAND (decl, 0);
9026 if (TREE_CODE (fns) == LOOKUP_EXPR)
9027 fns = TREE_OPERAND (fns, 0);
9029 dname = fns;
9030 if (TREE_CODE (dname) == COMPONENT_REF)
9031 dname = TREE_OPERAND (dname, 1);
9032 if (TREE_CODE (dname) != IDENTIFIER_NODE)
9034 my_friendly_assert (is_overloaded_fn (dname),
9035 19990331);
9036 dname = DECL_NAME (get_first_fn (dname));
9039 /* Fall through. */
9041 case IDENTIFIER_NODE:
9042 if (TREE_CODE (decl) == IDENTIFIER_NODE)
9043 dname = decl;
9045 next = 0;
9047 if (is_rid (dname))
9049 cp_error ("declarator-id missing; using reserved word `%D'",
9050 dname);
9051 name = IDENTIFIER_POINTER (dname);
9053 if (! IDENTIFIER_OPNAME_P (dname)
9054 /* GNU/Linux headers use '__op'. Arrgh. */
9055 || (IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname)))
9056 name = IDENTIFIER_POINTER (dname);
9057 else
9059 if (IDENTIFIER_TYPENAME_P (dname))
9061 my_friendly_assert (flags == NO_SPECIAL, 154);
9062 flags = TYPENAME_FLAG;
9063 ctor_return_type = TREE_TYPE (dname);
9064 return_type = return_conversion;
9066 name = operator_name_string (dname);
9068 break;
9070 /* C++ extension */
9071 case SCOPE_REF:
9073 /* Perform error checking, and decide on a ctype. */
9074 tree cname = TREE_OPERAND (decl, 0);
9075 if (cname == NULL_TREE)
9076 ctype = NULL_TREE;
9077 else if (TREE_CODE (cname) == NAMESPACE_DECL)
9079 ctype = NULL_TREE;
9080 in_namespace = TREE_OPERAND (decl, 0);
9081 TREE_OPERAND (decl, 0) = NULL_TREE;
9083 else if (! is_aggr_type (cname, 1))
9084 TREE_OPERAND (decl, 0) = NULL_TREE;
9085 /* Must test TREE_OPERAND (decl, 1), in case user gives
9086 us `typedef (class::memfunc)(int); memfunc *memfuncptr;' */
9087 else if (TREE_OPERAND (decl, 1)
9088 && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9089 ctype = cname;
9090 else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
9091 || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
9093 cp_error ("`%T::%D' is not a valid declarator", cname,
9094 TREE_OPERAND (decl, 1));
9095 cp_error (" perhaps you want `typename %T::%D' to make it a type",
9096 cname, TREE_OPERAND (decl, 1));
9097 return void_type_node;
9099 else if (ctype == NULL_TREE)
9100 ctype = cname;
9101 else if (TREE_COMPLEXITY (decl) == current_class_depth)
9102 TREE_OPERAND (decl, 0) = ctype;
9103 else
9105 if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
9107 cp_error ("type `%T' is not derived from type `%T'",
9108 cname, ctype);
9109 TREE_OPERAND (decl, 0) = NULL_TREE;
9111 else
9112 ctype = cname;
9115 if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
9116 && ((DECL_NAME (TREE_OPERAND (decl, 1))
9117 == constructor_name_full (ctype))
9118 || (DECL_NAME (TREE_OPERAND (decl, 1))
9119 == constructor_name (ctype))))
9120 TREE_OPERAND (decl, 1) = constructor_name (ctype);
9121 next = &TREE_OPERAND (decl, 1);
9122 decl = *next;
9123 if (ctype)
9125 if (TREE_CODE (decl) == IDENTIFIER_NODE
9126 && constructor_name (ctype) == decl)
9128 return_type = return_ctor;
9129 ctor_return_type = ctype;
9131 else if (TREE_CODE (decl) == BIT_NOT_EXPR
9132 && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9133 && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9134 || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9136 return_type = return_dtor;
9137 ctor_return_type = ctype;
9138 flags = DTOR_FLAG;
9139 TREE_OPERAND (decl, 0) = constructor_name (ctype);
9140 next = &TREE_OPERAND (decl, 0);
9144 break;
9146 case ERROR_MARK:
9147 next = 0;
9148 break;
9150 case TYPE_DECL:
9151 /* Parse error puts this typespec where
9152 a declarator should go. */
9153 cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
9154 if (TREE_TYPE (decl) == current_class_type)
9155 cp_error (" perhaps you want `%T' for a constructor",
9156 current_class_name);
9157 dname = DECL_NAME (decl);
9158 name = IDENTIFIER_POINTER (dname);
9160 /* Avoid giving two errors for this. */
9161 IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9163 declspecs = temp_tree_cons (NULL_TREE, integer_type_node,
9164 declspecs);
9165 *next = dname;
9166 next = 0;
9167 break;
9169 default:
9170 cp_compiler_error ("`%D' as declarator", decl);
9171 return 0; /* We used to do a 155 abort here. */
9176 /* A function definition's declarator must have the form of
9177 a function declarator. */
9179 if (funcdef_flag && innermost_code != CALL_EXPR)
9180 return 0;
9182 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9183 && innermost_code != CALL_EXPR
9184 && ! (ctype && declspecs == NULL_TREE))
9186 cp_error ("declaration of `%D' as non-function", dname);
9187 return void_type_node;
9190 /* Anything declared one level down from the top level
9191 must be one of the parameters of a function
9192 (because the body is at least two levels down). */
9194 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9195 by not allowing C++ class definitions to specify their parameters
9196 with xdecls (must be spec.d in the parmlist).
9198 Since we now wait to push a class scope until we are sure that
9199 we are in a legitimate method context, we must set oldcname
9200 explicitly (since current_class_name is not yet alive).
9202 We also want to avoid calling this a PARM if it is in a namespace. */
9204 if (decl_context == NORMAL && !toplevel_bindings_p ())
9206 struct binding_level *b = current_binding_level;
9207 current_binding_level = b->level_chain;
9208 if (current_binding_level != 0 && toplevel_bindings_p ())
9209 decl_context = PARM;
9210 current_binding_level = b;
9213 if (name == NULL)
9214 name = decl_context == PARM ? "parameter" : "type name";
9216 /* Look through the decl specs and record which ones appear.
9217 Some typespecs are defined as built-in typenames.
9218 Others, the ones that are modifiers of other types,
9219 are represented by bits in SPECBITS: set the bits for
9220 the modifiers that appear. Storage class keywords are also in SPECBITS.
9222 If there is a typedef name or a type, store the type in TYPE.
9223 This includes builtin typedefs such as `int'.
9225 Set EXPLICIT_INT if the type is `int' or `char' and did not
9226 come from a user typedef.
9228 Set LONGLONG if `long' is mentioned twice.
9230 For C++, constructors and destructors have their own fast treatment. */
9232 for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9234 register int i;
9235 register tree id;
9237 /* Certain parse errors slip through. For example,
9238 `int class;' is not caught by the parser. Try
9239 weakly to recover here. */
9240 if (TREE_CODE (spec) != TREE_LIST)
9241 return 0;
9243 id = TREE_VALUE (spec);
9245 if (TREE_CODE (id) == IDENTIFIER_NODE)
9247 if (id == ridpointers[(int) RID_INT]
9248 || id == ridpointers[(int) RID_CHAR]
9249 || id == ridpointers[(int) RID_BOOL]
9250 || id == ridpointers[(int) RID_WCHAR])
9252 if (type)
9254 if (id == ridpointers[(int) RID_BOOL])
9255 error ("`bool' is now a keyword");
9256 else
9257 cp_error ("extraneous `%T' ignored", id);
9259 else
9261 if (id == ridpointers[(int) RID_INT])
9262 explicit_int = 1;
9263 else if (id == ridpointers[(int) RID_CHAR])
9264 explicit_char = 1;
9265 type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
9267 goto found;
9269 /* C++ aggregate types. */
9270 if (IDENTIFIER_HAS_TYPE_VALUE (id))
9272 if (type)
9273 cp_error ("multiple declarations `%T' and `%T'", type, id);
9274 else
9275 type = IDENTIFIER_TYPE_VALUE (id);
9276 goto found;
9279 for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
9281 if (ridpointers[i] == id)
9283 if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
9285 if (pedantic && ! in_system_header && warn_long_long)
9286 pedwarn ("ANSI C++ does not support `long long'");
9287 if (longlong)
9288 error ("`long long long' is too long for GCC");
9289 else
9290 longlong = 1;
9292 else if (RIDBIT_SETP (i, specbits))
9293 pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
9294 RIDBIT_SET (i, specbits);
9295 goto found;
9299 /* C++ aggregate types. */
9300 else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
9302 if (type)
9303 cp_error ("multiple declarations `%T' and `%T'", type,
9304 TREE_TYPE (id));
9305 else
9307 type = TREE_TYPE (id);
9308 TREE_VALUE (spec) = type;
9310 goto found;
9312 if (type)
9313 error ("two or more data types in declaration of `%s'", name);
9314 else if (TREE_CODE (id) == IDENTIFIER_NODE)
9316 register tree t = lookup_name (id, 1);
9317 if (!t || TREE_CODE (t) != TYPE_DECL)
9318 error ("`%s' fails to be a typedef or built in type",
9319 IDENTIFIER_POINTER (id));
9320 else
9322 type = TREE_TYPE (t);
9323 #if 0
9324 /* See the code below that used this. */
9325 decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
9326 #endif
9327 typedef_decl = t;
9330 else if (id != error_mark_node)
9331 /* Can't change CLASS nodes into RECORD nodes here! */
9332 type = id;
9334 found: ;
9337 typedef_type = type;
9339 /* No type at all: default to `int', and set DEFAULTED_INT
9340 because it was not a user-defined typedef. */
9342 if (type == NULL_TREE
9343 && (RIDBIT_SETP (RID_SIGNED, specbits)
9344 || RIDBIT_SETP (RID_UNSIGNED, specbits)
9345 || RIDBIT_SETP (RID_LONG, specbits)
9346 || RIDBIT_SETP (RID_SHORT, specbits)))
9348 /* These imply 'int'. */
9349 type = integer_type_node;
9350 defaulted_int = 1;
9353 if (type == NULL_TREE)
9355 explicit_int = -1;
9356 if (return_type == return_dtor)
9357 type = void_type_node;
9358 else if (return_type == return_ctor)
9359 type = build_pointer_type (ctor_return_type);
9360 else if (return_type == return_conversion)
9361 type = ctor_return_type;
9362 else
9364 /* We handle `main' specially here, because 'main () { }' is so
9365 common. With no options, it is allowed. With -Wreturn-type,
9366 it is a warning. It is only an error with -pedantic-errors. */
9367 int is_main = (funcdef_flag
9368 && MAIN_NAME_P (dname)
9369 && ctype == NULL_TREE
9370 && in_namespace == NULL_TREE
9371 && current_namespace == global_namespace);
9373 if (in_system_header || flag_ms_extensions)
9374 /* Allow it, sigh. */;
9375 else if (pedantic || ! is_main)
9376 cp_pedwarn ("ANSI C++ forbids declaration of `%s' with no type",
9377 name);
9378 else if (warn_return_type)
9379 cp_warning ("ANSI C++ forbids declaration of `%s' with no type",
9380 name);
9382 type = integer_type_node;
9385 else if (return_type == return_dtor)
9387 error ("return type specification for destructor invalid");
9388 type = void_type_node;
9390 else if (return_type == return_ctor)
9392 error ("return type specification for constructor invalid");
9393 type = build_pointer_type (ctor_return_type);
9395 else if (return_type == return_conversion)
9397 if (!same_type_p (type, ctor_return_type))
9398 cp_error ("operator `%T' declared to return `%T'",
9399 ctor_return_type, type);
9400 else
9401 cp_pedwarn ("return type specified for `operator %T'",
9402 ctor_return_type);
9404 type = ctor_return_type;
9407 ctype = NULL_TREE;
9409 /* Now process the modifiers that were specified
9410 and check for invalid combinations. */
9412 /* Long double is a special combination. */
9414 if (RIDBIT_SETP (RID_LONG, specbits)
9415 && TYPE_MAIN_VARIANT (type) == double_type_node)
9417 RIDBIT_RESET (RID_LONG, specbits);
9418 type = build_qualified_type (long_double_type_node,
9419 CP_TYPE_QUALS (type));
9422 /* Check all other uses of type modifiers. */
9424 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9425 || RIDBIT_SETP (RID_SIGNED, specbits)
9426 || RIDBIT_SETP (RID_LONG, specbits)
9427 || RIDBIT_SETP (RID_SHORT, specbits))
9429 int ok = 0;
9431 if (TREE_CODE (type) == REAL_TYPE)
9432 error ("short, signed or unsigned invalid for `%s'", name);
9433 else if (TREE_CODE (type) != INTEGER_TYPE)
9434 error ("long, short, signed or unsigned invalid for `%s'", name);
9435 else if (RIDBIT_SETP (RID_LONG, specbits)
9436 && RIDBIT_SETP (RID_SHORT, specbits))
9437 error ("long and short specified together for `%s'", name);
9438 else if ((RIDBIT_SETP (RID_LONG, specbits)
9439 || RIDBIT_SETP (RID_SHORT, specbits))
9440 && explicit_char)
9441 error ("long or short specified with char for `%s'", name);
9442 else if ((RIDBIT_SETP (RID_LONG, specbits)
9443 || RIDBIT_SETP (RID_SHORT, specbits))
9444 && TREE_CODE (type) == REAL_TYPE)
9445 error ("long or short specified with floating type for `%s'", name);
9446 else if (RIDBIT_SETP (RID_SIGNED, specbits)
9447 && RIDBIT_SETP (RID_UNSIGNED, specbits))
9448 error ("signed and unsigned given together for `%s'", name);
9449 else
9451 ok = 1;
9452 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
9454 pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
9455 name);
9456 if (flag_pedantic_errors)
9457 ok = 0;
9461 /* Discard the type modifiers if they are invalid. */
9462 if (! ok)
9464 RIDBIT_RESET (RID_UNSIGNED, specbits);
9465 RIDBIT_RESET (RID_SIGNED, specbits);
9466 RIDBIT_RESET (RID_LONG, specbits);
9467 RIDBIT_RESET (RID_SHORT, specbits);
9468 longlong = 0;
9472 if (RIDBIT_SETP (RID_COMPLEX, specbits)
9473 && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9475 error ("complex invalid for `%s'", name);
9476 RIDBIT_RESET (RID_COMPLEX, specbits);
9479 /* Decide whether an integer type is signed or not.
9480 Optionally treat bitfields as signed by default. */
9481 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9482 /* [class.bit]
9484 It is implementation-defined whether a plain (neither
9485 explicitly signed or unsigned) char, short, int, or long
9486 bit-field is signed or unsigned.
9488 Naturally, we extend this to long long as well. Note that
9489 this does not include wchar_t. */
9490 || (bitfield && !flag_signed_bitfields
9491 && RIDBIT_NOTSETP (RID_SIGNED, specbits)
9492 /* A typedef for plain `int' without `signed' can be
9493 controlled just like plain `int', but a typedef for
9494 `signed int' cannot be so controlled. */
9495 && !(typedef_decl
9496 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
9497 && (TREE_CODE (type) == INTEGER_TYPE
9498 || TREE_CODE (type) == CHAR_TYPE)
9499 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
9501 if (longlong)
9502 type = long_long_unsigned_type_node;
9503 else if (RIDBIT_SETP (RID_LONG, specbits))
9504 type = long_unsigned_type_node;
9505 else if (RIDBIT_SETP (RID_SHORT, specbits))
9506 type = short_unsigned_type_node;
9507 else if (type == char_type_node)
9508 type = unsigned_char_type_node;
9509 else if (typedef_decl)
9510 type = unsigned_type (type);
9511 else
9512 type = unsigned_type_node;
9514 else if (RIDBIT_SETP (RID_SIGNED, specbits)
9515 && type == char_type_node)
9516 type = signed_char_type_node;
9517 else if (longlong)
9518 type = long_long_integer_type_node;
9519 else if (RIDBIT_SETP (RID_LONG, specbits))
9520 type = long_integer_type_node;
9521 else if (RIDBIT_SETP (RID_SHORT, specbits))
9522 type = short_integer_type_node;
9524 if (RIDBIT_SETP (RID_COMPLEX, specbits))
9526 /* If we just have "complex", it is equivalent to
9527 "complex double", but if any modifiers at all are specified it is
9528 the complex form of TYPE. E.g, "complex short" is
9529 "complex short int". */
9531 if (defaulted_int && ! longlong
9532 && ! (RIDBIT_SETP (RID_LONG, specbits)
9533 || RIDBIT_SETP (RID_SHORT, specbits)
9534 || RIDBIT_SETP (RID_SIGNED, specbits)
9535 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
9536 type = complex_double_type_node;
9537 else if (type == integer_type_node)
9538 type = complex_integer_type_node;
9539 else if (type == float_type_node)
9540 type = complex_float_type_node;
9541 else if (type == double_type_node)
9542 type = complex_double_type_node;
9543 else if (type == long_double_type_node)
9544 type = complex_long_double_type_node;
9545 else
9546 type = build_complex_type (type);
9549 if (return_type == return_conversion
9550 && (RIDBIT_SETP (RID_CONST, specbits)
9551 || RIDBIT_SETP (RID_VOLATILE, specbits)
9552 || RIDBIT_SETP (RID_RESTRICT, specbits)))
9553 cp_error ("qualifiers are not allowed on declaration of `operator %T'",
9554 ctor_return_type);
9556 /* Set CONSTP if this declaration is `const', whether by
9557 explicit specification or via a typedef.
9558 Likewise for VOLATILEP. */
9560 constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
9561 restrictp =
9562 !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
9563 volatilep =
9564 !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
9565 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
9566 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
9567 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
9568 type = cp_build_qualified_type (type, type_quals);
9569 staticp = 0;
9570 inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
9571 virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
9572 RIDBIT_RESET (RID_VIRTUAL, specbits);
9573 explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
9574 RIDBIT_RESET (RID_EXPLICIT, specbits);
9576 if (RIDBIT_SETP (RID_STATIC, specbits))
9577 staticp = 1 + (decl_context == FIELD);
9579 if (virtualp && staticp == 2)
9581 cp_error ("member `%D' cannot be declared both virtual and static",
9582 dname);
9583 staticp = 0;
9585 friendp = RIDBIT_SETP (RID_FRIEND, specbits);
9586 RIDBIT_RESET (RID_FRIEND, specbits);
9588 /* Warn if two storage classes are given. Default to `auto'. */
9590 if (RIDBIT_ANY_SET (specbits))
9592 if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
9593 if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
9594 if (decl_context == PARM && nclasses > 0)
9595 error ("storage class specifiers invalid in parameter declarations");
9596 if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9598 if (decl_context == PARM)
9599 error ("typedef declaration invalid in parameter declaration");
9600 nclasses++;
9602 if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
9603 if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
9606 /* Give error if `virtual' is used outside of class declaration. */
9607 if (virtualp
9608 && (current_class_name == NULL_TREE || decl_context != FIELD))
9610 error ("virtual outside class declaration");
9611 virtualp = 0;
9614 /* Static anonymous unions are dealt with here. */
9615 if (staticp && decl_context == TYPENAME
9616 && TREE_CODE (declspecs) == TREE_LIST
9617 && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
9618 decl_context = FIELD;
9620 /* Warn about storage classes that are invalid for certain
9621 kinds of declarations (parameters, typenames, etc.). */
9623 if (nclasses > 1)
9624 error ("multiple storage classes in declaration of `%s'", name);
9625 else if (decl_context != NORMAL && nclasses > 0)
9627 if ((decl_context == PARM || decl_context == CATCHPARM)
9628 && (RIDBIT_SETP (RID_REGISTER, specbits)
9629 || RIDBIT_SETP (RID_AUTO, specbits)))
9631 else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9633 else if (decl_context == FIELD
9634 /* C++ allows static class elements */
9635 && RIDBIT_SETP (RID_STATIC, specbits))
9636 /* C++ also allows inlines and signed and unsigned elements,
9637 but in those cases we don't come in here. */
9639 else
9641 if (decl_context == FIELD)
9643 tree tmp = NULL_TREE;
9644 register int op = 0;
9646 if (declarator)
9648 /* Avoid trying to get an operand off an identifier node. */
9649 if (TREE_CODE (declarator) == IDENTIFIER_NODE)
9650 tmp = declarator;
9651 else
9652 tmp = TREE_OPERAND (declarator, 0);
9653 op = IDENTIFIER_OPNAME_P (tmp);
9655 error ("storage class specified for %s `%s'",
9656 op ? "member operator" : "field",
9657 op ? operator_name_string (tmp) : name);
9659 else
9660 error (((decl_context == PARM || decl_context == CATCHPARM)
9661 ? "storage class specified for parameter `%s'"
9662 : "storage class specified for typename"), name);
9663 RIDBIT_RESET (RID_REGISTER, specbits);
9664 RIDBIT_RESET (RID_AUTO, specbits);
9665 RIDBIT_RESET (RID_EXTERN, specbits);
9668 else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
9670 if (toplevel_bindings_p ())
9672 /* It's common practice (and completely valid) to have a const
9673 be initialized and declared extern. */
9674 if (!(type_quals & TYPE_QUAL_CONST))
9675 warning ("`%s' initialized and declared `extern'", name);
9677 else
9678 error ("`%s' has both `extern' and initializer", name);
9680 else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
9681 && ! toplevel_bindings_p ())
9682 error ("nested function `%s' declared `extern'", name);
9683 else if (toplevel_bindings_p ())
9685 if (RIDBIT_SETP (RID_AUTO, specbits))
9686 error ("top-level declaration of `%s' specifies `auto'", name);
9689 if (nclasses > 0 && friendp)
9690 error ("storage class specifiers invalid in friend function declarations");
9692 /* Now figure out the structure of the declarator proper.
9693 Descend through it, creating more complex types, until we reach
9694 the declared identifier (or NULL_TREE, in an absolute declarator). */
9696 inner_attrs = NULL_TREE;
9697 ignore_attrs = 0;
9699 while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
9700 && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
9702 /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
9703 an INDIRECT_REF (for *...),
9704 a CALL_EXPR (for ...(...)),
9705 an identifier (for the name being declared)
9706 or a null pointer (for the place in an absolute declarator
9707 where the name was omitted).
9708 For the last two cases, we have just exited the loop.
9710 For C++ it could also be
9711 a SCOPE_REF (for class :: ...). In this case, we have converted
9712 sensible names to types, and those are the values we use to
9713 qualify the member name.
9714 an ADDR_EXPR (for &...),
9715 a BIT_NOT_EXPR (for destructors)
9717 At this point, TYPE is the type of elements of an array,
9718 or for a function to return, or for a pointer to point to.
9719 After this sequence of ifs, TYPE is the type of the
9720 array or function or pointer, and DECLARATOR has had its
9721 outermost layer removed. */
9723 if (type == error_mark_node)
9725 if (TREE_CODE (declarator) == SCOPE_REF)
9726 declarator = TREE_OPERAND (declarator, 1);
9727 else
9728 declarator = TREE_OPERAND (declarator, 0);
9729 continue;
9731 if (quals != NULL_TREE
9732 && (declarator == NULL_TREE
9733 || TREE_CODE (declarator) != SCOPE_REF))
9735 if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
9736 ctype = TYPE_METHOD_BASETYPE (type);
9737 if (ctype != NULL_TREE)
9739 tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
9740 ctype = grok_method_quals (ctype, dummy, quals);
9741 type = TREE_TYPE (dummy);
9742 quals = NULL_TREE;
9746 /* See the comment for the TREE_LIST case, below. */
9747 if (ignore_attrs)
9748 ignore_attrs = 0;
9749 else if (inner_attrs)
9751 decl_attributes (type, inner_attrs, NULL_TREE);
9752 inner_attrs = NULL_TREE;
9755 switch (TREE_CODE (declarator))
9757 case TREE_LIST:
9759 /* We encode a declarator with embedded attributes using
9760 a TREE_LIST. The attributes apply to the declarator
9761 directly inside them, so we have to skip an iteration
9762 before applying them to the type. If the declarator just
9763 inside is the declarator-id, we apply the attrs to the
9764 decl itself. */
9765 inner_attrs = TREE_PURPOSE (declarator);
9766 ignore_attrs = 1;
9767 declarator = TREE_VALUE (declarator);
9769 break;
9771 case ARRAY_REF:
9773 register tree itype = NULL_TREE;
9774 register tree size = TREE_OPERAND (declarator, 1);
9775 /* The index is a signed object `sizetype' bits wide. */
9776 tree index_type = signed_type (sizetype);
9778 declarator = TREE_OPERAND (declarator, 0);
9780 /* Check for some types that there cannot be arrays of. */
9782 if (TREE_CODE (type) == VOID_TYPE)
9784 cp_error ("declaration of `%D' as array of voids", dname);
9785 type = error_mark_node;
9788 if (TREE_CODE (type) == FUNCTION_TYPE)
9790 cp_error ("declaration of `%D' as array of functions", dname);
9791 type = error_mark_node;
9794 /* ARM $8.4.3: Since you can't have a pointer to a reference,
9795 you can't have arrays of references. If we allowed them,
9796 then we'd be saying x[i] is valid for an array x, but
9797 then you'd have to ask: what does `*(x + i)' mean? */
9798 if (TREE_CODE (type) == REFERENCE_TYPE)
9800 if (decl_context == TYPENAME)
9801 cp_error ("cannot make arrays of references");
9802 else
9803 cp_error ("declaration of `%D' as array of references",
9804 dname);
9805 type = error_mark_node;
9808 if (TREE_CODE (type) == OFFSET_TYPE)
9810 cp_error ("declaration of `%D' as array of data members",
9811 dname);
9812 type = error_mark_node;
9815 if (TREE_CODE (type) == METHOD_TYPE)
9817 cp_error ("declaration of `%D' as array of function members",
9818 dname);
9819 type = error_mark_node;
9822 if (size == error_mark_node)
9823 type = error_mark_node;
9824 else if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9826 /* [dcl.array]
9828 the constant expressions that specify the bounds of
9829 the arrays can be omitted only for the first member
9830 of the sequence. */
9831 cp_error ("declaration of `%D' as multidimensional array",
9832 dname);
9833 cp_error ("must have bounds for all dimensions except the first");
9834 type = error_mark_node;
9837 if (type == error_mark_node)
9838 continue;
9840 /* VC++ spells a zero-sized array with []. */
9841 if (size == NULL_TREE && decl_context == FIELD && ! staticp
9842 && ! RIDBIT_SETP (RID_TYPEDEF, specbits))
9843 size = integer_zero_node;
9845 if (size)
9847 /* Must suspend_momentary here because the index
9848 type may need to live until the end of the function.
9849 For example, it is used in the declaration of a
9850 variable which requires destructing at the end of
9851 the function; then build_vec_delete will need this
9852 value. */
9853 int yes = suspend_momentary ();
9854 /* Might be a cast. */
9855 if (TREE_CODE (size) == NOP_EXPR
9856 && TREE_TYPE (size) == TREE_TYPE (TREE_OPERAND (size, 0)))
9857 size = TREE_OPERAND (size, 0);
9858 if (TREE_READONLY_DECL_P (size))
9859 size = decl_constant_value (size);
9861 /* If this involves a template parameter, it will be a
9862 constant at instantiation time, but we don't know
9863 what the value is yet. Even if no template
9864 parameters are involved, we may an expression that
9865 is not a constant; we don't even simplify `1 + 2'
9866 when processing a template. */
9867 if (processing_template_decl)
9869 /* Resolve a qualified reference to an enumerator or
9870 static const data member of ours. */
9871 if (TREE_CODE (size) == SCOPE_REF
9872 && TREE_OPERAND (size, 0) == current_class_type)
9874 tree t = lookup_field (current_class_type,
9875 TREE_OPERAND (size, 1), 0, 0);
9876 if (t)
9877 size = t;
9880 itype = build_index_type (build_min
9881 (MINUS_EXPR, sizetype, size, integer_one_node));
9882 goto dont_grok_size;
9885 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
9886 && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
9887 && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
9889 cp_error ("size of array `%D' has non-integer type",
9890 dname);
9891 size = integer_one_node;
9893 if (pedantic && !in_system_header && integer_zerop (size))
9894 cp_pedwarn ("ANSI C++ forbids zero-size array `%D'", dname);
9895 if (TREE_CONSTANT (size))
9897 int old_flag_pedantic_errors = flag_pedantic_errors;
9898 int old_pedantic = pedantic;
9899 pedantic = flag_pedantic_errors = 1;
9900 /* Always give overflow errors on array subscripts. */
9901 constant_expression_warning (size);
9902 pedantic = old_pedantic;
9903 flag_pedantic_errors = old_flag_pedantic_errors;
9904 if (INT_CST_LT (size, integer_zero_node))
9906 cp_error ("size of array `%D' is negative", dname);
9907 size = integer_one_node;
9910 else
9912 if (pedantic)
9914 if (dname)
9915 cp_pedwarn ("ANSI C++ forbids variable-size array `%D'",
9916 dname);
9917 else
9918 cp_pedwarn ("ANSI C++ forbids variable-size array");
9922 itype
9923 = fold (build_binary_op (MINUS_EXPR,
9924 cp_convert (index_type, size),
9925 cp_convert (index_type,
9926 integer_one_node)));
9927 if (! TREE_CONSTANT (itype))
9928 itype = variable_size (itype);
9929 else if (TREE_OVERFLOW (itype))
9931 error ("overflow in array dimension");
9932 TREE_OVERFLOW (itype) = 0;
9935 itype = build_index_type (itype);
9937 dont_grok_size:
9938 resume_momentary (yes);
9941 type = build_cplus_array_type (type, itype);
9942 ctype = NULL_TREE;
9944 break;
9946 case CALL_EXPR:
9948 tree arg_types;
9949 int funcdecl_p;
9950 tree inner_parms = CALL_DECLARATOR_PARMS (declarator);
9951 tree inner_decl = TREE_OPERAND (declarator, 0);
9953 /* Declaring a function type.
9954 Make sure we have a valid type for the function to return. */
9956 /* We now know that the TYPE_QUALS don't apply to the
9957 decl, but to its return type. */
9958 type_quals = TYPE_UNQUALIFIED;
9960 /* Warn about some types functions can't return. */
9962 if (TREE_CODE (type) == FUNCTION_TYPE)
9964 error ("`%s' declared as function returning a function", name);
9965 type = integer_type_node;
9967 if (TREE_CODE (type) == ARRAY_TYPE)
9969 error ("`%s' declared as function returning an array", name);
9970 type = integer_type_node;
9973 if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
9974 inner_decl = TREE_OPERAND (inner_decl, 1);
9976 if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR)
9977 inner_decl = dname;
9979 /* Pick up type qualifiers which should be applied to `this'. */
9980 quals = CALL_DECLARATOR_QUALS (declarator);
9982 /* Pick up the exception specifications. */
9983 raises = CALL_DECLARATOR_EXCEPTION_SPEC (declarator);
9985 /* Say it's a definition only for the CALL_EXPR
9986 closest to the identifier. */
9987 funcdecl_p
9988 = inner_decl
9989 && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
9990 || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR
9991 || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
9993 if (ctype == NULL_TREE
9994 && decl_context == FIELD
9995 && funcdecl_p
9996 && (friendp == 0 || dname == current_class_name))
9997 ctype = current_class_type;
9999 if (ctype && return_type == return_conversion)
10000 TYPE_HAS_CONVERSION (ctype) = 1;
10001 if (ctype && constructor_name (ctype) == dname)
10003 /* We are within a class's scope. If our declarator name
10004 is the same as the class name, and we are defining
10005 a function, then it is a constructor/destructor, and
10006 therefore returns a void type. */
10008 if (flags == DTOR_FLAG)
10010 /* ANSI C++ June 5 1992 WP 12.4.1. A destructor may
10011 not be declared const or volatile. A destructor
10012 may not be static. */
10013 if (staticp == 2)
10014 error ("destructor cannot be static member function");
10015 if (quals)
10017 cp_error ("destructors may not be `%s'",
10018 IDENTIFIER_POINTER (TREE_VALUE (quals)));
10019 quals = NULL_TREE;
10021 if (decl_context == FIELD)
10023 if (! member_function_or_else (ctype, current_class_type,
10024 "destructor for alien class `%s' cannot be a member"))
10025 return void_type_node;
10028 else /* It's a constructor. */
10030 if (explicitp == 1)
10031 explicitp = 2;
10032 /* ANSI C++ June 5 1992 WP 12.1.2. A constructor may
10033 not be declared const or volatile. A constructor may
10034 not be virtual. A constructor may not be static. */
10035 if (staticp == 2)
10036 error ("constructor cannot be static member function");
10037 if (virtualp)
10039 pedwarn ("constructors cannot be declared virtual");
10040 virtualp = 0;
10042 if (quals)
10044 cp_error ("constructors may not be `%s'",
10045 IDENTIFIER_POINTER (TREE_VALUE (quals)));
10046 quals = NULL_TREE;
10049 RID_BIT_TYPE tmp_bits;
10050 bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
10051 RIDBIT_RESET (RID_INLINE, tmp_bits);
10052 RIDBIT_RESET (RID_STATIC, tmp_bits);
10053 if (RIDBIT_ANY_SET (tmp_bits))
10054 error ("return value type specifier for constructor ignored");
10056 type = build_pointer_type (ctype);
10057 if (decl_context == FIELD)
10059 if (! member_function_or_else (ctype, current_class_type,
10060 "constructor for alien class `%s' cannot be member"))
10061 return void_type_node;
10062 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
10063 if (return_type != return_ctor)
10064 return NULL_TREE;
10067 if (decl_context == FIELD)
10068 staticp = 0;
10070 else if (friendp)
10072 if (initialized)
10073 error ("can't initialize friend function `%s'", name);
10074 if (virtualp)
10076 /* Cannot be both friend and virtual. */
10077 error ("virtual functions cannot be friends");
10078 RIDBIT_RESET (RID_FRIEND, specbits);
10079 friendp = 0;
10081 if (decl_context == NORMAL)
10082 error ("friend declaration not in class definition");
10083 if (current_function_decl && funcdef_flag)
10084 cp_error ("can't define friend function `%s' in a local class definition",
10085 name);
10088 /* Construct the function type and go to the next
10089 inner layer of declarator. */
10091 declarator = TREE_OPERAND (declarator, 0);
10093 /* FIXME: This is where default args should be fully
10094 processed. */
10096 arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
10098 if (declarator && flags == DTOR_FLAG)
10100 /* A destructor declared in the body of a class will
10101 be represented as a BIT_NOT_EXPR. But, we just
10102 want the underlying IDENTIFIER. */
10103 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
10104 declarator = TREE_OPERAND (declarator, 0);
10106 if (strict_prototype == 0 && arg_types == NULL_TREE)
10107 arg_types = void_list_node;
10108 else if (arg_types == NULL_TREE
10109 || arg_types != void_list_node)
10111 cp_error ("destructors may not have parameters");
10112 arg_types = void_list_node;
10113 last_function_parms = NULL_TREE;
10117 /* ANSI says that `const int foo ();'
10118 does not make the function foo const. */
10119 type = build_function_type (type, arg_types);
10122 tree t;
10123 for (t = arg_types; t; t = TREE_CHAIN (t))
10124 if (TREE_PURPOSE (t)
10125 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10127 add_defarg_fn (type);
10128 break;
10132 break;
10134 case ADDR_EXPR:
10135 case INDIRECT_REF:
10136 /* Filter out pointers-to-references and references-to-references.
10137 We can get these if a TYPE_DECL is used. */
10139 if (TREE_CODE (type) == REFERENCE_TYPE)
10141 error ("cannot declare %s to references",
10142 TREE_CODE (declarator) == ADDR_EXPR
10143 ? "references" : "pointers");
10144 declarator = TREE_OPERAND (declarator, 0);
10145 continue;
10148 if (TREE_CODE (type) == OFFSET_TYPE
10149 && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10150 || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10152 cp_error ("cannot declare pointer to `%#T' member",
10153 TREE_TYPE (type));
10154 type = TREE_TYPE (type);
10157 /* Merge any constancy or volatility into the target type
10158 for the pointer. */
10160 /* We now know that the TYPE_QUALS don't apply to the decl,
10161 but to the target of the pointer. */
10162 type_quals = TYPE_UNQUALIFIED;
10164 if (TREE_CODE (declarator) == ADDR_EXPR)
10166 if (TREE_CODE (type) == VOID_TYPE)
10167 error ("invalid type: `void &'");
10168 else
10169 type = build_reference_type (type);
10171 else if (TREE_CODE (type) == METHOD_TYPE)
10172 type = build_ptrmemfunc_type (build_pointer_type (type));
10173 else
10174 type = build_pointer_type (type);
10176 /* Process a list of type modifier keywords (such as
10177 const or volatile) that were given inside the `*' or `&'. */
10179 if (TREE_TYPE (declarator))
10181 register tree typemodlist;
10182 int erred = 0;
10184 constp = 0;
10185 volatilep = 0;
10186 restrictp = 0;
10187 for (typemodlist = TREE_TYPE (declarator); typemodlist;
10188 typemodlist = TREE_CHAIN (typemodlist))
10190 tree qualifier = TREE_VALUE (typemodlist);
10192 if (qualifier == ridpointers[(int) RID_CONST])
10193 constp++;
10194 else if (qualifier == ridpointers[(int) RID_VOLATILE])
10195 volatilep++;
10196 else if (qualifier == ridpointers[(int) RID_RESTRICT])
10197 restrictp++;
10198 else if (!erred)
10200 erred = 1;
10201 error ("invalid type modifier within pointer declarator");
10204 if (constp > 1)
10205 pedwarn ("duplicate `const'");
10206 if (volatilep > 1)
10207 pedwarn ("duplicate `volatile'");
10208 if (restrictp > 1)
10209 pedwarn ("duplicate `restrict'");
10211 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10212 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10213 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10214 if (TREE_CODE (declarator) == ADDR_EXPR
10215 && (constp || volatilep))
10217 if (constp)
10218 pedwarn ("discarding `const' applied to a reference");
10219 if (volatilep)
10220 pedwarn ("discarding `volatile' applied to a reference");
10221 type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
10223 type = cp_build_qualified_type (type, type_quals);
10225 declarator = TREE_OPERAND (declarator, 0);
10226 ctype = NULL_TREE;
10227 break;
10229 case SCOPE_REF:
10231 /* We have converted type names to NULL_TREE if the
10232 name was bogus, or to a _TYPE node, if not.
10234 The variable CTYPE holds the type we will ultimately
10235 resolve to. The code here just needs to build
10236 up appropriate member types. */
10237 tree sname = TREE_OPERAND (declarator, 1);
10238 tree t;
10240 /* Destructors can have their visibilities changed as well. */
10241 if (TREE_CODE (sname) == BIT_NOT_EXPR)
10242 sname = TREE_OPERAND (sname, 0);
10244 if (TREE_COMPLEXITY (declarator) == 0)
10245 /* This needs to be here, in case we are called
10246 multiple times. */ ;
10247 else if (TREE_COMPLEXITY (declarator) == -1)
10248 /* Namespace member. */
10249 pop_decl_namespace ();
10250 else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
10251 /* Don't fall out into global scope. Hides real bug? --eichin */ ;
10252 else if (! IS_AGGR_TYPE_CODE
10253 (TREE_CODE (TREE_OPERAND (declarator, 0))))
10255 else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10257 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10258 that refer to ctype. They couldn't be resolved earlier
10259 because we hadn't pushed into the class yet.
10260 Example: resolve 'B<T>::type' in
10261 'B<typename B<T>::type> B<T>::f () { }'. */
10262 if (current_template_parms
10263 && uses_template_parms (type)
10264 && uses_template_parms (current_class_type))
10266 tree args = current_template_args ();
10267 type = tsubst (type, args, /*complain=*/1, NULL_TREE);
10270 /* This pop_nested_class corresponds to the
10271 push_nested_class used to push into class scope for
10272 parsing the argument list of a function decl, in
10273 qualified_id. */
10274 pop_nested_class ();
10275 TREE_COMPLEXITY (declarator) = current_class_depth;
10277 else
10278 my_friendly_abort (16);
10280 if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10282 /* We had a reference to a global decl, or
10283 perhaps we were given a non-aggregate typedef,
10284 in which case we cleared this out, and should just
10285 keep going as though it wasn't there. */
10286 declarator = sname;
10287 continue;
10289 ctype = TREE_OPERAND (declarator, 0);
10291 t = ctype;
10292 while (t != NULL_TREE && CLASS_TYPE_P (t))
10294 if (CLASSTYPE_TEMPLATE_INFO (t) &&
10295 !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
10296 template_count += 1;
10297 t = TYPE_MAIN_DECL (t);
10298 if (DECL_LANG_SPECIFIC (t))
10299 t = DECL_CLASS_CONTEXT (t);
10300 else
10301 t = NULL_TREE;
10304 if (sname == NULL_TREE)
10305 goto done_scoping;
10307 if (TREE_CODE (sname) == IDENTIFIER_NODE)
10309 /* This is the `standard' use of the scoping operator:
10310 basetype :: member . */
10312 if (ctype == current_class_type)
10314 /* class A {
10315 void A::f ();
10318 Is this ill-formed? */
10320 if (pedantic)
10321 cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
10322 ctype, name);
10324 else if (TREE_CODE (type) == FUNCTION_TYPE)
10326 if (current_class_type == NULL_TREE
10327 || friendp)
10328 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10329 TYPE_ARG_TYPES (type));
10330 else
10332 cp_error ("cannot declare member function `%T::%s' within `%T'",
10333 ctype, name, current_class_type);
10334 return void_type_node;
10337 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
10338 || TYPE_SIZE (complete_type (ctype)) != NULL_TREE)
10340 /* Have to move this code elsewhere in this function.
10341 this code is used for i.e., typedef int A::M; M *pm;
10343 It is? How? jason 10/2/94 */
10345 if (current_class_type)
10347 cp_error ("cannot declare member `%T::%s' within `%T'",
10348 ctype, name, current_class_type);
10349 return void_type_node;
10351 type = build_offset_type (ctype, type);
10353 else if (uses_template_parms (ctype))
10355 if (TREE_CODE (type) == FUNCTION_TYPE)
10356 type
10357 = build_cplus_method_type (ctype, TREE_TYPE (type),
10358 TYPE_ARG_TYPES (type));
10360 else
10362 cp_error ("structure `%T' not yet defined", ctype);
10363 return error_mark_node;
10366 declarator = sname;
10368 else if (TREE_CODE (sname) == SCOPE_REF)
10369 my_friendly_abort (17);
10370 else
10372 done_scoping:
10373 declarator = TREE_OPERAND (declarator, 1);
10374 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10375 /* In this case, we will deal with it later. */
10377 else
10379 if (TREE_CODE (type) == FUNCTION_TYPE)
10380 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10381 TYPE_ARG_TYPES (type));
10382 else
10383 type = build_offset_type (ctype, type);
10387 break;
10389 case BIT_NOT_EXPR:
10390 declarator = TREE_OPERAND (declarator, 0);
10391 break;
10393 case RECORD_TYPE:
10394 case UNION_TYPE:
10395 case ENUMERAL_TYPE:
10396 declarator = NULL_TREE;
10397 break;
10399 case ERROR_MARK:
10400 declarator = NULL_TREE;
10401 break;
10403 default:
10404 my_friendly_abort (158);
10408 /* See the comment for the TREE_LIST case, above. */
10409 if (inner_attrs)
10411 if (! ignore_attrs)
10412 decl_attributes (type, inner_attrs, NULL_TREE);
10413 else if (attrlist)
10414 TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
10415 else
10416 attrlist = build_decl_list (NULL_TREE, inner_attrs);
10419 /* Now TYPE has the actual type. */
10421 if (explicitp == 1 || (explicitp && friendp))
10423 /* [dcl.fct.spec] The explicit specifier shall only be used in
10424 declarations of constructors within a class definition. */
10425 error ("only declarations of constructors can be `explicit'");
10426 explicitp = 0;
10429 if (RIDBIT_SETP (RID_MUTABLE, specbits))
10431 if (current_class_name == NULL_TREE || decl_context == PARM || friendp)
10433 error ("non-member `%s' cannot be declared `mutable'", name);
10434 RIDBIT_RESET (RID_MUTABLE, specbits);
10436 else if (decl_context == TYPENAME || RIDBIT_SETP (RID_TYPEDEF, specbits))
10438 error ("non-object member `%s' cannot be declared `mutable'", name);
10439 RIDBIT_RESET (RID_MUTABLE, specbits);
10441 else if (TREE_CODE (type) == FUNCTION_TYPE
10442 || TREE_CODE (type) == METHOD_TYPE)
10444 error ("function `%s' cannot be declared `mutable'", name);
10445 RIDBIT_RESET (RID_MUTABLE, specbits);
10447 else if (staticp)
10449 error ("static `%s' cannot be declared `mutable'", name);
10450 RIDBIT_RESET (RID_MUTABLE, specbits);
10452 else if (type_quals & TYPE_QUAL_CONST)
10454 error ("const `%s' cannot be declared `mutable'", name);
10455 RIDBIT_RESET (RID_MUTABLE, specbits);
10459 if (declarator == NULL_TREE
10460 || TREE_CODE (declarator) == IDENTIFIER_NODE
10461 || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
10462 && (TREE_CODE (type) == FUNCTION_TYPE
10463 || TREE_CODE (type) == METHOD_TYPE)))
10464 /* OK */;
10465 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10467 cp_error ("template-id `%D' used as a declarator", declarator);
10468 declarator = dname;
10470 else
10471 /* Unexpected declarator format. */
10472 my_friendly_abort (990210);
10474 /* If this is declaring a typedef name, return a TYPE_DECL. */
10476 if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
10478 tree decl;
10480 /* Note that the grammar rejects storage classes
10481 in typenames, fields or parameters. */
10482 if (current_lang_name == lang_name_java)
10483 TYPE_FOR_JAVA (type) = 1;
10485 if (decl_context == FIELD)
10487 if (declarator == constructor_name (current_class_type))
10488 cp_pedwarn ("ANSI C++ forbids nested type `%D' with same name as enclosing class",
10489 declarator);
10490 decl = build_lang_decl (TYPE_DECL, declarator, type);
10492 else
10494 /* Make sure this typedef lives as long as its type,
10495 since it might be used as a template parameter. */
10496 if (type != error_mark_node)
10497 push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
10498 if (processing_template_decl)
10499 decl = build_lang_decl (TYPE_DECL, declarator, type);
10500 else
10501 decl = build_decl (TYPE_DECL, declarator, type);
10502 if (type != error_mark_node)
10503 pop_obstacks ();
10506 /* If the user declares "typedef struct {...} foo" then the
10507 struct will have an anonymous name. Fill that name in now.
10508 Nothing can refer to it, so nothing needs know about the name
10509 change. */
10510 if (type != error_mark_node
10511 && TYPE_NAME (type)
10512 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10513 && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type))
10514 && CP_TYPE_QUALS (type) == TYPE_UNQUALIFIED)
10516 tree oldname = TYPE_NAME (type);
10517 tree t;
10519 /* Replace the anonymous name with the real name everywhere. */
10520 lookup_tag_reverse (type, declarator);
10521 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10522 if (TYPE_NAME (t) == oldname)
10523 TYPE_NAME (t) = decl;
10525 if (TYPE_LANG_SPECIFIC (type))
10526 TYPE_WAS_ANONYMOUS (type) = 1;
10528 /* If this is a typedef within a template class, the nested
10529 type is a (non-primary) template. The name for the
10530 template needs updating as well. */
10531 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10532 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10533 = TYPE_IDENTIFIER (type);
10535 /* XXX Temporarily set the scope.
10536 When returning, start_decl expects it as NULL_TREE,
10537 and will then then set it using pushdecl. */
10538 my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 980404);
10539 if (current_class_type)
10540 DECL_CONTEXT (decl) = current_class_type;
10541 else
10542 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10544 DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
10545 DECL_ASSEMBLER_NAME (decl)
10546 = get_identifier (build_overload_name (type, 1, 1));
10547 DECL_CONTEXT (decl) = NULL_TREE;
10549 /* FIXME remangle member functions; member functions of a
10550 type with external linkage have external linkage. */
10553 if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
10555 cp_error_at ("typedef name may not be class-qualified", decl);
10556 return NULL_TREE;
10558 else if (quals)
10560 if (ctype == NULL_TREE)
10562 if (TREE_CODE (type) != METHOD_TYPE)
10563 cp_error_at ("invalid type qualifier for non-method type", decl);
10564 else
10565 ctype = TYPE_METHOD_BASETYPE (type);
10567 if (ctype != NULL_TREE)
10568 grok_method_quals (ctype, decl, quals);
10571 if (RIDBIT_SETP (RID_SIGNED, specbits)
10572 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10573 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10575 bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
10576 inlinep, friendp, raises != NULL_TREE);
10578 if (initialized)
10579 error ("typedef declaration includes an initializer");
10581 return decl;
10584 /* Detect the case of an array type of unspecified size
10585 which came, as such, direct from a typedef name.
10586 We must copy the type, so that each identifier gets
10587 a distinct type, so that each identifier's size can be
10588 controlled separately by its own initializer. */
10590 if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
10591 && TYPE_DOMAIN (type) == NULL_TREE)
10593 type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
10596 /* If this is a type name (such as, in a cast or sizeof),
10597 compute the type and return it now. */
10599 if (decl_context == TYPENAME)
10601 /* Note that the grammar rejects storage classes
10602 in typenames, fields or parameters. */
10603 if (type_quals != TYPE_UNQUALIFIED)
10604 type_quals = TYPE_UNQUALIFIED;
10606 /* Special case: "friend class foo" looks like a TYPENAME context. */
10607 if (friendp)
10609 if (type_quals != TYPE_UNQUALIFIED)
10611 cp_error ("type qualifiers specified for friend class declaration");
10612 type_quals = TYPE_UNQUALIFIED;
10614 if (inlinep)
10616 cp_error ("`inline' specified for friend class declaration");
10617 inlinep = 0;
10620 /* Only try to do this stuff if we didn't already give up. */
10621 if (type != integer_type_node)
10623 /* A friendly class? */
10624 if (current_class_type)
10625 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
10626 else
10627 error ("trying to make class `%s' a friend of global scope",
10628 TYPE_NAME_STRING (type));
10629 type = void_type_node;
10632 else if (quals)
10634 tree dummy = build_decl (TYPE_DECL, declarator, type);
10635 if (ctype == NULL_TREE)
10637 my_friendly_assert (TREE_CODE (type) == METHOD_TYPE, 159);
10638 ctype = TYPE_METHOD_BASETYPE (type);
10640 grok_method_quals (ctype, dummy, quals);
10641 type = TREE_TYPE (dummy);
10644 return type;
10646 else if (declarator == NULL_TREE && decl_context != PARM
10647 && decl_context != CATCHPARM
10648 && TREE_CODE (type) != UNION_TYPE
10649 && ! bitfield)
10651 cp_error ("abstract declarator `%T' used as declaration", type);
10652 declarator = make_anon_name ();
10655 /* `void' at top level (not within pointer)
10656 is allowed only in typedefs or type names.
10657 We don't complain about parms either, but that is because
10658 a better error message can be made later. */
10660 if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
10662 if (! declarator)
10663 error ("unnamed variable or field declared void");
10664 else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10666 if (IDENTIFIER_OPNAME_P (declarator))
10667 my_friendly_abort (356);
10668 else
10669 error ("variable or field `%s' declared void", name);
10671 else
10672 error ("variable or field declared void");
10673 type = integer_type_node;
10676 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10677 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
10679 if (decl_context == PARM || decl_context == CATCHPARM)
10681 if (ctype || in_namespace)
10682 error ("cannot use `::' in parameter declaration");
10684 /* A parameter declared as an array of T is really a pointer to T.
10685 One declared as a function is really a pointer to a function.
10686 One declared as a member is really a pointer to member. */
10688 if (TREE_CODE (type) == ARRAY_TYPE)
10690 /* Transfer const-ness of array into that of type pointed to. */
10691 type = build_pointer_type (TREE_TYPE (type));
10692 type_quals = TYPE_UNQUALIFIED;
10694 else if (TREE_CODE (type) == FUNCTION_TYPE)
10695 type = build_pointer_type (type);
10696 else if (TREE_CODE (type) == OFFSET_TYPE)
10697 type = build_pointer_type (type);
10698 else if (TREE_CODE (type) == VOID_TYPE && declarator)
10700 error ("declaration of `%s' as void", name);
10701 return NULL_TREE;
10706 register tree decl;
10708 if (decl_context == PARM)
10710 decl = build_decl (PARM_DECL, declarator, type);
10712 bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
10713 inlinep, friendp, raises != NULL_TREE);
10715 /* Compute the type actually passed in the parmlist,
10716 for the case where there is no prototype.
10717 (For example, shorts and chars are passed as ints.)
10718 When there is a prototype, this is overridden later. */
10720 DECL_ARG_TYPE (decl) = type_promotes_to (type);
10722 else if (decl_context == FIELD)
10724 if (type == error_mark_node)
10726 /* Happens when declaring arrays of sizes which
10727 are error_mark_node, for example. */
10728 decl = NULL_TREE;
10730 else if (in_namespace && !friendp)
10732 /* Something like struct S { int N::j; }; */
10733 cp_error ("invalid use of `::'");
10734 decl = NULL_TREE;
10736 else if (TREE_CODE (type) == FUNCTION_TYPE)
10738 int publicp = 0;
10739 tree function_context;
10741 /* We catch the others as conflicts with the builtin
10742 typedefs. */
10743 if (friendp && declarator == ridpointers[(int) RID_SIGNED])
10745 cp_error ("function `%D' cannot be declared friend",
10746 declarator);
10747 friendp = 0;
10750 if (friendp == 0)
10752 if (ctype == NULL_TREE)
10753 ctype = current_class_type;
10755 if (ctype == NULL_TREE)
10757 cp_error ("can't make `%D' into a method -- not in a class",
10758 declarator);
10759 return void_type_node;
10762 /* ``A union may [ ... ] not [ have ] virtual functions.''
10763 ARM 9.5 */
10764 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10766 cp_error ("function `%D' declared virtual inside a union",
10767 declarator);
10768 return void_type_node;
10771 if (declarator == ansi_opname[(int) NEW_EXPR]
10772 || declarator == ansi_opname[(int) VEC_NEW_EXPR]
10773 || declarator == ansi_opname[(int) DELETE_EXPR]
10774 || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
10776 if (virtualp)
10778 cp_error ("`%D' cannot be declared virtual, since it is always static",
10779 declarator);
10780 virtualp = 0;
10783 else if (staticp < 2)
10784 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10785 TYPE_ARG_TYPES (type));
10788 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
10789 function_context = (ctype != NULL_TREE) ?
10790 hack_decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10791 publicp = (! friendp || ! staticp)
10792 && function_context == NULL_TREE;
10793 decl = grokfndecl (ctype, type,
10794 TREE_CODE (declarator) != TEMPLATE_ID_EXPR
10795 ? declarator : dname,
10796 declarator,
10797 virtualp, flags, quals, raises,
10798 friendp ? -1 : 0, friendp, publicp, inlinep,
10799 funcdef_flag, template_count, in_namespace);
10800 if (decl == NULL_TREE)
10801 return decl;
10802 #if 0
10803 /* This clobbers the attrs stored in `decl' from `attrlist'. */
10804 /* The decl and setting of decl_machine_attr is also turned off. */
10805 decl = build_decl_attribute_variant (decl, decl_machine_attr);
10806 #endif
10808 /* [class.conv.ctor]
10810 A constructor declared without the function-specifier
10811 explicit that can be called with a single parameter
10812 specifies a conversion from the type of its first
10813 parameter to the type of its class. Such a constructor
10814 is called a converting constructor. */
10815 if (explicitp == 2)
10816 DECL_NONCONVERTING_P (decl) = 1;
10817 else if (DECL_CONSTRUCTOR_P (decl))
10819 /* The constructor can be called with exactly one
10820 parameter if there is at least one parameter, and
10821 any subsequent parameters have default arguments.
10822 We don't look at the first parameter, which is
10823 really just the `this' parameter for the new
10824 object. */
10825 tree arg_types =
10826 TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)));
10828 /* Skip the `in_chrg' argument too, if present. */
10829 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (decl)))
10830 arg_types = TREE_CHAIN (arg_types);
10832 if (arg_types == void_list_node
10833 || (arg_types
10834 && TREE_CHAIN (arg_types)
10835 && TREE_CHAIN (arg_types) != void_list_node
10836 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
10837 DECL_NONCONVERTING_P (decl) = 1;
10840 else if (TREE_CODE (type) == METHOD_TYPE)
10842 /* We only get here for friend declarations of
10843 members of other classes. */
10844 /* All method decls are public, so tell grokfndecl to set
10845 TREE_PUBLIC, also. */
10846 decl = grokfndecl (ctype, type, declarator, declarator,
10847 virtualp, flags, quals, raises,
10848 friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
10849 template_count, in_namespace);
10850 if (decl == NULL_TREE)
10851 return NULL_TREE;
10853 else if (!staticp && ! processing_template_decl
10854 && TYPE_SIZE (complete_type (type)) == NULL_TREE
10855 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
10857 if (declarator)
10858 cp_error ("field `%D' has incomplete type", declarator);
10859 else
10860 cp_error ("name `%T' has incomplete type", type);
10862 /* If we're instantiating a template, tell them which
10863 instantiation made the field's type be incomplete. */
10864 if (current_class_type
10865 && TYPE_NAME (current_class_type)
10866 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
10867 && declspecs && TREE_VALUE (declspecs)
10868 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
10869 cp_error (" in instantiation of template `%T'",
10870 current_class_type);
10872 type = error_mark_node;
10873 decl = NULL_TREE;
10875 else
10877 if (friendp)
10879 error ("`%s' is neither function nor method; cannot be declared friend",
10880 IDENTIFIER_POINTER (declarator));
10881 friendp = 0;
10883 decl = NULL_TREE;
10886 if (friendp)
10888 /* Friends are treated specially. */
10889 if (ctype == current_class_type)
10890 warning ("member functions are implicitly friends of their class");
10891 else
10893 tree t = NULL_TREE;
10894 if (decl && DECL_NAME (decl))
10896 if (template_class_depth (current_class_type) == 0)
10898 decl
10899 = check_explicit_specialization
10900 (declarator, decl,
10901 template_count, 2 * (funcdef_flag != 0) + 4);
10902 if (decl == error_mark_node)
10903 return error_mark_node;
10906 t = do_friend (ctype, declarator, decl,
10907 last_function_parms, attrlist, flags, quals,
10908 funcdef_flag);
10910 if (t && funcdef_flag)
10911 return t;
10913 return void_type_node;
10917 /* Structure field. It may not be a function, except for C++ */
10919 if (decl == NULL_TREE)
10921 if (initialized)
10923 if (!staticp)
10925 /* An attempt is being made to initialize a non-static
10926 member. But, from [class.mem]:
10928 4 A member-declarator can contain a
10929 constant-initializer only if it declares a static
10930 member (_class.static_) of integral or enumeration
10931 type, see _class.static.data_.
10933 This used to be relatively common practice, but
10934 the rest of the compiler does not correctly
10935 handle the initialization unless the member is
10936 static so we make it static below. */
10937 cp_pedwarn ("ANSI C++ forbids initialization of member `%D'",
10938 declarator);
10939 cp_pedwarn ("making `%D' static", declarator);
10940 staticp = 1;
10943 if (uses_template_parms (type))
10944 /* We'll check at instantiation time. */
10946 else if (check_static_variable_definition (declarator,
10947 type))
10948 /* If we just return the declaration, crashes
10949 will sometimes occur. We therefore return
10950 void_type_node, as if this was a friend
10951 declaration, to cause callers to completely
10952 ignore this declaration. */
10953 return void_type_node;
10956 /* 9.2p13 [class.mem] */
10957 if (declarator == constructor_name (current_class_type)
10958 /* Divergence from the standard: In extern "C", we
10959 allow non-static data members here, because C does
10960 and /usr/include/netinet/in.h uses that. */
10961 && (staticp || ! in_system_header))
10962 cp_pedwarn ("ANSI C++ forbids data member `%D' with same name as enclosing class",
10963 declarator);
10965 if (staticp)
10967 /* C++ allows static class members. All other work
10968 for this is done by grokfield. */
10969 decl = build_lang_decl (VAR_DECL, declarator, type);
10970 TREE_STATIC (decl) = 1;
10971 /* In class context, 'static' means public access. */
10972 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
10974 else
10976 decl = build_lang_decl (FIELD_DECL, declarator, type);
10977 if (RIDBIT_SETP (RID_MUTABLE, specbits))
10979 DECL_MUTABLE_P (decl) = 1;
10980 RIDBIT_RESET (RID_MUTABLE, specbits);
10984 bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
10985 inlinep, friendp, raises != NULL_TREE);
10988 else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
10990 tree original_name;
10991 int publicp = 0;
10993 if (! declarator)
10994 return NULL_TREE;
10996 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10997 original_name = dname;
10998 else
10999 original_name = declarator;
11001 if (RIDBIT_SETP (RID_AUTO, specbits))
11002 error ("storage class `auto' invalid for function `%s'", name);
11003 else if (RIDBIT_SETP (RID_REGISTER, specbits))
11004 error ("storage class `register' invalid for function `%s'", name);
11006 /* Function declaration not at top level.
11007 Storage classes other than `extern' are not allowed
11008 and `extern' makes no difference. */
11009 if (! toplevel_bindings_p ()
11010 && (RIDBIT_SETP (RID_STATIC, specbits)
11011 || RIDBIT_SETP (RID_INLINE, specbits))
11012 && pedantic)
11014 if (RIDBIT_SETP (RID_STATIC, specbits))
11015 pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
11016 else
11017 pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
11020 if (ctype == NULL_TREE)
11022 if (virtualp)
11024 error ("virtual non-class function `%s'", name);
11025 virtualp = 0;
11028 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
11029 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11030 TYPE_ARG_TYPES (type));
11032 /* Record presence of `static'. */
11033 publicp = (ctype != NULL_TREE
11034 || RIDBIT_SETP (RID_EXTERN, specbits)
11035 || !RIDBIT_SETP (RID_STATIC, specbits));
11037 decl = grokfndecl (ctype, type, original_name, declarator,
11038 virtualp, flags, quals, raises,
11039 1, friendp,
11040 publicp, inlinep, funcdef_flag,
11041 template_count, in_namespace);
11042 if (decl == NULL_TREE)
11043 return NULL_TREE;
11045 if (staticp == 1)
11047 int illegal_static = 0;
11049 /* Don't allow a static member function in a class, and forbid
11050 declaring main to be static. */
11051 if (TREE_CODE (type) == METHOD_TYPE)
11053 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
11054 illegal_static = 1;
11056 else if (current_function_decl)
11058 /* FIXME need arm citation */
11059 error ("cannot declare static function inside another function");
11060 illegal_static = 1;
11063 if (illegal_static)
11065 staticp = 0;
11066 RIDBIT_RESET (RID_STATIC, specbits);
11070 else
11072 /* It's a variable. */
11074 /* An uninitialized decl with `extern' is a reference. */
11075 decl = grokvardecl (type, declarator, &specbits,
11076 initialized,
11077 (type_quals & TYPE_QUAL_CONST) != 0,
11078 in_namespace);
11079 bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11080 inlinep, friendp, raises != NULL_TREE);
11082 if (ctype)
11084 DECL_CONTEXT (decl) = ctype;
11085 if (staticp == 1)
11087 cp_pedwarn ("static member `%D' re-declared as static", decl);
11088 staticp = 0;
11089 RIDBIT_RESET (RID_STATIC, specbits);
11091 if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11093 cp_error ("static member `%D' declared `register'", decl);
11094 RIDBIT_RESET (RID_REGISTER, specbits);
11096 if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
11098 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
11099 decl);
11100 RIDBIT_RESET (RID_EXTERN, specbits);
11105 my_friendly_assert (!RIDBIT_SETP (RID_MUTABLE, specbits), 19990927);
11107 /* Record `register' declaration for warnings on &
11108 and in case doing stupid register allocation. */
11110 if (RIDBIT_SETP (RID_REGISTER, specbits))
11111 DECL_REGISTER (decl) = 1;
11113 if (RIDBIT_SETP (RID_EXTERN, specbits))
11114 DECL_THIS_EXTERN (decl) = 1;
11116 if (RIDBIT_SETP (RID_STATIC, specbits))
11117 DECL_THIS_STATIC (decl) = 1;
11119 /* Record constancy and volatility. There's no need to do this
11120 when processing a template; we'll do this for the instantiated
11121 declaration based on the type of DECL. */
11122 if (!processing_template_decl)
11123 c_apply_type_quals_to_decl (type_quals, decl);
11125 return decl;
11129 /* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11130 An empty exprlist is a parmlist. An exprlist which
11131 contains only identifiers at the global level
11132 is a parmlist. Otherwise, it is an exprlist. */
11135 parmlist_is_exprlist (exprs)
11136 tree exprs;
11138 if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11139 return 0;
11141 if (toplevel_bindings_p ())
11143 /* At the global level, if these are all identifiers,
11144 then it is a parmlist. */
11145 while (exprs)
11147 if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11148 return 1;
11149 exprs = TREE_CHAIN (exprs);
11151 return 0;
11153 return 1;
11156 /* Subroutine of start_function. Ensure that each of the parameter
11157 types (as listed in PARMS) is complete, as is required for a
11158 function definition. */
11160 static void
11161 require_complete_types_for_parms (parms)
11162 tree parms;
11164 while (parms)
11166 tree type = TREE_TYPE (parms);
11167 if (TYPE_SIZE (complete_type (type)) == NULL_TREE)
11169 if (DECL_NAME (parms))
11170 error ("parameter `%s' has incomplete type",
11171 IDENTIFIER_POINTER (DECL_NAME (parms)));
11172 else
11173 error ("parameter has incomplete type");
11174 TREE_TYPE (parms) = error_mark_node;
11176 else
11177 layout_decl (parms, 0);
11179 parms = TREE_CHAIN (parms);
11183 /* Returns *TP if *TP is a local variable (or parameter). Returns
11184 NULL_TREE otherwise. */
11186 static tree
11187 local_variable_p (tp, walk_subtrees, data)
11188 tree *tp;
11189 int *walk_subtrees ATTRIBUTE_UNUSED;
11190 void *data ATTRIBUTE_UNUSED;
11192 tree t = *tp;
11194 if ((TREE_CODE (t) == VAR_DECL
11195 /* A VAR_DECL with a context that is a _TYPE is a static data
11196 member. */
11197 && !TYPE_P (CP_DECL_CONTEXT (t))
11198 /* Any other non-local variable must be at namespace scope. */
11199 && TREE_CODE (CP_DECL_CONTEXT (t)) != NAMESPACE_DECL)
11200 || (TREE_CODE (t) == PARM_DECL))
11201 return t;
11203 return NULL_TREE;
11206 /* Check that ARG, which is a default-argument expression for a
11207 parameter DECL, is legal. Returns ARG, or ERROR_MARK_NODE, if
11208 something goes wrong. DECL may also be a _TYPE node, rather than a
11209 DECL, if there is no DECL available. */
11211 tree
11212 check_default_argument (decl, arg)
11213 tree decl;
11214 tree arg;
11216 tree var;
11217 tree decl_type;
11219 if (TREE_CODE (arg) == DEFAULT_ARG)
11220 /* We get a DEFAULT_ARG when looking at an in-class declaration
11221 with a default argument. Ignore the argument for now; we'll
11222 deal with it after the class is complete. */
11223 return arg;
11225 if (processing_template_decl || uses_template_parms (arg))
11226 /* We don't do anything checking until instantiation-time. Note
11227 that there may be uninstantiated arguments even for an
11228 instantiated function, since default arguments are not
11229 instantiated until they are needed. */
11230 return arg;
11232 if (TYPE_P (decl))
11234 decl_type = decl;
11235 decl = NULL_TREE;
11237 else
11238 decl_type = TREE_TYPE (decl);
11240 if (arg == error_mark_node
11241 || decl == error_mark_node
11242 || TREE_TYPE (arg) == error_mark_node
11243 || decl_type == error_mark_node)
11244 /* Something already went wrong. There's no need to check
11245 further. */
11246 return error_mark_node;
11248 /* [dcl.fct.default]
11250 A default argument expression is implicitly converted to the
11251 parameter type. */
11252 if (!TREE_TYPE (arg)
11253 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
11255 if (decl)
11256 cp_error ("default argument for `%#D' has type `%T'",
11257 decl, TREE_TYPE (arg));
11258 else
11259 cp_error ("default argument for parameter of type `%T' has type `%T'",
11260 decl_type, TREE_TYPE (arg));
11262 return error_mark_node;
11265 /* [dcl.fct.default]
11267 Local variables shall not be used in default argument
11268 expressions.
11270 The keyword `this' shall not be used in a default argument of a
11271 member function. */
11272 var = walk_tree (&arg, local_variable_p, NULL);
11273 if (var)
11275 cp_error ("default argument `%E' uses local variable `%D'",
11276 arg, var);
11277 return error_mark_node;
11280 /* All is well. */
11281 return arg;
11284 /* Decode the list of parameter types for a function type.
11285 Given the list of things declared inside the parens,
11286 return a list of types.
11288 The list we receive can have three kinds of elements:
11289 an IDENTIFIER_NODE for names given without types,
11290 a TREE_LIST node for arguments given as typespecs or names with typespecs,
11291 or void_type_node, to mark the end of an argument list
11292 when additional arguments are not permitted (... was not used).
11294 FUNCDEF_FLAG is nonzero for a function definition, 0 for
11295 a mere declaration. A nonempty identifier-list gets an error message
11296 when FUNCDEF_FLAG is zero.
11297 If FUNCDEF_FLAG is 1, then parameter types must be complete.
11298 If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
11300 If all elements of the input list contain types,
11301 we return a list of the types.
11302 If all elements contain no type (except perhaps a void_type_node
11303 at the end), we return a null list.
11304 If some have types and some do not, it is an error, and we
11305 return a null list.
11307 Also set last_function_parms to either
11308 a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
11309 A list of names is converted to a chain of PARM_DECLs
11310 by store_parm_decls so that ultimately it is always a chain of decls.
11312 Note that in C++, parameters can take default values. These default
11313 values are in the TREE_PURPOSE field of the TREE_LIST. It is
11314 an error to specify default values which are followed by parameters
11315 that have no default values, or an ELLIPSES. For simplicities sake,
11316 only parameters which are specified with their types can take on
11317 default values. */
11319 static tree
11320 grokparms (first_parm, funcdef_flag)
11321 tree first_parm;
11322 int funcdef_flag;
11324 tree result = NULL_TREE;
11325 tree decls = NULL_TREE;
11327 if (first_parm != NULL_TREE
11328 && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
11330 if (! funcdef_flag)
11331 pedwarn ("parameter names (without types) in function declaration");
11332 last_function_parms = first_parm;
11333 return NULL_TREE;
11335 else if (first_parm != NULL_TREE
11336 && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
11337 && TREE_CODE (TREE_VALUE (first_parm)) != VOID_TYPE)
11338 my_friendly_abort (145);
11339 else
11341 /* Types were specified. This is a list of declarators
11342 each represented as a TREE_LIST node. */
11343 register tree parm, chain;
11344 int any_init = 0, any_error = 0;
11346 if (first_parm != NULL_TREE)
11348 tree last_result = NULL_TREE;
11349 tree last_decl = NULL_TREE;
11351 for (parm = first_parm; parm != NULL_TREE; parm = chain)
11353 tree type = NULL_TREE, list_node = parm;
11354 register tree decl = TREE_VALUE (parm);
11355 tree init = TREE_PURPOSE (parm);
11357 chain = TREE_CHAIN (parm);
11358 /* @@ weak defense against parse errors. */
11359 if (TREE_CODE (decl) != VOID_TYPE
11360 && TREE_CODE (decl) != TREE_LIST)
11362 /* Give various messages as the need arises. */
11363 if (TREE_CODE (decl) == STRING_CST)
11364 cp_error ("invalid string constant `%E'", decl);
11365 else if (TREE_CODE (decl) == INTEGER_CST)
11366 error ("invalid integer constant in parameter list, did you forget to give parameter name?");
11367 continue;
11370 if (TREE_CODE (decl) != VOID_TYPE)
11372 decl = grokdeclarator (TREE_VALUE (decl),
11373 TREE_PURPOSE (decl),
11374 PARM, init != NULL_TREE,
11375 NULL_TREE);
11376 if (! decl || TREE_TYPE (decl) == error_mark_node)
11377 continue;
11379 /* Top-level qualifiers on the parameters are
11380 ignored for function types. */
11381 type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
11383 if (TREE_CODE (type) == VOID_TYPE)
11384 decl = void_type_node;
11385 else if (TREE_CODE (type) == METHOD_TYPE)
11387 if (DECL_NAME (decl))
11388 /* Cannot use the decl here because
11389 we don't have DECL_CONTEXT set up yet. */
11390 cp_error ("parameter `%D' invalidly declared method type",
11391 DECL_NAME (decl));
11392 else
11393 error ("parameter invalidly declared method type");
11394 type = build_pointer_type (type);
11395 TREE_TYPE (decl) = type;
11397 else if (TREE_CODE (type) == OFFSET_TYPE)
11399 if (DECL_NAME (decl))
11400 cp_error ("parameter `%D' invalidly declared offset type",
11401 DECL_NAME (decl));
11402 else
11403 error ("parameter invalidly declared offset type");
11404 type = build_pointer_type (type);
11405 TREE_TYPE (decl) = type;
11407 else if (abstract_virtuals_error (decl, type))
11408 any_error = 1; /* Seems like a good idea. */
11409 else if (POINTER_TYPE_P (type))
11411 tree t = type;
11412 while (POINTER_TYPE_P (t)
11413 || (TREE_CODE (t) == ARRAY_TYPE
11414 && TYPE_DOMAIN (t) != NULL_TREE))
11415 t = TREE_TYPE (t);
11416 if (TREE_CODE (t) == ARRAY_TYPE)
11417 cp_error ("parameter type `%T' includes %s to array of unknown bound",
11418 type,
11419 TYPE_PTR_P (type) ? "pointer" : "reference");
11423 if (TREE_CODE (decl) == VOID_TYPE)
11425 if (result == NULL_TREE)
11427 result = void_list_node;
11428 last_result = result;
11430 else
11432 TREE_CHAIN (last_result) = void_list_node;
11433 last_result = void_list_node;
11435 if (chain
11436 && (chain != void_list_node || TREE_CHAIN (chain)))
11437 error ("`void' in parameter list must be entire list");
11438 break;
11441 /* Since there is a prototype, args are passed in their own types. */
11442 DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
11443 if (PROMOTE_PROTOTYPES
11444 && (TREE_CODE (type) == INTEGER_TYPE
11445 || TREE_CODE (type) == ENUMERAL_TYPE)
11446 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
11447 DECL_ARG_TYPE (decl) = integer_type_node;
11448 if (!any_error && init)
11450 any_init++;
11451 init = check_default_argument (decl, init);
11453 else
11454 init = NULL_TREE;
11456 if (decls == NULL_TREE)
11458 decls = decl;
11459 last_decl = decls;
11461 else
11463 TREE_CHAIN (last_decl) = decl;
11464 last_decl = decl;
11466 list_node = tree_cons (init, type, NULL_TREE);
11467 if (result == NULL_TREE)
11469 result = list_node;
11470 last_result = result;
11472 else
11474 TREE_CHAIN (last_result) = list_node;
11475 last_result = list_node;
11478 if (last_result)
11479 TREE_CHAIN (last_result) = NULL_TREE;
11480 /* If there are no parameters, and the function does not end
11481 with `...', then last_decl will be NULL_TREE. */
11482 if (last_decl != NULL_TREE)
11483 TREE_CHAIN (last_decl) = NULL_TREE;
11487 last_function_parms = decls;
11489 return result;
11492 /* Called from the parser to update an element of TYPE_ARG_TYPES for some
11493 FUNCTION_TYPE with the newly parsed version of its default argument, which
11494 was previously digested as text. See snarf_defarg et al in lex.c. */
11496 void
11497 replace_defarg (arg, init)
11498 tree arg, init;
11500 if (! processing_template_decl
11501 && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
11502 cp_pedwarn ("invalid type `%T' for default argument to `%T'",
11503 TREE_TYPE (init), TREE_VALUE (arg));
11504 TREE_PURPOSE (arg) = init;
11508 copy_args_p (d)
11509 tree d;
11511 tree t = FUNCTION_ARG_CHAIN (d);
11512 if (DECL_CONSTRUCTOR_P (d)
11513 && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (d)))
11514 t = TREE_CHAIN (t);
11515 if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
11516 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
11517 == DECL_CLASS_CONTEXT (d))
11518 && (TREE_CHAIN (t) == NULL_TREE
11519 || TREE_CHAIN (t) == void_list_node
11520 || TREE_PURPOSE (TREE_CHAIN (t))))
11521 return 1;
11522 return 0;
11525 /* These memoizing functions keep track of special properties which
11526 a class may have. `grok_ctor_properties' notices whether a class
11527 has a constructor of the form X(X&), and also complains
11528 if the class has a constructor of the form X(X).
11529 `grok_op_properties' takes notice of the various forms of
11530 operator= which are defined, as well as what sorts of type conversion
11531 may apply. Both functions take a FUNCTION_DECL as an argument. */
11534 grok_ctor_properties (ctype, decl)
11535 tree ctype, decl;
11537 tree parmtypes = FUNCTION_ARG_CHAIN (decl);
11538 tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
11540 /* When a type has virtual baseclasses, a magical first int argument is
11541 added to any ctor so we can tell if the class has been initialized
11542 yet. This could screw things up in this function, so we deliberately
11543 ignore the leading int if we're in that situation. */
11544 if (TYPE_USES_VIRTUAL_BASECLASSES (ctype))
11546 my_friendly_assert (parmtypes
11547 && TREE_VALUE (parmtypes) == integer_type_node,
11548 980529);
11549 parmtypes = TREE_CHAIN (parmtypes);
11550 parmtype = TREE_VALUE (parmtypes);
11553 /* [class.copy]
11555 A non-template constructor for class X is a copy constructor if
11556 its first parameter is of type X&, const X&, volatile X& or const
11557 volatile X&, and either there are no other parameters or else all
11558 other parameters have default arguments. */
11559 if (TREE_CODE (parmtype) == REFERENCE_TYPE
11560 && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
11561 && (TREE_CHAIN (parmtypes) == NULL_TREE
11562 || TREE_CHAIN (parmtypes) == void_list_node
11563 || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11564 && !(DECL_TEMPLATE_INSTANTIATION (decl)
11565 && is_member_template (DECL_TI_TEMPLATE (decl))))
11567 TYPE_HAS_INIT_REF (ctype) = 1;
11568 if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11569 TYPE_HAS_CONST_INIT_REF (ctype) = 1;
11571 /* [class.copy]
11573 A declaration of a constructor for a class X is ill-formed if its
11574 first parameter is of type (optionally cv-qualified) X and either
11575 there are no other parameters or else all other parameters have
11576 default arguments.
11578 We *don't* complain about member template instantiations that
11579 have this form, though; they can occur as we try to decide what
11580 constructor to use during overload resolution. Since overload
11581 resolution will never prefer such a constructor to the
11582 non-template copy constructor (which is either explicitly or
11583 implicitly defined), there's no need to worry about their
11584 existence. Theoretically, they should never even be
11585 instantiated, but that's hard to forestall. */
11586 else if (TYPE_MAIN_VARIANT (parmtype) == ctype
11587 && (TREE_CHAIN (parmtypes) == NULL_TREE
11588 || TREE_CHAIN (parmtypes) == void_list_node
11589 || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11590 && !(DECL_TEMPLATE_INSTANTIATION (decl)
11591 && is_member_template (DECL_TI_TEMPLATE (decl))))
11593 cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
11594 ctype, ctype);
11595 SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
11596 return 0;
11598 else if (TREE_CODE (parmtype) == VOID_TYPE
11599 || TREE_PURPOSE (parmtypes) != NULL_TREE)
11600 TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
11602 return 1;
11605 /* An operator with this name can be either unary or binary. */
11607 static int
11608 ambi_op_p (name)
11609 tree name;
11611 return (name == ansi_opname [(int) INDIRECT_REF]
11612 || name == ansi_opname [(int) ADDR_EXPR]
11613 || name == ansi_opname [(int) NEGATE_EXPR]
11614 || name == ansi_opname[(int) POSTINCREMENT_EXPR]
11615 || name == ansi_opname[(int) POSTDECREMENT_EXPR]
11616 || name == ansi_opname [(int) CONVERT_EXPR]);
11619 /* An operator with this name can only be unary. */
11621 static int
11622 unary_op_p (name)
11623 tree name;
11625 return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
11626 || name == ansi_opname [(int) BIT_NOT_EXPR]
11627 || name == ansi_opname [(int) COMPONENT_REF]
11628 || IDENTIFIER_TYPENAME_P (name));
11631 /* Do a little sanity-checking on how they declared their operator. */
11633 void
11634 grok_op_properties (decl, virtualp, friendp)
11635 tree decl;
11636 int virtualp, friendp;
11638 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11639 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11640 tree name = DECL_NAME (decl);
11642 if (current_class_type == NULL_TREE)
11643 friendp = 1;
11645 if (! friendp)
11647 /* [class.copy]
11649 A user-declared copy assignment operator X::operator= is a
11650 non-static non-template member function of class X with
11651 exactly one parameter of type X, X&, const X&, volatile X& or
11652 const volatile X&. */
11653 if (name == ansi_opname[(int) MODIFY_EXPR]
11654 && !(DECL_TEMPLATE_INSTANTIATION (decl)
11655 && is_member_template (DECL_TI_TEMPLATE (decl))))
11657 else if (name == ansi_opname[(int) CALL_EXPR])
11658 TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
11659 else if (name == ansi_opname[(int) ARRAY_REF])
11660 TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
11661 else if (name == ansi_opname[(int) COMPONENT_REF]
11662 || name == ansi_opname[(int) MEMBER_REF])
11663 TYPE_OVERLOADS_ARROW (current_class_type) = 1;
11664 else if (name == ansi_opname[(int) NEW_EXPR])
11665 TYPE_GETS_NEW (current_class_type) |= 1;
11666 else if (name == ansi_opname[(int) DELETE_EXPR])
11667 TYPE_GETS_DELETE (current_class_type) |= 1;
11668 else if (name == ansi_opname[(int) VEC_NEW_EXPR])
11669 TYPE_GETS_NEW (current_class_type) |= 2;
11670 else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
11671 TYPE_GETS_DELETE (current_class_type) |= 2;
11674 if (name == ansi_opname[(int) NEW_EXPR]
11675 || name == ansi_opname[(int) VEC_NEW_EXPR])
11677 /* When the compiler encounters the definition of A::operator new, it
11678 doesn't look at the class declaration to find out if it's static. */
11679 if (methodp)
11680 revert_static_member_fn (&decl, NULL, NULL);
11682 /* Take care of function decl if we had syntax errors. */
11683 if (argtypes == NULL_TREE)
11684 TREE_TYPE (decl)
11685 = build_function_type (ptr_type_node,
11686 hash_tree_chain (integer_type_node,
11687 void_list_node));
11688 else
11689 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11691 else if (name == ansi_opname[(int) DELETE_EXPR]
11692 || name == ansi_opname[(int) VEC_DELETE_EXPR])
11694 if (methodp)
11695 revert_static_member_fn (&decl, NULL, NULL);
11697 if (argtypes == NULL_TREE)
11698 TREE_TYPE (decl)
11699 = build_function_type (void_type_node,
11700 hash_tree_chain (ptr_type_node,
11701 void_list_node));
11702 else
11704 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11706 if (! friendp && name == ansi_opname[(int) VEC_DELETE_EXPR]
11707 && (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
11708 != void_list_node))
11709 TYPE_VEC_DELETE_TAKES_SIZE (current_class_type) = 1;
11712 else
11714 /* An operator function must either be a non-static member function
11715 or have at least one parameter of a class, a reference to a class,
11716 an enumeration, or a reference to an enumeration. 13.4.0.6 */
11717 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11719 if (IDENTIFIER_TYPENAME_P (name)
11720 || name == ansi_opname[(int) CALL_EXPR]
11721 || name == ansi_opname[(int) MODIFY_EXPR]
11722 || name == ansi_opname[(int) COMPONENT_REF]
11723 || name == ansi_opname[(int) ARRAY_REF])
11724 cp_error ("`%D' must be a nonstatic member function", decl);
11725 else
11727 tree p = argtypes;
11729 if (DECL_STATIC_FUNCTION_P (decl))
11730 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
11732 if (p)
11733 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
11735 tree arg = TREE_VALUE (p);
11736 if (TREE_CODE (arg) == REFERENCE_TYPE)
11737 arg = TREE_TYPE (arg);
11739 /* This lets bad template code slip through. */
11740 if (IS_AGGR_TYPE (arg)
11741 || TREE_CODE (arg) == ENUMERAL_TYPE
11742 || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
11743 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11744 goto foundaggr;
11746 cp_error
11747 ("`%D' must have an argument of class or enumerated type",
11748 decl);
11749 foundaggr:
11754 if (name == ansi_opname[(int) CALL_EXPR])
11755 return; /* No restrictions on args. */
11757 if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
11759 tree t = TREE_TYPE (name);
11760 if (TREE_CODE (t) == VOID_TYPE)
11761 pedwarn ("void is not a valid type conversion operator");
11762 else if (! friendp)
11764 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11765 const char *what = 0;
11766 if (ref)
11767 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11769 if (t == current_class_type)
11770 what = "the same type";
11771 /* Don't force t to be complete here. */
11772 else if (IS_AGGR_TYPE (t)
11773 && TYPE_SIZE (t)
11774 && DERIVED_FROM_P (t, current_class_type))
11775 what = "a base class";
11777 if (what)
11778 warning ("conversion to %s%s will never use a type conversion operator",
11779 ref ? "a reference to " : "", what);
11783 if (name == ansi_opname[(int) MODIFY_EXPR])
11785 tree parmtype;
11787 if (list_length (argtypes) != 3 && methodp)
11789 cp_error ("`%D' must take exactly one argument", decl);
11790 return;
11792 parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
11794 if (copy_assignment_arg_p (parmtype, virtualp)
11795 && ! friendp)
11797 TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
11798 if (TREE_CODE (parmtype) != REFERENCE_TYPE
11799 || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11800 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
11803 else if (name == ansi_opname[(int) COND_EXPR])
11805 /* 13.4.0.3 */
11806 cp_error ("ANSI C++ prohibits overloading operator ?:");
11808 else if (ambi_op_p (name))
11810 if (list_length (argtypes) == 2)
11811 /* prefix */;
11812 else if (list_length (argtypes) == 3)
11814 if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
11815 || name == ansi_opname[(int) POSTDECREMENT_EXPR])
11816 && ! processing_template_decl
11817 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11819 if (methodp)
11820 cp_error ("postfix `%D' must take `int' as its argument",
11821 decl);
11822 else
11823 cp_error
11824 ("postfix `%D' must take `int' as its second argument",
11825 decl);
11828 else
11830 if (methodp)
11831 cp_error ("`%D' must take either zero or one argument", decl);
11832 else
11833 cp_error ("`%D' must take either one or two arguments", decl);
11836 /* More Effective C++ rule 6. */
11837 if (warn_ecpp
11838 && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
11839 || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
11841 tree arg = TREE_VALUE (argtypes);
11842 tree ret = TREE_TYPE (TREE_TYPE (decl));
11843 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11844 arg = TREE_TYPE (arg);
11845 arg = TYPE_MAIN_VARIANT (arg);
11846 if (list_length (argtypes) == 2)
11848 if (TREE_CODE (ret) != REFERENCE_TYPE
11849 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11850 arg))
11851 cp_warning ("prefix `%D' should return `%T'", decl,
11852 build_reference_type (arg));
11854 else
11856 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
11857 cp_warning ("postfix `%D' should return `%T'", decl, arg);
11861 else if (unary_op_p (name))
11863 if (list_length (argtypes) != 2)
11865 if (methodp)
11866 cp_error ("`%D' must take `void'", decl);
11867 else
11868 cp_error ("`%D' must take exactly one argument", decl);
11871 else /* if (binary_op_p (name)) */
11873 if (list_length (argtypes) != 3)
11875 if (methodp)
11876 cp_error ("`%D' must take exactly one argument", decl);
11877 else
11878 cp_error ("`%D' must take exactly two arguments", decl);
11881 /* More Effective C++ rule 7. */
11882 if (warn_ecpp
11883 && (name == ansi_opname [TRUTH_ANDIF_EXPR]
11884 || name == ansi_opname [TRUTH_ORIF_EXPR]
11885 || name == ansi_opname [COMPOUND_EXPR]))
11886 cp_warning ("user-defined `%D' always evaluates both arguments",
11887 decl);
11890 /* Effective C++ rule 23. */
11891 if (warn_ecpp
11892 && list_length (argtypes) == 3
11893 && (name == ansi_opname [PLUS_EXPR]
11894 || name == ansi_opname [MINUS_EXPR]
11895 || name == ansi_opname [TRUNC_DIV_EXPR]
11896 || name == ansi_opname [MULT_EXPR])
11897 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
11898 cp_warning ("`%D' should return by value", decl);
11900 /* 13.4.0.8 */
11901 if (argtypes)
11902 for (; argtypes != void_list_node ; argtypes = TREE_CHAIN (argtypes))
11903 if (TREE_PURPOSE (argtypes))
11905 TREE_PURPOSE (argtypes) = NULL_TREE;
11906 if (name == ansi_opname[(int) POSTINCREMENT_EXPR]
11907 || name == ansi_opname[(int) POSTDECREMENT_EXPR])
11909 if (pedantic)
11910 cp_pedwarn ("`%D' cannot have default arguments", decl);
11912 else
11913 cp_error ("`%D' cannot have default arguments", decl);
11918 static const char *
11919 tag_name (code)
11920 enum tag_types code;
11922 switch (code)
11924 case record_type:
11925 return "struct";
11926 case class_type:
11927 return "class";
11928 case union_type:
11929 return "union ";
11930 case enum_type:
11931 return "enum";
11932 default:
11933 my_friendly_abort (981122);
11937 /* Get the struct, enum or union (CODE says which) with tag NAME.
11938 Define the tag as a forward-reference if it is not defined.
11940 C++: If a class derivation is given, process it here, and report
11941 an error if multiple derivation declarations are not identical.
11943 If this is a definition, come in through xref_tag and only look in
11944 the current frame for the name (since C++ allows new names in any
11945 scope.) */
11947 tree
11948 xref_tag (code_type_node, name, globalize)
11949 tree code_type_node;
11950 tree name;
11951 int globalize;
11953 enum tag_types tag_code;
11954 enum tree_code code;
11955 int temp = 0;
11956 register tree ref, t;
11957 struct binding_level *b = current_binding_level;
11958 int got_type = 0;
11959 tree attributes = NULL_TREE;
11960 tree context = NULL_TREE;
11962 /* If we are called from the parser, code_type_node will sometimes be a
11963 TREE_LIST. This indicates that the user wrote
11964 "class __attribute__ ((foo)) bar". Extract the attributes so we can
11965 use them later. */
11966 if (TREE_CODE (code_type_node) == TREE_LIST)
11968 attributes = TREE_PURPOSE (code_type_node);
11969 code_type_node = TREE_VALUE (code_type_node);
11972 tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
11973 switch (tag_code)
11975 case record_type:
11976 case class_type:
11977 code = RECORD_TYPE;
11978 break;
11979 case union_type:
11980 code = UNION_TYPE;
11981 break;
11982 case enum_type:
11983 code = ENUMERAL_TYPE;
11984 break;
11985 default:
11986 my_friendly_abort (18);
11989 /* If a cross reference is requested, look up the type
11990 already defined for this tag and return it. */
11991 if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
11993 t = name;
11994 name = TYPE_IDENTIFIER (t);
11995 got_type = 1;
11997 else
11998 t = IDENTIFIER_TYPE_VALUE (name);
12000 if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
12001 && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
12002 t = NULL_TREE;
12004 if (! globalize)
12006 /* If we know we are defining this tag, only look it up in
12007 this scope and don't try to find it as a type. */
12008 ref = lookup_tag (code, name, b, 1);
12010 else
12012 if (t)
12014 /* [dcl.type.elab] If the identifier resolves to a
12015 typedef-name or a template type-parameter, the
12016 elaborated-type-specifier is ill-formed. */
12017 if (t != TYPE_MAIN_VARIANT (t)
12018 || (CLASS_TYPE_P (t) && TYPE_WAS_ANONYMOUS (t)))
12019 cp_pedwarn ("using typedef-name `%D' after `%s'",
12020 TYPE_NAME (t), tag_name (tag_code));
12021 else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
12022 cp_error ("using template type parameter `%T' after `%s'",
12023 t, tag_name (tag_code));
12025 ref = t;
12027 else
12028 ref = lookup_tag (code, name, b, 0);
12030 if (! ref)
12032 /* Try finding it as a type declaration. If that wins,
12033 use it. */
12034 ref = lookup_name (name, 1);
12036 if (ref != NULL_TREE
12037 && processing_template_decl
12038 && DECL_CLASS_TEMPLATE_P (ref)
12039 && template_class_depth (current_class_type) == 0)
12040 /* Since GLOBALIZE is true, we're declaring a global
12041 template, so we want this type. */
12042 ref = DECL_RESULT (ref);
12044 if (ref && TREE_CODE (ref) == TYPE_DECL
12045 && TREE_CODE (TREE_TYPE (ref)) == code)
12046 ref = TREE_TYPE (ref);
12047 else
12048 ref = NULL_TREE;
12051 if (ref && current_class_type
12052 && template_class_depth (current_class_type)
12053 && PROCESSING_REAL_TEMPLATE_DECL_P ())
12055 /* Since GLOBALIZE is non-zero, we are not looking at a
12056 definition of this tag. Since, in addition, we are currently
12057 processing a (member) template declaration of a template
12058 class, we must be very careful; consider:
12060 template <class X>
12061 struct S1
12063 template <class U>
12064 struct S2
12065 { template <class V>
12066 friend struct S1; };
12068 Here, the S2::S1 declaration should not be confused with the
12069 outer declaration. In particular, the inner version should
12070 have a template parameter of level 2, not level 1. This
12071 would be particularly important if the member declaration
12072 were instead:
12074 template <class V = U> friend struct S1;
12076 say, when we should tsubst into `U' when instantiating
12077 S2. On the other hand, when presented with:
12079 template <class T>
12080 struct S1 {
12081 template <class U>
12082 struct S2 {};
12083 template <class U>
12084 friend struct S2;
12087 we must find the inner binding eventually. We
12088 accomplish this by making sure that the new type we
12089 create to represent this declaration has the right
12090 TYPE_CONTEXT. */
12091 context = TYPE_CONTEXT (ref);
12092 ref = NULL_TREE;
12096 push_obstacks_nochange ();
12098 if (! ref)
12100 /* If no such tag is yet defined, create a forward-reference node
12101 and record it as the "definition".
12102 When a real declaration of this type is found,
12103 the forward-reference will be altered into a real type. */
12105 /* In C++, since these migrate into the global scope, we must
12106 build them on the permanent obstack. */
12108 temp = allocation_temporary_p ();
12109 if (temp)
12110 end_temporary_allocation ();
12112 if (code == ENUMERAL_TYPE)
12114 cp_error ("use of enum `%#D' without previous declaration", name);
12116 ref = make_node (ENUMERAL_TYPE);
12118 /* Give the type a default layout like unsigned int
12119 to avoid crashing if it does not get defined. */
12120 TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12121 TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
12122 TREE_UNSIGNED (ref) = 1;
12123 TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12124 TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12125 TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12127 /* Enable us to recognize when a type is created in class context.
12128 To do nested classes correctly, this should probably be cleared
12129 out when we leave this classes scope. Currently this in only
12130 done in `start_enum'. */
12132 pushtag (name, ref, globalize);
12134 else
12136 struct binding_level *old_b = class_binding_level;
12138 ref = make_lang_type (code);
12139 TYPE_CONTEXT (ref) = context;
12141 #ifdef NONNESTED_CLASSES
12142 /* Class types don't nest the way enums do. */
12143 class_binding_level = (struct binding_level *)0;
12144 #endif
12145 pushtag (name, ref, globalize);
12146 class_binding_level = old_b;
12149 else
12151 /* If it no longer looks like a nested type, make sure it's
12152 in global scope.
12153 If it is not an IDENTIFIER, this is not a declaration */
12154 if (b->namespace_p && !class_binding_level
12155 && TREE_CODE (name) == IDENTIFIER_NODE
12156 && IDENTIFIER_NAMESPACE_VALUE (name) == NULL_TREE)
12157 SET_IDENTIFIER_NAMESPACE_VALUE (name, TYPE_NAME (ref));
12159 if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
12160 redeclare_class_template (ref, current_template_parms);
12163 /* Until the type is defined, tentatively accept whatever
12164 structure tag the user hands us. */
12165 if (TYPE_SIZE (ref) == NULL_TREE
12166 && ref != current_class_type
12167 /* Have to check this, in case we have contradictory tag info. */
12168 && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12170 if (tag_code == class_type)
12171 CLASSTYPE_DECLARED_CLASS (ref) = 1;
12172 else if (tag_code == record_type)
12173 CLASSTYPE_DECLARED_CLASS (ref) = 0;
12176 pop_obstacks ();
12178 TREE_TYPE (ref) = attributes;
12180 return ref;
12183 tree
12184 xref_tag_from_type (old, id, globalize)
12185 tree old, id;
12186 int globalize;
12188 tree code_type_node;
12190 if (TREE_CODE (old) == RECORD_TYPE)
12191 code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12192 ? class_type_node : record_type_node);
12193 else
12194 code_type_node = union_type_node;
12196 if (id == NULL_TREE)
12197 id = TYPE_IDENTIFIER (old);
12199 return xref_tag (code_type_node, id, globalize);
12202 /* REF is a type (named NAME), for which we have just seen some
12203 baseclasses. BINFO is a list of those baseclasses; the
12204 TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
12205 the base-class. CODE_TYPE_NODE indicates whether REF is a class,
12206 struct, or union. */
12208 void
12209 xref_basetypes (code_type_node, name, ref, binfo)
12210 tree code_type_node;
12211 tree name, ref;
12212 tree binfo;
12214 /* In the declaration `A : X, Y, ... Z' we mark all the types
12215 (A, X, Y, ..., Z) so we can check for duplicates. */
12216 tree binfos;
12217 tree base;
12219 int i, len;
12220 enum tag_types tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12222 if (tag_code == union_type)
12224 cp_error ("derived union `%T' invalid", ref);
12225 return;
12228 len = list_length (binfo);
12229 push_obstacks (TYPE_OBSTACK (ref), TYPE_OBSTACK (ref));
12231 /* First, make sure that any templates in base-classes are
12232 instantiated. This ensures that if we call ourselves recursively
12233 we do not get confused about which classes are marked and which
12234 are not. */
12235 for (base = binfo; base; base = TREE_CHAIN (base))
12236 complete_type (TREE_VALUE (base));
12238 SET_CLASSTYPE_MARKED (ref);
12239 BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12241 for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12243 /* The base of a derived struct is public by default. */
12244 int via_public
12245 = (TREE_PURPOSE (binfo) == access_public_node
12246 || TREE_PURPOSE (binfo) == access_public_virtual_node
12247 || (tag_code != class_type
12248 && (TREE_PURPOSE (binfo) == access_default_node
12249 || TREE_PURPOSE (binfo) == access_default_virtual_node)));
12250 int via_protected
12251 = (TREE_PURPOSE (binfo) == access_protected_node
12252 || TREE_PURPOSE (binfo) == access_protected_virtual_node);
12253 int via_virtual
12254 = (TREE_PURPOSE (binfo) == access_private_virtual_node
12255 || TREE_PURPOSE (binfo) == access_protected_virtual_node
12256 || TREE_PURPOSE (binfo) == access_public_virtual_node
12257 || TREE_PURPOSE (binfo) == access_default_virtual_node);
12258 tree basetype = TREE_VALUE (binfo);
12259 tree base_binfo;
12261 if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12262 basetype = TREE_TYPE (basetype);
12263 if (!basetype
12264 || (TREE_CODE (basetype) != RECORD_TYPE
12265 && TREE_CODE (basetype) != TYPENAME_TYPE
12266 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
12267 && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
12269 cp_error ("base type `%T' fails to be a struct or class type",
12270 TREE_VALUE (binfo));
12271 continue;
12274 GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
12276 /* This code replaces similar code in layout_basetypes.
12277 We put the complete_type first for implicit `typename'. */
12278 if (TYPE_SIZE (basetype) == NULL_TREE
12279 && ! (current_template_parms && uses_template_parms (basetype)))
12281 cp_error ("base class `%T' has incomplete type", basetype);
12282 continue;
12284 else
12286 if (CLASSTYPE_MARKED (basetype))
12288 if (basetype == ref)
12289 cp_error ("recursive type `%T' undefined", basetype);
12290 else
12291 cp_error ("duplicate base type `%T' invalid", basetype);
12292 continue;
12295 if (TYPE_FOR_JAVA (basetype)
12296 && (current_lang_stack
12297 == &VARRAY_TREE (current_lang_base, 0)))
12298 TYPE_FOR_JAVA (ref) = 1;
12300 /* Note that the BINFO records which describe individual
12301 inheritances are *not* shared in the lattice! They
12302 cannot be shared because a given baseclass may be
12303 inherited with different `accessibility' by different
12304 derived classes. (Each BINFO record describing an
12305 individual inheritance contains flags which say what
12306 the `accessibility' of that particular inheritance is.) */
12308 base_binfo
12309 = make_binfo (integer_zero_node, basetype,
12310 CLASS_TYPE_P (basetype)
12311 ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12312 CLASS_TYPE_P (basetype)
12313 ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
12315 TREE_VEC_ELT (binfos, i) = base_binfo;
12316 TREE_VIA_PUBLIC (base_binfo) = via_public;
12317 TREE_VIA_PROTECTED (base_binfo) = via_protected;
12318 TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12319 BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12321 /* We need to unshare the binfos now so that lookups during class
12322 definition work. */
12323 unshare_base_binfos (base_binfo);
12325 SET_CLASSTYPE_MARKED (basetype);
12327 /* We are free to modify these bits because they are meaningless
12328 at top level, and BASETYPE is a top-level type. */
12329 if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
12331 TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
12332 TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12335 if (CLASS_TYPE_P (basetype))
12337 TYPE_GETS_NEW (ref) |= TYPE_GETS_NEW (basetype);
12338 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12341 i += 1;
12344 if (i)
12345 TREE_VEC_LENGTH (binfos) = i;
12346 else
12347 BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
12349 if (i > 1)
12350 TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
12351 else if (i == 1)
12353 tree basetype = BINFO_TYPE (TREE_VEC_ELT (binfos, 0));
12355 if (CLASS_TYPE_P (basetype))
12356 TYPE_USES_MULTIPLE_INHERITANCE (ref)
12357 = TYPE_USES_MULTIPLE_INHERITANCE (basetype);
12360 if (TYPE_USES_MULTIPLE_INHERITANCE (ref))
12361 TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12363 /* Unmark all the types. */
12364 while (--i >= 0)
12365 CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
12366 CLEAR_CLASSTYPE_MARKED (ref);
12368 /* Now that we know all the base-classes, set up the list of virtual
12369 bases. */
12370 CLASSTYPE_VBASECLASSES (ref) = get_vbase_types (ref);
12372 pop_obstacks ();
12376 /* Begin compiling the definition of an enumeration type.
12377 NAME is its name (or null if anonymous).
12378 Returns the type object, as yet incomplete.
12379 Also records info about it so that build_enumerator
12380 may be used to declare the individual values as they are read. */
12382 tree
12383 start_enum (name)
12384 tree name;
12386 register tree enumtype = NULL_TREE;
12387 struct binding_level *b = current_binding_level;
12389 /* We are wasting space here and putting these on the permanent_obstack so
12390 that typeid(local enum) will work correctly. */
12391 push_obstacks (&permanent_obstack, &permanent_obstack);
12393 /* If this is the real definition for a previous forward reference,
12394 fill in the contents in the same object that used to be the
12395 forward reference. */
12397 if (name != NULL_TREE)
12398 enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
12400 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12402 cp_error ("multiple definition of `%#T'", enumtype);
12403 cp_error_at ("previous definition here", enumtype);
12405 else
12407 enumtype = make_node (ENUMERAL_TYPE);
12408 pushtag (name, enumtype, 0);
12411 if (current_class_type)
12412 TREE_ADDRESSABLE (b->tags) = 1;
12414 /* We don't copy this value because build_enumerator needs to do it. */
12415 enum_next_value = integer_zero_node;
12416 enum_overflow = 0;
12418 GNU_xref_decl (current_function_decl, enumtype);
12419 return enumtype;
12422 /* After processing and defining all the values of an enumeration type,
12423 install their decls in the enumeration type and finish it off.
12424 ENUMTYPE is the type object and VALUES a list of name-value pairs.
12425 Returns ENUMTYPE. */
12427 tree
12428 finish_enum (enumtype)
12429 tree enumtype;
12431 register tree minnode = NULL_TREE, maxnode = NULL_TREE;
12432 /* Calculate the maximum value of any enumerator in this type. */
12434 tree values = TYPE_VALUES (enumtype);
12435 if (values)
12437 tree pair;
12439 for (pair = values; pair; pair = TREE_CHAIN (pair))
12441 tree decl;
12442 tree value;
12444 /* The TREE_VALUE is a CONST_DECL for this enumeration
12445 constant. */
12446 decl = TREE_VALUE (pair);
12448 /* The DECL_INITIAL will be NULL if we are processing a
12449 template declaration and this enumeration constant had no
12450 explicit initializer. */
12451 value = DECL_INITIAL (decl);
12452 if (value && !processing_template_decl)
12454 /* Set the TREE_TYPE for the VALUE as well. That's so
12455 that when we call decl_constant_value we get an
12456 entity of the right type (but with the constant
12457 value). Since we shouldn't ever call
12458 decl_constant_value on a template type, there's no
12459 reason to do that when processing_template_decl.
12460 And, if the expression is something like a
12461 TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
12462 wreak havoc on the intended type of the expression.
12464 Of course, there's also no point in trying to compute
12465 minimum or maximum values if we're in a template. */
12466 TREE_TYPE (value) = enumtype;
12468 if (!minnode)
12469 minnode = maxnode = value;
12470 else if (tree_int_cst_lt (maxnode, value))
12471 maxnode = value;
12472 else if (tree_int_cst_lt (value, minnode))
12473 minnode = value;
12476 if (processing_template_decl)
12477 /* If this is just a template, leave the CONST_DECL
12478 alone. That way tsubst_copy will find CONST_DECLs for
12479 CONST_DECLs, and not INTEGER_CSTs. */
12481 else
12482 /* In the list we're building up, we want the enumeration
12483 values, not the CONST_DECLs. */
12484 TREE_VALUE (pair) = value;
12487 else
12488 maxnode = minnode = integer_zero_node;
12490 TYPE_VALUES (enumtype) = nreverse (values);
12492 if (processing_template_decl)
12494 tree scope = current_scope ();
12495 if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12496 add_tree (build_min (TAG_DEFN, enumtype));
12498 else
12500 int unsignedp = tree_int_cst_sgn (minnode) >= 0;
12501 int lowprec = min_precision (minnode, unsignedp);
12502 int highprec = min_precision (maxnode, unsignedp);
12503 int precision = MAX (lowprec, highprec);
12504 tree tem;
12506 TYPE_SIZE (enumtype) = NULL_TREE;
12508 /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'. */
12510 TYPE_PRECISION (enumtype) = precision;
12511 if (unsignedp)
12512 fixup_unsigned_type (enumtype);
12513 else
12514 fixup_signed_type (enumtype);
12516 if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
12517 /* Use the width of the narrowest normal C type which is wide
12518 enough. */
12519 TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
12520 (precision, 1));
12521 else
12522 TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
12524 TYPE_SIZE (enumtype) = 0;
12525 layout_type (enumtype);
12527 /* Fix up all variant types of this enum type. */
12528 for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
12529 tem = TYPE_NEXT_VARIANT (tem))
12531 TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
12532 TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
12533 TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
12534 TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
12535 TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
12536 TYPE_MODE (tem) = TYPE_MODE (enumtype);
12537 TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
12538 TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
12539 TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
12542 /* Finish debugging output for this type. */
12543 rest_of_type_compilation (enumtype, namespace_bindings_p ());
12546 /* In start_enum we pushed obstacks. Here, we must pop them. */
12547 pop_obstacks ();
12549 return enumtype;
12552 /* Build and install a CONST_DECL for an enumeration constant of the
12553 enumeration type TYPE whose NAME and VALUE (if any) are provided.
12554 Assignment of sequential values by default is handled here. */
12556 tree
12557 build_enumerator (name, value, type)
12558 tree name;
12559 tree value;
12560 tree type;
12562 tree decl, result;
12563 tree context;
12565 /* Remove no-op casts from the value. */
12566 if (value)
12567 STRIP_TYPE_NOPS (value);
12569 if (! processing_template_decl)
12571 /* Validate and default VALUE. */
12572 if (value != NULL_TREE)
12574 if (TREE_READONLY_DECL_P (value))
12575 value = decl_constant_value (value);
12577 if (TREE_CODE (value) == INTEGER_CST)
12579 value = default_conversion (value);
12580 constant_expression_warning (value);
12582 else
12584 cp_error ("enumerator value for `%D' not integer constant", name);
12585 value = NULL_TREE;
12589 /* Default based on previous value. */
12590 if (value == NULL_TREE && ! processing_template_decl)
12592 value = enum_next_value;
12593 if (enum_overflow)
12594 cp_error ("overflow in enumeration values at `%D'", name);
12597 /* Remove no-op casts from the value. */
12598 if (value)
12599 STRIP_TYPE_NOPS (value);
12600 #if 0
12601 /* To fix MAX_VAL enum consts. (bkoz) */
12602 TREE_TYPE (value) = integer_type_node;
12603 #endif
12606 /* We always have to copy here; not all INTEGER_CSTs are unshared.
12607 Even in other cases, we will later (in finish_enum) be setting the
12608 type of VALUE. */
12609 if (value != NULL_TREE)
12610 value = copy_node (value);
12612 /* C++ associates enums with global, function, or class declarations. */
12614 context = current_scope ();
12615 if (context && context == current_class_type)
12616 /* This enum declaration is local to the class. */
12617 decl = build_lang_decl (CONST_DECL, name, type);
12618 else
12619 /* It's a global enum, or it's local to a function. (Note local to
12620 a function could mean local to a class method. */
12621 decl = build_decl (CONST_DECL, name, type);
12623 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
12624 DECL_INITIAL (decl) = value;
12625 TREE_READONLY (decl) = 1;
12627 if (context && context == current_class_type)
12628 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12629 on the TYPE_FIELDS list for `S'. (That's so that you can say
12630 things like `S::i' later.) */
12631 finish_member_declaration (decl);
12632 else
12634 pushdecl (decl);
12635 GNU_xref_decl (current_function_decl, decl);
12638 if (! processing_template_decl)
12640 /* Set basis for default for next value. */
12641 enum_next_value = build_binary_op_nodefault (PLUS_EXPR, value,
12642 integer_one_node, PLUS_EXPR);
12643 enum_overflow = tree_int_cst_lt (enum_next_value, value);
12646 result = tree_cons (name, decl, NULL_TREE);
12647 return result;
12651 static int function_depth;
12653 /* We're defining DECL. Make sure that it's type is OK. */
12655 static void
12656 check_function_type (decl)
12657 tree decl;
12659 tree fntype = TREE_TYPE (decl);
12661 /* In a function definition, arg types must be complete. */
12662 require_complete_types_for_parms (current_function_parms);
12664 if (TYPE_SIZE (complete_type (TREE_TYPE (fntype))) == NULL_TREE)
12666 cp_error ("return type `%#T' is incomplete", TREE_TYPE (fntype));
12668 /* Make it return void instead, but don't change the
12669 type of the DECL_RESULT, in case we have a named return value. */
12670 if (TREE_CODE (fntype) == METHOD_TYPE)
12672 tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
12673 TREE_TYPE (decl)
12674 = build_cplus_method_type (ctype,
12675 void_type_node,
12676 FUNCTION_ARG_CHAIN (decl));
12678 else
12679 TREE_TYPE (decl)
12680 = build_function_type (void_type_node,
12681 TYPE_ARG_TYPES (TREE_TYPE (decl)));
12682 TREE_TYPE (decl)
12683 = build_exception_variant (fntype,
12684 TYPE_RAISES_EXCEPTIONS (fntype));
12686 else
12687 abstract_virtuals_error (decl, TREE_TYPE (fntype));
12690 /* Create the FUNCTION_DECL for a function definition.
12691 DECLSPECS and DECLARATOR are the parts of the declaration;
12692 they describe the function's name and the type it returns,
12693 but twisted together in a fashion that parallels the syntax of C.
12695 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
12696 DECLARATOR is really the DECL for the function we are about to
12697 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
12698 indicating that the function is an inline defined in-class, and
12699 SF_EXPAND indicating that we should generate RTL for this
12700 function.
12702 This function creates a binding context for the function body
12703 as well as setting up the FUNCTION_DECL in current_function_decl.
12705 Returns 1 on success. If the DECLARATOR is not suitable for a function
12706 (it defines a datum instead), we return 0, which tells
12707 yyparse to report a parse error.
12709 For C++, we must first check whether that datum makes any sense.
12710 For example, "class A local_a(1,2);" means that variable local_a
12711 is an aggregate of type A, which should have a constructor
12712 applied to it with the argument list [1, 2]. */
12715 start_function (declspecs, declarator, attrs, flags)
12716 tree declspecs, declarator, attrs;
12717 int flags;
12719 tree decl1;
12720 tree ctype = NULL_TREE;
12721 tree fntype;
12722 tree restype;
12723 extern int have_extern_spec;
12724 extern int used_extern_spec;
12725 int doing_friend = 0;
12726 struct binding_level *bl;
12728 /* Sanity check. */
12729 my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
12730 my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
12732 /* This should only be done once on the top most decl. */
12733 if (have_extern_spec && !used_extern_spec)
12735 declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
12736 used_extern_spec = 1;
12739 if (flags & SF_PRE_PARSED)
12741 decl1 = declarator;
12743 fntype = TREE_TYPE (decl1);
12744 if (TREE_CODE (fntype) == METHOD_TYPE)
12745 ctype = TYPE_METHOD_BASETYPE (fntype);
12747 /* ANSI C++ June 5 1992 WP 11.4.5. A friend function defined in a
12748 class is in the (lexical) scope of the class in which it is
12749 defined. */
12750 if (!ctype && DECL_FRIEND_P (decl1))
12752 ctype = DECL_CLASS_CONTEXT (decl1);
12754 /* CTYPE could be null here if we're dealing with a template;
12755 for example, `inline friend float foo()' inside a template
12756 will have no CTYPE set. */
12757 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
12758 ctype = NULL_TREE;
12759 else
12760 doing_friend = 1;
12763 last_function_parms = DECL_ARGUMENTS (decl1);
12764 last_function_parm_tags = NULL_TREE;
12766 else
12768 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
12769 /* If the declarator is not suitable for a function definition,
12770 cause a syntax error. */
12771 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
12773 fntype = TREE_TYPE (decl1);
12775 restype = TREE_TYPE (fntype);
12776 if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
12778 cp_error ("semicolon missing after declaration of `%#T'", restype);
12779 shadow_tag (build_expr_list (NULL_TREE, restype));
12780 CLASSTYPE_GOT_SEMICOLON (restype) = 1;
12781 if (TREE_CODE (fntype) == FUNCTION_TYPE)
12782 fntype = build_function_type (integer_type_node,
12783 TYPE_ARG_TYPES (fntype));
12784 else
12785 fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
12786 integer_type_node,
12787 TYPE_ARG_TYPES (fntype));
12788 TREE_TYPE (decl1) = fntype;
12791 if (TREE_CODE (fntype) == METHOD_TYPE)
12792 ctype = TYPE_METHOD_BASETYPE (fntype);
12793 else if (DECL_MAIN_P (decl1))
12795 /* If this doesn't return integer_type, complain. */
12796 if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
12798 if (pedantic || warn_return_type)
12799 pedwarn ("return type for `main' changed to `int'");
12800 TREE_TYPE (decl1) = fntype = default_function_type;
12805 /* Sometimes we don't notice that a function is a static member, and
12806 build a METHOD_TYPE for it. Fix that up now. */
12807 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
12808 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
12810 revert_static_member_fn (&decl1, NULL, NULL);
12811 last_function_parms = TREE_CHAIN (last_function_parms);
12812 ctype = NULL_TREE;
12815 /* Warn if function was previously implicitly declared
12816 (but not if we warned then). */
12817 if (! warn_implicit
12818 && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
12819 cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
12821 /* Set up current_class_type, and enter the scope of the class, if
12822 appropriate. */
12823 if (ctype)
12824 push_nested_class (ctype, 1);
12825 else if (DECL_STATIC_FUNCTION_P (decl1))
12826 push_nested_class (DECL_CONTEXT (decl1), 2);
12828 /* Now that we have entered the scope of the class, we must restore
12829 the bindings for any template parameters surrounding DECL1, if it
12830 is an inline member template. (Order is important; consider the
12831 case where a template parameter has the same name as a field of
12832 the class.) It is not until after this point that
12833 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
12834 if (flags & SF_INCLASS_INLINE)
12835 maybe_begin_member_template_processing (decl1);
12837 /* Effective C++ rule 15. See also c_expand_return. */
12838 if (warn_ecpp
12839 && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
12840 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
12841 cp_warning ("`operator=' should return a reference to `*this'");
12843 /* Make the init_value nonzero so pushdecl knows this is not tentative.
12844 error_mark_node is replaced below (in poplevel) with the BLOCK. */
12845 if (!DECL_INITIAL (decl1))
12846 DECL_INITIAL (decl1) = error_mark_node;
12848 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
12849 SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
12850 #endif
12852 /* This function exists in static storage.
12853 (This does not mean `static' in the C sense!) */
12854 TREE_STATIC (decl1) = 1;
12856 /* We must call push_template_decl after current_class_type is set
12857 up. (If we are processing inline definitions after exiting a
12858 class scope, current_class_type will be NULL_TREE until set above
12859 by push_nested_class.) */
12860 if (processing_template_decl)
12861 decl1 = push_template_decl (decl1);
12863 /* We are now in the scope of the function being defined. */
12864 current_function_decl = decl1;
12866 /* Save the parm names or decls from this function's declarator
12867 where store_parm_decls will find them. */
12868 current_function_parms = last_function_parms;
12869 current_function_parm_tags = last_function_parm_tags;
12871 /* Make sure the parameter and return types are reasonable. When
12872 you declare a function, these types can be incomplete, but they
12873 must be complete when you define the function. */
12874 if (! processing_template_decl)
12875 check_function_type (decl1);
12877 /* Build the return declaration for the function. */
12878 restype = TREE_TYPE (fntype);
12879 if (!processing_template_decl)
12881 if (!DECL_RESULT (decl1))
12883 DECL_RESULT (decl1)
12884 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
12885 c_apply_type_quals_to_decl (CP_TYPE_QUALS (restype),
12886 DECL_RESULT (decl1));
12889 else
12890 /* Just use `void'. Nobody will ever look at this anyhow. */
12891 DECL_RESULT (decl1) = build_decl (RESULT_DECL, 0, void_type_node);
12893 /* Initialize RTL machinery. We cannot do this until
12894 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
12895 even when processing a template; this is how we get
12896 CURRENT_FUNCTION set up, and our per-function variables
12897 initialized. */
12898 bl = current_binding_level;
12899 init_function_start (decl1, input_filename, lineno);
12900 current_binding_level = bl;
12901 expanding_p = (flags & SF_EXPAND) != 0;
12903 /* Even though we're inside a function body, we still don't want to
12904 call expand_expr to calculate the size of a variable-sized array.
12905 We haven't necessarily assigned RTL to all variables yet, so it's
12906 not safe to try to expand expressions involving them. */
12907 immediate_size_expand = 0;
12908 current_function->x_dont_save_pending_sizes_p = 1;
12910 /* If we're building a statement-tree, start the tree now. */
12911 if (processing_template_decl || !expanding_p)
12912 begin_stmt_tree (&DECL_SAVED_TREE (decl1));
12914 /* Let the user know we're compiling this function. */
12915 if (processing_template_decl || !building_stmt_tree ())
12916 announce_function (decl1);
12918 /* Record the decl so that the function name is defined.
12919 If we already have a decl for this name, and it is a FUNCTION_DECL,
12920 use the old decl. */
12921 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
12923 /* A specialization is not used to guide overload resolution. */
12924 if ((flag_guiding_decls
12925 || !DECL_TEMPLATE_SPECIALIZATION (decl1))
12926 && ! DECL_FUNCTION_MEMBER_P (decl1))
12927 decl1 = pushdecl (decl1);
12928 else
12930 /* We need to set the DECL_CONTEXT. */
12931 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
12932 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
12933 /* And make sure we have enough default args. */
12934 check_default_args (decl1);
12936 DECL_MAIN_VARIANT (decl1) = decl1;
12937 fntype = TREE_TYPE (decl1);
12940 /* Reset these in case the call to pushdecl changed them. */
12941 current_function_decl = decl1;
12942 current_function->decl = decl1;
12944 /* Initialize the per-function data. */
12945 if (!DECL_PENDING_INLINE_P (decl1) && DECL_SAVED_FUNCTION_DATA (decl1))
12947 /* If we already parsed this function, and we're just expanding it
12948 now, restore saved state. */
12949 struct binding_level *bl = current_binding_level;
12950 *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (decl1);
12951 current_binding_level = bl;
12953 /* This function is being processed in whole-function mode; we
12954 already did semantic analysis. */
12955 current_function->x_whole_function_mode_p = 1;
12957 /* If we decided that we didn't want to inline this function,
12958 make sure the back-end knows that. */
12959 if (!current_function_cannot_inline)
12960 current_function_cannot_inline = cp_function_chain->cannot_inline;
12962 /* We don't need the saved data anymore. */
12963 free (DECL_SAVED_FUNCTION_DATA (decl1));
12964 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
12966 else if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
12968 /* We know that this was set up by `grokclassfn'. We do not
12969 wait until `store_parm_decls', since evil parse errors may
12970 never get us to that point. Here we keep the consistency
12971 between `current_class_type' and `current_class_ptr'. */
12972 tree t = DECL_ARGUMENTS (decl1);
12974 my_friendly_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL,
12975 162);
12976 my_friendly_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE,
12977 19990811);
12979 cp_function_chain->x_current_class_ref
12980 = build_indirect_ref (t, NULL_PTR);
12981 cp_function_chain->x_current_class_ptr = t;
12983 /* Constructors and destructors need to know whether they're "in
12984 charge" of initializing virtual base classes. */
12985 if (DECL_DESTRUCTOR_P (decl1))
12986 current_in_charge_parm = TREE_CHAIN (t);
12987 else if (DECL_CONSTRUCTOR_P (decl1)
12988 && TREE_CHAIN (t)
12989 && DECL_ARTIFICIAL (TREE_CHAIN (t))
12990 && (DECL_NAME (TREE_CHAIN (t))
12991 == in_charge_identifier))
12992 current_in_charge_parm = TREE_CHAIN (t);
12995 if (DECL_INTERFACE_KNOWN (decl1))
12997 tree ctx = hack_decl_function_context (decl1);
12999 if (DECL_NOT_REALLY_EXTERN (decl1))
13000 DECL_EXTERNAL (decl1) = 0;
13002 if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx)
13003 && TREE_PUBLIC (ctx))
13004 /* This is a function in a local class in an extern inline
13005 function. */
13006 comdat_linkage (decl1);
13008 /* If this function belongs to an interface, it is public.
13009 If it belongs to someone else's interface, it is also external.
13010 This only affects inlines and template instantiations. */
13011 else if (interface_unknown == 0
13012 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13013 || flag_alt_external_templates))
13015 if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
13016 || processing_template_decl)
13018 DECL_EXTERNAL (decl1)
13019 = (interface_only
13020 || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines
13021 && !DECL_VINDEX (decl1)));
13023 /* For WIN32 we also want to put these in linkonce sections. */
13024 maybe_make_one_only (decl1);
13026 else
13027 DECL_EXTERNAL (decl1) = 0;
13028 DECL_NOT_REALLY_EXTERN (decl1) = 0;
13029 DECL_INTERFACE_KNOWN (decl1) = 1;
13031 else if (interface_unknown && interface_only
13032 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13033 || flag_alt_external_templates))
13035 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13036 interface, we will have interface_only set but not
13037 interface_known. In that case, we don't want to use the normal
13038 heuristics because someone will supply a #pragma implementation
13039 elsewhere, and deducing it here would produce a conflict. */
13040 comdat_linkage (decl1);
13041 DECL_EXTERNAL (decl1) = 0;
13042 DECL_INTERFACE_KNOWN (decl1) = 1;
13043 DECL_DEFER_OUTPUT (decl1) = 1;
13045 else
13047 /* This is a definition, not a reference.
13048 So clear DECL_EXTERNAL. */
13049 DECL_EXTERNAL (decl1) = 0;
13051 if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
13052 && ! DECL_INTERFACE_KNOWN (decl1)
13053 /* Don't try to defer nested functions for now. */
13054 && ! hack_decl_function_context (decl1))
13055 DECL_DEFER_OUTPUT (decl1) = 1;
13056 else
13057 DECL_INTERFACE_KNOWN (decl1) = 1;
13060 if (doing_semantic_analysis_p ())
13062 pushlevel (0);
13063 current_binding_level->parm_flag = 1;
13066 if (attrs)
13067 cplus_decl_attributes (decl1, NULL_TREE, attrs);
13069 if (!building_stmt_tree ())
13071 GNU_xref_function (decl1, current_function_parms);
13072 make_function_rtl (decl1);
13075 /* Promote the value to int before returning it. */
13076 if (C_PROMOTING_INTEGER_TYPE_P (restype))
13077 restype = type_promotes_to (restype);
13079 /* If this fcn was already referenced via a block-scope `extern' decl
13080 (or an implicit decl), propagate certain information about the usage. */
13081 if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
13082 TREE_ADDRESSABLE (decl1) = 1;
13084 if (DECL_RESULT (decl1) == NULL_TREE)
13086 DECL_RESULT (decl1)
13087 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13088 TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13089 TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
13092 /* Allocate further tree nodes temporarily during compilation
13093 of this function only. Tiemann moved up here from bottom of fn. */
13094 /* If this is a nested function, then we must continue to allocate RTL
13095 on the permanent obstack in case we need to inline it later. */
13096 if (! hack_decl_function_context (decl1))
13097 temporary_allocation ();
13099 ++function_depth;
13101 if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl1))
13102 && DECL_LANGUAGE (decl1) == lang_cplusplus)
13103 dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13104 else if (DECL_CONSTRUCTOR_P (decl1))
13105 ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13107 return 1;
13110 /* Called after store_parm_decls for a function-try-block. We need to update
13111 last_parm_cleanup_insn so that the base initializers for a constructor
13112 are run within this block, not before it. */
13114 void
13115 expand_start_early_try_stmts ()
13117 expand_start_try_stmts ();
13118 last_parm_cleanup_insn = get_last_insn ();
13121 /* Store the parameter declarations into the current function declaration.
13122 This is called after parsing the parameter declarations, before
13123 digesting the body of the function.
13125 Also install to binding contour return value identifier, if any. */
13127 void
13128 store_parm_decls ()
13130 register tree fndecl = current_function_decl;
13131 register tree parm;
13132 int parms_have_cleanups = 0;
13133 tree cleanups = NULL_TREE;
13135 /* This is a list of types declared among parms in a prototype. */
13136 tree parmtags = current_function_parm_tags;
13138 /* This is a chain of any other decls that came in among the parm
13139 declarations. If a parm is declared with enum {foo, bar} x;
13140 then CONST_DECLs for foo and bar are put here. */
13141 tree nonparms = NULL_TREE;
13143 /* Create a binding level for the parms. */
13144 if (!building_stmt_tree ())
13145 expand_start_bindings (2);
13147 if (current_function_parms)
13149 /* This case is when the function was defined with an ANSI prototype.
13150 The parms already have decls, so we need not do anything here
13151 except record them as in effect
13152 and complain if any redundant old-style parm decls were written. */
13154 tree specparms = current_function_parms;
13155 tree next;
13157 if (doing_semantic_analysis_p ())
13159 /* Must clear this because it might contain TYPE_DECLs declared
13160 at class level. */
13161 storedecls (NULL_TREE);
13163 /* If we're doing semantic analysis, then we'll call pushdecl
13164 for each of these. We must do them in reverse order so that
13165 they end in the correct forward order. */
13166 specparms = nreverse (specparms);
13169 for (parm = specparms; parm; parm = next)
13171 next = TREE_CHAIN (parm);
13172 if (TREE_CODE (parm) == PARM_DECL)
13174 tree cleanup;
13176 if (doing_semantic_analysis_p ())
13178 if (DECL_NAME (parm) == NULL_TREE
13179 || TREE_CODE (TREE_TYPE (parm)) != VOID_TYPE)
13180 pushdecl (parm);
13181 else
13182 cp_error ("parameter `%D' declared void", parm);
13185 if (! building_stmt_tree ()
13186 && (cleanup = maybe_build_cleanup (parm), cleanup))
13188 expand_decl (parm);
13189 parms_have_cleanups = 1;
13191 /* Keep track of the cleanups. */
13192 cleanups = tree_cons (parm, cleanup, cleanups);
13195 else
13197 /* If we find an enum constant or a type tag,
13198 put it aside for the moment. */
13199 TREE_CHAIN (parm) = NULL_TREE;
13200 nonparms = chainon (nonparms, parm);
13204 if (doing_semantic_analysis_p ())
13206 /* Get the decls in their original chain order
13207 and record in the function. This is all and only the
13208 PARM_DECLs that were pushed into scope by the loop above. */
13209 DECL_ARGUMENTS (fndecl) = getdecls ();
13210 storetags (chainon (parmtags, gettags ()));
13212 /* We built up the cleanups in reversed order. */
13213 cleanups = nreverse (cleanups);
13216 else
13217 DECL_ARGUMENTS (fndecl) = NULL_TREE;
13219 /* Now store the final chain of decls for the arguments
13220 as the decl-chain of the current lexical scope.
13221 Put the enumerators in as well, at the front so that
13222 DECL_ARGUMENTS is not modified. */
13223 if (doing_semantic_analysis_p ())
13224 storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
13226 /* Initialize the RTL code for the function. */
13227 DECL_SAVED_INSNS (fndecl) = 0;
13228 if (! building_stmt_tree ())
13229 expand_function_start (fndecl, parms_have_cleanups);
13231 current_function_parms_stored = 1;
13233 /* If this function is `main', emit a call to `__main'
13234 to run global initializers, etc. */
13235 if (DECL_MAIN_P (fndecl) && !building_stmt_tree ())
13236 expand_main_function ();
13238 /* Now that we have initialized the parms, we can start their
13239 cleanups. We cannot do this before, since expand_decl_cleanup
13240 should not be called before the parm can be used. */
13241 if (cleanups && !building_stmt_tree ())
13242 while (cleanups)
13244 if (! expand_decl_cleanup (TREE_PURPOSE (cleanups),
13245 TREE_VALUE (cleanups)))
13246 cp_error ("parser lost in parsing declaration of `%D'",
13247 TREE_PURPOSE (cleanups));
13249 cleanups = TREE_CHAIN (cleanups);
13252 /* Create a binding contour which can be used to catch
13253 cleanup-generated temporaries. Also, if the return value needs or
13254 has initialization, deal with that now. */
13255 if (parms_have_cleanups)
13257 pushlevel (0);
13258 if (!building_stmt_tree ())
13259 expand_start_bindings (2);
13262 /* Do the starting of the exception specifications, if we have any. */
13263 if (flag_exceptions && !processing_template_decl
13264 && building_stmt_tree ()
13265 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13266 current_eh_spec_try_block = expand_start_eh_spec ();
13268 last_parm_cleanup_insn = get_last_insn ();
13269 last_dtor_insn = get_last_insn ();
13272 /* Bind a name and initialization to the return value of
13273 the current function. */
13275 void
13276 store_return_init (decl)
13277 tree decl;
13279 /* If this named return value comes in a register, put it in a
13280 pseudo-register. */
13281 if (DECL_REGISTER (decl))
13283 original_result_rtx = DECL_RTL (decl);
13284 DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
13289 /* We have finished doing semantic analysis on DECL, but have not yet
13290 generated RTL for its body. Save away our current state, so that
13291 when we want to generate RTL later we know what to do. */
13293 static void
13294 save_function_data (decl)
13295 tree decl;
13297 struct language_function *f;
13299 /* Save the language-specific per-function data so that we can
13300 get it back when we really expand this function. */
13301 my_friendly_assert (!DECL_PENDING_INLINE_P (decl),
13302 19990908);
13304 /* Make a copy. */
13305 f = ((struct language_function *)
13306 xmalloc (sizeof (struct language_function)));
13307 bcopy ((char *) cp_function_chain, (char *) f,
13308 sizeof (struct language_function));
13309 DECL_SAVED_FUNCTION_DATA (decl) = f;
13311 /* Clear out the bits we don't need. */
13312 f->x_base_init_list = NULL_TREE;
13313 f->x_member_init_list = NULL_TREE;
13314 f->x_stmt_tree.x_last_stmt = NULL_TREE;
13315 f->x_stmt_tree.x_last_expr_type = NULL_TREE;
13316 f->x_last_dtor_insn = NULL_RTX;
13317 f->x_last_parm_cleanup_insn = NULL_RTX;
13318 f->x_result_rtx = NULL_RTX;
13319 f->x_named_label_uses = NULL;
13320 f->bindings = NULL;
13322 /* When we get back here again, we will be expanding. */
13323 f->x_expanding_p = 1;
13325 /* If we've already decided that we cannot inline this function, we
13326 must remember that fact when we actually go to expand the
13327 function. */
13328 f->cannot_inline = current_function_cannot_inline;
13331 /* At the end of every constructor we generate to code to return
13332 `this'. Do that now. */
13334 static void
13335 finish_constructor_body ()
13337 /* Any return from a constructor will end up here. */
13338 add_tree (build_min_nt (LABEL_STMT, ctor_label));
13340 /* Clear CTOR_LABEL so that finish_return_stmt knows to really
13341 generate the return, rather than a goto to CTOR_LABEL. */
13342 ctor_label = NULL_TREE;
13343 /* In check_return_expr we translate an empty return from a
13344 constructor to a return of `this'. */
13345 finish_return_stmt (NULL_TREE);
13348 /* At the end of every destructor we generate code to restore virtual
13349 function tables to the values desired by base classes and to call
13350 to base class destructors. Do that now. */
13352 static void
13353 finish_destructor_body ()
13355 tree compound_stmt;
13356 tree in_charge;
13357 tree virtual_size;
13358 tree exprstmt;
13360 /* Create a block to contain all the extra code. */
13361 compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
13363 /* Any return from a destructor will end up here. */
13364 add_tree (build_min_nt (LABEL_STMT, dtor_label));
13366 /* Generate the code to call destructor on base class. If this
13367 destructor belongs to a class with virtual functions, then set
13368 the virtual function table pointer to represent the type of our
13369 base class. */
13371 /* This side-effect makes call to `build_delete' generate the code
13372 we have to have at the end of this destructor. `build_delete'
13373 will set the flag again. */
13374 TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
13376 /* These are two cases where we cannot delegate deletion. */
13377 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)
13378 || TYPE_GETS_REG_DELETE (current_class_type))
13379 in_charge = integer_zero_node;
13380 else
13381 in_charge = current_in_charge_parm;
13383 exprstmt = build_delete (current_class_type,
13384 current_class_ref,
13385 in_charge,
13386 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL,
13389 if (exprstmt != error_mark_node
13390 && (TREE_CODE (exprstmt) != NOP_EXPR
13391 || TREE_OPERAND (exprstmt, 0) != integer_zero_node
13392 || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
13394 if (exprstmt != void_zero_node)
13395 /* Don't call `expand_expr_stmt' if we're not going to do
13396 anything, since -Wall will give a diagnostic. */
13397 finish_expr_stmt (exprstmt);
13399 /* Run destructors for all virtual baseclasses. */
13400 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13402 tree vbases = nreverse (copy_list (CLASSTYPE_VBASECLASSES (current_class_type)));
13403 tree if_stmt = begin_if_stmt ();
13404 finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
13405 current_in_charge_parm,
13406 integer_two_node),
13407 if_stmt);
13409 while (vbases)
13411 if (TYPE_NEEDS_DESTRUCTOR (BINFO_TYPE (vbases)))
13413 tree vb = get_vbase
13414 (BINFO_TYPE (vbases),
13415 TYPE_BINFO (current_class_type));
13416 finish_expr_stmt
13417 (build_scoped_method_call
13418 (current_class_ref, vb, dtor_identifier,
13419 build_expr_list (NULL_TREE, integer_zero_node)));
13421 vbases = TREE_CHAIN (vbases);
13424 finish_then_clause (if_stmt);
13425 finish_if_stmt ();
13429 virtual_size = c_sizeof (current_class_type);
13431 /* At the end, call delete if that's what's requested. */
13433 /* FDIS sez: At the point of definition of a virtual destructor
13434 (including an implicit definition), non-placement operator delete
13435 shall be looked up in the scope of the destructor's class and if
13436 found shall be accessible and unambiguous.
13438 This is somewhat unclear, but I take it to mean that if the class
13439 only defines placement deletes we don't do anything here. So we
13440 pass LOOKUP_SPECULATIVELY; delete_sanity will complain for us if
13441 they ever try to delete one of these. */
13442 if (TYPE_GETS_REG_DELETE (current_class_type)
13443 || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13445 tree if_stmt;
13447 exprstmt = build_op_delete_call
13448 (DELETE_EXPR, current_class_ptr, virtual_size,
13449 LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
13451 if_stmt = begin_if_stmt ();
13452 finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
13453 current_in_charge_parm,
13454 integer_one_node),
13455 if_stmt);
13456 finish_expr_stmt (exprstmt);
13457 finish_then_clause (if_stmt);
13458 finish_if_stmt ();
13461 /* Close the block we started above. */
13462 finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
13465 /* Finish up a function declaration and compile that function
13466 all the way to assembler language output. The free the storage
13467 for the function definition.
13469 This is called after parsing the body of the function definition.
13470 LINENO is the current line number.
13472 FLAGS is a bitwise or of the following values:
13473 1 - CALL_POPLEVEL
13474 An extra call to poplevel (and expand_end_bindings) must be
13475 made to take care of the binding contour for the base
13476 initializers. This is only relevant for constructors.
13477 2 - INCLASS_INLINE
13478 We just finished processing the body of an in-class inline
13479 function definition. (This processing will have taken place
13480 after the class definition is complete.) */
13482 tree
13483 finish_function (lineno, flags)
13484 int lineno;
13485 int flags;
13487 register tree fndecl = current_function_decl;
13488 tree fntype, ctype = NULL_TREE;
13489 /* Label to use if this function is supposed to return a value. */
13490 tree no_return_label = NULL_TREE;
13491 int call_poplevel = (flags & 1) != 0;
13492 int inclass_inline = (flags & 2) != 0;
13493 int expand_p;
13494 int nested;
13496 /* When we get some parse errors, we can end up without a
13497 current_function_decl, so cope. */
13498 if (fndecl == NULL_TREE)
13499 return error_mark_node;
13501 nested = function_depth > 1;
13502 fntype = TREE_TYPE (fndecl);
13504 /* TREE_READONLY (fndecl) = 1;
13505 This caused &foo to be of type ptr-to-const-function
13506 which then got a warning when stored in a ptr-to-function variable. */
13508 /* This happens on strange parse errors. */
13509 if (! current_function_parms_stored)
13511 call_poplevel = 0;
13512 store_parm_decls ();
13515 if (building_stmt_tree ())
13517 if (DECL_CONSTRUCTOR_P (fndecl))
13519 finish_constructor_body ();
13520 if (call_poplevel)
13521 do_poplevel ();
13523 else if (DECL_DESTRUCTOR_P (fndecl) && !processing_template_decl)
13524 finish_destructor_body ();
13525 else if (DECL_MAIN_P (fndecl))
13527 /* Make it so that `main' always returns 0 by default. */
13528 #ifdef VMS
13529 finish_return_stmt (integer_one_node);
13530 #else
13531 finish_return_stmt (integer_zero_node);
13532 #endif
13535 /* Finish dealing with exception specifiers. */
13536 if (flag_exceptions && !processing_template_decl
13537 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13538 expand_end_eh_spec (TYPE_RAISES_EXCEPTIONS
13539 (TREE_TYPE (current_function_decl)),
13540 current_eh_spec_try_block);
13542 else
13544 if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
13546 tree ttype = target_type (fntype);
13547 tree parmdecl;
13549 if (IS_AGGR_TYPE (ttype))
13550 /* Let debugger know it should output info for this type. */
13551 note_debug_info_needed (ttype);
13553 for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
13555 ttype = target_type (TREE_TYPE (parmdecl));
13556 if (IS_AGGR_TYPE (ttype))
13557 /* Let debugger know it should output info for this type. */
13558 note_debug_info_needed (ttype);
13562 /* Clean house because we will need to reorder insns here. */
13563 do_pending_stack_adjust ();
13565 if (dtor_label)
13567 else if (DECL_CONSTRUCTOR_P (fndecl))
13569 /* All subobjects have been fully constructed at this point. */
13570 end_protect_partials ();
13572 if (call_poplevel)
13573 do_poplevel ();
13575 else if (return_label != NULL_RTX
13576 && flag_this_is_variable <= 0
13577 && current_function_return_value == NULL_TREE
13578 && ! DECL_NAME (DECL_RESULT (current_function_decl)))
13579 no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13581 if (flag_exceptions)
13582 expand_exception_blocks ();
13584 /* If this function is supposed to return a value, ensure that
13585 we do not fall into the cleanups by mistake. The end of our
13586 function will look like this:
13588 user code (may have return stmt somewhere)
13589 goto no_return_label
13590 cleanup_label:
13591 cleanups
13592 goto return_label
13593 no_return_label:
13594 NOTE_INSN_FUNCTION_END
13595 return_label:
13596 things for return
13598 If the user omits a return stmt in the USER CODE section, we
13599 will have a control path which reaches NOTE_INSN_FUNCTION_END.
13600 Otherwise, we won't. */
13601 if (no_return_label)
13603 DECL_CONTEXT (no_return_label) = fndecl;
13604 DECL_INITIAL (no_return_label) = error_mark_node;
13605 DECL_SOURCE_FILE (no_return_label) = input_filename;
13606 DECL_SOURCE_LINE (no_return_label) = lineno;
13607 expand_goto (no_return_label);
13610 if (cleanup_label)
13612 /* Remove the binding contour which is used
13613 to catch cleanup-generated temporaries. */
13614 expand_end_bindings (0, 0, 0);
13615 poplevel (0, 0, 0);
13617 /* Emit label at beginning of cleanup code for parameters. */
13618 emit_label (cleanup_label);
13621 /* Get return value into register if that's where it's supposed
13622 to be. */
13623 if (original_result_rtx)
13624 fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
13626 /* Finish building code that will trigger warnings if users forget
13627 to make their functions return values. */
13628 if (no_return_label || cleanup_label)
13629 emit_jump (return_label);
13630 if (no_return_label)
13632 /* We don't need to call `expand_*_return' here because we
13633 don't need any cleanups here--this path of code is only
13634 for error checking purposes. */
13635 expand_label (no_return_label);
13638 /* We hard-wired immediate_size_expand to zero in
13639 start_function. Expand_function_end will decrement this
13640 variable. So, we set the variable to one here, so that after
13641 the decrement it will remain zero. */
13642 immediate_size_expand = 1;
13644 /* Generate rtl for function exit. */
13645 expand_function_end (input_filename, lineno, 1);
13648 /* We have to save this value here in case
13649 maybe_end_member_template_processing decides to pop all the
13650 template parameters. */
13651 expand_p = !building_stmt_tree ();
13653 /* If we're saving up tree structure, tie off the function now. */
13654 if (!expand_p)
13655 finish_stmt_tree (&DECL_SAVED_TREE (fndecl));
13657 /* This must come after expand_function_end because cleanups might
13658 have declarations (from inline functions) that need to go into
13659 this function's blocks. */
13660 if (doing_semantic_analysis_p ())
13662 if (current_binding_level->parm_flag != 1)
13663 my_friendly_abort (122);
13664 poplevel (1, 0, 1);
13667 /* Remember that we were in class scope. */
13668 if (current_class_name)
13669 ctype = current_class_type;
13671 /* Must mark the RESULT_DECL as being in this function. */
13672 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
13674 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
13675 to the FUNCTION_DECL node itself. */
13676 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
13678 /* Save away current state, if appropriate. */
13679 if (!expanding_p && !processing_template_decl)
13680 save_function_data (fndecl);
13682 if (expand_p)
13684 int returns_null;
13685 int returns_value;
13686 int saved_flag_keep_inline_functions =
13687 flag_keep_inline_functions;
13689 /* So we can tell if jump_optimize sets it to 1. */
13690 can_reach_end = 0;
13692 if (DECL_CONTEXT (fndecl) != NULL_TREE
13693 && hack_decl_function_context (fndecl))
13694 /* Trick rest_of_compilation into not deferring output of this
13695 function, even if it is inline, since the rtl_obstack for
13696 this function is the function_obstack of the enclosing
13697 function and will be deallocated when the enclosing
13698 function is gone. See save_tree_status. */
13699 flag_keep_inline_functions = 1;
13701 /* Before we call rest_of_compilation (which will pop the
13702 CURRENT_FUNCTION), we must save these values. */
13703 returns_null = current_function_returns_null;
13704 returns_value = current_function_returns_value;
13706 /* If this is a nested function (like a template instantiation
13707 that we're compiling in the midst of compiling something
13708 else), push a new GC context. That will keep local variables
13709 on the stack from being collected while we're doing the
13710 compilation of this function. */
13711 if (function_depth > 1)
13712 ggc_push_context ();
13714 /* Run the optimizers and output the assembler code for this
13715 function. */
13716 if (DECL_ARTIFICIAL (fndecl))
13718 /* Do we really *want* to inline this synthesized method? */
13720 int save_fif = flag_inline_functions;
13721 flag_inline_functions = 1;
13723 /* Turn off DECL_INLINE for the moment so function_cannot_inline_p
13724 will check our size. */
13725 DECL_INLINE (fndecl) = 0;
13727 rest_of_compilation (fndecl);
13728 flag_inline_functions = save_fif;
13730 else
13731 rest_of_compilation (fndecl);
13733 /* Undo the call to ggc_push_context above. */
13734 if (function_depth > 1)
13735 ggc_pop_context ();
13737 flag_keep_inline_functions = saved_flag_keep_inline_functions;
13739 if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
13741 /* Set DECL_EXTERNAL so that assemble_external will be called as
13742 necessary. We'll clear it again in finish_file. */
13743 if (! DECL_EXTERNAL (fndecl))
13744 DECL_NOT_REALLY_EXTERN (fndecl) = 1;
13745 DECL_EXTERNAL (fndecl) = 1;
13746 mark_inline_for_output (fndecl);
13749 if (ctype && TREE_ASM_WRITTEN (fndecl))
13750 note_debug_info_needed (ctype);
13752 returns_null |= can_reach_end;
13754 /* Since we don't normally go through c_expand_return for constructors,
13755 this normally gets the wrong value.
13756 Also, named return values have their return codes emitted after
13757 NOTE_INSN_FUNCTION_END, confusing jump.c. */
13758 if (DECL_CONSTRUCTOR_P (fndecl)
13759 || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
13760 returns_null = 0;
13762 if (TREE_THIS_VOLATILE (fndecl) && returns_null)
13763 cp_warning ("`noreturn' function `%D' does return", fndecl);
13764 else if ((warn_return_type || pedantic)
13765 && returns_null
13766 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE)
13768 /* If this function returns non-void and control can drop through,
13769 complain. */
13770 cp_warning ("control reaches end of non-void function `%D'", fndecl);
13772 /* With just -W, complain only if function returns both with
13773 and without a value. */
13774 else if (extra_warnings && returns_value && returns_null)
13775 warning ("this function may return with or without a value");
13777 else
13779 /* Clear out memory we no longer need. */
13780 free_after_parsing (current_function);
13781 /* Since we never call rest_of_compilation, we never clear
13782 CURRENT_FUNCTION. Do so explicitly. */
13783 free_after_compilation (current_function);
13784 current_function = NULL;
13787 /* If this is a in-class inline definition, we may have to pop the
13788 bindings for the template parameters that we added in
13789 maybe_begin_member_template_processing when start_function was
13790 called. */
13791 if (inclass_inline)
13792 maybe_end_member_template_processing ();
13794 /* Leave the scope of the class. */
13795 if (ctype)
13796 pop_nested_class ();
13798 --function_depth;
13800 /* Free all the tree nodes making up this function. */
13801 /* Switch back to allocating nodes permanently
13802 until we start another function. */
13803 if (! nested)
13804 permanent_allocation (1);
13806 if (!DECL_SAVED_INSNS (fndecl) && !DECL_SAVED_FUNCTION_DATA (fndecl))
13808 tree t;
13810 /* Stop pointing to the local nodes about to be freed. */
13811 /* But DECL_INITIAL must remain nonzero so we know this
13812 was an actual function definition. */
13813 DECL_INITIAL (fndecl) = error_mark_node;
13814 for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
13815 DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
13818 if (DECL_STATIC_CONSTRUCTOR (fndecl))
13819 static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors);
13820 if (DECL_STATIC_DESTRUCTOR (fndecl))
13821 static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors);
13823 /* Clean up. */
13824 if (! nested)
13826 /* Let the error reporting routines know that we're outside a
13827 function. For a nested function, this value is used in
13828 pop_cp_function_context and then reset via pop_function_context. */
13829 current_function_decl = NULL_TREE;
13832 return fndecl;
13835 /* Create the FUNCTION_DECL for a function definition.
13836 DECLSPECS and DECLARATOR are the parts of the declaration;
13837 they describe the return type and the name of the function,
13838 but twisted together in a fashion that parallels the syntax of C.
13840 This function creates a binding context for the function body
13841 as well as setting up the FUNCTION_DECL in current_function_decl.
13843 Returns a FUNCTION_DECL on success.
13845 If the DECLARATOR is not suitable for a function (it defines a datum
13846 instead), we return 0, which tells yyparse to report a parse error.
13848 May return void_type_node indicating that this method is actually
13849 a friend. See grokfield for more details.
13851 Came here with a `.pushlevel' .
13853 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
13854 CHANGES TO CODE IN `grokfield'. */
13856 tree
13857 start_method (declspecs, declarator, attrlist)
13858 tree declarator, declspecs, attrlist;
13860 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
13861 attrlist);
13863 /* Something too ugly to handle. */
13864 if (fndecl == NULL_TREE)
13865 return NULL_TREE;
13867 /* Pass friends other than inline friend functions back. */
13868 if (fndecl == void_type_node)
13869 return fndecl;
13871 if (TREE_CODE (fndecl) != FUNCTION_DECL)
13872 /* Not a function, tell parser to report parse error. */
13873 return NULL_TREE;
13875 if (DECL_IN_AGGR_P (fndecl))
13877 if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
13879 if (DECL_CONTEXT (fndecl)
13880 && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
13881 cp_error ("`%D' is already defined in class %s", fndecl,
13882 TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
13884 return void_type_node;
13887 check_template_shadow (fndecl);
13889 DECL_THIS_INLINE (fndecl) = 1;
13891 if (flag_default_inline)
13892 DECL_INLINE (fndecl) = 1;
13894 /* We process method specializations in finish_struct_1. */
13895 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
13896 fndecl = push_template_decl (fndecl);
13898 /* We read in the parameters on the maybepermanent_obstack,
13899 but we won't be getting back to them until after we
13900 may have clobbered them. So the call to preserve_data
13901 will keep them safe. */
13902 preserve_data ();
13904 if (! DECL_FRIEND_P (fndecl))
13906 if (TREE_CHAIN (fndecl))
13908 fndecl = copy_node (fndecl);
13909 TREE_CHAIN (fndecl) = NULL_TREE;
13912 if (DECL_CONSTRUCTOR_P (fndecl))
13914 if (! grok_ctor_properties (current_class_type, fndecl))
13915 return void_type_node;
13917 else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
13918 grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
13921 cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0, 0);
13923 /* Make a place for the parms */
13924 pushlevel (0);
13925 current_binding_level->parm_flag = 1;
13927 DECL_IN_AGGR_P (fndecl) = 1;
13928 return fndecl;
13931 /* Go through the motions of finishing a function definition.
13932 We don't compile this method until after the whole class has
13933 been processed.
13935 FINISH_METHOD must return something that looks as though it
13936 came from GROKFIELD (since we are defining a method, after all).
13938 This is called after parsing the body of the function definition.
13939 STMTS is the chain of statements that makes up the function body.
13941 DECL is the ..._DECL that `start_method' provided. */
13943 tree
13944 finish_method (decl)
13945 tree decl;
13947 register tree fndecl = decl;
13948 tree old_initial;
13950 register tree link;
13952 if (decl == void_type_node)
13953 return decl;
13955 old_initial = DECL_INITIAL (fndecl);
13957 /* Undo the level for the parms (from start_method).
13958 This is like poplevel, but it causes nothing to be
13959 saved. Saving information here confuses symbol-table
13960 output routines. Besides, this information will
13961 be correctly output when this method is actually
13962 compiled. */
13964 /* Clear out the meanings of the local variables of this level;
13965 also record in each decl which block it belongs to. */
13967 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
13969 if (DECL_NAME (link) != NULL_TREE)
13970 pop_binding (DECL_NAME (link), link);
13971 my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
13972 DECL_CONTEXT (link) = NULL_TREE;
13975 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
13976 (HOST_WIDE_INT) current_binding_level->level_chain,
13977 current_binding_level->parm_flag,
13978 current_binding_level->keep);
13980 poplevel (0, 0, 0);
13982 DECL_INITIAL (fndecl) = old_initial;
13984 /* We used to check if the context of FNDECL was different from
13985 current_class_type as another way to get inside here. This didn't work
13986 for String.cc in libg++. */
13987 if (DECL_FRIEND_P (fndecl))
13989 CLASSTYPE_INLINE_FRIENDS (current_class_type)
13990 = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
13991 decl = void_type_node;
13994 return decl;
13997 /* Called when a new struct TYPE is defined.
13998 If this structure or union completes the type of any previous
13999 variable declaration, lay it out and output its rtl. */
14001 void
14002 hack_incomplete_structures (type)
14003 tree type;
14005 tree *list;
14007 if (current_binding_level->incomplete == NULL_TREE)
14008 return;
14010 if (!type) /* Don't do this for class templates. */
14011 return;
14013 for (list = &current_binding_level->incomplete; *list; )
14015 tree decl = TREE_VALUE (*list);
14016 if ((decl && TREE_TYPE (decl) == type)
14017 || (TREE_TYPE (decl)
14018 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14019 && TREE_TYPE (TREE_TYPE (decl)) == type))
14021 int toplevel = toplevel_bindings_p ();
14022 if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14023 && TREE_TYPE (TREE_TYPE (decl)) == type)
14024 layout_type (TREE_TYPE (decl));
14025 layout_decl (decl, 0);
14026 rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
14027 if (! toplevel)
14029 tree cleanup;
14030 expand_decl (decl);
14031 cleanup = maybe_build_cleanup (decl);
14032 expand_decl_init (decl);
14033 if (! expand_decl_cleanup (decl, cleanup))
14034 cp_error ("parser lost in parsing declaration of `%D'",
14035 decl);
14037 *list = TREE_CHAIN (*list);
14039 else
14040 list = &TREE_CHAIN (*list);
14044 /* If DECL is of a type which needs a cleanup, build that cleanup here.
14045 See build_delete for information about AUTO_DELETE.
14047 Don't build these on the momentary obstack; they must live
14048 the life of the binding contour. */
14050 static tree
14051 maybe_build_cleanup_1 (decl, auto_delete)
14052 tree decl, auto_delete;
14054 tree type = TREE_TYPE (decl);
14055 if (type != error_mark_node && TYPE_NEEDS_DESTRUCTOR (type))
14057 int temp = 0, flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
14058 tree rval;
14060 if (TREE_CODE (decl) != PARM_DECL)
14061 temp = suspend_momentary ();
14063 if (TREE_CODE (type) == ARRAY_TYPE)
14064 rval = decl;
14065 else
14067 mark_addressable (decl);
14068 rval = build_unary_op (ADDR_EXPR, decl, 0);
14071 /* Optimize for space over speed here. */
14072 if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14073 || flag_expensive_optimizations)
14074 flags |= LOOKUP_NONVIRTUAL;
14076 rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
14078 if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14079 && ! TYPE_HAS_DESTRUCTOR (type))
14080 rval = build_compound_expr (tree_cons (NULL_TREE, rval,
14081 build_expr_list (NULL_TREE, build_vbase_delete (type, decl))));
14083 if (TREE_CODE (decl) != PARM_DECL)
14084 resume_momentary (temp);
14086 return rval;
14088 return 0;
14091 /* Build a TARGET_EXPR, initializing the DECL with the VALUE. */
14093 tree
14094 build_target_expr (decl, value)
14095 tree decl;
14096 tree value;
14098 tree t;
14100 t = build (TARGET_EXPR, TREE_TYPE (decl), decl, value,
14101 maybe_build_cleanup (decl), NULL_TREE);
14102 /* We always set TREE_SIDE_EFFECTS so that expand_expr does not
14103 ignore the TARGET_EXPR. If there really turn out to be no
14104 side-effects, then the optimizer should be able to get rid of
14105 whatever code is generated anyhow. */
14106 TREE_SIDE_EFFECTS (t) = 1;
14108 return t;
14111 /* If DECL is of a type which needs a cleanup, build that cleanup
14112 here. The cleanup does free the storage with a call to delete. */
14114 tree
14115 maybe_build_cleanup_and_delete (decl)
14116 tree decl;
14118 return maybe_build_cleanup_1 (decl, integer_three_node);
14121 /* If DECL is of a type which needs a cleanup, build that cleanup
14122 here. The cleanup does not free the storage with a call a delete. */
14124 tree
14125 maybe_build_cleanup (decl)
14126 tree decl;
14128 return maybe_build_cleanup_1 (decl, integer_two_node);
14131 /* Expand a C++ expression at the statement level.
14132 This is needed to ferret out nodes which have UNKNOWN_TYPE.
14133 The C++ type checker should get all of these out when
14134 expressions are combined with other, type-providing, expressions,
14135 leaving only orphan expressions, such as:
14137 &class::bar; / / takes its address, but does nothing with it. */
14139 void
14140 cplus_expand_expr_stmt (exp)
14141 tree exp;
14143 if (stmts_are_full_exprs_p)
14144 exp = convert_to_void (exp, "statement");
14146 #if 0
14147 /* We should do this eventually, but right now this causes regex.o from
14148 libg++ to miscompile, and tString to core dump. */
14149 exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
14150 #endif
14152 /* If we don't do this, we end up down inside expand_expr
14153 trying to do TYPE_MODE on the ERROR_MARK, and really
14154 go outside the bounds of the type. */
14155 if (exp != error_mark_node)
14156 expand_expr_stmt (break_out_cleanups (exp));
14159 /* When a stmt has been parsed, this function is called. */
14161 void
14162 finish_stmt ()
14164 /* Always assume this statement was not an expression statement. If
14165 it actually was an expression statement, its our callers
14166 responsibility to fix this up. */
14167 last_expr_type = NULL_TREE;
14170 /* Change a static member function definition into a FUNCTION_TYPE, instead
14171 of the METHOD_TYPE that we create when it's originally parsed.
14173 WARNING: DO NOT pass &TREE_TYPE (decl) to FN or &TYPE_ARG_TYPES
14174 (TREE_TYPE (decl)) to ARGTYPES, as doing so will corrupt the types of
14175 other decls. Either pass the addresses of local variables or NULL. */
14177 void
14178 revert_static_member_fn (decl, fn, argtypes)
14179 tree *decl, *fn, *argtypes;
14181 tree tmp;
14182 tree function = fn ? *fn : TREE_TYPE (*decl);
14183 tree args = argtypes ? *argtypes : TYPE_ARG_TYPES (function);
14185 if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args)))
14186 != TYPE_UNQUALIFIED)
14187 cp_error ("static member function `%#D' declared with type qualifiers",
14188 *decl);
14190 args = TREE_CHAIN (args);
14191 tmp = build_function_type (TREE_TYPE (function), args);
14192 tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
14193 tmp = build_exception_variant (tmp,
14194 TYPE_RAISES_EXCEPTIONS (function));
14195 TREE_TYPE (*decl) = tmp;
14196 if (DECL_ARGUMENTS (*decl))
14197 DECL_ARGUMENTS (*decl) = TREE_CHAIN (DECL_ARGUMENTS (*decl));
14198 DECL_STATIC_FUNCTION_P (*decl) = 1;
14199 if (fn)
14200 *fn = tmp;
14201 if (argtypes)
14202 *argtypes = args;
14205 /* Initialize the variables used during compilation of a C++
14206 function. */
14208 static void
14209 push_cp_function_context (f)
14210 struct function *f;
14212 struct language_function *p
14213 = ((struct language_function *)
14214 xcalloc (1, sizeof (struct language_function)));
14215 f->language = p;
14217 /* It takes an explicit call to expand_body to generate RTL for a
14218 function. */
14219 expanding_p = 0;
14221 /* Whenever we start a new function, we destroy temporaries in the
14222 usual way. */
14223 stmts_are_full_exprs_p = 1;
14226 /* Free the language-specific parts of F, now that we've finished
14227 compiling the function. */
14229 static void
14230 pop_cp_function_context (f)
14231 struct function *f;
14233 if (f->language)
14234 free (f->language);
14235 f->language = 0;
14238 /* Mark P for GC. */
14240 static void
14241 mark_lang_function (p)
14242 struct language_function *p;
14244 if (!p)
14245 return;
14247 ggc_mark_tree (p->x_named_labels);
14248 ggc_mark_tree (p->x_ctor_label);
14249 ggc_mark_tree (p->x_dtor_label);
14250 ggc_mark_tree (p->x_base_init_list);
14251 ggc_mark_tree (p->x_member_init_list);
14252 ggc_mark_tree (p->x_current_class_ptr);
14253 ggc_mark_tree (p->x_current_class_ref);
14254 ggc_mark_tree (p->x_eh_spec_try_block);
14255 ggc_mark_tree (p->x_scope_stmt_stack);
14257 ggc_mark_rtx (p->x_last_dtor_insn);
14258 ggc_mark_rtx (p->x_last_parm_cleanup_insn);
14259 ggc_mark_rtx (p->x_result_rtx);
14261 mark_stmt_tree (&p->x_stmt_tree);
14262 mark_binding_level (&p->bindings);
14265 /* Mark the language-specific data in F for GC. */
14267 void
14268 mark_cp_function_context (f)
14269 struct function *f;
14271 mark_lang_function (f->language);
14275 in_function_p ()
14277 return function_depth != 0;
14281 void
14282 lang_mark_false_label_stack (l)
14283 struct label_node *l;
14285 /* C++ doesn't use false_label_stack. It better be NULL. */
14286 my_friendly_assert (l == NULL, 19990904);
14289 void
14290 lang_mark_tree (t)
14291 tree t;
14293 enum tree_code code = TREE_CODE (t);
14294 if (code == IDENTIFIER_NODE)
14296 struct lang_identifier *li = (struct lang_identifier *) t;
14297 struct lang_id2 *li2 = li->x;
14298 ggc_mark_tree (li->namespace_bindings);
14299 ggc_mark_tree (li->bindings);
14300 ggc_mark_tree (li->class_value);
14301 ggc_mark_tree (li->class_template_info);
14303 if (li2)
14305 ggc_mark_tree (li2->label_value);
14306 ggc_mark_tree (li2->implicit_decl);
14307 ggc_mark_tree (li2->error_locus);
14310 else if (code == CPLUS_BINDING)
14312 if (BINDING_HAS_LEVEL_P (t))
14313 mark_binding_level (&BINDING_LEVEL (t));
14314 else
14315 ggc_mark_tree (BINDING_SCOPE (t));
14316 ggc_mark_tree (BINDING_VALUE (t));
14318 else if (code == OVERLOAD)
14319 ggc_mark_tree (OVL_FUNCTION (t));
14320 else if (code == TEMPLATE_PARM_INDEX)
14321 ggc_mark_tree (TEMPLATE_PARM_DECL (t));
14322 else if (TREE_CODE_CLASS (code) == 'd')
14324 struct lang_decl *ld = DECL_LANG_SPECIFIC (t);
14326 if (ld)
14328 ggc_mark (ld);
14329 if (!DECL_GLOBAL_CTOR_P (t) && !DECL_GLOBAL_DTOR_P (t))
14330 ggc_mark_tree (ld->decl_flags.u2.access);
14331 ggc_mark_tree (ld->decl_flags.context);
14332 if (TREE_CODE (t) != NAMESPACE_DECL)
14333 ggc_mark_tree (ld->decl_flags.u.template_info);
14334 else
14335 mark_binding_level (&NAMESPACE_LEVEL (t));
14336 if (CAN_HAVE_FULL_LANG_DECL_P (t))
14338 ggc_mark_tree (ld->main_decl_variant);
14339 ggc_mark_tree (ld->befriending_classes);
14340 ggc_mark_tree (ld->saved_tree);
14341 if (TREE_CODE (t) == TYPE_DECL)
14342 ggc_mark_tree (ld->u.sorted_fields);
14343 else if (TREE_CODE (t) == FUNCTION_DECL
14344 && !DECL_PENDING_INLINE_P (t))
14345 mark_lang_function (DECL_SAVED_FUNCTION_DATA (t));
14349 else if (TREE_CODE_CLASS (code) == 't')
14351 struct lang_type *lt = TYPE_LANG_SPECIFIC (t);
14353 if (lt && !(TREE_CODE (t) == POINTER_TYPE
14354 && TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE))
14356 ggc_mark (lt);
14357 ggc_mark_tree (lt->vfields);
14358 ggc_mark_tree (lt->vbases);
14359 ggc_mark_tree (lt->tags);
14360 ggc_mark_tree (lt->search_slot);
14361 ggc_mark_tree (lt->size);
14362 ggc_mark_tree (lt->abstract_virtuals);
14363 ggc_mark_tree (lt->friend_classes);
14364 ggc_mark_tree (lt->rtti);
14365 ggc_mark_tree (lt->methods);
14366 ggc_mark_tree (lt->template_info);
14367 ggc_mark_tree (lt->befriending_classes);
14369 else if (lt)
14370 /* In the case of pointer-to-member function types, the
14371 TYPE_LANG_SPECIFIC is really just a tree. */
14372 ggc_mark_tree ((tree) lt);