Import final gcc2 snapshot (990109)
[official-gcc.git] / gcc / cp / decl.c
blobf336f06426523df0072dd073b5eab42571ef10ed
1 /* Process declarations and variables for C compiler.
2 Copyright (C) 1988, 92-97, 1998 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 <stdio.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 <sys/types.h>
39 #include <signal.h>
40 #include "obstack.h"
41 #include "defaults.h"
42 #include "output.h"
43 #include "except.h"
45 #ifdef HAVE_STDLIB_H
46 #include <stdlib.h>
47 #endif
49 #ifdef NEED_DECLARATION_FREE
50 extern void free PROTO((void *));
51 #endif
53 #define obstack_chunk_alloc xmalloc
54 #define obstack_chunk_free free
56 extern tree builtin_return_address_fndecl;
58 extern struct obstack permanent_obstack;
60 extern int current_class_depth;
62 extern tree static_ctors, static_dtors;
64 extern int static_labelno;
66 /* Stack of places to restore the search obstack back to. */
68 /* Obstack used for remembering local class declarations (like
69 enums and static (const) members. */
70 #include "stack.h"
71 struct obstack decl_obstack;
72 static struct stack_level *decl_stack;
74 #ifndef CHAR_TYPE_SIZE
75 #define CHAR_TYPE_SIZE BITS_PER_UNIT
76 #endif
78 #ifndef SHORT_TYPE_SIZE
79 #define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2))
80 #endif
82 #ifndef INT_TYPE_SIZE
83 #define INT_TYPE_SIZE BITS_PER_WORD
84 #endif
86 #ifndef LONG_TYPE_SIZE
87 #define LONG_TYPE_SIZE BITS_PER_WORD
88 #endif
90 #ifndef LONG_LONG_TYPE_SIZE
91 #define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
92 #endif
94 #ifndef WCHAR_UNSIGNED
95 #define WCHAR_UNSIGNED 0
96 #endif
98 #ifndef FLOAT_TYPE_SIZE
99 #define FLOAT_TYPE_SIZE BITS_PER_WORD
100 #endif
102 #ifndef DOUBLE_TYPE_SIZE
103 #define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
104 #endif
106 #ifndef LONG_DOUBLE_TYPE_SIZE
107 #define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
108 #endif
110 #ifndef BOOL_TYPE_SIZE
111 #ifdef SLOW_BYTE_ACCESS
112 #define BOOL_TYPE_SIZE ((SLOW_BYTE_ACCESS) ? (POINTER_SIZE) : (CHAR_TYPE_SIZE))
113 #else
114 #define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
115 #endif
116 #endif
118 /* We let tm.h override the types used here, to handle trivial differences
119 such as the choice of unsigned int or long unsigned int for size_t.
120 When machines start needing nontrivial differences in the size type,
121 it would be best to do something here to figure out automatically
122 from other information what type to use. */
124 #ifndef SIZE_TYPE
125 #define SIZE_TYPE "long unsigned int"
126 #endif
128 #ifndef PTRDIFF_TYPE
129 #define PTRDIFF_TYPE "long int"
130 #endif
132 #ifndef WCHAR_TYPE
133 #define WCHAR_TYPE "int"
134 #endif
136 static tree grokparms PROTO((tree, int));
137 static tree lookup_nested_type PROTO((tree, tree));
138 static char *redeclaration_error_message PROTO((tree, tree));
139 static void revert_static_member_fn PROTO((tree *, tree *, tree *));
140 static tree push_overloaded_decl PROTO((tree, int));
141 static void push_overloaded_decl_top_level PROTO((tree, int));
143 static struct stack_level *push_decl_level PROTO((struct stack_level *,
144 struct obstack *));
145 static void push_binding_level PROTO((struct binding_level *, int,
146 int));
147 static void pop_binding_level PROTO((void));
148 static void suspend_binding_level PROTO((void));
149 static void resume_binding_level PROTO((struct binding_level *));
150 static struct binding_level *make_binding_level PROTO((void));
151 static int namespace_bindings_p PROTO((void));
152 static void declare_namespace_level PROTO((void));
153 static tree get_unique_name PROTO((void));
154 static void signal_catch PROTO((int));
155 static void storedecls PROTO((tree));
156 static void storetags PROTO((tree));
157 static void require_complete_types_for_parms PROTO((tree));
158 static void push_overloaded_decl_1 PROTO((tree));
159 static int ambi_op_p PROTO((tree));
160 static int unary_op_p PROTO((tree));
161 static tree store_bindings PROTO((tree, tree));
162 static tree lookup_tag_reverse PROTO((tree, tree));
163 static tree obscure_complex_init PROTO((tree, tree));
164 static tree maybe_build_cleanup_1 PROTO((tree, tree));
165 static tree lookup_name_real PROTO((tree, int, int));
166 static void warn_extern_redeclared_static PROTO((tree, tree));
167 static void grok_reference_init PROTO((tree, tree, tree, tree *));
168 static tree grokfndecl PROTO((tree, tree, tree, tree, int,
169 enum overload_flags,
170 tree, tree, tree, int, int, int, int, int, int));
171 static tree grokvardecl PROTO((tree, tree, RID_BIT_TYPE *, int, int));
172 static tree lookup_tag PROTO((enum tree_code, tree,
173 struct binding_level *, int));
174 static void set_identifier_type_value_with_scope
175 PROTO((tree, tree, struct binding_level *));
176 static void record_builtin_type PROTO((enum rid, char *, tree));
177 static int member_function_or_else PROTO((tree, tree, char *));
178 static void bad_specifiers PROTO((tree, char *, int, int, int, int,
179 int));
181 /* a node which has tree code ERROR_MARK, and whose type is itself.
182 All erroneous expressions are replaced with this node. All functions
183 that accept nodes as arguments should avoid generating error messages
184 if this node is one of the arguments, since it is undesirable to get
185 multiple error messages from one error in the input. */
187 tree error_mark_node;
189 /* Erroneous argument lists can use this *IFF* they do not modify it. */
190 tree error_mark_list;
192 /* INTEGER_TYPE and REAL_TYPE nodes for the standard data types */
194 tree short_integer_type_node;
195 tree integer_type_node;
196 tree long_integer_type_node;
197 tree long_long_integer_type_node;
199 tree short_unsigned_type_node;
200 tree unsigned_type_node;
201 tree long_unsigned_type_node;
202 tree long_long_unsigned_type_node;
204 tree ptrdiff_type_node;
206 tree unsigned_char_type_node;
207 tree signed_char_type_node;
208 tree char_type_node;
209 tree wchar_type_node;
210 tree signed_wchar_type_node;
211 tree unsigned_wchar_type_node;
213 tree wchar_decl_node;
215 tree float_type_node;
216 tree double_type_node;
217 tree long_double_type_node;
219 tree complex_integer_type_node;
220 tree complex_float_type_node;
221 tree complex_double_type_node;
222 tree complex_long_double_type_node;
224 tree intQI_type_node;
225 tree intHI_type_node;
226 tree intSI_type_node;
227 tree intDI_type_node;
229 tree unsigned_intQI_type_node;
230 tree unsigned_intHI_type_node;
231 tree unsigned_intSI_type_node;
232 tree unsigned_intDI_type_node;
234 /* a VOID_TYPE node, and the same, packaged in a TREE_LIST. */
236 tree void_type_node, void_list_node;
237 tree void_zero_node;
239 /* Nodes for types `void *' and `const void *'. */
241 tree ptr_type_node;
242 static tree const_ptr_type_node;
244 /* Nodes for types `char *' and `const char *'. */
246 tree string_type_node, const_string_type_node;
248 /* Type `char[256]' or something like it.
249 Used when an array of char is needed and the size is irrelevant. */
251 tree char_array_type_node;
253 /* Type `int[256]' or something like it.
254 Used when an array of int needed and the size is irrelevant. */
256 tree int_array_type_node;
258 /* Type `wchar_t[256]' or something like it.
259 Used when a wide string literal is created. */
261 tree wchar_array_type_node;
263 /* The bool data type, and constants */
264 tree boolean_type_node, boolean_true_node, boolean_false_node;
266 /* type `int ()' -- used for implicit declaration of functions. */
268 tree default_function_type;
270 /* function types `double (double)' and `double (double, double)', etc. */
272 static tree double_ftype_double, double_ftype_double_double;
273 static tree int_ftype_int, long_ftype_long;
274 static tree float_ftype_float;
275 static tree ldouble_ftype_ldouble;
277 /* Function type `int (const void *, const void *, size_t)' */
278 static tree int_ftype_cptr_cptr_sizet;
280 /* C++ extensions */
281 tree vtable_entry_type;
282 tree delta_type_node;
283 #if 0
284 /* Old rtti stuff. */
285 tree __baselist_desc_type_node;
286 tree __i_desc_type_node, __m_desc_type_node;
287 tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
288 #endif
289 tree __t_desc_type_node;
290 #if 0
291 tree __tp_desc_type_node;
292 #endif
293 tree __access_mode_type_node;
294 tree __bltn_desc_type_node, __user_desc_type_node, __class_desc_type_node;
295 tree __ptr_desc_type_node, __attr_desc_type_node, __func_desc_type_node;
296 tree __ptmf_desc_type_node, __ptmd_desc_type_node;
297 #if 0
298 /* Not needed yet? May be needed one day? */
299 tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
300 tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
301 tree __ptmf_desc_array_type, __ptmd_desc_array_type;
302 #endif
304 tree class_star_type_node;
305 tree class_type_node, record_type_node, union_type_node, enum_type_node;
306 tree unknown_type_node;
307 tree opaque_type_node, signature_type_node;
308 tree sigtable_entry_type;
310 /* Array type `vtable_entry_type[]' */
311 tree vtbl_type_node;
313 /* namespace std */
314 tree std_node;
316 /* In a destructor, the point at which all derived class destroying
317 has been done, just before any base class destroying will be done. */
319 tree dtor_label;
321 /* In a destructor, the last insn emitted after the start of the
322 function and the parms. */
324 static rtx last_dtor_insn;
326 /* In a constructor, the last insn emitted after the start of the
327 function and the parms, but before the start of the exception
328 specification. */
330 static rtx last_parm_cleanup_insn;
332 /* In a constructor, the point at which we are ready to return
333 the pointer to the initialized object. */
335 tree ctor_label;
337 /* A FUNCTION_DECL which can call `abort'. Not necessarily the
338 one that the user will declare, but sufficient to be called
339 by routines that want to abort the program. */
341 tree abort_fndecl;
343 extern rtx cleanup_label, return_label;
345 /* If original DECL_RESULT of current function was a register,
346 but due to being an addressable named return value, would up
347 on the stack, this variable holds the named return value's
348 original location. */
349 static rtx original_result_rtx;
351 /* Sequence of insns which represents base initialization. */
352 tree base_init_expr;
354 /* C++: Keep these around to reduce calls to `get_identifier'.
355 Identifiers for `this' in member functions and the auto-delete
356 parameter for destructors. */
357 tree this_identifier, in_charge_identifier;
358 tree ctor_identifier, dtor_identifier;
359 /* Used in pointer to member functions, in vtables, and in sigtables. */
360 tree pfn_identifier, index_identifier, delta_identifier, delta2_identifier;
361 tree pfn_or_delta2_identifier, tag_identifier;
362 tree vt_off_identifier;
364 struct named_label_list
366 struct binding_level *binding_level;
367 tree names_in_scope;
368 tree label_decl;
369 char *filename_o_goto;
370 int lineno_o_goto;
371 struct named_label_list *next;
374 /* A list (chain of TREE_LIST nodes) of named label uses.
375 The TREE_PURPOSE field is the list of variables defined
376 the the label's scope defined at the point of use.
377 The TREE_VALUE field is the LABEL_DECL used.
378 The TREE_TYPE field holds `current_binding_level' at the
379 point of the label's use.
381 BWAHAHAAHAHahhahahahaah. No, no, no, said the little chicken.
383 Look at the pretty struct named_label_list. See the pretty struct
384 with the pretty named fields that describe what they do. See the
385 pretty lack of gratuitous casts. Notice the code got a lot cleaner.
387 Used only for jumps to as-yet undefined labels, since
388 jumps to defined labels can have their validity checked
389 by stmt.c. */
391 static struct named_label_list *named_label_uses = NULL;
393 /* A list of objects which have constructors or destructors
394 which reside in the global scope. The decl is stored in
395 the TREE_VALUE slot and the initializer is stored
396 in the TREE_PURPOSE slot. */
397 tree static_aggregates;
399 /* -- end of C++ */
401 /* Two expressions that are constants with value zero.
402 The first is of type `int', the second of type `void *'. */
404 tree integer_zero_node;
405 tree null_pointer_node;
407 /* The value for __null (NULL), either of type `void *' or, with -ansi,
408 an integer type of the same size. */
410 tree null_node;
412 /* A node for the integer constants 1, 2, and 3. */
414 tree integer_one_node, integer_two_node, integer_three_node;
416 /* While defining an enum type, this is 1 plus the last enumerator
417 constant value. */
419 static tree enum_next_value;
421 /* Nonzero means that there was overflow computing enum_next_value. */
423 static int enum_overflow;
425 /* Parsing a function declarator leaves a list of parameter names
426 or a chain or parameter decls here. */
428 tree last_function_parms;
430 /* Parsing a function declarator leaves here a chain of structure
431 and enum types declared in the parmlist. */
433 static tree last_function_parm_tags;
435 /* After parsing the declarator that starts a function definition,
436 `start_function' puts here the list of parameter names or chain of decls.
437 `store_parm_decls' finds it here. */
439 static tree current_function_parms;
441 /* Similar, for last_function_parm_tags. */
442 static tree current_function_parm_tags;
444 /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
445 that have names. Here so we can clear out their names' definitions
446 at the end of the function. */
448 static tree named_labels;
450 /* A list of LABEL_DECLs from outer contexts that are currently shadowed. */
452 static tree shadowed_labels;
454 /* The FUNCTION_DECL for the function currently being compiled,
455 or 0 if between functions. */
456 tree current_function_decl;
458 /* Set to 0 at beginning of a function definition, set to 1 if
459 a return statement that specifies a return value is seen. */
461 int current_function_returns_value;
463 /* Set to 0 at beginning of a function definition, set to 1 if
464 a return statement with no argument is seen. */
466 int current_function_returns_null;
468 /* Set to 0 at beginning of a function definition, and whenever
469 a label (case or named) is defined. Set to value of expression
470 returned from function when that value can be transformed into
471 a named return value. */
473 tree current_function_return_value;
475 /* Set to nonzero by `grokdeclarator' for a function
476 whose return type is defaulted, if warnings for this are desired. */
478 static int warn_about_return_type;
480 /* Nonzero means give `double' the same size as `float'. */
482 extern int flag_short_double;
484 /* Nonzero means don't recognize any builtin functions. */
486 extern int flag_no_builtin;
488 /* Nonzero means don't recognize the non-ANSI builtin functions.
489 -ansi sets this. */
491 extern int flag_no_nonansi_builtin;
493 /* Nonzero means enable obscure ANSI features and disable GNU extensions
494 that might cause ANSI-compliant code to be miscompiled. */
496 extern int flag_ansi;
498 /* Nonzero if we want to support huge (> 2^(sizeof(short)*8-1) bytes)
499 objects. */
500 extern int flag_huge_objects;
502 /* Nonzero if we want to conserve space in the .o files. We do this
503 by putting uninitialized data and runtime initialized data into
504 .common instead of .data at the expense of not flagging multiple
505 definitions. */
506 extern int flag_conserve_space;
508 /* Pointers to the base and current top of the language name stack. */
510 extern tree *current_lang_base, *current_lang_stack;
512 /* C and C++ flags are in decl2.c. */
514 /* Set to 0 at beginning of a constructor, set to 1
515 if that function does an allocation before referencing its
516 instance variable. */
517 static int current_function_assigns_this;
518 int current_function_just_assigned_this;
520 /* Set to 0 at beginning of a function. Set non-zero when
521 store_parm_decls is called. Don't call store_parm_decls
522 if this flag is non-zero! */
523 int current_function_parms_stored;
525 /* Flag used when debugging spew.c */
527 extern int spew_debug;
529 /* This is a copy of the class_shadowed list of the previous class binding
530 contour when at global scope. It's used to reset IDENTIFIER_CLASS_VALUEs
531 when entering another class scope (i.e. a cache miss). */
532 extern tree previous_class_values;
534 /* A expression of value 0 with the same precision as a sizetype
535 node, but signed. */
536 tree signed_size_zero_node;
539 /* Allocate a level of searching. */
541 static
542 struct stack_level *
543 push_decl_level (stack, obstack)
544 struct stack_level *stack;
545 struct obstack *obstack;
547 struct stack_level tem;
548 tem.prev = stack;
550 return push_stack_level (obstack, (char *)&tem, sizeof (tem));
553 /* For each binding contour we allocate a binding_level structure
554 which records the names defined in that contour.
555 Contours include:
556 0) the global one
557 1) one for each function definition,
558 where internal declarations of the parameters appear.
559 2) one for each compound statement,
560 to record its declarations.
562 The current meaning of a name can be found by searching the levels
563 from the current one out to the global one.
565 Off to the side, may be the class_binding_level. This exists only
566 to catch class-local declarations. It is otherwise nonexistent.
568 Also there may be binding levels that catch cleanups that must be
569 run when exceptions occur. */
571 /* Note that the information in the `names' component of the global contour
572 is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers. */
574 struct binding_level
576 /* A chain of _DECL nodes for all variables, constants, functions,
577 and typedef types. These are in the reverse of the order
578 supplied. */
579 tree names;
581 /* A list of structure, union and enum definitions, for looking up
582 tag names.
583 It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
584 or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
585 or ENUMERAL_TYPE node.
587 C++: the TREE_VALUE nodes can be simple types for
588 component_bindings. */
589 tree tags;
591 /* For each level, a list of shadowed outer-level local definitions
592 to be restored when this level is popped.
593 Each link is a TREE_LIST whose TREE_PURPOSE is an identifier and
594 whose TREE_VALUE is its old definition (a kind of ..._DECL node). */
595 tree shadowed;
597 /* Same, for IDENTIFIER_CLASS_VALUE. */
598 tree class_shadowed;
600 /* Same, for IDENTIFIER_TYPE_VALUE. */
601 tree type_shadowed;
603 /* For each level (except not the global one),
604 a chain of BLOCK nodes for all the levels
605 that were entered and exited one level down. */
606 tree blocks;
608 /* The BLOCK node for this level, if one has been preallocated.
609 If 0, the BLOCK is allocated (if needed) when the level is popped. */
610 tree this_block;
612 /* The binding level which this one is contained in (inherits from). */
613 struct binding_level *level_chain;
615 /* List of decls in `names' that have incomplete
616 structure or union types. */
617 tree incomplete;
619 /* List of VAR_DECLS saved from a previous for statement.
620 These would be dead in ANSI-conforming code, but might
621 be referenced in ARM-era code. */
622 tree dead_vars_from_for;
624 /* 1 for the level that holds the parameters of a function.
625 2 for the level that holds a class declaration.
626 3 for levels that hold parameter declarations. */
627 unsigned parm_flag : 4;
629 /* 1 means make a BLOCK for this level regardless of all else.
630 2 for temporary binding contours created by the compiler. */
631 unsigned keep : 3;
633 /* Nonzero if this level "doesn't exist" for tags. */
634 unsigned tag_transparent : 1;
636 /* Nonzero if this level can safely have additional
637 cleanup-needing variables added to it. */
638 unsigned more_cleanups_ok : 1;
639 unsigned have_cleanups : 1;
641 /* Nonzero if this level is for storing the decls for template
642 parameters and generic decls; these decls will be discarded and
643 replaced with a TEMPLATE_DECL. */
644 unsigned pseudo_global : 1;
646 /* This is set for a namespace binding level. */
647 unsigned namespace_p : 1;
649 /* True if this level is that of a for-statement where we need to
650 worry about ambiguous (ARM or ANSI) scope rules. */
651 unsigned is_for_scope : 1;
653 /* Two bits left for this word. */
655 #if defined(DEBUG_CP_BINDING_LEVELS)
656 /* Binding depth at which this level began. */
657 unsigned binding_depth;
658 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
661 #define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
663 /* The (non-class) binding level currently in effect. */
665 static struct binding_level *current_binding_level;
667 /* The binding level of the current class, if any. */
669 static struct binding_level *class_binding_level;
671 /* The current (class or non-class) binding level currently in effect. */
673 #define inner_binding_level \
674 (class_binding_level ? class_binding_level : current_binding_level)
676 /* A chain of binding_level structures awaiting reuse. */
678 static struct binding_level *free_binding_level;
680 /* The outermost binding level, for names of file scope.
681 This is created when the compiler is started and exists
682 through the entire run. */
684 static struct binding_level *global_binding_level;
686 /* Binding level structures are initialized by copying this one. */
688 static struct binding_level clear_binding_level;
690 /* Nonzero means unconditionally make a BLOCK for the next level pushed. */
692 static int keep_next_level_flag;
694 #if defined(DEBUG_CP_BINDING_LEVELS)
695 static int binding_depth = 0;
696 static int is_class_level = 0;
698 static void
699 indent ()
701 register unsigned i;
703 for (i = 0; i < binding_depth*2; i++)
704 putc (' ', stderr);
706 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
708 static tree pushdecl_with_scope PROTO((tree, struct binding_level *));
710 static void
711 push_binding_level (newlevel, tag_transparent, keep)
712 struct binding_level *newlevel;
713 int tag_transparent, keep;
715 /* Add this level to the front of the chain (stack) of levels that
716 are active. */
717 *newlevel = clear_binding_level;
718 if (class_binding_level)
720 newlevel->level_chain = class_binding_level;
721 class_binding_level = (struct binding_level *)0;
723 else
725 newlevel->level_chain = current_binding_level;
727 current_binding_level = newlevel;
728 newlevel->tag_transparent = tag_transparent;
729 newlevel->more_cleanups_ok = 1;
730 newlevel->keep = keep;
731 #if defined(DEBUG_CP_BINDING_LEVELS)
732 newlevel->binding_depth = binding_depth;
733 indent ();
734 fprintf (stderr, "push %s level 0x%08x line %d\n",
735 (is_class_level) ? "class" : "block", newlevel, lineno);
736 is_class_level = 0;
737 binding_depth++;
738 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
741 static void
742 pop_binding_level ()
744 if (class_binding_level)
745 current_binding_level = class_binding_level;
747 if (global_binding_level)
749 /* cannot pop a level, if there are none left to pop. */
750 if (current_binding_level == global_binding_level)
751 my_friendly_abort (123);
753 /* Pop the current level, and free the structure for reuse. */
754 #if defined(DEBUG_CP_BINDING_LEVELS)
755 binding_depth--;
756 indent ();
757 fprintf (stderr, "pop %s level 0x%08x line %d\n",
758 (is_class_level) ? "class" : "block",
759 current_binding_level, lineno);
760 if (is_class_level != (current_binding_level == class_binding_level))
762 indent ();
763 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
765 is_class_level = 0;
766 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
768 register struct binding_level *level = current_binding_level;
769 current_binding_level = current_binding_level->level_chain;
770 level->level_chain = free_binding_level;
771 #if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
772 if (level->binding_depth != binding_depth)
773 abort ();
774 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
775 free_binding_level = level;
777 class_binding_level = current_binding_level;
778 if (class_binding_level->parm_flag != 2)
779 class_binding_level = 0;
780 while (current_binding_level->parm_flag == 2)
781 current_binding_level = current_binding_level->level_chain;
785 static void
786 suspend_binding_level ()
788 if (class_binding_level)
789 current_binding_level = class_binding_level;
791 if (global_binding_level)
793 /* cannot suspend a level, if there are none left to suspend. */
794 if (current_binding_level == global_binding_level)
795 my_friendly_abort (123);
797 /* Suspend the current level. */
798 #if defined(DEBUG_CP_BINDING_LEVELS)
799 binding_depth--;
800 indent ();
801 fprintf (stderr, "suspend %s level 0x%08x line %d\n",
802 (is_class_level) ? "class" : "block",
803 current_binding_level, lineno);
804 if (is_class_level != (current_binding_level == class_binding_level))
806 indent ();
807 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
809 is_class_level = 0;
810 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
812 current_binding_level = current_binding_level->level_chain;
813 class_binding_level = current_binding_level;
814 if (class_binding_level->parm_flag != 2)
815 class_binding_level = 0;
816 while (current_binding_level->parm_flag == 2)
817 current_binding_level = current_binding_level->level_chain;
821 static void
822 resume_binding_level (b)
823 struct binding_level *b;
825 if (class_binding_level)
827 #if 1
828 /* These are here because we cannot deal with shadows yet. */
829 sorry ("cannot resume a namespace inside class");
830 return;
831 #else
832 b->level_chain = class_binding_level;
833 class_binding_level = (struct binding_level *)0;
834 #endif
836 else
838 #if 1
839 /* These are here because we cannot deal with shadows yet. */
840 if (b->level_chain != current_binding_level)
842 sorry ("cannot resume a namespace inside a different namespace");
843 return;
845 #endif
846 b->level_chain = current_binding_level;
848 current_binding_level = b;
849 #if defined(DEBUG_CP_BINDING_LEVELS)
850 b->binding_depth = binding_depth;
851 indent ();
852 fprintf (stderr, "resume %s level 0x%08x line %d\n",
853 (is_class_level) ? "class" : "block", b, lineno);
854 is_class_level = 0;
855 binding_depth++;
856 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
859 /* Create a new `struct binding_level'. */
861 static
862 struct binding_level *
863 make_binding_level ()
865 /* NOSTRICT */
866 return (struct binding_level *) xmalloc (sizeof (struct binding_level));
869 /* Nonzero if we are currently in the global binding level. */
872 global_bindings_p ()
874 return current_binding_level == global_binding_level;
877 /* Nonzero if we are currently in a toplevel binding level. This
878 means either the global binding level or a namespace in a toplevel
879 binding level. */
882 toplevel_bindings_p ()
884 struct binding_level *b = current_binding_level;
886 while (1)
888 if (b == global_binding_level)
889 return 1;
890 if (b->pseudo_global)
891 return 1;
892 if (! b->namespace_p)
893 return 0;
894 b=b->level_chain;
898 /* Nonzero if this is a namespace scope. */
900 static int
901 namespace_bindings_p ()
903 return current_binding_level->namespace_p;
906 void
907 keep_next_level ()
909 keep_next_level_flag = 1;
912 /* Nonzero if the current level needs to have a BLOCK made. */
915 kept_level_p ()
917 return (current_binding_level->blocks != NULL_TREE
918 || current_binding_level->keep
919 || current_binding_level->names != NULL_TREE
920 || (current_binding_level->tags != NULL_TREE
921 && !current_binding_level->tag_transparent));
924 /* Identify this binding level as a level of parameters. */
926 void
927 declare_parm_level ()
929 current_binding_level->parm_flag = 1;
932 void
933 declare_pseudo_global_level ()
935 current_binding_level->pseudo_global = 1;
938 static void
939 declare_namespace_level ()
941 current_binding_level->namespace_p = 1;
945 pseudo_global_level_p ()
947 return current_binding_level->pseudo_global;
950 void
951 set_class_shadows (shadows)
952 tree shadows;
954 class_binding_level->class_shadowed = shadows;
957 /* Enter a new binding level.
958 If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
959 not for that of tags. */
961 void
962 pushlevel (tag_transparent)
963 int tag_transparent;
965 register struct binding_level *newlevel = NULL_BINDING_LEVEL;
967 /* If this is the top level of a function,
968 just make sure that NAMED_LABELS is 0.
969 They should have been set to 0 at the end of the previous function. */
971 if (current_binding_level == global_binding_level)
972 my_friendly_assert (named_labels == NULL_TREE, 134);
974 /* Reuse or create a struct for this binding level. */
976 #if defined(DEBUG_CP_BINDING_LEVELS)
977 if (0)
978 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
979 if (free_binding_level)
980 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
982 newlevel = free_binding_level;
983 free_binding_level = free_binding_level->level_chain;
985 else
987 newlevel = make_binding_level ();
990 push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
991 GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
992 keep_next_level_flag = 0;
995 void
996 note_level_for_for ()
998 current_binding_level->is_for_scope = 1;
1001 void
1002 pushlevel_temporary (tag_transparent)
1003 int tag_transparent;
1005 pushlevel (tag_transparent);
1006 current_binding_level->keep = 2;
1007 clear_last_expr ();
1009 /* Note we don't call push_momentary() here. Otherwise, it would cause
1010 cleanups to be allocated on the momentary obstack, and they will be
1011 overwritten by the next statement. */
1013 expand_start_bindings (0);
1016 /* Exit a binding level.
1017 Pop the level off, and restore the state of the identifier-decl mappings
1018 that were in effect when this level was entered.
1020 If KEEP == 1, this level had explicit declarations, so
1021 and create a "block" (a BLOCK node) for the level
1022 to record its declarations and subblocks for symbol table output.
1024 If KEEP == 2, this level's subblocks go to the front,
1025 not the back of the current binding level. This happens,
1026 for instance, when code for constructors and destructors
1027 need to generate code at the end of a function which must
1028 be moved up to the front of the function.
1030 If FUNCTIONBODY is nonzero, this level is the body of a function,
1031 so create a block as if KEEP were set and also clear out all
1032 label names.
1034 If REVERSE is nonzero, reverse the order of decls before putting
1035 them into the BLOCK. */
1037 tree
1038 poplevel (keep, reverse, functionbody)
1039 int keep;
1040 int reverse;
1041 int functionbody;
1043 register tree link;
1044 /* The chain of decls was accumulated in reverse order.
1045 Put it into forward order, just for cleanliness. */
1046 tree decls;
1047 int tmp = functionbody;
1048 int real_functionbody = current_binding_level->keep == 2
1049 ? ((functionbody = 0), tmp) : functionbody;
1050 tree tags = functionbody >= 0 ? current_binding_level->tags : 0;
1051 tree subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1052 tree block = NULL_TREE;
1053 tree decl;
1054 int block_previously_created;
1056 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1057 (HOST_WIDE_INT) current_binding_level->level_chain,
1058 current_binding_level->parm_flag,
1059 current_binding_level->keep);
1061 if (current_binding_level->keep == 1)
1062 keep = 1;
1064 /* Get the decls in the order they were written.
1065 Usually current_binding_level->names is in reverse order.
1066 But parameter decls were previously put in forward order. */
1068 if (reverse)
1069 current_binding_level->names
1070 = decls = nreverse (current_binding_level->names);
1071 else
1072 decls = current_binding_level->names;
1074 /* Output any nested inline functions within this block
1075 if they weren't already output. */
1077 for (decl = decls; decl; decl = TREE_CHAIN (decl))
1078 if (TREE_CODE (decl) == FUNCTION_DECL
1079 && ! TREE_ASM_WRITTEN (decl)
1080 && DECL_INITIAL (decl) != NULL_TREE
1081 && TREE_ADDRESSABLE (decl)
1082 && decl_function_context (decl) == current_function_decl)
1084 /* If this decl was copied from a file-scope decl
1085 on account of a block-scope extern decl,
1086 propagate TREE_ADDRESSABLE to the file-scope decl. */
1087 if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1088 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1089 else
1091 push_function_context ();
1092 output_inline_function (decl);
1093 pop_function_context ();
1097 /* If there were any declarations or structure tags in that level,
1098 or if this level is a function body,
1099 create a BLOCK to record them for the life of this function. */
1101 block = NULL_TREE;
1102 block_previously_created = (current_binding_level->this_block != NULL_TREE);
1103 if (block_previously_created)
1104 block = current_binding_level->this_block;
1105 else if (keep == 1 || functionbody)
1106 block = make_node (BLOCK);
1107 if (block != NULL_TREE)
1109 if (block_previously_created)
1111 if (decls || tags || subblocks)
1113 if (BLOCK_VARS (block) || BLOCK_TYPE_TAGS (block))
1115 warning ("internal compiler error: debugging info corrupted");
1117 BLOCK_VARS (block) = decls;
1118 BLOCK_TYPE_TAGS (block) = tags;
1120 /* We can have previous subblocks and new subblocks when
1121 doing fixup_gotos with complex cleanups. We chain the new
1122 subblocks onto the end of any pre-existing subblocks. */
1123 BLOCK_SUBBLOCKS (block) = chainon (BLOCK_SUBBLOCKS (block),
1124 subblocks);
1126 /* If we created the block earlier on, and we are just
1127 diddling it now, then it already should have a proper
1128 BLOCK_END_NOTE value associated with it. */
1130 else
1132 BLOCK_VARS (block) = decls;
1133 BLOCK_TYPE_TAGS (block) = tags;
1134 BLOCK_SUBBLOCKS (block) = subblocks;
1135 /* Otherwise, for a new block, install a new BLOCK_END_NOTE value. */
1136 remember_end_note (block);
1140 /* In each subblock, record that this is its superior. */
1142 if (keep >= 0)
1143 for (link = subblocks; link; link = TREE_CHAIN (link))
1144 BLOCK_SUPERCONTEXT (link) = block;
1146 /* Clear out the meanings of the local variables of this level. */
1148 if (current_binding_level->is_for_scope && flag_new_for_scope == 1)
1150 struct binding_level *outer = current_binding_level->level_chain;
1151 for (link = decls; link; link = TREE_CHAIN (link))
1153 if (TREE_CODE (link) == VAR_DECL)
1154 DECL_DEAD_FOR_LOCAL (link) = 1;
1155 else
1156 IDENTIFIER_LOCAL_VALUE (DECL_NAME (link)) = NULL_TREE;
1159 /* Save declarations made in a 'for' statement so we can support pre-ANSI
1160 'for' scoping semantics. */
1162 for (link = current_binding_level->shadowed; link; link = TREE_CHAIN (link))
1164 tree id = TREE_PURPOSE (link);
1165 tree decl = IDENTIFIER_LOCAL_VALUE (id);
1167 if (decl && DECL_DEAD_FOR_LOCAL (decl))
1169 /* In this case keep the dead for-decl visible,
1170 but remember what (if anything) it shadowed. */
1171 DECL_SHADOWED_FOR_VAR (decl) = TREE_VALUE (link);
1172 TREE_CHAIN (decl) = outer->dead_vars_from_for;
1173 outer->dead_vars_from_for = decl;
1175 else
1176 IDENTIFIER_LOCAL_VALUE (id) = TREE_VALUE (link);
1179 else /* Not special for scope. */
1181 for (link = decls; link; link = TREE_CHAIN (link))
1183 if (DECL_NAME (link) != NULL_TREE)
1185 /* If the ident. was used or addressed via a local extern decl,
1186 don't forget that fact. */
1187 if (DECL_EXTERNAL (link))
1189 if (TREE_USED (link))
1190 TREE_USED (DECL_ASSEMBLER_NAME (link)) = 1;
1191 if (TREE_ADDRESSABLE (link))
1192 TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (link)) = 1;
1194 IDENTIFIER_LOCAL_VALUE (DECL_NAME (link)) = NULL_TREE;
1198 /* Restore all name-meanings of the outer levels
1199 that were shadowed by this level. */
1201 for (link = current_binding_level->shadowed;
1202 link; link = TREE_CHAIN (link))
1203 IDENTIFIER_LOCAL_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
1205 /* We first restore the regular decls and *then* the dead_vars_from_for
1206 to handle this case:
1208 int i; // i#1
1210 for (int i; ; ) { ...} // i#2
1211 int i; // i#3
1212 } // we are here
1214 In this case, we want remove the binding for i#3, restoring
1215 that of i#2. Then we want to remove the binding for i#2,
1216 and restore that of i#1. */
1218 link = current_binding_level->dead_vars_from_for;
1219 for (; link != NULL_TREE; link = TREE_CHAIN (link))
1221 tree id = DECL_NAME (link);
1222 if (IDENTIFIER_LOCAL_VALUE (id) == link)
1223 IDENTIFIER_LOCAL_VALUE (id) = DECL_SHADOWED_FOR_VAR (link);
1226 for (link = current_binding_level->class_shadowed;
1227 link; link = TREE_CHAIN (link))
1228 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
1229 for (link = current_binding_level->type_shadowed;
1230 link; link = TREE_CHAIN (link))
1231 IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
1234 /* If the level being exited is the top level of a function,
1235 check over all the labels. */
1237 if (functionbody)
1239 /* If this is the top level block of a function,
1240 the vars are the function's parameters.
1241 Don't leave them in the BLOCK because they are
1242 found in the FUNCTION_DECL instead. */
1244 BLOCK_VARS (block) = 0;
1246 /* Clear out the definitions of all label names,
1247 since their scopes end here. */
1249 for (link = named_labels; link; link = TREE_CHAIN (link))
1251 register tree label = TREE_VALUE (link);
1253 if (DECL_INITIAL (label) == NULL_TREE)
1255 cp_error_at ("label `%D' used but not defined", label);
1256 /* Avoid crashing later. */
1257 define_label (input_filename, 1, DECL_NAME (label));
1259 else if (warn_unused && !TREE_USED (label))
1260 cp_warning_at ("label `%D' defined but not used", label);
1261 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), NULL_TREE);
1263 /* Put the labels into the "variables" of the
1264 top-level block, so debugger can see them. */
1265 TREE_CHAIN (label) = BLOCK_VARS (block);
1266 BLOCK_VARS (block) = label;
1269 named_labels = NULL_TREE;
1272 /* Any uses of undefined labels now operate under constraints
1273 of next binding contour. */
1275 struct binding_level *level_chain;
1276 level_chain = current_binding_level->level_chain;
1277 if (level_chain)
1279 struct named_label_list *labels;
1280 for (labels = named_label_uses; labels; labels = labels->next)
1281 if (labels->binding_level == current_binding_level)
1283 labels->binding_level = level_chain;
1284 labels->names_in_scope = level_chain->names;
1289 tmp = current_binding_level->keep;
1291 pop_binding_level ();
1292 if (functionbody)
1293 DECL_INITIAL (current_function_decl) = block;
1294 else if (block)
1296 if (!block_previously_created)
1297 current_binding_level->blocks
1298 = chainon (current_binding_level->blocks, block);
1300 /* If we did not make a block for the level just exited,
1301 any blocks made for inner levels
1302 (since they cannot be recorded as subblocks in that level)
1303 must be carried forward so they will later become subblocks
1304 of something else. */
1305 else if (subblocks)
1307 if (keep == 2)
1308 current_binding_level->blocks
1309 = chainon (subblocks, current_binding_level->blocks);
1310 else
1311 current_binding_level->blocks
1312 = chainon (current_binding_level->blocks, subblocks);
1315 /* Take care of compiler's internal binding structures. */
1316 if (tmp == 2)
1318 expand_end_bindings (getdecls (), keep, 1);
1319 /* Each and every BLOCK node created here in `poplevel' is important
1320 (e.g. for proper debugging information) so if we created one
1321 earlier, mark it as "used". */
1322 if (block)
1323 TREE_USED (block) = 1;
1324 block = poplevel (keep, reverse, real_functionbody);
1327 /* Each and every BLOCK node created here in `poplevel' is important
1328 (e.g. for proper debugging information) so if we created one
1329 earlier, mark it as "used". */
1330 if (block)
1331 TREE_USED (block) = 1;
1332 return block;
1335 /* Resume a binding level for a namespace. */
1337 void
1338 resume_level (b)
1339 struct binding_level *b;
1341 tree decls, link;
1343 resume_binding_level (b);
1345 /* Resume the variable caches. */
1346 decls = current_binding_level->names;
1348 /* Restore the meanings of the local variables of this level. */
1350 for (link = decls; link; link = TREE_CHAIN (link))
1352 /* If it doesn't have a name, there is nothing left to do with it. */
1353 if (DECL_NAME (link) == NULL_TREE)
1354 continue;
1356 IDENTIFIER_LOCAL_VALUE (DECL_NAME (link)) = link;
1358 /* If this is a TYPE_DECL, push it into the type value slot. */
1359 if (TREE_CODE (link) == TYPE_DECL)
1360 SET_IDENTIFIER_TYPE_VALUE (DECL_NAME (link), TREE_TYPE (link));
1364 /* Delete the node BLOCK from the current binding level.
1365 This is used for the block inside a stmt expr ({...})
1366 so that the block can be reinserted where appropriate. */
1368 void
1369 delete_block (block)
1370 tree block;
1372 tree t;
1373 if (current_binding_level->blocks == block)
1374 current_binding_level->blocks = TREE_CHAIN (block);
1375 for (t = current_binding_level->blocks; t;)
1377 if (TREE_CHAIN (t) == block)
1378 TREE_CHAIN (t) = TREE_CHAIN (block);
1379 else
1380 t = TREE_CHAIN (t);
1382 TREE_CHAIN (block) = NULL_TREE;
1383 /* Clear TREE_USED which is always set by poplevel.
1384 The flag is set again if insert_block is called. */
1385 TREE_USED (block) = 0;
1388 /* Insert BLOCK at the end of the list of subblocks of the
1389 current binding level. This is used when a BIND_EXPR is expanded,
1390 to handle the BLOCK node inside the BIND_EXPR. */
1392 void
1393 insert_block (block)
1394 tree block;
1396 TREE_USED (block) = 1;
1397 current_binding_level->blocks
1398 = chainon (current_binding_level->blocks, block);
1401 /* Add BLOCK to the current list of blocks for this binding contour. */
1403 void
1404 add_block_current_level (block)
1405 tree block;
1407 current_binding_level->blocks
1408 = chainon (current_binding_level->blocks, block);
1411 /* Set the BLOCK node for the innermost scope
1412 (the one we are currently in). */
1414 void
1415 set_block (block)
1416 register tree block;
1418 current_binding_level->this_block = block;
1421 /* Do a pushlevel for class declarations. */
1423 void
1424 pushlevel_class ()
1426 register struct binding_level *newlevel;
1428 /* Reuse or create a struct for this binding level. */
1429 #if defined(DEBUG_CP_BINDING_LEVELS)
1430 if (0)
1431 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1432 if (free_binding_level)
1433 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1435 newlevel = free_binding_level;
1436 free_binding_level = free_binding_level->level_chain;
1438 else
1440 newlevel = make_binding_level ();
1443 #if defined(DEBUG_CP_BINDING_LEVELS)
1444 is_class_level = 1;
1445 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1447 push_binding_level (newlevel, 0, 0);
1449 decl_stack = push_decl_level (decl_stack, &decl_obstack);
1450 class_binding_level = current_binding_level;
1451 class_binding_level->parm_flag = 2;
1452 /* We have just pushed into a new binding level. Now, fake out the rest
1453 of the compiler. Set the `current_binding_level' back to point to
1454 the most closely containing non-class binding level. */
1457 current_binding_level = current_binding_level->level_chain;
1459 while (current_binding_level->parm_flag == 2);
1462 /* ...and a poplevel for class declarations. FORCE is used to force
1463 clearing out of CLASS_VALUEs after a class definition. */
1465 tree
1466 poplevel_class (force)
1467 int force;
1469 register struct binding_level *level = class_binding_level;
1470 tree block = NULL_TREE;
1471 tree shadowed;
1473 my_friendly_assert (level != 0, 354);
1475 decl_stack = pop_stack_level (decl_stack);
1476 for (shadowed = level->shadowed; shadowed; shadowed = TREE_CHAIN (shadowed))
1477 IDENTIFIER_LOCAL_VALUE (TREE_PURPOSE (shadowed)) = TREE_VALUE (shadowed);
1478 /* If we're leaving a toplevel class, don't bother to do the setting
1479 of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
1480 shouldn't even be used when current_class_type isn't set, and second,
1481 if we don't touch it here, we're able to use the cache effect if the
1482 next time we're entering a class scope, it is the same class. */
1483 if (current_class_depth != 1 || force)
1484 for (shadowed = level->class_shadowed;
1485 shadowed;
1486 shadowed = TREE_CHAIN (shadowed))
1487 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = TREE_VALUE (shadowed);
1488 else
1489 /* Remember to save what IDENTIFIER's were bound in this scope so we
1490 can recover from cache misses. */
1492 previous_class_type = current_class_type;
1493 previous_class_values = class_binding_level->class_shadowed;
1495 for (shadowed = level->type_shadowed;
1496 shadowed;
1497 shadowed = TREE_CHAIN (shadowed))
1498 IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed)) = TREE_VALUE (shadowed);
1500 GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1501 (HOST_WIDE_INT) class_binding_level->level_chain,
1502 class_binding_level->parm_flag,
1503 class_binding_level->keep);
1505 if (class_binding_level->parm_flag != 2)
1506 class_binding_level = (struct binding_level *)0;
1508 /* Now, pop out of the the binding level which we created up in the
1509 `pushlevel_class' routine. */
1510 #if defined(DEBUG_CP_BINDING_LEVELS)
1511 is_class_level = 1;
1512 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1514 pop_binding_level ();
1516 return block;
1519 /* For debugging. */
1520 static int no_print_functions = 0;
1521 static int no_print_builtins = 0;
1523 void
1524 print_binding_level (lvl)
1525 struct binding_level *lvl;
1527 tree t;
1528 int i = 0, len;
1529 fprintf (stderr, " blocks=");
1530 fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
1531 fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
1532 list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
1533 if (lvl->tag_transparent)
1534 fprintf (stderr, " tag-transparent");
1535 if (lvl->more_cleanups_ok)
1536 fprintf (stderr, " more-cleanups-ok");
1537 if (lvl->have_cleanups)
1538 fprintf (stderr, " have-cleanups");
1539 fprintf (stderr, "\n");
1540 if (lvl->names)
1542 fprintf (stderr, " names:\t");
1543 /* We can probably fit 3 names to a line? */
1544 for (t = lvl->names; t; t = TREE_CHAIN (t))
1546 if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL))
1547 continue;
1548 if (no_print_builtins
1549 && (TREE_CODE (t) == TYPE_DECL)
1550 && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
1551 continue;
1553 /* Function decls tend to have longer names. */
1554 if (TREE_CODE (t) == FUNCTION_DECL)
1555 len = 3;
1556 else
1557 len = 2;
1558 i += len;
1559 if (i > 6)
1561 fprintf (stderr, "\n\t");
1562 i = len;
1564 print_node_brief (stderr, "", t, 0);
1565 if (t == error_mark_node)
1566 break;
1568 if (i)
1569 fprintf (stderr, "\n");
1571 if (lvl->tags)
1573 fprintf (stderr, " tags:\t");
1574 i = 0;
1575 for (t = lvl->tags; t; t = TREE_CHAIN (t))
1577 if (TREE_PURPOSE (t) == NULL_TREE)
1578 len = 3;
1579 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1580 len = 2;
1581 else
1582 len = 4;
1583 i += len;
1584 if (i > 5)
1586 fprintf (stderr, "\n\t");
1587 i = len;
1589 if (TREE_PURPOSE (t) == NULL_TREE)
1591 print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
1592 fprintf (stderr, ">");
1594 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1595 print_node_brief (stderr, "", TREE_VALUE (t), 0);
1596 else
1598 print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
1599 print_node_brief (stderr, "", TREE_VALUE (t), 0);
1600 fprintf (stderr, ">");
1603 if (i)
1604 fprintf (stderr, "\n");
1606 if (lvl->shadowed)
1608 fprintf (stderr, " shadowed:");
1609 for (t = lvl->shadowed; t; t = TREE_CHAIN (t))
1611 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1613 fprintf (stderr, "\n");
1615 if (lvl->class_shadowed)
1617 fprintf (stderr, " class-shadowed:");
1618 for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
1620 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1622 fprintf (stderr, "\n");
1624 if (lvl->type_shadowed)
1626 fprintf (stderr, " type-shadowed:");
1627 for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
1629 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1631 fprintf (stderr, "\n");
1635 void
1636 print_other_binding_stack (stack)
1637 struct binding_level *stack;
1639 struct binding_level *level;
1640 for (level = stack; level != global_binding_level; level = level->level_chain)
1642 fprintf (stderr, "binding level ");
1643 fprintf (stderr, HOST_PTR_PRINTF, level);
1644 fprintf (stderr, "\n");
1645 print_binding_level (level);
1649 void
1650 print_binding_stack ()
1652 struct binding_level *b;
1653 fprintf (stderr, "current_binding_level=");
1654 fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
1655 fprintf (stderr, "\nclass_binding_level=");
1656 fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
1657 fprintf (stderr, "\nglobal_binding_level=");
1658 fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
1659 fprintf (stderr, "\n");
1660 if (class_binding_level)
1662 for (b = class_binding_level; b; b = b->level_chain)
1663 if (b == current_binding_level)
1664 break;
1665 if (b)
1666 b = class_binding_level;
1667 else
1668 b = current_binding_level;
1670 else
1671 b = current_binding_level;
1672 print_other_binding_stack (b);
1673 fprintf (stderr, "global:\n");
1674 print_binding_level (global_binding_level);
1677 extern char * first_global_object_name;
1679 /* Get a unique name for each call to this routine for unnamed namespaces.
1680 Mostly copied from get_file_function_name. */
1682 static tree
1683 get_unique_name ()
1685 static int temp_name_counter = 0;
1686 char *buf;
1687 register char *p;
1689 if (first_global_object_name)
1690 p = first_global_object_name;
1691 else if (main_input_filename)
1692 p = main_input_filename;
1693 else
1694 p = input_filename;
1696 #define UNNAMED_NAMESPACE_FORMAT "__%s_%d"
1698 buf = (char *) alloca (sizeof (UNNAMED_NAMESPACE_FORMAT) + strlen (p));
1700 sprintf (buf, UNNAMED_NAMESPACE_FORMAT, p, temp_name_counter++);
1702 /* Don't need to pull weird characters out of global names. */
1703 if (p != first_global_object_name)
1705 for (p = buf+11; *p; p++)
1706 if (! ((*p >= '0' && *p <= '9')
1707 #ifndef NO_DOLLAR_IN_LABEL /* this for `$'; unlikely, but... -- kr */
1708 || *p == '$'
1709 #endif
1710 #ifndef NO_DOT_IN_LABEL /* this for `.'; unlikely, but... */
1711 || *p == '.'
1712 #endif
1713 || (*p >= 'A' && *p <= 'Z')
1714 || (*p >= 'a' && *p <= 'z')))
1715 *p = '_';
1718 return get_identifier (buf);
1721 /* Push into the scope of the NAME namespace. If NAME is NULL_TREE, then we
1722 select a name that is unique to this compilation unit. */
1724 void
1725 push_namespace (name)
1726 tree name;
1728 #if 1
1729 static int warned;
1730 if (! warned)
1731 sorry ("namespace");
1733 warned = 1;
1734 #else
1735 extern tree current_namespace;
1736 tree old_id = get_namespace_id ();
1737 char *buf;
1738 tree d;
1740 if (! name)
1742 /* Create a truly ugly name! */
1743 name = get_unique_name ();
1746 d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
1748 /* Mark them as external, so redeclaration_error_message doesn't think
1749 they are duplicates. */
1751 DECL_EXTERNAL (d) = 1;
1752 d = pushdecl (d);
1754 if (NAMESPACE_LEVEL (d) == 0)
1756 /* This is new for this compilation unit. */
1757 pushlevel (0);
1758 declare_namespace_level ();
1759 NAMESPACE_LEVEL (d) = current_binding_level;
1761 else
1762 resume_level (NAMESPACE_LEVEL (d));
1764 /* This code is just is bit old now... */
1765 current_namespace = tree_cons (NULL_TREE, name, current_namespace);
1766 buf = (char *) alloca (4 + (old_id ? IDENTIFIER_LENGTH (old_id) : 0)
1767 + IDENTIFIER_LENGTH (name));
1768 sprintf (buf, "%s%s", old_id ? IDENTIFIER_POINTER (old_id) : "",
1769 IDENTIFIER_POINTER (name));
1770 TREE_PURPOSE (current_namespace) = get_identifier (buf);
1771 #endif
1774 /* Pop from the scope of the current namespace. */
1776 void
1777 pop_namespace ()
1779 #if 0
1780 extern tree current_namespace;
1781 tree decls, link;
1782 current_namespace = TREE_CHAIN (current_namespace);
1784 /* Just in case we get out of sync. */
1785 if (! namespace_bindings_p ())
1786 poplevel (0, 0, 0);
1788 decls = current_binding_level->names;
1790 /* Clear out the meanings of the local variables of this level. */
1792 for (link = decls; link; link = TREE_CHAIN (link))
1794 if (DECL_NAME (link) != NULL_TREE)
1796 /* If the ident. was used or addressed via a local extern decl,
1797 don't forget that fact. */
1798 if (DECL_EXTERNAL (link))
1800 if (TREE_USED (link))
1801 TREE_USED (DECL_ASSEMBLER_NAME (link)) = 1;
1802 if (TREE_ADDRESSABLE (link))
1803 TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (link)) = 1;
1805 IDENTIFIER_LOCAL_VALUE (DECL_NAME (link)) = NULL_TREE;
1809 /* Restore all name-meanings of the outer levels
1810 that were shadowed by this level. */
1812 for (link = current_binding_level->shadowed; link; link = TREE_CHAIN (link))
1813 IDENTIFIER_LOCAL_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
1814 for (link = current_binding_level->class_shadowed;
1815 link; link = TREE_CHAIN (link))
1816 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
1817 for (link = current_binding_level->type_shadowed;
1818 link; link = TREE_CHAIN (link))
1819 IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
1821 /* suspend a level. */
1822 suspend_binding_level ();
1823 #endif
1826 /* Subroutines for reverting temporarily to top-level for instantiation
1827 of templates and such. We actually need to clear out the class- and
1828 local-value slots of all identifiers, so that only the global values
1829 are at all visible. Simply setting current_binding_level to the global
1830 scope isn't enough, because more binding levels may be pushed. */
1831 struct saved_scope {
1832 struct binding_level *old_binding_level;
1833 tree old_bindings;
1834 struct saved_scope *prev;
1835 tree class_name, class_type, function_decl;
1836 struct binding_level *class_bindings;
1837 tree *lang_base, *lang_stack, lang_name;
1838 int lang_stacksize;
1839 int minimal_parse_mode;
1840 tree last_function_parms;
1841 tree template_parms;
1842 HOST_WIDE_INT processing_template_decl;
1843 tree previous_class_type, previous_class_values;
1845 static struct saved_scope *current_saved_scope;
1847 static tree
1848 store_bindings (names, old_bindings)
1849 tree names, old_bindings;
1851 tree t;
1852 for (t = names; t; t = TREE_CHAIN (t))
1854 tree binding, t1, id;
1856 if (TREE_CODE (t) == TREE_LIST)
1857 id = TREE_PURPOSE (t);
1858 else
1859 id = DECL_NAME (t);
1861 if (!id
1862 || (!IDENTIFIER_LOCAL_VALUE (id)
1863 && !IDENTIFIER_CLASS_VALUE (id)))
1864 continue;
1866 for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
1867 if (TREE_VEC_ELT (t1, 0) == id)
1868 goto skip_it;
1870 binding = make_tree_vec (4);
1871 if (id)
1873 my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
1874 TREE_VEC_ELT (binding, 0) = id;
1875 TREE_VEC_ELT (binding, 1) = IDENTIFIER_TYPE_VALUE (id);
1876 TREE_VEC_ELT (binding, 2) = IDENTIFIER_LOCAL_VALUE (id);
1877 TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
1878 IDENTIFIER_LOCAL_VALUE (id) = NULL_TREE;
1879 IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
1881 TREE_CHAIN (binding) = old_bindings;
1882 old_bindings = binding;
1883 skip_it:
1886 return old_bindings;
1889 void
1890 maybe_push_to_top_level (pseudo)
1891 int pseudo;
1893 extern int current_lang_stacksize;
1894 struct saved_scope *s
1895 = (struct saved_scope *) xmalloc (sizeof (struct saved_scope));
1896 struct binding_level *b = inner_binding_level;
1897 tree old_bindings = NULL_TREE;
1899 if (current_function_decl)
1900 push_cp_function_context (NULL_TREE);
1902 if (previous_class_type)
1903 old_bindings = store_bindings (previous_class_values, old_bindings);
1905 /* Have to include global_binding_level, because class-level decls
1906 aren't listed anywhere useful. */
1907 for (; b; b = b->level_chain)
1909 tree t;
1911 if (b == global_binding_level || (pseudo && b->pseudo_global))
1912 break;
1914 old_bindings = store_bindings (b->names, old_bindings);
1915 /* We also need to check class_shadowed to save class-level type
1916 bindings, since pushclass doesn't fill in b->names. */
1917 if (b->parm_flag == 2)
1918 old_bindings = store_bindings (b->class_shadowed, old_bindings);
1920 /* Unwind type-value slots back to top level. */
1921 for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
1922 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
1925 s->old_binding_level = current_binding_level;
1926 current_binding_level = b;
1928 s->class_name = current_class_name;
1929 s->class_type = current_class_type;
1930 s->function_decl = current_function_decl;
1931 s->class_bindings = class_binding_level;
1932 s->lang_stack = current_lang_stack;
1933 s->lang_base = current_lang_base;
1934 s->lang_stacksize = current_lang_stacksize;
1935 s->lang_name = current_lang_name;
1936 s->minimal_parse_mode = minimal_parse_mode;
1937 s->last_function_parms = last_function_parms;
1938 s->template_parms = current_template_parms;
1939 s->processing_template_decl = processing_template_decl;
1940 s->previous_class_type = previous_class_type;
1941 s->previous_class_values = previous_class_values;
1943 current_class_name = current_class_type = NULL_TREE;
1944 current_function_decl = NULL_TREE;
1945 class_binding_level = (struct binding_level *)0;
1946 current_lang_stacksize = 10;
1947 current_lang_stack = current_lang_base
1948 = (tree *) xmalloc (current_lang_stacksize * sizeof (tree));
1949 current_lang_name = lang_name_cplusplus;
1950 strict_prototype = strict_prototypes_lang_cplusplus;
1951 named_labels = NULL_TREE;
1952 minimal_parse_mode = 0;
1953 previous_class_type = previous_class_values = NULL_TREE;
1954 if (!pseudo)
1956 current_template_parms = NULL_TREE;
1957 processing_template_decl = 0;
1960 s->prev = current_saved_scope;
1961 s->old_bindings = old_bindings;
1962 current_saved_scope = s;
1964 push_obstacks (&permanent_obstack, &permanent_obstack);
1967 void
1968 push_to_top_level ()
1970 maybe_push_to_top_level (0);
1973 void
1974 pop_from_top_level ()
1976 extern int current_lang_stacksize;
1977 struct saved_scope *s = current_saved_scope;
1978 tree t;
1980 /* Clear out class-level bindings cache. */
1981 if (previous_class_type)
1983 popclass (-1);
1984 previous_class_type = NULL_TREE;
1987 pop_obstacks ();
1989 current_binding_level = s->old_binding_level;
1990 current_saved_scope = s->prev;
1991 for (t = s->old_bindings; t; t = TREE_CHAIN (t))
1993 tree id = TREE_VEC_ELT (t, 0);
1994 if (id)
1996 IDENTIFIER_TYPE_VALUE (id) = TREE_VEC_ELT (t, 1);
1997 IDENTIFIER_LOCAL_VALUE (id) = TREE_VEC_ELT (t, 2);
1998 IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
2001 current_class_name = s->class_name;
2002 current_class_type = s->class_type;
2003 current_function_decl = s->function_decl;
2004 class_binding_level = s->class_bindings;
2005 free (current_lang_base);
2006 current_lang_base = s->lang_base;
2007 current_lang_stack = s->lang_stack;
2008 current_lang_name = s->lang_name;
2009 current_lang_stacksize = s->lang_stacksize;
2010 if (current_lang_name == lang_name_cplusplus)
2011 strict_prototype = strict_prototypes_lang_cplusplus;
2012 else if (current_lang_name == lang_name_c)
2013 strict_prototype = strict_prototypes_lang_c;
2014 minimal_parse_mode = s->minimal_parse_mode;
2015 last_function_parms = s->last_function_parms;
2016 current_template_parms = s->template_parms;
2017 processing_template_decl = s->processing_template_decl;
2018 previous_class_type = s->previous_class_type;
2019 previous_class_values = s->previous_class_values;
2021 free (s);
2023 if (current_function_decl)
2024 pop_cp_function_context (NULL_TREE);
2027 /* Push a definition of struct, union or enum tag "name".
2028 into binding_level "b". "type" should be the type node,
2029 We assume that the tag "name" is not already defined.
2031 Note that the definition may really be just a forward reference.
2032 In that case, the TYPE_SIZE will be a NULL_TREE.
2034 C++ gratuitously puts all these tags in the name space. */
2036 /* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2037 record the shadowed value for this binding contour. TYPE is
2038 the type that ID maps to. */
2040 static void
2041 set_identifier_type_value_with_scope (id, type, b)
2042 tree id;
2043 tree type;
2044 struct binding_level *b;
2046 if (b != global_binding_level)
2048 tree old_type_value = IDENTIFIER_TYPE_VALUE (id);
2049 b->type_shadowed
2050 = tree_cons (id, old_type_value, b->type_shadowed);
2052 SET_IDENTIFIER_TYPE_VALUE (id, type);
2055 /* As set_identifier_type_value_with_scope, but using inner_binding_level. */
2057 void
2058 set_identifier_type_value (id, type)
2059 tree id;
2060 tree type;
2062 set_identifier_type_value_with_scope (id, type, inner_binding_level);
2065 /* Pop off extraneous binding levels left over due to syntax errors.
2067 We don't pop past namespaces, as they might be valid. */
2069 void
2070 pop_everything ()
2072 #ifdef DEBUG_CP_BINDING_LEVELS
2073 fprintf (stderr, "XXX entering pop_everything ()\n");
2074 #endif
2075 while (! toplevel_bindings_p () && ! pseudo_global_level_p ())
2077 if (class_binding_level)
2078 pop_nested_class (1);
2079 else
2080 poplevel (0, 0, 0);
2082 #ifdef DEBUG_CP_BINDING_LEVELS
2083 fprintf (stderr, "XXX leaving pop_everything ()\n");
2084 #endif
2087 /* Push a tag name NAME for struct/class/union/enum type TYPE.
2088 Normally put into into the inner-most non-tag-transparent scope,
2089 but if GLOBALIZE is true, put it in the inner-most non-class scope.
2090 The latter is needed for implicit declarations. */
2092 void
2093 pushtag (name, type, globalize)
2094 tree name, type;
2095 int globalize;
2097 register struct binding_level *b;
2098 tree context = 0;
2099 tree c_decl = 0;
2101 b = inner_binding_level;
2102 while (b->tag_transparent
2103 || (globalize && b->parm_flag == 2))
2104 b = b->level_chain;
2106 if (toplevel_bindings_p ())
2107 b->tags = perm_tree_cons (name, type, b->tags);
2108 else
2109 b->tags = saveable_tree_cons (name, type, b->tags);
2111 if (name)
2113 context = type ? TYPE_CONTEXT (type) : NULL_TREE;
2114 if (! context && ! globalize)
2115 context = current_scope ();
2116 if (context)
2117 c_decl = TREE_CODE (context) == FUNCTION_DECL
2118 ? context : TYPE_MAIN_DECL (context);
2120 /* Do C++ gratuitous typedefing. */
2121 if (IDENTIFIER_TYPE_VALUE (name) != type)
2123 register tree d;
2124 int newdecl = 0;
2126 if (b->parm_flag != 2
2127 || TYPE_SIZE (current_class_type) != NULL_TREE)
2129 d = lookup_nested_type (type, c_decl);
2131 if (d == NULL_TREE)
2133 newdecl = 1;
2134 d = build_decl (TYPE_DECL, name, type);
2135 SET_DECL_ARTIFICIAL (d);
2136 set_identifier_type_value_with_scope (name, type, b);
2138 else
2139 d = TYPE_MAIN_DECL (d);
2141 TYPE_NAME (type) = d;
2142 DECL_CONTEXT (d) = context;
2143 if (! globalize && processing_template_decl && IS_AGGR_TYPE (type))
2144 push_template_decl (d);
2146 if (b->parm_flag == 2)
2147 d = pushdecl_class_level (d);
2148 else
2149 d = pushdecl_with_scope (d, b);
2151 else
2153 /* Make nested declarations go into class-level scope. */
2154 newdecl = 1;
2155 d = build_decl (TYPE_DECL, name, type);
2156 SET_DECL_ARTIFICIAL (d);
2157 TYPE_NAME (type) = d;
2158 DECL_CONTEXT (d) = context;
2159 if (! globalize && processing_template_decl && IS_AGGR_TYPE (type))
2160 push_template_decl (d);
2162 d = pushdecl_class_level (d);
2164 if (newdecl)
2166 if (ANON_AGGRNAME_P (name))
2167 DECL_IGNORED_P (d) = 1;
2169 TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2170 DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
2171 DECL_ASSEMBLER_NAME (d)
2172 = get_identifier (build_overload_name (type, 1, 1));
2175 if (b->parm_flag == 2)
2177 TREE_NONLOCAL_FLAG (type) = 1;
2178 if (TYPE_SIZE (current_class_type) == NULL_TREE)
2179 CLASSTYPE_TAGS (current_class_type) = b->tags;
2183 if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2184 /* Use the canonical TYPE_DECL for this node. */
2185 TYPE_STUB_DECL (type) = TYPE_NAME (type);
2186 else
2188 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2189 will be the tagged type we just added to the current
2190 binding level. This fake NULL-named TYPE_DECL node helps
2191 dwarfout.c to know when it needs to output a
2192 representation of a tagged type, and it also gives us a
2193 convenient place to record the "scope start" address for
2194 the tagged type. */
2196 tree d = build_decl (TYPE_DECL, NULL_TREE, type);
2197 TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2201 /* Counter used to create anonymous type names. */
2203 static int anon_cnt = 0;
2205 /* Return an IDENTIFIER which can be used as a name for
2206 anonymous structs and unions. */
2208 tree
2209 make_anon_name ()
2211 char buf[32];
2213 sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2214 return get_identifier (buf);
2217 /* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2218 This keeps dbxout from getting confused. */
2220 void
2221 clear_anon_tags ()
2223 register struct binding_level *b;
2224 register tree tags;
2225 static int last_cnt = 0;
2227 /* Fast out if no new anon names were declared. */
2228 if (last_cnt == anon_cnt)
2229 return;
2231 b = current_binding_level;
2232 while (b->tag_transparent)
2233 b = b->level_chain;
2234 tags = b->tags;
2235 while (tags)
2237 /* A NULL purpose means we have already processed all tags
2238 from here to the end of the list. */
2239 if (TREE_PURPOSE (tags) == NULL_TREE)
2240 break;
2241 if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2242 TREE_PURPOSE (tags) = NULL_TREE;
2243 tags = TREE_CHAIN (tags);
2245 last_cnt = anon_cnt;
2248 /* Subroutine of duplicate_decls: return truthvalue of whether
2249 or not types of these decls match.
2251 For C++, we must compare the parameter list so that `int' can match
2252 `int&' in a parameter position, but `int&' is not confused with
2253 `const int&'. */
2256 decls_match (newdecl, olddecl)
2257 tree newdecl, olddecl;
2259 int types_match;
2261 if (TREE_CODE (newdecl) == FUNCTION_DECL
2262 && TREE_CODE (olddecl) == FUNCTION_DECL)
2264 tree f1 = TREE_TYPE (newdecl);
2265 tree f2 = TREE_TYPE (olddecl);
2266 tree p1 = TYPE_ARG_TYPES (f1);
2267 tree p2 = TYPE_ARG_TYPES (f2);
2269 /* When we parse a static member function definition,
2270 we put together a FUNCTION_DECL which thinks its type
2271 is METHOD_TYPE. Change that to FUNCTION_TYPE, and
2272 proceed. */
2273 if (TREE_CODE (f1) == METHOD_TYPE && DECL_STATIC_FUNCTION_P (olddecl))
2274 revert_static_member_fn (&newdecl, &f1, &p1);
2275 else if (TREE_CODE (f2) == METHOD_TYPE
2276 && DECL_STATIC_FUNCTION_P (newdecl))
2277 revert_static_member_fn (&olddecl, &f2, &p2);
2279 /* Here we must take care of the case where new default
2280 parameters are specified. Also, warn if an old
2281 declaration becomes ambiguous because default
2282 parameters may cause the two to be ambiguous. */
2283 if (TREE_CODE (f1) != TREE_CODE (f2))
2285 if (TREE_CODE (f1) == OFFSET_TYPE)
2286 cp_compiler_error ("`%D' redeclared as member function", newdecl);
2287 else
2288 cp_compiler_error ("`%D' redeclared as non-member function", newdecl);
2289 return 0;
2292 if (comptypes (TREE_TYPE (f1), TREE_TYPE (f2), 1))
2294 if (! strict_prototypes_lang_c && DECL_LANGUAGE (olddecl) == lang_c
2295 && p2 == NULL_TREE)
2297 types_match = self_promoting_args_p (p1);
2298 if (p1 == void_list_node)
2299 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2301 else if (!strict_prototypes_lang_c && DECL_LANGUAGE (olddecl)==lang_c
2302 && DECL_LANGUAGE (newdecl) == lang_c && p1 == NULL_TREE)
2304 types_match = self_promoting_args_p (p2);
2305 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2307 else
2308 types_match = compparms (p1, p2, 3);
2310 else
2311 types_match = 0;
2313 else if (TREE_CODE (newdecl) == TEMPLATE_DECL
2314 && TREE_CODE (olddecl) == TEMPLATE_DECL)
2316 tree newargs = DECL_TEMPLATE_PARMS (newdecl);
2317 tree oldargs = DECL_TEMPLATE_PARMS (olddecl);
2318 int i;
2320 /* Run through all the levels of template parameters, checking
2321 that they match. */
2322 while (newargs && oldargs)
2324 int len = TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS (newargs));
2326 if (TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS (oldargs)) != len)
2327 return 0;
2329 for (i = 0; i < len; i++)
2331 tree newarg =
2332 TREE_VALUE (TREE_VEC_ELT
2333 (INNERMOST_TEMPLATE_PARMS (newargs), i));
2334 tree oldarg =
2335 TREE_VALUE (TREE_VEC_ELT
2336 (INNERMOST_TEMPLATE_PARMS (oldargs), i));
2337 if (TREE_CODE (newarg) != TREE_CODE (oldarg))
2338 return 0;
2339 else if (TREE_CODE (newarg) == TYPE_DECL)
2340 /* continue */;
2341 else if (! comptypes (TREE_TYPE (newarg), TREE_TYPE (oldarg), 1))
2342 return 0;
2344 newargs = TREE_CHAIN (newargs);
2345 oldargs = TREE_CHAIN (oldargs);
2348 if ((newargs == NULL_TREE) != (oldargs == NULL_TREE))
2349 /* One declaration has more levels that the other. */
2350 return 0;
2352 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2353 types_match = 1;
2354 else
2355 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
2356 DECL_TEMPLATE_RESULT (newdecl));
2358 else
2360 if (TREE_TYPE (newdecl) == error_mark_node)
2361 types_match = TREE_TYPE (olddecl) == error_mark_node;
2362 else if (TREE_TYPE (olddecl) == NULL_TREE)
2363 types_match = TREE_TYPE (newdecl) == NULL_TREE;
2364 else if (TREE_TYPE (newdecl) == NULL_TREE)
2365 types_match = 0;
2366 /* Qualifiers must match, and they may be present on either, the type
2367 or the decl. */
2368 else if ((TREE_READONLY (newdecl)
2369 || TYPE_READONLY (TREE_TYPE (newdecl)))
2370 == (TREE_READONLY (olddecl)
2371 || TYPE_READONLY (TREE_TYPE (olddecl)))
2372 && (TREE_THIS_VOLATILE (newdecl)
2373 || TYPE_VOLATILE (TREE_TYPE (newdecl)))
2374 == (TREE_THIS_VOLATILE (olddecl)
2375 || TYPE_VOLATILE (TREE_TYPE (olddecl))))
2376 types_match = comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (newdecl)),
2377 TYPE_MAIN_VARIANT (TREE_TYPE (olddecl)), 1);
2378 else
2379 types_match = 0;
2382 return types_match;
2385 /* If NEWDECL is `static' and an `extern' was seen previously,
2386 warn about it. (OLDDECL may be NULL_TREE; NAME contains
2387 information about previous usage as an `extern'.)
2389 Note that this does not apply to the C++ case of declaring
2390 a variable `extern const' and then later `const'.
2392 Don't complain about built-in functions, since they are beyond
2393 the user's control. */
2395 static void
2396 warn_extern_redeclared_static (newdecl, olddecl)
2397 tree newdecl, olddecl;
2399 tree name;
2401 static char *explicit_extern_static_warning
2402 = "`%D' was declared `extern' and later `static'";
2403 static char *implicit_extern_static_warning
2404 = "`%D' was declared implicitly `extern' and later `static'";
2406 if (TREE_CODE (newdecl) == TYPE_DECL)
2407 return;
2409 name = DECL_ASSEMBLER_NAME (newdecl);
2410 if (TREE_PUBLIC (name) && DECL_THIS_STATIC (newdecl))
2412 /* It's okay to redeclare an ANSI built-in function as static,
2413 or to declare a non-ANSI built-in function as anything. */
2414 if (! (TREE_CODE (newdecl) == FUNCTION_DECL
2415 && olddecl != NULL_TREE
2416 && TREE_CODE (olddecl) == FUNCTION_DECL
2417 && (DECL_BUILT_IN (olddecl)
2418 || DECL_BUILT_IN_NONANSI (olddecl))))
2420 cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
2421 ? implicit_extern_static_warning
2422 : explicit_extern_static_warning, newdecl);
2423 if (olddecl != NULL_TREE)
2424 cp_pedwarn_at ("previous declaration of `%D'", olddecl);
2429 /* Handle when a new declaration NEWDECL has the same name as an old
2430 one OLDDECL in the same binding contour. Prints an error message
2431 if appropriate.
2433 If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
2434 Otherwise, return 0. */
2437 duplicate_decls (newdecl, olddecl)
2438 tree newdecl, olddecl;
2440 extern struct obstack permanent_obstack;
2441 unsigned olddecl_uid = DECL_UID (olddecl);
2442 int olddecl_friend = 0, types_match = 0;
2443 int new_defines_function;
2445 if (newdecl == olddecl)
2446 return 1;
2448 if (TREE_CODE_CLASS (TREE_CODE (olddecl)) == 'd')
2449 DECL_MACHINE_ATTRIBUTES (newdecl) = DECL_MACHINE_ATTRIBUTES (olddecl);
2451 types_match = decls_match (newdecl, olddecl);
2453 if (TREE_CODE (olddecl) != TREE_LIST)
2454 olddecl_friend = DECL_LANG_SPECIFIC (olddecl) && DECL_FRIEND_P (olddecl);
2456 /* If either the type of the new decl or the type of the old decl is an
2457 error_mark_node, then that implies that we have already issued an
2458 error (earlier) for some bogus type specification, and in that case,
2459 it is rather pointless to harass the user with yet more error message
2460 about the same declaration, so well just pretent the types match here. */
2461 if (TREE_TYPE (newdecl) == error_mark_node
2462 || TREE_TYPE (olddecl) == error_mark_node)
2463 types_match = 1;
2465 if (TREE_CODE (olddecl) == FUNCTION_DECL
2466 && DECL_ARTIFICIAL (olddecl)
2467 && (DECL_BUILT_IN (olddecl) || DECL_BUILT_IN_NONANSI (olddecl)))
2469 /* If you declare a built-in or predefined function name as static,
2470 the old definition is overridden, but optionally warn this was a
2471 bad choice of name. Ditto for overloads. */
2472 if (! TREE_PUBLIC (newdecl)
2473 || (TREE_CODE (newdecl) == FUNCTION_DECL
2474 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl)))
2476 if (warn_shadow)
2477 cp_warning ("shadowing %s function `%#D'",
2478 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
2479 olddecl);
2480 /* Discard the old built-in function. */
2481 return 0;
2483 else if (! types_match)
2485 if (TREE_CODE (newdecl) != FUNCTION_DECL)
2487 /* If the built-in is not ansi, then programs can override
2488 it even globally without an error. */
2489 if (! DECL_BUILT_IN (olddecl))
2490 cp_warning ("library function `%#D' redeclared as non-function `%#D'",
2491 olddecl, newdecl);
2492 else
2494 cp_error ("declaration of `%#D'", newdecl);
2495 cp_error ("conflicts with built-in declaration `%#D'",
2496 olddecl);
2498 return 0;
2501 cp_warning ("declaration of `%#D'", newdecl);
2502 cp_warning ("conflicts with built-in declaration `%#D'",
2503 olddecl);
2506 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
2508 if ((TREE_CODE (newdecl) == FUNCTION_DECL
2509 && DECL_FUNCTION_TEMPLATE_P (olddecl))
2510 || (TREE_CODE (olddecl) == FUNCTION_DECL
2511 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
2512 return 0;
2514 cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
2515 if (TREE_CODE (olddecl) == TREE_LIST)
2516 olddecl = TREE_VALUE (olddecl);
2517 cp_error_at ("previous declaration of `%#D'", olddecl);
2519 /* New decl is completely inconsistent with the old one =>
2520 tell caller to replace the old one. */
2522 return 0;
2524 else if (!types_match)
2526 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2528 /* The name of a class template may not be declared to refer to
2529 any other template, class, function, object, namespace, value,
2530 or type in the same scope. */
2531 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
2532 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2534 cp_error ("declaration of template `%#D'", newdecl);
2535 cp_error_at ("conflicts with previous declaration `%#D'",
2536 olddecl);
2538 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
2539 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
2540 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
2541 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))), 3))
2543 cp_error ("new declaration `%#D'", newdecl);
2544 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
2546 return 0;
2548 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2550 if (DECL_LANGUAGE (newdecl) == lang_c
2551 && DECL_LANGUAGE (olddecl) == lang_c)
2553 cp_error ("declaration of C function `%#D' conflicts with",
2554 newdecl);
2555 cp_error_at ("previous declaration `%#D' here", olddecl);
2557 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
2558 TYPE_ARG_TYPES (TREE_TYPE (olddecl)), 3))
2560 cp_error ("new declaration `%#D'", newdecl);
2561 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
2563 else
2564 return 0;
2567 /* Already complained about this, so don't do so again. */
2568 else if (current_class_type == NULL_TREE
2569 || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
2571 cp_error ("conflicting types for `%#D'", newdecl);
2572 cp_error_at ("previous declaration as `%#D'", olddecl);
2575 else if ((TREE_CODE (olddecl) == FUNCTION_DECL
2576 && DECL_TEMPLATE_SPECIALIZATION (olddecl)
2577 && (!DECL_TEMPLATE_SPECIALIZATION (newdecl)
2578 || (DECL_TI_TEMPLATE (newdecl)
2579 != DECL_TI_TEMPLATE (olddecl))))
2580 || (TREE_CODE (newdecl) == FUNCTION_DECL
2581 && DECL_TEMPLATE_SPECIALIZATION (newdecl)
2582 && (!DECL_TEMPLATE_SPECIALIZATION (olddecl)
2583 || (DECL_TI_TEMPLATE (olddecl) != DECL_TI_TEMPLATE
2584 (newdecl)))))
2585 /* It's OK to have a template specialization and a non-template
2586 with the same type, or to have specializations of two
2587 different templates with the same type. */
2588 return 0;
2589 else
2591 char *errmsg = redeclaration_error_message (newdecl, olddecl);
2592 if (errmsg)
2594 cp_error (errmsg, newdecl);
2595 if (DECL_NAME (olddecl) != NULL_TREE)
2596 cp_error_at ((DECL_INITIAL (olddecl)
2597 && current_binding_level == global_binding_level)
2598 ? "`%#D' previously defined here"
2599 : "`%#D' previously declared here", olddecl);
2601 else if (TREE_CODE (olddecl) == FUNCTION_DECL
2602 && DECL_INITIAL (olddecl) != NULL_TREE
2603 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
2604 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
2606 /* Prototype decl follows defn w/o prototype. */
2607 cp_warning_at ("prototype for `%#D'", newdecl);
2608 cp_warning_at ("follows non-prototype definition here", olddecl);
2610 else if (TREE_CODE (olddecl) == FUNCTION_DECL
2611 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
2613 /* extern "C" int foo ();
2614 int foo () { bar (); }
2615 is OK. */
2616 if (current_lang_stack == current_lang_base)
2617 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
2618 else
2620 cp_error_at ("previous declaration of `%#D' with %L linkage",
2621 olddecl, DECL_LANGUAGE (olddecl));
2622 cp_error ("conflicts with new declaration with %L linkage",
2623 DECL_LANGUAGE (newdecl));
2627 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
2629 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
2631 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
2632 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
2633 int i = 1;
2635 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
2636 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
2638 for (; t1 && t1 != void_list_node;
2639 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
2640 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
2642 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
2643 TREE_PURPOSE (t2)))
2645 if (pedantic)
2647 cp_pedwarn ("default argument given for parameter %d of `%#D'",
2648 i, newdecl);
2649 cp_pedwarn_at ("after previous specification in `%#D'",
2650 olddecl);
2653 else
2655 cp_error ("default argument given for parameter %d of `%#D'",
2656 i, newdecl);
2657 cp_error_at ("after previous specification in `%#D'",
2658 olddecl);
2662 if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
2663 && TREE_ADDRESSABLE (olddecl) && warn_inline)
2665 cp_warning ("`%#D' was used before it was declared inline",
2666 newdecl);
2667 cp_warning_at ("previous non-inline declaration here",
2668 olddecl);
2671 /* These bits are logically part of the type for non-functions. */
2672 else if (TREE_READONLY (newdecl) != TREE_READONLY (olddecl)
2673 || TREE_THIS_VOLATILE (newdecl) != TREE_THIS_VOLATILE (olddecl))
2675 cp_pedwarn ("type qualifiers for `%#D'", newdecl);
2676 cp_pedwarn_at ("conflict with previous decl `%#D'", olddecl);
2680 /* If new decl is `static' and an `extern' was seen previously,
2681 warn about it. */
2682 warn_extern_redeclared_static (newdecl, olddecl);
2684 /* We have committed to returning 1 at this point. */
2685 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2687 /* Now that functions must hold information normally held
2688 by field decls, there is extra work to do so that
2689 declaration information does not get destroyed during
2690 definition. */
2691 if (DECL_VINDEX (olddecl))
2692 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
2693 if (DECL_CONTEXT (olddecl))
2694 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
2695 if (DECL_CLASS_CONTEXT (olddecl))
2696 DECL_CLASS_CONTEXT (newdecl) = DECL_CLASS_CONTEXT (olddecl);
2697 if (DECL_CHAIN (newdecl) == NULL_TREE)
2698 DECL_CHAIN (newdecl) = DECL_CHAIN (olddecl);
2699 if (DECL_PENDING_INLINE_INFO (newdecl) == (struct pending_inline *)0)
2700 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
2701 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
2702 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
2703 DECL_ABSTRACT_VIRTUAL_P (newdecl) |= DECL_ABSTRACT_VIRTUAL_P (olddecl);
2706 /* Deal with C++: must preserve virtual function table size. */
2707 if (TREE_CODE (olddecl) == TYPE_DECL)
2709 register tree newtype = TREE_TYPE (newdecl);
2710 register tree oldtype = TREE_TYPE (olddecl);
2712 if (newtype != error_mark_node && oldtype != error_mark_node
2713 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
2715 CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
2716 CLASSTYPE_FRIEND_CLASSES (newtype)
2717 = CLASSTYPE_FRIEND_CLASSES (oldtype);
2721 /* Special handling ensues if new decl is a function definition. */
2722 new_defines_function = (TREE_CODE (newdecl) == FUNCTION_DECL
2723 && DECL_INITIAL (newdecl) != NULL_TREE);
2725 /* Optionally warn about more than one declaration for the same name,
2726 but don't warn about a function declaration followed by a definition. */
2727 if (warn_redundant_decls
2728 && ! DECL_ARTIFICIAL (olddecl)
2729 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
2730 /* Don't warn about extern decl followed by (tentative) definition. */
2731 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl)))
2733 cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
2734 cp_warning_at ("previous declaration of `%D'", olddecl);
2737 /* Copy all the DECL_... slots specified in the new decl
2738 except for any that we copy here from the old type. */
2740 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2742 if (DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)) == NULL_TREE)
2744 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2745 DECL_TEMPLATE_RESULT (olddecl) = DECL_TEMPLATE_RESULT (newdecl);
2746 DECL_TEMPLATE_PARMS (olddecl) = DECL_TEMPLATE_PARMS (newdecl);
2748 return 1;
2751 if (types_match)
2753 /* Automatically handles default parameters. */
2754 tree oldtype = TREE_TYPE (olddecl);
2755 tree newtype;
2757 /* Make sure we put the new type in the same obstack as the old one. */
2758 if (oldtype)
2759 push_obstacks (TYPE_OBSTACK (oldtype), TYPE_OBSTACK (oldtype));
2760 else
2762 push_obstacks_nochange ();
2763 end_temporary_allocation ();
2766 /* Merge the data types specified in the two decls. */
2767 newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
2769 if (TREE_CODE (newdecl) == VAR_DECL)
2770 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
2771 /* Do this after calling `common_type' so that default
2772 parameters don't confuse us. */
2773 else if (TREE_CODE (newdecl) == FUNCTION_DECL
2774 && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
2775 != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
2777 TREE_TYPE (newdecl) = build_exception_variant (newtype,
2778 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
2779 TREE_TYPE (olddecl) = build_exception_variant (newtype,
2780 TYPE_RAISES_EXCEPTIONS (oldtype));
2782 if ((pedantic || (! DECL_IN_SYSTEM_HEADER (olddecl)
2783 && DECL_SOURCE_LINE (olddecl) != 0))
2784 && flag_exceptions
2785 && ! compexcepttypes (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2787 cp_pedwarn ("declaration of `%D' throws different exceptions",
2788 newdecl);
2789 cp_pedwarn_at ("previous declaration here", olddecl);
2792 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
2794 /* Lay the type out, unless already done. */
2795 if (oldtype != TREE_TYPE (newdecl)
2796 && TREE_TYPE (newdecl) != error_mark_node
2797 && !(processing_template_decl && uses_template_parms (newdecl)))
2798 layout_type (TREE_TYPE (newdecl));
2800 if ((TREE_CODE (newdecl) == VAR_DECL
2801 || TREE_CODE (newdecl) == PARM_DECL
2802 || TREE_CODE (newdecl) == RESULT_DECL
2803 || TREE_CODE (newdecl) == FIELD_DECL
2804 || TREE_CODE (newdecl) == TYPE_DECL)
2805 && !(processing_template_decl && uses_template_parms (newdecl)))
2806 layout_decl (newdecl, 0);
2808 /* Merge the type qualifiers. */
2809 if (TREE_READONLY (newdecl))
2810 TREE_READONLY (olddecl) = 1;
2811 if (TREE_THIS_VOLATILE (newdecl))
2812 TREE_THIS_VOLATILE (olddecl) = 1;
2814 /* Merge the initialization information. */
2815 if (DECL_INITIAL (newdecl) == NULL_TREE
2816 && DECL_INITIAL (olddecl) != NULL_TREE)
2818 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2819 DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
2820 DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
2823 /* Merge the section attribute.
2824 We want to issue an error if the sections conflict but that must be
2825 done later in decl_attributes since we are called before attributes
2826 are assigned. */
2827 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
2828 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
2830 /* Keep the old rtl since we can safely use it, unless it's the
2831 call to abort() used for abstract virtuals. */
2832 if ((DECL_LANG_SPECIFIC (olddecl)
2833 && !DECL_ABSTRACT_VIRTUAL_P (olddecl))
2834 || DECL_RTL (olddecl) != DECL_RTL (abort_fndecl))
2835 DECL_RTL (newdecl) = DECL_RTL (olddecl);
2837 pop_obstacks ();
2839 /* If cannot merge, then use the new type and qualifiers,
2840 and don't preserve the old rtl. */
2841 else
2843 /* Clean out any memory we had of the old declaration. */
2844 tree oldstatic = value_member (olddecl, static_aggregates);
2845 if (oldstatic)
2846 TREE_VALUE (oldstatic) = error_mark_node;
2848 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2849 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2850 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2851 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
2854 /* Merge the storage class information. */
2855 DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
2856 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
2857 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2858 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
2859 if (! DECL_EXTERNAL (olddecl))
2860 DECL_EXTERNAL (newdecl) = 0;
2862 if (DECL_LANG_SPECIFIC (newdecl))
2864 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2865 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
2866 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
2869 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2871 if (DECL_TEMPLATE_INSTANTIATION (olddecl) &&
2872 !DECL_TEMPLATE_INSTANTIATION (newdecl))
2873 DECL_USE_TEMPLATE (olddecl) = DECL_USE_TEMPLATE (newdecl);
2874 DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
2876 /* If either decl says `inline', this fn is inline, unless its
2877 definition was passed already. */
2878 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
2879 DECL_INLINE (olddecl) = 1;
2880 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
2882 if (! types_match)
2884 DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
2885 DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
2886 DECL_RTL (olddecl) = DECL_RTL (newdecl);
2888 if (! types_match || new_defines_function)
2890 /* These need to be copied so that the names are available. */
2891 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2892 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2894 if (new_defines_function)
2895 /* If defining a function declared with other language
2896 linkage, use the previously declared language linkage. */
2897 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
2898 else
2900 /* If redeclaring a builtin function, and not a definition,
2901 it stays built in. */
2902 if (DECL_BUILT_IN (olddecl))
2904 DECL_BUILT_IN (newdecl) = 1;
2905 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2906 /* If we're keeping the built-in definition, keep the rtl,
2907 regardless of declaration matches. */
2908 DECL_RTL (newdecl) = DECL_RTL (olddecl);
2910 else
2911 DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
2913 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2914 if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
2915 /* Previously saved insns go together with
2916 the function's previous definition. */
2917 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2918 /* Don't clear out the arguments if we're redefining a function. */
2919 if (DECL_ARGUMENTS (olddecl))
2920 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2922 if (DECL_LANG_SPECIFIC (olddecl))
2923 DECL_MAIN_VARIANT (newdecl) = DECL_MAIN_VARIANT (olddecl);
2926 if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2928 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2931 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2933 DECL_TEMPLATE_INSTANTIATIONS (newdecl)
2934 = DECL_TEMPLATE_INSTANTIATIONS (olddecl);
2935 if (DECL_CHAIN (newdecl) == NULL_TREE)
2936 DECL_CHAIN (newdecl) = DECL_CHAIN (olddecl);
2939 /* Now preserve various other info from the definition. */
2940 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2941 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2942 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2943 DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
2945 /* Don't really know how much of the language-specific
2946 values we should copy from old to new. */
2947 if (DECL_LANG_SPECIFIC (olddecl))
2949 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2950 DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
2951 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2952 if (DECL_TEMPLATE_INFO (newdecl) == NULL_TREE)
2954 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2955 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2959 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2961 int function_size;
2962 struct lang_decl *ol = DECL_LANG_SPECIFIC (olddecl);
2963 struct lang_decl *nl = DECL_LANG_SPECIFIC (newdecl);
2965 function_size = sizeof (struct tree_decl);
2967 bcopy ((char *) newdecl + sizeof (struct tree_common),
2968 (char *) olddecl + sizeof (struct tree_common),
2969 function_size - sizeof (struct tree_common));
2971 /* Can we safely free the storage used by newdecl? */
2973 #define ROUND(x) ((x + obstack_alignment_mask (&permanent_obstack)) \
2974 & ~ obstack_alignment_mask (&permanent_obstack))
2976 if ((char *)newdecl + ROUND (function_size)
2977 + ROUND (sizeof (struct lang_decl))
2978 == obstack_next_free (&permanent_obstack))
2980 DECL_MAIN_VARIANT (newdecl) = olddecl;
2981 DECL_LANG_SPECIFIC (olddecl) = ol;
2982 bcopy ((char *)nl, (char *)ol, sizeof (struct lang_decl));
2984 obstack_free (&permanent_obstack, newdecl);
2986 else if (LANG_DECL_PERMANENT (ol) && ol != nl)
2988 if (DECL_MAIN_VARIANT (olddecl) == olddecl)
2990 /* Save these lang_decls that would otherwise be lost. */
2991 extern tree free_lang_decl_chain;
2992 tree free_lang_decl = (tree) ol;
2994 if (DECL_LANG_SPECIFIC (olddecl) == ol)
2995 abort ();
2997 TREE_CHAIN (free_lang_decl) = free_lang_decl_chain;
2998 free_lang_decl_chain = free_lang_decl;
3000 else
3002 /* Storage leak. */;
3006 else
3008 bcopy ((char *) newdecl + sizeof (struct tree_common),
3009 (char *) olddecl + sizeof (struct tree_common),
3010 sizeof (struct tree_decl) - sizeof (struct tree_common)
3011 + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3014 DECL_UID (olddecl) = olddecl_uid;
3015 if (olddecl_friend)
3016 DECL_FRIEND_P (olddecl) = 1;
3018 return 1;
3021 /* Record a decl-node X as belonging to the current lexical scope.
3022 Check for errors (such as an incompatible declaration for the same
3023 name already seen in the same scope).
3025 Returns either X or an old decl for the same name.
3026 If an old decl is returned, it may have been smashed
3027 to agree with what X says. */
3029 tree
3030 pushdecl (x)
3031 tree x;
3033 register tree t;
3034 register tree name = DECL_ASSEMBLER_NAME (x);
3035 register struct binding_level *b = current_binding_level;
3037 if (x != current_function_decl
3038 /* Don't change DECL_CONTEXT of virtual methods. */
3039 && (TREE_CODE (x) != FUNCTION_DECL || !DECL_VIRTUAL_P (x))
3040 && ! DECL_CONTEXT (x))
3041 DECL_CONTEXT (x) = current_function_decl;
3042 /* A local declaration for a function doesn't constitute nesting. */
3043 if (TREE_CODE (x) == FUNCTION_DECL && DECL_INITIAL (x) == 0)
3044 DECL_CONTEXT (x) = 0;
3046 /* Type are looked up using the DECL_NAME, as that is what the rest of the
3047 compiler wants to use. */
3048 if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
3049 || TREE_CODE (x) == NAMESPACE_DECL || TREE_CODE (x) == TEMPLATE_TYPE_PARM)
3050 name = DECL_NAME (x);
3052 if (name)
3054 #if 0
3055 /* Not needed...see below. */
3056 char *file;
3057 int line;
3058 #endif
3059 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3060 name = TREE_OPERAND (name, 0);
3062 t = lookup_name_current_level (name);
3063 if (t == error_mark_node)
3065 /* error_mark_node is 0 for a while during initialization! */
3066 t = NULL_TREE;
3067 cp_error_at ("`%#D' used prior to declaration", x);
3070 else if (t != NULL_TREE)
3072 #if 0
3073 /* This is turned off until I have time to do it right (bpk). */
3074 /* With the code below that uses it... */
3075 file = DECL_SOURCE_FILE (t);
3076 line = DECL_SOURCE_LINE (t);
3077 #endif
3078 if (TREE_CODE (t) == PARM_DECL)
3080 if (DECL_CONTEXT (t) == NULL_TREE)
3081 fatal ("parse errors have confused me too much");
3083 /* Check for duplicate params. */
3084 if (duplicate_decls (x, t))
3085 return t;
3087 else if (((TREE_CODE (x) == FUNCTION_DECL && DECL_LANGUAGE (x) == lang_c)
3088 || DECL_FUNCTION_TEMPLATE_P (x))
3089 && is_overloaded_fn (t))
3090 /* don't do anything just yet */;
3091 else if (t == wchar_decl_node)
3093 if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
3094 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
3096 /* Throw away the redeclaration. */
3097 return t;
3099 else if (TREE_CODE (t) != TREE_CODE (x))
3101 if ((TREE_CODE (t) == TYPE_DECL && DECL_ARTIFICIAL (t)
3102 && TREE_CODE (x) != TYPE_DECL
3103 && ! (TREE_CODE (x) == TEMPLATE_DECL
3104 && TREE_CODE (DECL_TEMPLATE_RESULT (x)) == TYPE_DECL))
3105 || (TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
3106 && TREE_CODE (t) != TYPE_DECL
3107 && ! (TREE_CODE (t) == TEMPLATE_DECL
3108 && (TREE_CODE (DECL_TEMPLATE_RESULT (t))
3109 == TYPE_DECL))))
3111 /* We do nothing special here, because C++ does such nasty
3112 things with TYPE_DECLs. Instead, just let the TYPE_DECL
3113 get shadowed, and know that if we need to find a TYPE_DECL
3114 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3115 slot of the identifier. */
3118 else if (duplicate_decls (x, t))
3119 return t;
3121 else if (duplicate_decls (x, t))
3123 #if 0
3124 /* This is turned off until I have time to do it right (bpk). */
3126 /* Also warn if they did a prototype with `static' on it, but
3127 then later left the `static' off. */
3128 if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
3130 if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3131 return t;
3133 if (extra_warnings)
3135 cp_warning ("`static' missing from declaration of `%D'",
3137 warning_with_file_and_line (file, line,
3138 "previous declaration of `%s'",
3139 decl_as_string (t, 0));
3142 /* Now fix things so it'll do what they expect. */
3143 if (current_function_decl)
3144 TREE_PUBLIC (current_function_decl) = 0;
3146 /* Due to interference in memory reclamation (X may be
3147 obstack-deallocated at this point), we must guard against
3148 one really special case. [jason: This should be handled
3149 by start_function] */
3150 if (current_function_decl == x)
3151 current_function_decl = t;
3152 #endif
3153 if (TREE_CODE (t) == TYPE_DECL)
3154 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
3155 else if (TREE_CODE (t) == FUNCTION_DECL)
3156 check_default_args (t);
3158 return t;
3162 if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_FUNCTION_MEMBER_P (x))
3164 t = push_overloaded_decl (x, 1);
3165 if (t != x || DECL_LANGUAGE (x) == lang_c)
3166 return t;
3168 else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_CONTEXT (x) == NULL_TREE)
3169 return push_overloaded_decl (x, 0);
3171 /* If declaring a type as a typedef, and the type has no known
3172 typedef name, install this TYPE_DECL as its typedef name. */
3173 if (TREE_CODE (x) == TYPE_DECL)
3175 tree type = TREE_TYPE (x);
3176 tree name = (type != error_mark_node) ? TYPE_NAME (type) : x;
3178 if (name == NULL_TREE || TREE_CODE (name) != TYPE_DECL)
3180 /* If these are different names, and we're at the global
3181 binding level, make two equivalent definitions. */
3182 name = x;
3183 if (global_bindings_p ())
3184 TYPE_NAME (type) = x;
3186 my_friendly_assert (TREE_CODE (name) == TYPE_DECL, 140);
3188 if (type != error_mark_node
3189 && TYPE_NAME (type)
3190 && TYPE_IDENTIFIER (type))
3191 set_identifier_type_value_with_scope (DECL_NAME (x), type, b);
3194 /* Multiple external decls of the same identifier ought to match.
3196 We get warnings about inline functions where they are defined.
3197 We get warnings about other functions from push_overloaded_decl.
3199 Avoid duplicate warnings where they are used. */
3200 if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
3202 tree decl;
3204 if (IDENTIFIER_GLOBAL_VALUE (name) != NULL_TREE
3205 && (DECL_EXTERNAL (IDENTIFIER_GLOBAL_VALUE (name))
3206 || TREE_PUBLIC (IDENTIFIER_GLOBAL_VALUE (name))))
3207 decl = IDENTIFIER_GLOBAL_VALUE (name);
3208 else
3209 decl = NULL_TREE;
3211 if (decl
3212 /* If different sort of thing, we already gave an error. */
3213 && TREE_CODE (decl) == TREE_CODE (x)
3214 && ! comptypes (TREE_TYPE (x), TREE_TYPE (decl), 1))
3216 cp_pedwarn ("type mismatch with previous external decl", x);
3217 cp_pedwarn_at ("previous external decl of `%#D'", decl);
3221 /* This name is new in its binding level.
3222 Install the new declaration and return it. */
3223 if (b == global_binding_level)
3225 /* Install a global value. */
3227 /* If the first global decl has external linkage,
3228 warn if we later see static one. */
3229 if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
3230 TREE_PUBLIC (name) = 1;
3232 /* Don't install an artificial TYPE_DECL if we already have
3233 another _DECL with that name. */
3234 if (TREE_CODE (x) != TYPE_DECL
3235 || t == NULL_TREE
3236 || ! DECL_ARTIFICIAL (x))
3237 IDENTIFIER_GLOBAL_VALUE (name) = x;
3239 /* Don't forget if the function was used via an implicit decl. */
3240 if (IDENTIFIER_IMPLICIT_DECL (name)
3241 && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
3242 TREE_USED (x) = 1;
3244 /* Don't forget if its address was taken in that way. */
3245 if (IDENTIFIER_IMPLICIT_DECL (name)
3246 && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
3247 TREE_ADDRESSABLE (x) = 1;
3249 /* Warn about mismatches against previous implicit decl. */
3250 if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
3251 /* If this real decl matches the implicit, don't complain. */
3252 && ! (TREE_CODE (x) == FUNCTION_DECL
3253 && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
3254 cp_warning
3255 ("`%D' was previously implicitly declared to return `int'", x);
3257 /* If new decl is `static' and an `extern' was seen previously,
3258 warn about it. */
3259 if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
3260 warn_extern_redeclared_static (x, t);
3262 else
3264 /* Here to install a non-global value. */
3265 tree oldlocal = IDENTIFIER_LOCAL_VALUE (name);
3266 tree oldglobal = IDENTIFIER_GLOBAL_VALUE (name);
3268 /* Don't install an artificial TYPE_DECL if we already have
3269 another _DECL with that name. */
3270 if (TREE_CODE (x) != TYPE_DECL
3271 || t == NULL_TREE
3272 || ! DECL_ARTIFICIAL (x))
3274 b->shadowed = tree_cons (name, oldlocal, b->shadowed);
3275 IDENTIFIER_LOCAL_VALUE (name) = x;
3278 /* If this is a TYPE_DECL, push it into the type value slot. */
3279 if (TREE_CODE (x) == TYPE_DECL)
3280 set_identifier_type_value_with_scope (name, TREE_TYPE (x), b);
3282 /* Clear out any TYPE_DECL shadowed by a namespace so that
3283 we won't think this is a type. The C struct hack doesn't
3284 go through namespaces. */
3285 if (TREE_CODE (x) == NAMESPACE_DECL)
3286 set_identifier_type_value_with_scope (name, NULL_TREE, b);
3288 /* If this is an extern function declaration, see if we
3289 have a global definition or declaration for the function. */
3290 if (oldlocal == NULL_TREE
3291 && DECL_EXTERNAL (x)
3292 && oldglobal != NULL_TREE
3293 && TREE_CODE (x) == FUNCTION_DECL
3294 && TREE_CODE (oldglobal) == FUNCTION_DECL)
3296 /* We have one. Their types must agree. */
3297 if (decls_match (x, oldglobal))
3298 /* OK */;
3299 else
3301 cp_warning ("extern declaration of `%#D' doesn't match", x);
3302 cp_warning_at ("global declaration `%#D'", oldglobal);
3305 /* If we have a local external declaration,
3306 and no file-scope declaration has yet been seen,
3307 then if we later have a file-scope decl it must not be static. */
3308 if (oldlocal == NULL_TREE
3309 && oldglobal == NULL_TREE
3310 && DECL_EXTERNAL (x)
3311 && TREE_PUBLIC (x))
3313 TREE_PUBLIC (name) = 1;
3316 if (DECL_FROM_INLINE (x))
3317 /* Inline decls shadow nothing. */;
3319 /* Warn if shadowing an argument at the top level of the body. */
3320 else if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
3321 && TREE_CODE (oldlocal) == PARM_DECL
3322 && TREE_CODE (x) != PARM_DECL)
3324 /* Go to where the parms should be and see if we
3325 find them there. */
3326 struct binding_level *b = current_binding_level->level_chain;
3328 if (cleanup_label)
3329 b = b->level_chain;
3331 /* ARM $8.3 */
3332 if (b->parm_flag == 1)
3333 cp_error ("declaration of `%#D' shadows a parameter", name);
3335 else if (warn_shadow && oldlocal != NULL_TREE && b->is_for_scope
3336 && !DECL_DEAD_FOR_LOCAL (oldlocal))
3338 warning ("variable `%s' shadows local",
3339 IDENTIFIER_POINTER (name));
3340 cp_warning_at (" this is the shadowed declaration", oldlocal);
3342 /* Maybe warn if shadowing something else. */
3343 else if (warn_shadow && !DECL_EXTERNAL (x)
3344 /* No shadow warnings for internally generated vars. */
3345 && ! DECL_ARTIFICIAL (x)
3346 /* No shadow warnings for vars made for inlining. */
3347 && ! DECL_FROM_INLINE (x))
3349 char *warnstring = NULL;
3351 if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
3352 warnstring = "declaration of `%s' shadows a parameter";
3353 else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
3354 && current_class_ptr
3355 && !TREE_STATIC (name))
3356 warnstring = "declaration of `%s' shadows a member of `this'";
3357 else if (oldlocal != NULL_TREE)
3358 warnstring = "declaration of `%s' shadows previous local";
3359 else if (oldglobal != NULL_TREE)
3360 warnstring = "declaration of `%s' shadows global declaration";
3362 if (warnstring)
3363 warning (warnstring, IDENTIFIER_POINTER (name));
3367 if (TREE_CODE (x) == FUNCTION_DECL)
3368 check_default_args (x);
3370 /* Keep count of variables in this level with incomplete type. */
3371 if (TREE_CODE (x) == VAR_DECL
3372 && TREE_TYPE (x) != error_mark_node
3373 && ((TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
3374 && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
3375 /* RTTI TD entries are created while defining the type_info. */
3376 || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
3377 && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
3378 b->incomplete = tree_cons (NULL_TREE, x, b->incomplete);
3381 /* Put decls on list in reverse order.
3382 We will reverse them later if necessary. */
3383 TREE_CHAIN (x) = b->names;
3384 b->names = x;
3385 if (! (b != global_binding_level || TREE_PERMANENT (x)))
3386 my_friendly_abort (124);
3388 return x;
3391 /* Same as pushdecl, but define X in binding-level LEVEL. We rely on the
3392 caller to set DECL_CONTEXT properly. */
3394 static tree
3395 pushdecl_with_scope (x, level)
3396 tree x;
3397 struct binding_level *level;
3399 register struct binding_level *b = current_binding_level;
3400 tree function_decl = current_function_decl;
3402 current_function_decl = NULL_TREE;
3403 current_binding_level = level;
3404 x = pushdecl (x);
3405 current_binding_level = b;
3406 current_function_decl = function_decl;
3407 return x;
3410 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
3411 if appropriate. */
3413 tree
3414 pushdecl_top_level (x)
3415 tree x;
3417 register struct binding_level *b = inner_binding_level;
3418 register tree t = pushdecl_with_scope (x, global_binding_level);
3420 /* Now, the type_shadowed stack may screw us. Munge it so it does
3421 what we want. */
3422 if (TREE_CODE (x) == TYPE_DECL)
3424 tree name = DECL_NAME (x);
3425 tree newval;
3426 tree *ptr = (tree *)0;
3427 for (; b != global_binding_level; b = b->level_chain)
3429 tree shadowed = b->type_shadowed;
3430 for (; shadowed; shadowed = TREE_CHAIN (shadowed))
3431 if (TREE_PURPOSE (shadowed) == name)
3433 ptr = &TREE_VALUE (shadowed);
3434 /* Can't break out of the loop here because sometimes
3435 a binding level will have duplicate bindings for
3436 PT names. It's gross, but I haven't time to fix it. */
3439 newval = TREE_TYPE (x);
3440 if (ptr == (tree *)0)
3442 /* @@ This shouldn't be needed. My test case "zstring.cc" trips
3443 up here if this is changed to an assertion. --KR */
3444 SET_IDENTIFIER_TYPE_VALUE (name, newval);
3446 else
3448 *ptr = newval;
3451 return t;
3454 /* Like push_overloaded_decl, only it places X in GLOBAL_BINDING_LEVEL,
3455 if appropriate. */
3457 static void
3458 push_overloaded_decl_top_level (x, forget)
3459 tree x;
3460 int forget;
3462 struct binding_level *b = current_binding_level;
3464 current_binding_level = global_binding_level;
3465 push_overloaded_decl (x, forget);
3466 current_binding_level = b;
3469 /* Make the declaration of X appear in CLASS scope. */
3471 tree
3472 pushdecl_class_level (x)
3473 tree x;
3475 /* Don't use DECL_ASSEMBLER_NAME here! Everything that looks in class
3476 scope looks for the pre-mangled name. */
3477 register tree name = DECL_NAME (x);
3479 if (name)
3481 if (TYPE_BEING_DEFINED (current_class_type))
3483 /* Check for inconsistent use of this name in the class body.
3484 Types, enums, and static vars are checked here; other
3485 members are checked in finish_struct. */
3486 tree icv = IDENTIFIER_CLASS_VALUE (name);
3488 if (icv && icv != x
3489 /* Don't complain about inherited names. */
3490 && id_in_current_class (name)
3491 /* Or shadowed tags. */
3492 && !(TREE_CODE (icv) == TYPE_DECL
3493 && DECL_CONTEXT (icv) == current_class_type))
3495 cp_error ("declaration of identifier `%D' as `%#D'", name, x);
3496 cp_error_at ("conflicts with previous use in class as `%#D'",
3497 icv);
3501 push_class_level_binding (name, x);
3502 if (TREE_CODE (x) == TYPE_DECL)
3504 set_identifier_type_value (name, TREE_TYPE (x));
3507 return x;
3510 #if 0
3511 /* This function is used to push the mangled decls for nested types into
3512 the appropriate scope. Previously pushdecl_top_level was used, but that
3513 is incorrect for members of local classes. */
3515 void
3516 pushdecl_nonclass_level (x)
3517 tree x;
3519 struct binding_level *b = current_binding_level;
3521 my_friendly_assert (b->parm_flag != 2, 180);
3523 #if 0
3524 /* Get out of template binding levels */
3525 while (b->pseudo_global)
3526 b = b->level_chain;
3527 #endif
3529 pushdecl_with_scope (x, b);
3531 #endif
3533 /* Make the declaration(s) of X appear in CLASS scope
3534 under the name NAME. */
3536 void
3537 push_class_level_binding (name, x)
3538 tree name;
3539 tree x;
3541 /* The class_binding_level will be NULL if x is a template
3542 parameter name in a member template. */
3543 if (!class_binding_level)
3544 return;
3546 if (TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
3547 && purpose_member (name, class_binding_level->class_shadowed))
3548 return;
3550 maybe_push_cache_obstack ();
3551 class_binding_level->class_shadowed
3552 = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
3553 class_binding_level->class_shadowed);
3554 pop_obstacks ();
3555 IDENTIFIER_CLASS_VALUE (name) = x;
3556 obstack_ptr_grow (&decl_obstack, x);
3559 /* Tell caller how to interpret a TREE_LIST which contains
3560 chains of FUNCTION_DECLS. */
3563 overloaded_globals_p (list)
3564 tree list;
3566 my_friendly_assert (TREE_CODE (list) == TREE_LIST, 142);
3568 /* Don't commit caller to seeing them as globals. */
3569 if (TREE_NONLOCAL_FLAG (list))
3570 return -1;
3571 /* Do commit caller to not seeing them as globals. */
3572 if (TREE_CODE (TREE_VALUE (list)) == TREE_LIST)
3573 return 0;
3574 /* Do commit caller to seeing them as globals. */
3575 return 1;
3578 /* DECL is a FUNCTION_DECL which may have other definitions already in
3579 place. We get around this by making the value of the identifier point
3580 to a list of all the things that want to be referenced by that name. It
3581 is then up to the users of that name to decide what to do with that
3582 list.
3584 DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its DECL_RESULT
3585 slot. It is dealt with the same way.
3587 The value returned may be a previous declaration if we guessed wrong
3588 about what language DECL should belong to (C or C++). Otherwise,
3589 it's always DECL (and never something that's not a _DECL). */
3591 static tree
3592 push_overloaded_decl (decl, forgettable)
3593 tree decl;
3594 int forgettable;
3596 tree orig_name = DECL_NAME (decl);
3597 tree old;
3598 int doing_global = (global_bindings_p () || ! forgettable);
3600 if (doing_global)
3602 old = IDENTIFIER_GLOBAL_VALUE (orig_name);
3603 if (old && TREE_CODE (old) == FUNCTION_DECL
3604 && DECL_ARTIFICIAL (old)
3605 && (DECL_BUILT_IN (old) || DECL_BUILT_IN_NONANSI (old)))
3607 if (duplicate_decls (decl, old))
3608 return old;
3609 old = NULL_TREE;
3612 else
3614 old = IDENTIFIER_LOCAL_VALUE (orig_name);
3616 if (! purpose_member (orig_name, current_binding_level->shadowed))
3618 current_binding_level->shadowed
3619 = tree_cons (orig_name, old, current_binding_level->shadowed);
3620 old = NULL_TREE;
3624 if (old)
3626 if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
3628 tree t = TREE_TYPE (old);
3629 if (IS_AGGR_TYPE (t) && warn_shadow
3630 && (! DECL_IN_SYSTEM_HEADER (decl)
3631 || ! DECL_IN_SYSTEM_HEADER (old)))
3632 cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
3633 old = NULL_TREE;
3635 else if (is_overloaded_fn (old))
3637 tree tmp;
3639 for (tmp = get_first_fn (old); tmp; tmp = DECL_CHAIN (tmp))
3640 if (decl == tmp || duplicate_decls (decl, tmp))
3641 return tmp;
3643 else
3645 cp_error_at ("previous non-function declaration `%#D'", old);
3646 cp_error ("conflicts with function declaration `%#D'", decl);
3647 return decl;
3651 if (old || TREE_CODE (decl) == TEMPLATE_DECL)
3653 if (old && is_overloaded_fn (old))
3654 DECL_CHAIN (decl) = get_first_fn (old);
3655 else
3656 DECL_CHAIN (decl) = NULL_TREE;
3657 old = tree_cons (orig_name, decl, NULL_TREE);
3658 TREE_TYPE (old) = unknown_type_node;
3660 else
3661 /* orig_name is not ambiguous. */
3662 old = decl;
3664 if (doing_global)
3665 IDENTIFIER_GLOBAL_VALUE (orig_name) = old;
3666 else
3667 IDENTIFIER_LOCAL_VALUE (orig_name) = old;
3669 return decl;
3672 /* Generate an implicit declaration for identifier FUNCTIONID
3673 as a function of type int (). Print a warning if appropriate. */
3675 tree
3676 implicitly_declare (functionid)
3677 tree functionid;
3679 register tree decl;
3680 int temp = allocation_temporary_p ();
3682 push_obstacks_nochange ();
3684 /* Save the decl permanently so we can warn if definition follows.
3685 In ANSI C, warn_implicit is usually false, so the saves little space.
3686 But in C++, it's usually true, hence the extra code. */
3687 if (temp && (! warn_implicit || toplevel_bindings_p ()))
3688 end_temporary_allocation ();
3690 /* We used to reuse an old implicit decl here,
3691 but this loses with inline functions because it can clobber
3692 the saved decl chains. */
3693 decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
3695 DECL_EXTERNAL (decl) = 1;
3696 TREE_PUBLIC (decl) = 1;
3698 /* ANSI standard says implicit declarations are in the innermost block.
3699 So we record the decl in the standard fashion. */
3700 pushdecl (decl);
3701 rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
3703 if (warn_implicit
3704 /* Only one warning per identifier. */
3705 && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
3707 cp_pedwarn ("implicit declaration of function `%#D'", decl);
3710 SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
3712 pop_obstacks ();
3714 return decl;
3717 /* Return zero if the declaration NEWDECL is valid
3718 when the declaration OLDDECL (assumed to be for the same name)
3719 has already been seen.
3720 Otherwise return an error message format string with a %s
3721 where the identifier should go. */
3723 static char *
3724 redeclaration_error_message (newdecl, olddecl)
3725 tree newdecl, olddecl;
3727 if (TREE_CODE (newdecl) == TYPE_DECL)
3729 /* Because C++ can put things into name space for free,
3730 constructs like "typedef struct foo { ... } foo"
3731 would look like an erroneous redeclaration. */
3732 if (comptypes (TREE_TYPE (newdecl), TREE_TYPE (olddecl), 0))
3733 return 0;
3734 else
3735 return "redefinition of `%#D'";
3737 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
3739 /* If this is a pure function, its olddecl will actually be
3740 the original initialization to `0' (which we force to call
3741 abort()). Don't complain about redefinition in this case. */
3742 if (DECL_LANG_SPECIFIC (olddecl) && DECL_ABSTRACT_VIRTUAL_P (olddecl))
3743 return 0;
3745 /* We'll complain about linkage mismatches in
3746 warn_extern_redeclared_static. */
3748 /* defining the same name twice is no good. */
3749 if (DECL_INITIAL (olddecl) != NULL_TREE
3750 && DECL_INITIAL (newdecl) != NULL_TREE)
3752 if (DECL_NAME (olddecl) == NULL_TREE)
3753 return "`%#D' not declared in class";
3754 else
3755 return "redefinition of `%#D'";
3757 return 0;
3759 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3761 if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3762 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
3763 && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
3764 || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
3765 && TYPE_SIZE (TREE_TYPE (newdecl))
3766 && TYPE_SIZE (TREE_TYPE (olddecl))))
3767 return "redefinition of `%#D'";
3768 return 0;
3770 else if (toplevel_bindings_p ())
3772 /* Objects declared at top level: */
3773 /* If at least one is a reference, it's ok. */
3774 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
3775 return 0;
3776 /* Reject two definitions. */
3777 return "redefinition of `%#D'";
3779 else
3781 /* Objects declared with block scope: */
3782 /* Reject two definitions, and reject a definition
3783 together with an external reference. */
3784 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
3785 return "redeclaration of `%#D'";
3786 return 0;
3790 /* Get the LABEL_DECL corresponding to identifier ID as a label.
3791 Create one if none exists so far for the current function.
3792 This function is called for both label definitions and label references. */
3794 tree
3795 lookup_label (id)
3796 tree id;
3798 register tree decl = IDENTIFIER_LABEL_VALUE (id);
3800 if (current_function_decl == NULL_TREE)
3802 error ("label `%s' referenced outside of any function",
3803 IDENTIFIER_POINTER (id));
3804 return NULL_TREE;
3807 if ((decl == NULL_TREE
3808 || DECL_SOURCE_LINE (decl) == 0)
3809 && (named_label_uses == NULL
3810 || named_label_uses->names_in_scope != current_binding_level->names
3811 || named_label_uses->label_decl != decl))
3813 struct named_label_list *new_ent;
3814 new_ent
3815 = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
3816 new_ent->label_decl = decl;
3817 new_ent->names_in_scope = current_binding_level->names;
3818 new_ent->binding_level = current_binding_level;
3819 new_ent->lineno_o_goto = lineno;
3820 new_ent->filename_o_goto = input_filename;
3821 new_ent->next = named_label_uses;
3822 named_label_uses = new_ent;
3825 /* Use a label already defined or ref'd with this name. */
3826 if (decl != NULL_TREE)
3828 /* But not if it is inherited and wasn't declared to be inheritable. */
3829 if (DECL_CONTEXT (decl) != current_function_decl
3830 && ! C_DECLARED_LABEL_FLAG (decl))
3831 return shadow_label (id);
3832 return decl;
3835 decl = build_decl (LABEL_DECL, id, void_type_node);
3837 /* Make sure every label has an rtx. */
3838 label_rtx (decl);
3840 /* A label not explicitly declared must be local to where it's ref'd. */
3841 DECL_CONTEXT (decl) = current_function_decl;
3843 DECL_MODE (decl) = VOIDmode;
3845 /* Say where one reference is to the label,
3846 for the sake of the error if it is not defined. */
3847 DECL_SOURCE_LINE (decl) = lineno;
3848 DECL_SOURCE_FILE (decl) = input_filename;
3850 SET_IDENTIFIER_LABEL_VALUE (id, decl);
3852 named_labels = tree_cons (NULL_TREE, decl, named_labels);
3853 named_label_uses->label_decl = decl;
3855 return decl;
3858 /* Make a label named NAME in the current function,
3859 shadowing silently any that may be inherited from containing functions
3860 or containing scopes.
3862 Note that valid use, if the label being shadowed
3863 comes from another scope in the same function,
3864 requires calling declare_nonlocal_label right away. */
3866 tree
3867 shadow_label (name)
3868 tree name;
3870 register tree decl = IDENTIFIER_LABEL_VALUE (name);
3872 if (decl != NULL_TREE)
3874 shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
3875 SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE);
3876 SET_IDENTIFIER_LABEL_VALUE (decl, NULL_TREE);
3879 return lookup_label (name);
3882 /* Define a label, specifying the location in the source file.
3883 Return the LABEL_DECL node for the label, if the definition is valid.
3884 Otherwise return 0. */
3886 tree
3887 define_label (filename, line, name)
3888 char *filename;
3889 int line;
3890 tree name;
3892 tree decl;
3894 if (minimal_parse_mode)
3896 push_obstacks (&permanent_obstack, &permanent_obstack);
3897 decl = build_decl (LABEL_DECL, name, void_type_node);
3898 pop_obstacks ();
3899 DECL_SOURCE_LINE (decl) = line;
3900 DECL_SOURCE_FILE (decl) = filename;
3901 add_tree (decl);
3902 return decl;
3905 decl = lookup_label (name);
3907 /* After labels, make any new cleanups go into their
3908 own new (temporary) binding contour. */
3909 current_binding_level->more_cleanups_ok = 0;
3911 /* If label with this name is known from an outer context, shadow it. */
3912 if (decl != NULL_TREE && DECL_CONTEXT (decl) != current_function_decl)
3914 shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
3915 SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE);
3916 decl = lookup_label (name);
3919 if (name == get_identifier ("wchar_t"))
3920 cp_pedwarn ("label named wchar_t");
3922 if (DECL_INITIAL (decl) != NULL_TREE)
3924 cp_error ("duplicate label `%D'", decl);
3925 return 0;
3927 else
3929 struct named_label_list *uses, *prev;
3930 int identified = 0;
3932 /* Mark label as having been defined. */
3933 DECL_INITIAL (decl) = error_mark_node;
3934 /* Say where in the source. */
3935 DECL_SOURCE_FILE (decl) = filename;
3936 DECL_SOURCE_LINE (decl) = line;
3938 prev = NULL;
3939 uses = named_label_uses;
3940 while (uses != NULL)
3941 if (uses->label_decl == decl)
3943 struct binding_level *b = current_binding_level;
3944 while (b)
3946 tree new_decls = b->names;
3947 tree old_decls = (b == uses->binding_level)
3948 ? uses->names_in_scope : NULL_TREE;
3949 while (new_decls != old_decls)
3951 if (TREE_CODE (new_decls) == VAR_DECL
3952 /* Don't complain about crossing initialization
3953 of internal entities. They can't be accessed,
3954 and they should be cleaned up
3955 by the time we get to the label. */
3956 && ! DECL_ARTIFICIAL (new_decls)
3957 && ((DECL_INITIAL (new_decls) != NULL_TREE
3958 && DECL_INITIAL (new_decls) != error_mark_node)
3959 || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
3961 if (! identified)
3963 cp_error ("jump to label `%D'", decl);
3964 error_with_file_and_line (uses->filename_o_goto,
3965 uses->lineno_o_goto,
3966 " from here");
3967 identified = 1;
3969 cp_error_at (" crosses initialization of `%#D'",
3970 new_decls);
3972 new_decls = TREE_CHAIN (new_decls);
3974 if (b == uses->binding_level)
3975 break;
3976 b = b->level_chain;
3979 if (prev != NULL)
3980 prev->next = uses->next;
3981 else
3982 named_label_uses = uses->next;
3984 uses = uses->next;
3986 else
3988 prev = uses;
3989 uses = uses->next;
3991 current_function_return_value = NULL_TREE;
3992 return decl;
3996 struct cp_switch
3998 struct binding_level *level;
3999 struct cp_switch *next;
4002 static struct cp_switch *switch_stack;
4004 void
4005 push_switch ()
4007 struct cp_switch *p
4008 = (struct cp_switch *) oballoc (sizeof (struct cp_switch));
4009 p->level = current_binding_level;
4010 p->next = switch_stack;
4011 switch_stack = p;
4014 void
4015 pop_switch ()
4017 switch_stack = switch_stack->next;
4020 /* Same, but for CASE labels. If DECL is NULL_TREE, it's the default. */
4021 /* XXX Note decl is never actually used. (bpk) */
4023 void
4024 define_case_label (decl)
4025 tree decl;
4027 tree cleanup = last_cleanup_this_contour ();
4028 struct binding_level *b = current_binding_level;
4029 int identified = 0;
4031 if (cleanup)
4033 static int explained = 0;
4034 cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
4035 warning ("where case label appears here");
4036 if (!explained)
4038 warning ("(enclose actions of previous case statements requiring");
4039 warning ("destructors in their own binding contours.)");
4040 explained = 1;
4044 for (; b && b != switch_stack->level; b = b->level_chain)
4046 tree new_decls = b->names;
4047 for (; new_decls; new_decls = TREE_CHAIN (new_decls))
4049 if (TREE_CODE (new_decls) == VAR_DECL
4050 /* Don't complain about crossing initialization
4051 of internal entities. They can't be accessed,
4052 and they should be cleaned up
4053 by the time we get to the label. */
4054 && ! DECL_ARTIFICIAL (new_decls)
4055 && ((DECL_INITIAL (new_decls) != NULL_TREE
4056 && DECL_INITIAL (new_decls) != error_mark_node)
4057 || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
4059 if (! identified)
4060 error ("jump to case label");
4061 identified = 1;
4062 cp_error_at (" crosses initialization of `%#D'",
4063 new_decls);
4068 /* After labels, make any new cleanups go into their
4069 own new (temporary) binding contour. */
4071 current_binding_level->more_cleanups_ok = 0;
4072 current_function_return_value = NULL_TREE;
4075 /* Return the list of declarations of the current level.
4076 Note that this list is in reverse order unless/until
4077 you nreverse it; and when you do nreverse it, you must
4078 store the result back using `storedecls' or you will lose. */
4080 tree
4081 getdecls ()
4083 return current_binding_level->names;
4086 /* Return the list of type-tags (for structs, etc) of the current level. */
4088 tree
4089 gettags ()
4091 return current_binding_level->tags;
4094 /* Store the list of declarations of the current level.
4095 This is done for the parameter declarations of a function being defined,
4096 after they are modified in the light of any missing parameters. */
4098 static void
4099 storedecls (decls)
4100 tree decls;
4102 current_binding_level->names = decls;
4105 /* Similarly, store the list of tags of the current level. */
4107 static void
4108 storetags (tags)
4109 tree tags;
4111 current_binding_level->tags = tags;
4114 /* Given NAME, an IDENTIFIER_NODE,
4115 return the structure (or union or enum) definition for that name.
4116 Searches binding levels from BINDING_LEVEL up to the global level.
4117 If THISLEVEL_ONLY is nonzero, searches only the specified context
4118 (but skips any tag-transparent contexts to find one that is
4119 meaningful for tags).
4120 FORM says which kind of type the caller wants;
4121 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
4122 If the wrong kind of type is found, and it's not a template, an error is
4123 reported. */
4125 static tree
4126 lookup_tag (form, name, binding_level, thislevel_only)
4127 enum tree_code form;
4128 tree name;
4129 struct binding_level *binding_level;
4130 int thislevel_only;
4132 register struct binding_level *level;
4134 for (level = binding_level; level; level = level->level_chain)
4136 register tree tail;
4137 if (ANON_AGGRNAME_P (name))
4138 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4140 /* There's no need for error checking here, because
4141 anon names are unique throughout the compilation. */
4142 if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
4143 return TREE_VALUE (tail);
4145 else
4146 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4148 if (TREE_PURPOSE (tail) == name)
4150 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
4151 /* Should tighten this up; it'll probably permit
4152 UNION_TYPE and a struct template, for example. */
4153 if (code != form
4154 && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
4156 /* Definition isn't the kind we were looking for. */
4157 cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
4158 form);
4159 return NULL_TREE;
4161 return TREE_VALUE (tail);
4164 if (thislevel_only && ! level->tag_transparent)
4166 if (level->pseudo_global)
4168 tree t = IDENTIFIER_GLOBAL_VALUE (name);
4169 if (t && TREE_CODE (t) == TEMPLATE_DECL
4170 && TREE_CODE (DECL_TEMPLATE_RESULT (t)) == TYPE_DECL)
4171 return TREE_TYPE (t);
4173 return NULL_TREE;
4175 if (current_class_type && level->level_chain == global_binding_level)
4177 /* Try looking in this class's tags before heading into
4178 global binding level. */
4179 tree context = current_class_type;
4180 while (context)
4182 switch (TREE_CODE_CLASS (TREE_CODE (context)))
4184 tree these_tags;
4185 case 't':
4186 these_tags = CLASSTYPE_TAGS (context);
4187 if (ANON_AGGRNAME_P (name))
4188 while (these_tags)
4190 if (TYPE_IDENTIFIER (TREE_VALUE (these_tags))
4191 == name)
4192 return TREE_VALUE (tail);
4193 these_tags = TREE_CHAIN (these_tags);
4195 else
4196 while (these_tags)
4198 if (TREE_PURPOSE (these_tags) == name)
4200 if (TREE_CODE (TREE_VALUE (these_tags)) != form)
4202 cp_error ("`%#D' redeclared as %C in class scope",
4203 TREE_VALUE (tail), form);
4204 return NULL_TREE;
4206 return TREE_VALUE (tail);
4208 these_tags = TREE_CHAIN (these_tags);
4210 /* If this type is not yet complete, then don't
4211 look at its context. */
4212 if (TYPE_SIZE (context) == NULL_TREE)
4213 goto no_context;
4214 /* Go to next enclosing type, if any. */
4215 context = DECL_CONTEXT (TYPE_MAIN_DECL (context));
4216 break;
4217 case 'd':
4218 context = DECL_CONTEXT (context);
4219 break;
4220 default:
4221 my_friendly_abort (10);
4223 continue;
4224 no_context:
4225 break;
4229 return NULL_TREE;
4232 #if 0
4233 void
4234 set_current_level_tags_transparency (tags_transparent)
4235 int tags_transparent;
4237 current_binding_level->tag_transparent = tags_transparent;
4239 #endif
4241 /* Given a type, find the tag that was defined for it and return the tag name.
4242 Otherwise return 0. However, the value can never be 0
4243 in the cases in which this is used.
4245 C++: If NAME is non-zero, this is the new name to install. This is
4246 done when replacing anonymous tags with real tag names. */
4248 static tree
4249 lookup_tag_reverse (type, name)
4250 tree type;
4251 tree name;
4253 register struct binding_level *level;
4255 for (level = current_binding_level; level; level = level->level_chain)
4257 register tree tail;
4258 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4260 if (TREE_VALUE (tail) == type)
4262 if (name)
4263 TREE_PURPOSE (tail) = name;
4264 return TREE_PURPOSE (tail);
4268 return NULL_TREE;
4271 /* Lookup TYPE in CONTEXT (a chain of nested types or a FUNCTION_DECL).
4272 Return the type value, or NULL_TREE if not found. */
4274 static tree
4275 lookup_nested_type (type, context)
4276 tree type;
4277 tree context;
4279 if (context == NULL_TREE)
4280 return NULL_TREE;
4281 while (context)
4283 switch (TREE_CODE (context))
4285 case TYPE_DECL:
4287 tree ctype = TREE_TYPE (context);
4288 tree match = value_member (type, CLASSTYPE_TAGS (ctype));
4289 if (match)
4290 return TREE_VALUE (match);
4291 context = DECL_CONTEXT (context);
4293 /* When we have a nested class whose member functions have
4294 local types (e.g., a set of enums), we'll arrive here
4295 with the DECL_CONTEXT as the actual RECORD_TYPE node for
4296 the enclosing class. Instead, we want to make sure we
4297 come back in here with the TYPE_DECL, not the RECORD_TYPE. */
4298 if (context && TREE_CODE (context) == RECORD_TYPE)
4299 context = TREE_CHAIN (context);
4301 break;
4302 case FUNCTION_DECL:
4303 if (TYPE_NAME (type) && TYPE_IDENTIFIER (type))
4304 return lookup_name (TYPE_IDENTIFIER (type), 1);
4305 return NULL_TREE;
4306 default:
4307 my_friendly_abort (12);
4310 return NULL_TREE;
4313 /* Look up NAME in the NAMESPACE. */
4315 tree
4316 lookup_namespace_name (namespace, name)
4317 tree namespace, name;
4319 struct binding_level *b = (struct binding_level *)NAMESPACE_LEVEL (namespace);
4320 tree x = NULL_TREE;
4322 #if 1
4323 /* This searches just one level. */
4324 if (b)
4326 for (x = b->names; x; x = TREE_CHAIN (x))
4327 if (DECL_NAME (x) == name || DECL_ASSEMBLER_NAME (x) == name)
4328 break;
4330 #else
4331 /* This searches all levels. */
4332 for (; b && !x; b = b->level_chain)
4334 for (x = b->names; x; x = TREE_CHAIN (x))
4335 if (DECL_NAME (x) == name || DECL_ASSEMBLER_NAME (x) == name)
4336 break;
4338 #endif
4339 return x;
4342 tree
4343 make_typename_type (context, name)
4344 tree context, name;
4346 tree t, d;
4348 if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
4349 name = TYPE_IDENTIFIER (name);
4350 else if (TREE_CODE (name) == TYPE_DECL)
4351 name = DECL_NAME (name);
4352 else if (TREE_CODE (name) != IDENTIFIER_NODE)
4353 my_friendly_abort (2000);
4355 if (! uses_template_parms (context)
4356 || context == current_class_type)
4358 if (IS_AGGR_TYPE (context))
4359 t = lookup_field (context, name, 0, 1);
4360 else
4361 t = NULL_TREE;
4363 if (t == NULL_TREE)
4365 cp_error ("no type named `%#T' in `%#T'", name, context);
4366 return error_mark_node;
4368 return TREE_TYPE (t);
4371 if (processing_template_decl)
4372 push_obstacks (&permanent_obstack, &permanent_obstack);
4373 t = make_lang_type (TYPENAME_TYPE);
4374 d = build_decl (TYPE_DECL, name, t);
4375 if (processing_template_decl)
4376 pop_obstacks ();
4378 TYPE_CONTEXT (t) = context;
4379 TYPE_NAME (TREE_TYPE (d)) = d;
4380 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
4381 DECL_CONTEXT (d) = context;
4382 CLASSTYPE_GOT_SEMICOLON (t) = 1;
4384 return t;
4387 /* Given a TYPE_DECL T looked up in CONTEXT, return a TYPENAME_TYPE
4388 where the scope is either CONTEXT or the first base of CONTEXT along the
4389 inheritance chain to T that depends on template parameters.
4391 Called from lookup_name_real to implement the implicit typename
4392 extension. */
4394 static tree
4395 make_implicit_typename (context, t)
4396 tree context, t;
4398 tree retval;
4400 if (uses_template_parms (DECL_CONTEXT (t))
4401 && DECL_CONTEXT (t) != context)
4403 tree binfo = get_binfo (DECL_CONTEXT (t), context, 0);
4404 while (binfo)
4406 tree next = BINFO_INHERITANCE_CHAIN (binfo);
4407 if (! uses_template_parms (BINFO_TYPE (next))
4408 || BINFO_TYPE (next) == context)
4409 break;
4410 binfo = next;
4412 if (binfo)
4413 retval = make_typename_type (BINFO_TYPE (binfo), DECL_NAME (t));
4414 else
4415 /* FIXME: find the enclosing class whose base t comes from. */
4416 retval = make_typename_type (DECL_CONTEXT (t), DECL_NAME (t));
4418 else
4419 retval = make_typename_type (context, DECL_NAME (t));
4421 TREE_TYPE (retval) = TREE_TYPE (t);
4422 return retval;
4425 /* Look up NAME in the current binding level and its superiors in the
4426 namespace of variables, functions and typedefs. Return a ..._DECL
4427 node of some kind representing its definition if there is only one
4428 such declaration, or return a TREE_LIST with all the overloaded
4429 definitions if there are many, or return 0 if it is undefined.
4431 If PREFER_TYPE is > 0, we prefer TYPE_DECLs.
4432 If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
4433 Otherwise we prefer non-TYPE_DECLs. */
4435 static tree
4436 lookup_name_real (name, prefer_type, nonclass)
4437 tree name;
4438 int prefer_type, nonclass;
4440 register tree val;
4441 int yylex = 0;
4442 tree from_obj = NULL_TREE;
4443 tree locval, classval;
4445 if (prefer_type == -2)
4447 extern int looking_for_typename;
4448 tree type = NULL_TREE;
4450 yylex = 1;
4451 prefer_type = looking_for_typename;
4453 /* std:: becomes :: for now. */
4454 if (got_scope == std_node)
4455 got_scope = void_type_node;
4457 if (got_scope)
4458 type = got_scope;
4459 else if (got_object != error_mark_node)
4460 type = got_object;
4462 if (type)
4464 if (type == error_mark_node)
4465 return error_mark_node;
4466 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
4467 type = TREE_TYPE (type);
4469 type = complete_type (type);
4471 if (type == void_type_node)
4472 val = IDENTIFIER_GLOBAL_VALUE (name);
4473 else if (TREE_CODE (type) == NAMESPACE_DECL)
4475 val = lookup_namespace_name (type, name);
4477 else if (! IS_AGGR_TYPE (type)
4478 || TREE_CODE (type) == TEMPLATE_TYPE_PARM
4479 || TREE_CODE (type) == TYPENAME_TYPE)
4480 /* Someone else will give an error about this if needed. */
4481 val = NULL_TREE;
4482 else if (TYPE_BEING_DEFINED (type))
4484 val = IDENTIFIER_CLASS_VALUE (name);
4485 if (val && DECL_CONTEXT (val) != type)
4487 struct binding_level *b = class_binding_level;
4488 for (val = NULL_TREE; b; b = b->level_chain)
4490 tree t = purpose_member (name, b->class_shadowed);
4491 if (t && TREE_VALUE (t)
4492 && DECL_CONTEXT (TREE_VALUE (t)) == type)
4494 val = TREE_VALUE (t);
4495 break;
4499 if (val == NULL_TREE)
4500 val = lookup_field (type, name, 0, 1);
4502 else if (type == current_class_type)
4503 val = IDENTIFIER_CLASS_VALUE (name);
4504 else
4505 val = lookup_field (type, name, 0, prefer_type);
4507 else
4508 val = NULL_TREE;
4510 /* Add implicit 'typename' to scoped types from other classes. */
4511 if (got_scope && processing_template_decl
4512 && got_scope != current_class_type
4513 && uses_template_parms (got_scope)
4514 && val && TREE_CODE (val) == TYPE_DECL
4515 && ! DECL_ARTIFICIAL (val))
4517 tree t = make_implicit_typename (got_scope, val);
4518 val = TYPE_MAIN_DECL (t);
4521 if (got_scope)
4522 goto done;
4523 else if (got_object && val)
4524 from_obj = val;
4527 locval = classval = NULL_TREE;
4529 if (current_binding_level != global_binding_level
4530 && IDENTIFIER_LOCAL_VALUE (name))
4531 locval = IDENTIFIER_LOCAL_VALUE (name);
4533 /* In C++ class fields are between local and global scope,
4534 just before the global scope. */
4535 if (current_class_type && ! nonclass)
4537 classval = IDENTIFIER_CLASS_VALUE (name);
4538 if (classval == NULL_TREE && TYPE_BEING_DEFINED (current_class_type))
4539 /* Try to find values from base classes if we are presently
4540 defining a type. We are presently only interested in
4541 TYPE_DECLs. */
4542 classval = lookup_field (current_class_type, name, 0, 1);
4544 /* yylex() calls this with -2, since we should never start digging for
4545 the nested name at the point where we haven't even, for example,
4546 created the COMPONENT_REF or anything like that. */
4547 if (classval == NULL_TREE)
4548 classval = lookup_nested_field (name, ! yylex);
4550 /* Add implicit 'typename' to types from base classes. */
4551 if (processing_template_decl
4552 && classval && TREE_CODE (classval) == TYPE_DECL
4553 && DECL_CONTEXT (classval) != current_class_type
4554 && uses_template_parms (DECL_CONTEXT (classval))
4555 && ! DECL_ARTIFICIAL (classval))
4557 tree t = make_implicit_typename (current_class_type, classval);
4558 classval = TYPE_MAIN_DECL (t);
4562 if (locval && classval)
4564 if (current_scope () == current_function_decl
4565 && ! hack_decl_function_context (current_function_decl))
4566 /* Not in a nested function. */
4567 val = locval;
4568 else
4570 /* This is incredibly horrible. The whole concept of
4571 IDENTIFIER_LOCAL_VALUE / IDENTIFIER_CLASS_VALUE /
4572 IDENTIFIER_GLOBAL_VALUE needs to be scrapped for local
4573 classes. */
4574 tree lctx = hack_decl_function_context (locval);
4575 tree cctx = hack_decl_function_context (classval);
4577 if (lctx == current_scope ())
4578 val = locval;
4579 else if (lctx == cctx)
4580 val = classval;
4581 else
4582 /* I don't know which is right; let's just guess for now. */
4583 val = locval;
4586 else if (locval)
4587 val = locval;
4588 else if (classval)
4589 val = classval;
4590 else
4591 val = IDENTIFIER_GLOBAL_VALUE (name);
4593 done:
4594 if (val)
4596 /* This should only warn about types used in qualified-ids. */
4597 if (from_obj && from_obj != val)
4599 if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
4600 && TREE_CODE (val) == TYPE_DECL
4601 && TREE_TYPE (from_obj) != TREE_TYPE (val))
4603 cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
4604 name, got_object, TREE_TYPE (from_obj));
4605 cp_pedwarn (" does not match lookup in the current scope (`%#T')",
4606 TREE_TYPE (val));
4609 val = from_obj;
4612 if ((TREE_CODE (val) == TEMPLATE_DECL && looking_for_template)
4613 || TREE_CODE (val) == TYPE_DECL || prefer_type <= 0)
4615 else if (IDENTIFIER_HAS_TYPE_VALUE (name))
4616 val = TYPE_MAIN_DECL (IDENTIFIER_TYPE_VALUE (name));
4617 else if (TREE_TYPE (val) == error_mark_node)
4618 val = error_mark_node;
4620 else if (from_obj)
4621 val = from_obj;
4623 return val;
4626 tree
4627 lookup_name_nonclass (name)
4628 tree name;
4630 return lookup_name_real (name, 0, 1);
4633 tree
4634 lookup_name (name, prefer_type)
4635 tree name;
4636 int prefer_type;
4638 return lookup_name_real (name, prefer_type, 0);
4641 /* Similar to `lookup_name' but look only at current binding level. */
4643 tree
4644 lookup_name_current_level (name)
4645 tree name;
4647 register tree t = NULL_TREE;
4649 if (current_binding_level == global_binding_level)
4651 t = IDENTIFIER_GLOBAL_VALUE (name);
4653 /* extern "C" function() */
4654 if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
4655 t = TREE_VALUE (t);
4657 else if (IDENTIFIER_LOCAL_VALUE (name) != NULL_TREE)
4659 struct binding_level *b = current_binding_level;
4660 while (1)
4662 for (t = b->names; t; t = TREE_CHAIN (t))
4663 if (DECL_NAME (t) == name || DECL_ASSEMBLER_NAME (t) == name)
4664 goto out;
4665 if (b->keep == 2)
4666 b = b->level_chain;
4667 else
4668 break;
4670 out:
4674 return t;
4677 /* Arrange for the user to get a source line number, even when the
4678 compiler is going down in flames, so that she at least has a
4679 chance of working around problems in the compiler. We used to
4680 call error(), but that let the segmentation fault continue
4681 through; now, it's much more passive by asking them to send the
4682 maintainers mail about the problem. */
4684 static void
4685 signal_catch (sig)
4686 int sig;
4688 signal (SIGSEGV, SIG_DFL);
4689 #ifdef SIGIOT
4690 signal (SIGIOT, SIG_DFL);
4691 #endif
4692 #ifdef SIGILL
4693 signal (SIGILL, SIG_DFL);
4694 #endif
4695 #ifdef SIGABRT
4696 signal (SIGABRT, SIG_DFL);
4697 #endif
4698 #ifdef SIGBUS
4699 signal (SIGBUS, SIG_DFL);
4700 #endif
4701 my_friendly_abort (0);
4704 #if 0
4705 /* Unused -- brendan 970107 */
4706 /* Array for holding types considered "built-in". These types
4707 are output in the module in which `main' is defined. */
4708 static tree *builtin_type_tdescs_arr;
4709 static int builtin_type_tdescs_len, builtin_type_tdescs_max;
4710 #endif
4712 /* Push the declarations of builtin types into the namespace.
4713 RID_INDEX, if < RID_MAX is the index of the builtin type
4714 in the array RID_POINTERS. NAME is the name used when looking
4715 up the builtin type. TYPE is the _TYPE node for the builtin type. */
4717 static void
4718 record_builtin_type (rid_index, name, type)
4719 enum rid rid_index;
4720 char *name;
4721 tree type;
4723 tree rname = NULL_TREE, tname = NULL_TREE;
4724 tree tdecl;
4726 if ((int) rid_index < (int) RID_MAX)
4727 rname = ridpointers[(int) rid_index];
4728 if (name)
4729 tname = get_identifier (name);
4731 TYPE_BUILT_IN (type) = 1;
4733 if (tname)
4735 tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
4736 set_identifier_type_value (tname, NULL_TREE);
4737 if ((int) rid_index < (int) RID_MAX)
4738 IDENTIFIER_GLOBAL_VALUE (tname) = tdecl;
4740 if (rname != NULL_TREE)
4742 if (tname != NULL_TREE)
4744 set_identifier_type_value (rname, NULL_TREE);
4745 IDENTIFIER_GLOBAL_VALUE (rname) = tdecl;
4747 else
4749 tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
4750 set_identifier_type_value (rname, NULL_TREE);
4755 /* Push overloaded decl, in global scope, with one argument so it
4756 can be used as a callback from define_function. */
4758 static void
4759 push_overloaded_decl_1 (x)
4760 tree x;
4762 push_overloaded_decl (x, 0);
4765 #ifdef __GNUC__
4766 __inline
4767 #endif
4768 tree
4769 auto_function (name, type, code)
4770 tree name, type;
4771 enum built_in_function code;
4773 return define_function
4774 (IDENTIFIER_POINTER (name), type, code, push_overloaded_decl_1,
4775 IDENTIFIER_POINTER (build_decl_overload (name, TYPE_ARG_TYPES (type),
4776 0)));
4779 /* Create the predefined scalar types of C,
4780 and some nodes representing standard constants (0, 1, (void *)0).
4781 Initialize the global binding level.
4782 Make definitions for built-in primitive functions. */
4784 void
4785 init_decl_processing ()
4787 tree decl;
4788 register tree endlink, int_endlink, double_endlink, unsigned_endlink;
4789 tree fields[20];
4790 /* Data type of memcpy. */
4791 tree memcpy_ftype, strlen_ftype;
4792 int wchar_type_size;
4793 tree temp;
4794 tree array_domain_type;
4795 extern int flag_strict_prototype;
4796 tree vb_off_identifier;
4797 /* Function type `char *(char *, char *)' and similar ones */
4798 tree string_ftype_ptr_ptr, int_ftype_string_string;
4799 tree sizetype_endlink;
4800 tree ptr_ftype, ptr_ftype_unsigned, ptr_ftype_sizetype;
4801 tree void_ftype, void_ftype_int, void_ftype_ptr, ptr_ftype_void;
4803 /* Have to make these distinct before we try using them. */
4804 lang_name_cplusplus = get_identifier ("C++");
4805 lang_name_c = get_identifier ("C");
4807 if (flag_strict_prototype == 2)
4809 if (pedantic)
4810 strict_prototypes_lang_c = strict_prototypes_lang_cplusplus;
4812 else
4813 strict_prototypes_lang_c = flag_strict_prototype;
4815 /* Initially, C. */
4816 current_lang_name = lang_name_c;
4818 current_function_decl = NULL_TREE;
4819 named_labels = NULL_TREE;
4820 named_label_uses = NULL;
4821 current_binding_level = NULL_BINDING_LEVEL;
4822 free_binding_level = NULL_BINDING_LEVEL;
4824 #ifndef __CYGWIN32__
4825 /* Because most segmentation signals can be traced back into user
4826 code, catch them and at least give the user a chance of working
4827 around compiler bugs. */
4828 signal (SIGSEGV, signal_catch);
4830 /* We will also catch aborts in the back-end through signal_catch and
4831 give the user a chance to see where the error might be, and to defeat
4832 aborts in the back-end when there have been errors previously in their
4833 code. */
4834 #ifdef SIGIOT
4835 signal (SIGIOT, signal_catch);
4836 #endif
4837 #ifdef SIGILL
4838 signal (SIGILL, signal_catch);
4839 #endif
4840 #ifdef SIGABRT
4841 signal (SIGABRT, signal_catch);
4842 #endif
4843 #ifdef SIGBUS
4844 signal (SIGBUS, signal_catch);
4845 #endif
4846 #else /* ndef __CYGWIN32__ */
4847 /* Cygwin32 cannot handle catching signals other than
4848 SIGABRT yet. We hope this will cease to be the case soon. */
4849 #ifdef SIGABRT
4850 signal (SIGABRT, signal_catch);
4851 #endif
4852 #endif /* ndef __CYGWIN32__ */
4854 gcc_obstack_init (&decl_obstack);
4856 /* Must lay these out before anything else gets laid out. */
4857 error_mark_node = make_node (ERROR_MARK);
4858 TREE_PERMANENT (error_mark_node) = 1;
4859 TREE_TYPE (error_mark_node) = error_mark_node;
4860 error_mark_list = build_tree_list (error_mark_node, error_mark_node);
4861 TREE_TYPE (error_mark_list) = error_mark_node;
4863 /* Make the binding_level structure for global names. */
4864 pushlevel (0);
4865 global_binding_level = current_binding_level;
4867 this_identifier = get_identifier (THIS_NAME);
4868 in_charge_identifier = get_identifier (IN_CHARGE_NAME);
4869 ctor_identifier = get_identifier (CTOR_NAME);
4870 dtor_identifier = get_identifier (DTOR_NAME);
4871 pfn_identifier = get_identifier (VTABLE_PFN_NAME);
4872 index_identifier = get_identifier (VTABLE_INDEX_NAME);
4873 delta_identifier = get_identifier (VTABLE_DELTA_NAME);
4874 delta2_identifier = get_identifier (VTABLE_DELTA2_NAME);
4875 pfn_or_delta2_identifier = get_identifier ("__pfn_or_delta2");
4876 if (flag_handle_signatures)
4878 tag_identifier = get_identifier (SIGTABLE_TAG_NAME);
4879 vb_off_identifier = get_identifier (SIGTABLE_VB_OFF_NAME);
4880 vt_off_identifier = get_identifier (SIGTABLE_VT_OFF_NAME);
4883 /* Define `int' and `char' first so that dbx will output them first. */
4885 integer_type_node = make_signed_type (INT_TYPE_SIZE);
4886 record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
4888 /* Define `char', which is like either `signed char' or `unsigned char'
4889 but not the same as either. */
4891 char_type_node
4892 = (flag_signed_char
4893 ? make_signed_type (CHAR_TYPE_SIZE)
4894 : make_unsigned_type (CHAR_TYPE_SIZE));
4895 record_builtin_type (RID_CHAR, "char", char_type_node);
4897 long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
4898 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
4900 unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
4901 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
4903 long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
4904 record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
4905 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
4907 long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
4908 record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
4910 long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
4911 record_builtin_type (RID_MAX, "long long unsigned int",
4912 long_long_unsigned_type_node);
4913 record_builtin_type (RID_MAX, "long long unsigned",
4914 long_long_unsigned_type_node);
4916 short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
4917 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
4918 short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
4919 record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
4920 record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
4922 /* `unsigned long' is the standard type for sizeof.
4923 Note that stddef.h uses `unsigned long',
4924 and this must agree, even of long and int are the same size. */
4925 sizetype
4926 = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE)));
4928 ptrdiff_type_node
4929 = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
4931 TREE_TYPE (TYPE_SIZE (integer_type_node)) = sizetype;
4932 TREE_TYPE (TYPE_SIZE (char_type_node)) = sizetype;
4933 TREE_TYPE (TYPE_SIZE (unsigned_type_node)) = sizetype;
4934 TREE_TYPE (TYPE_SIZE (long_unsigned_type_node)) = sizetype;
4935 TREE_TYPE (TYPE_SIZE (long_integer_type_node)) = sizetype;
4936 TREE_TYPE (TYPE_SIZE (long_long_integer_type_node)) = sizetype;
4937 TREE_TYPE (TYPE_SIZE (long_long_unsigned_type_node)) = sizetype;
4938 TREE_TYPE (TYPE_SIZE (short_integer_type_node)) = sizetype;
4939 TREE_TYPE (TYPE_SIZE (short_unsigned_type_node)) = sizetype;
4941 /* Define both `signed char' and `unsigned char'. */
4942 signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
4943 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
4944 unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
4945 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
4947 /* These are types that type_for_size and type_for_mode use. */
4948 intQI_type_node = make_signed_type (GET_MODE_BITSIZE (QImode));
4949 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
4950 intHI_type_node = make_signed_type (GET_MODE_BITSIZE (HImode));
4951 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
4952 intSI_type_node = make_signed_type (GET_MODE_BITSIZE (SImode));
4953 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
4954 intDI_type_node = make_signed_type (GET_MODE_BITSIZE (DImode));
4955 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
4956 unsigned_intQI_type_node = make_unsigned_type (GET_MODE_BITSIZE (QImode));
4957 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
4958 unsigned_intHI_type_node = make_unsigned_type (GET_MODE_BITSIZE (HImode));
4959 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
4960 unsigned_intSI_type_node = make_unsigned_type (GET_MODE_BITSIZE (SImode));
4961 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
4962 unsigned_intDI_type_node = make_unsigned_type (GET_MODE_BITSIZE (DImode));
4963 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
4965 float_type_node = make_node (REAL_TYPE);
4966 TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
4967 record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
4968 layout_type (float_type_node);
4970 double_type_node = make_node (REAL_TYPE);
4971 if (flag_short_double)
4972 TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
4973 else
4974 TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
4975 record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
4976 layout_type (double_type_node);
4978 long_double_type_node = make_node (REAL_TYPE);
4979 TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
4980 record_builtin_type (RID_MAX, "long double", long_double_type_node);
4981 layout_type (long_double_type_node);
4983 complex_integer_type_node = make_node (COMPLEX_TYPE);
4984 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
4985 complex_integer_type_node));
4986 TREE_TYPE (complex_integer_type_node) = integer_type_node;
4987 layout_type (complex_integer_type_node);
4989 complex_float_type_node = make_node (COMPLEX_TYPE);
4990 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
4991 complex_float_type_node));
4992 TREE_TYPE (complex_float_type_node) = float_type_node;
4993 layout_type (complex_float_type_node);
4995 complex_double_type_node = make_node (COMPLEX_TYPE);
4996 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
4997 complex_double_type_node));
4998 TREE_TYPE (complex_double_type_node) = double_type_node;
4999 layout_type (complex_double_type_node);
5001 complex_long_double_type_node = make_node (COMPLEX_TYPE);
5002 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
5003 complex_long_double_type_node));
5004 TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
5005 layout_type (complex_long_double_type_node);
5007 integer_zero_node = build_int_2 (0, 0);
5008 TREE_TYPE (integer_zero_node) = integer_type_node;
5009 integer_one_node = build_int_2 (1, 0);
5010 TREE_TYPE (integer_one_node) = integer_type_node;
5011 integer_two_node = build_int_2 (2, 0);
5012 TREE_TYPE (integer_two_node) = integer_type_node;
5013 integer_three_node = build_int_2 (3, 0);
5014 TREE_TYPE (integer_three_node) = integer_type_node;
5016 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
5017 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
5018 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
5019 boolean_false_node = build_int_2 (0, 0);
5020 TREE_TYPE (boolean_false_node) = boolean_type_node;
5021 boolean_true_node = build_int_2 (1, 0);
5022 TREE_TYPE (boolean_true_node) = boolean_type_node;
5024 /* These are needed by stor-layout.c. */
5025 size_zero_node = size_int (0);
5026 size_one_node = size_int (1);
5028 signed_size_zero_node = build_int_2 (0, 0);
5029 TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
5031 void_type_node = make_node (VOID_TYPE);
5032 record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
5033 layout_type (void_type_node); /* Uses integer_zero_node. */
5034 void_list_node = build_tree_list (NULL_TREE, void_type_node);
5035 TREE_PARMLIST (void_list_node) = 1;
5037 null_pointer_node = build_int_2 (0, 0);
5038 TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
5039 layout_type (TREE_TYPE (null_pointer_node));
5041 /* Used for expressions that do nothing, but are not errors. */
5042 void_zero_node = build_int_2 (0, 0);
5043 TREE_TYPE (void_zero_node) = void_type_node;
5045 string_type_node = build_pointer_type (char_type_node);
5046 const_string_type_node
5047 = build_pointer_type (build_type_variant (char_type_node, 1, 0));
5048 #if 0
5049 record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
5050 #endif
5052 /* Make a type to be the domain of a few array types
5053 whose domains don't really matter.
5054 200 is small enough that it always fits in size_t
5055 and large enough that it can hold most function names for the
5056 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
5057 array_domain_type = build_index_type (build_int_2 (200, 0));
5059 /* make a type for arrays of characters.
5060 With luck nothing will ever really depend on the length of this
5061 array type. */
5062 char_array_type_node
5063 = build_array_type (char_type_node, array_domain_type);
5064 /* Likewise for arrays of ints. */
5065 int_array_type_node
5066 = build_array_type (integer_type_node, array_domain_type);
5068 /* This is just some anonymous class type. Nobody should ever
5069 need to look inside this envelope. */
5070 class_star_type_node = build_pointer_type (make_lang_type (RECORD_TYPE));
5072 default_function_type
5073 = build_function_type (integer_type_node, NULL_TREE);
5075 ptr_type_node = build_pointer_type (void_type_node);
5076 const_ptr_type_node
5077 = build_pointer_type (build_type_variant (void_type_node, 1, 0));
5078 #if 0
5079 record_builtin_type (RID_MAX, NULL_PTR, ptr_type_node);
5080 #endif
5081 endlink = void_list_node;
5082 int_endlink = tree_cons (NULL_TREE, integer_type_node, endlink);
5083 double_endlink = tree_cons (NULL_TREE, double_type_node, endlink);
5084 unsigned_endlink = tree_cons (NULL_TREE, unsigned_type_node, endlink);
5086 ptr_ftype = build_function_type (ptr_type_node, NULL_TREE);
5087 ptr_ftype_unsigned = build_function_type (ptr_type_node, unsigned_endlink);
5088 sizetype_endlink = tree_cons (NULL_TREE, sizetype, endlink);
5089 /* We realloc here because sizetype could be int or unsigned. S'ok. */
5090 ptr_ftype_sizetype = build_function_type (ptr_type_node, sizetype_endlink);
5092 void_ftype = build_function_type (void_type_node, endlink);
5093 void_ftype_int = build_function_type (void_type_node, int_endlink);
5094 void_ftype_ptr
5095 = build_function_type (void_type_node,
5096 tree_cons (NULL_TREE, ptr_type_node, endlink));
5097 void_ftype_ptr
5098 = build_exception_variant (void_ftype_ptr,
5099 tree_cons (NULL_TREE, NULL_TREE, NULL_TREE));
5101 float_ftype_float
5102 = build_function_type (float_type_node,
5103 tree_cons (NULL_TREE, float_type_node, endlink));
5105 double_ftype_double
5106 = build_function_type (double_type_node, double_endlink);
5108 ldouble_ftype_ldouble
5109 = build_function_type (long_double_type_node,
5110 tree_cons (NULL_TREE, long_double_type_node,
5111 endlink));
5113 double_ftype_double_double
5114 = build_function_type (double_type_node,
5115 tree_cons (NULL_TREE, double_type_node,
5116 double_endlink));
5118 int_ftype_int
5119 = build_function_type (integer_type_node, int_endlink);
5121 long_ftype_long
5122 = build_function_type (long_integer_type_node,
5123 tree_cons (NULL_TREE, long_integer_type_node,
5124 endlink));
5126 int_ftype_cptr_cptr_sizet
5127 = build_function_type (integer_type_node,
5128 tree_cons (NULL_TREE, const_ptr_type_node,
5129 tree_cons (NULL_TREE, const_ptr_type_node,
5130 tree_cons (NULL_TREE,
5131 sizetype,
5132 endlink))));
5134 string_ftype_ptr_ptr /* strcpy prototype */
5135 = build_function_type (string_type_node,
5136 tree_cons (NULL_TREE, string_type_node,
5137 tree_cons (NULL_TREE,
5138 const_string_type_node,
5139 endlink)));
5141 int_ftype_string_string /* strcmp prototype */
5142 = build_function_type (integer_type_node,
5143 tree_cons (NULL_TREE, const_string_type_node,
5144 tree_cons (NULL_TREE,
5145 const_string_type_node,
5146 endlink)));
5148 strlen_ftype /* strlen prototype */
5149 = build_function_type (sizetype,
5150 tree_cons (NULL_TREE, const_string_type_node,
5151 endlink));
5153 memcpy_ftype /* memcpy prototype */
5154 = build_function_type (ptr_type_node,
5155 tree_cons (NULL_TREE, ptr_type_node,
5156 tree_cons (NULL_TREE, const_ptr_type_node,
5157 sizetype_endlink)));
5159 if (flag_huge_objects)
5160 delta_type_node = long_integer_type_node;
5161 else
5162 delta_type_node = short_integer_type_node;
5164 builtin_function ("__builtin_constant_p", default_function_type,
5165 BUILT_IN_CONSTANT_P, NULL_PTR);
5167 builtin_return_address_fndecl
5168 = builtin_function ("__builtin_return_address", ptr_ftype_unsigned,
5169 BUILT_IN_RETURN_ADDRESS, NULL_PTR);
5171 builtin_function ("__builtin_frame_address", ptr_ftype_unsigned,
5172 BUILT_IN_FRAME_ADDRESS, NULL_PTR);
5174 ptr_ftype_void = build_function_type (ptr_type_node, endlink);
5175 builtin_function ("__builtin_fp", ptr_ftype_void, BUILT_IN_FP, NULL_PTR);
5176 builtin_function ("__builtin_sp", ptr_ftype_void, BUILT_IN_SP, NULL_PTR);
5178 builtin_function ("__builtin_alloca", ptr_ftype_sizetype,
5179 BUILT_IN_ALLOCA, "alloca");
5180 builtin_function ("__builtin_ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
5181 /* Define alloca, ffs as builtins.
5182 Declare _exit just to mark it as volatile. */
5183 if (! flag_no_builtin && !flag_no_nonansi_builtin)
5185 temp = builtin_function ("alloca", ptr_ftype_sizetype,
5186 BUILT_IN_ALLOCA, NULL_PTR);
5187 /* Suppress error if redefined as a non-function. */
5188 DECL_BUILT_IN_NONANSI (temp) = 1;
5189 temp = builtin_function ("ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
5190 /* Suppress error if redefined as a non-function. */
5191 DECL_BUILT_IN_NONANSI (temp) = 1;
5192 temp = builtin_function ("_exit", void_ftype_int,
5193 NOT_BUILT_IN, NULL_PTR);
5194 TREE_THIS_VOLATILE (temp) = 1;
5195 TREE_SIDE_EFFECTS (temp) = 1;
5196 /* Suppress error if redefined as a non-function. */
5197 DECL_BUILT_IN_NONANSI (temp) = 1;
5200 builtin_function ("__builtin_abs", int_ftype_int, BUILT_IN_ABS, NULL_PTR);
5201 builtin_function ("__builtin_fabsf", float_ftype_float, BUILT_IN_FABS,
5202 NULL_PTR);
5203 builtin_function ("__builtin_fabs", double_ftype_double, BUILT_IN_FABS,
5204 NULL_PTR);
5205 builtin_function ("__builtin_fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
5206 NULL_PTR);
5207 builtin_function ("__builtin_labs", long_ftype_long,
5208 BUILT_IN_LABS, NULL_PTR);
5209 builtin_function ("__builtin_saveregs", ptr_ftype,
5210 BUILT_IN_SAVEREGS, NULL_PTR);
5211 builtin_function ("__builtin_classify_type", default_function_type,
5212 BUILT_IN_CLASSIFY_TYPE, NULL_PTR);
5213 builtin_function ("__builtin_next_arg", ptr_ftype,
5214 BUILT_IN_NEXT_ARG, NULL_PTR);
5215 builtin_function ("__builtin_args_info", int_ftype_int,
5216 BUILT_IN_ARGS_INFO, NULL_PTR);
5217 builtin_function ("__builtin_setjmp",
5218 build_function_type (integer_type_node,
5219 tree_cons (NULL_TREE, ptr_type_node,
5220 endlink)),
5221 BUILT_IN_SETJMP, NULL_PTR);
5222 builtin_function ("__builtin_longjmp",
5223 build_function_type (integer_type_node,
5224 tree_cons (NULL_TREE, ptr_type_node,
5225 tree_cons (NULL_TREE,
5226 integer_type_node,
5227 endlink))),
5228 BUILT_IN_LONGJMP, NULL_PTR);
5230 /* Untyped call and return. */
5231 builtin_function ("__builtin_apply_args", ptr_ftype,
5232 BUILT_IN_APPLY_ARGS, NULL_PTR);
5234 temp = tree_cons (NULL_TREE,
5235 build_pointer_type (build_function_type (void_type_node,
5236 NULL_TREE)),
5237 ptr_ftype_sizetype);
5238 builtin_function ("__builtin_apply",
5239 build_function_type (ptr_type_node, temp),
5240 BUILT_IN_APPLY, NULL_PTR);
5241 builtin_function ("__builtin_return", void_ftype_ptr,
5242 BUILT_IN_RETURN, NULL_PTR);
5244 /* Currently under experimentation. */
5245 builtin_function ("__builtin_memcpy", memcpy_ftype,
5246 BUILT_IN_MEMCPY, "memcpy");
5247 builtin_function ("__builtin_memcmp", int_ftype_cptr_cptr_sizet,
5248 BUILT_IN_MEMCMP, "memcmp");
5249 builtin_function ("__builtin_strcmp", int_ftype_string_string,
5250 BUILT_IN_STRCMP, "strcmp");
5251 builtin_function ("__builtin_strcpy", string_ftype_ptr_ptr,
5252 BUILT_IN_STRCPY, "strcpy");
5253 builtin_function ("__builtin_strlen", strlen_ftype,
5254 BUILT_IN_STRLEN, "strlen");
5255 builtin_function ("__builtin_sqrtf", float_ftype_float,
5256 BUILT_IN_FSQRT, "sqrtf");
5257 builtin_function ("__builtin_fsqrt", double_ftype_double,
5258 BUILT_IN_FSQRT, NULL_PTR);
5259 builtin_function ("__builtin_sqrtl", ldouble_ftype_ldouble,
5260 BUILT_IN_FSQRT, "sqrtl");
5261 builtin_function ("__builtin_sinf", float_ftype_float,
5262 BUILT_IN_SIN, "sinf");
5263 builtin_function ("__builtin_sin", double_ftype_double,
5264 BUILT_IN_SIN, "sin");
5265 builtin_function ("__builtin_sinl", ldouble_ftype_ldouble,
5266 BUILT_IN_SIN, "sinl");
5267 builtin_function ("__builtin_cosf", float_ftype_float,
5268 BUILT_IN_COS, "cosf");
5269 builtin_function ("__builtin_cos", double_ftype_double,
5270 BUILT_IN_COS, "cos");
5271 builtin_function ("__builtin_cosl", ldouble_ftype_ldouble,
5272 BUILT_IN_COS, "cosl");
5274 if (!flag_no_builtin)
5276 #if 0 /* These do not work well with libg++. */
5277 builtin_function ("abs", int_ftype_int, BUILT_IN_ABS, NULL_PTR);
5278 builtin_function ("fabs", double_ftype_double, BUILT_IN_FABS, NULL_PTR);
5279 builtin_function ("labs", long_ftype_long, BUILT_IN_LABS, NULL_PTR);
5280 #endif
5281 builtin_function ("fabsf", float_ftype_float, BUILT_IN_FABS, NULL_PTR);
5282 builtin_function ("fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
5283 NULL_PTR);
5284 builtin_function ("memcpy", memcpy_ftype, BUILT_IN_MEMCPY, NULL_PTR);
5285 builtin_function ("memcmp", int_ftype_cptr_cptr_sizet, BUILT_IN_MEMCMP,
5286 NULL_PTR);
5287 builtin_function ("strcmp", int_ftype_string_string, BUILT_IN_STRCMP,
5288 NULL_PTR);
5289 builtin_function ("strcpy", string_ftype_ptr_ptr, BUILT_IN_STRCPY,
5290 NULL_PTR);
5291 builtin_function ("strlen", strlen_ftype, BUILT_IN_STRLEN, NULL_PTR);
5292 builtin_function ("sqrtf", float_ftype_float, BUILT_IN_FSQRT, NULL_PTR);
5293 builtin_function ("sqrt", double_ftype_double, BUILT_IN_FSQRT, NULL_PTR);
5294 builtin_function ("sqrtl", ldouble_ftype_ldouble, BUILT_IN_FSQRT,
5295 NULL_PTR);
5296 builtin_function ("sinf", float_ftype_float, BUILT_IN_SIN, NULL_PTR);
5297 builtin_function ("sin", double_ftype_double, BUILT_IN_SIN, NULL_PTR);
5298 builtin_function ("sinl", ldouble_ftype_ldouble, BUILT_IN_SIN, NULL_PTR);
5299 builtin_function ("cosf", float_ftype_float, BUILT_IN_COS, NULL_PTR);
5300 builtin_function ("cos", double_ftype_double, BUILT_IN_COS, NULL_PTR);
5301 builtin_function ("cosl", ldouble_ftype_ldouble, BUILT_IN_COS, NULL_PTR);
5303 /* Declare these functions volatile
5304 to avoid spurious "control drops through" warnings. */
5305 temp = builtin_function ("abort", void_ftype,
5306 NOT_BUILT_IN, NULL_PTR);
5307 TREE_THIS_VOLATILE (temp) = 1;
5308 TREE_SIDE_EFFECTS (temp) = 1;
5309 /* Well, these are actually ANSI, but we can't set DECL_BUILT_IN on
5310 them... */
5311 DECL_BUILT_IN_NONANSI (temp) = 1;
5312 temp = builtin_function ("exit", void_ftype_int,
5313 NOT_BUILT_IN, NULL_PTR);
5314 TREE_THIS_VOLATILE (temp) = 1;
5315 TREE_SIDE_EFFECTS (temp) = 1;
5316 DECL_BUILT_IN_NONANSI (temp) = 1;
5319 #if 0
5320 /* Support for these has not been written in either expand_builtin
5321 or build_function_call. */
5322 builtin_function ("__builtin_div", default_ftype, BUILT_IN_DIV, NULL_PTR);
5323 builtin_function ("__builtin_ldiv", default_ftype, BUILT_IN_LDIV, NULL_PTR);
5324 builtin_function ("__builtin_ffloor", double_ftype_double, BUILT_IN_FFLOOR,
5325 NULL_PTR);
5326 builtin_function ("__builtin_fceil", double_ftype_double, BUILT_IN_FCEIL,
5327 NULL_PTR);
5328 builtin_function ("__builtin_fmod", double_ftype_double_double,
5329 BUILT_IN_FMOD, NULL_PTR);
5330 builtin_function ("__builtin_frem", double_ftype_double_double,
5331 BUILT_IN_FREM, NULL_PTR);
5332 builtin_function ("__builtin_memset", ptr_ftype_ptr_int_int,
5333 BUILT_IN_MEMSET, NULL_PTR);
5334 builtin_function ("__builtin_getexp", double_ftype_double, BUILT_IN_GETEXP,
5335 NULL_PTR);
5336 builtin_function ("__builtin_getman", double_ftype_double, BUILT_IN_GETMAN,
5337 NULL_PTR);
5338 #endif
5340 /* C++ extensions */
5342 unknown_type_node = make_node (UNKNOWN_TYPE);
5343 decl = pushdecl (build_decl (TYPE_DECL, get_identifier ("unknown type"),
5344 unknown_type_node));
5345 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
5346 DECL_IGNORED_P (decl) = 1;
5347 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5348 TYPE_SIZE (unknown_type_node) = TYPE_SIZE (void_type_node);
5349 TYPE_ALIGN (unknown_type_node) = 1;
5350 TYPE_MODE (unknown_type_node) = TYPE_MODE (void_type_node);
5351 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
5352 TREE_TYPE (unknown_type_node) = unknown_type_node;
5354 if (flag_ansi)
5355 TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
5356 else
5357 TREE_TYPE (null_node) = build_pointer_type (unknown_type_node);
5359 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
5360 result. */
5361 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
5362 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
5364 /* This is for handling opaque types in signatures. */
5365 opaque_type_node = copy_node (ptr_type_node);
5366 TYPE_MAIN_VARIANT (opaque_type_node) = opaque_type_node;
5367 record_builtin_type (RID_MAX, 0, opaque_type_node);
5369 /* This is special for C++ so functions can be overloaded. */
5370 wchar_type_node
5371 = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (WCHAR_TYPE)));
5372 wchar_type_size = TYPE_PRECISION (wchar_type_node);
5373 signed_wchar_type_node = make_signed_type (wchar_type_size);
5374 unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
5375 wchar_type_node
5376 = TREE_UNSIGNED (wchar_type_node)
5377 ? unsigned_wchar_type_node
5378 : signed_wchar_type_node;
5379 record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
5381 /* Artificial declaration of wchar_t -- can be bashed */
5382 wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
5383 wchar_type_node);
5384 pushdecl (wchar_decl_node);
5386 /* This is for wide string constants. */
5387 wchar_array_type_node
5388 = build_array_type (wchar_type_node, array_domain_type);
5390 if (flag_vtable_thunks)
5392 /* Make sure we get a unique function type, so we can give
5393 its pointer type a name. (This wins for gdb.) */
5394 tree vfunc_type = make_node (FUNCTION_TYPE);
5395 TREE_TYPE (vfunc_type) = integer_type_node;
5396 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
5397 layout_type (vfunc_type);
5399 vtable_entry_type = build_pointer_type (vfunc_type);
5401 else
5403 vtable_entry_type = make_lang_type (RECORD_TYPE);
5404 fields[0] = build_lang_field_decl (FIELD_DECL, delta_identifier,
5405 delta_type_node);
5406 fields[1] = build_lang_field_decl (FIELD_DECL, index_identifier,
5407 delta_type_node);
5408 fields[2] = build_lang_field_decl (FIELD_DECL, pfn_identifier,
5409 ptr_type_node);
5410 finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
5411 double_type_node);
5413 /* Make this part of an invisible union. */
5414 fields[3] = copy_node (fields[2]);
5415 TREE_TYPE (fields[3]) = delta_type_node;
5416 DECL_NAME (fields[3]) = delta2_identifier;
5417 DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
5418 DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
5419 TREE_UNSIGNED (fields[3]) = 0;
5420 TREE_CHAIN (fields[2]) = fields[3];
5421 vtable_entry_type = build_type_variant (vtable_entry_type, 1, 0);
5423 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
5425 vtbl_type_node
5426 = build_array_type (vtable_entry_type, NULL_TREE);
5427 layout_type (vtbl_type_node);
5428 vtbl_type_node = cp_build_type_variant (vtbl_type_node, 1, 0);
5429 record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
5431 /* Simplify life by making a "sigtable_entry_type". Give its
5432 fields names so that the debugger can use them. */
5434 if (flag_handle_signatures)
5436 sigtable_entry_type = make_lang_type (RECORD_TYPE);
5437 fields[0] = build_lang_field_decl (FIELD_DECL, tag_identifier,
5438 delta_type_node);
5439 fields[1] = build_lang_field_decl (FIELD_DECL, vb_off_identifier,
5440 delta_type_node);
5441 fields[2] = build_lang_field_decl (FIELD_DECL, delta_identifier,
5442 delta_type_node);
5443 fields[3] = build_lang_field_decl (FIELD_DECL, index_identifier,
5444 delta_type_node);
5445 fields[4] = build_lang_field_decl (FIELD_DECL, pfn_identifier,
5446 ptr_type_node);
5448 /* Set the alignment to the max of the alignment of ptr_type_node and
5449 delta_type_node. Double alignment wastes a word on the Sparc. */
5450 finish_builtin_type (sigtable_entry_type, SIGTABLE_PTR_TYPE, fields, 4,
5451 (TYPE_ALIGN (ptr_type_node) > TYPE_ALIGN (delta_type_node))
5452 ? ptr_type_node
5453 : delta_type_node);
5455 /* Make this part of an invisible union. */
5456 fields[5] = copy_node (fields[4]);
5457 TREE_TYPE (fields[5]) = delta_type_node;
5458 DECL_NAME (fields[5]) = vt_off_identifier;
5459 DECL_MODE (fields[5]) = TYPE_MODE (delta_type_node);
5460 DECL_SIZE (fields[5]) = TYPE_SIZE (delta_type_node);
5461 TREE_UNSIGNED (fields[5]) = 0;
5462 TREE_CHAIN (fields[4]) = fields[5];
5464 sigtable_entry_type = build_type_variant (sigtable_entry_type, 1, 0);
5465 record_builtin_type (RID_MAX, SIGTABLE_PTR_TYPE, sigtable_entry_type);
5468 std_node = build_decl (NAMESPACE_DECL, get_identifier ("std"),
5469 void_type_node);
5470 pushdecl (std_node);
5472 #if 0
5473 if (flag_rtti)
5475 /* Must build __t_desc type. Currently, type descriptors look like this:
5477 struct __t_desc
5479 const char *name;
5480 int size;
5481 int bits;
5482 struct __t_desc *points_to;
5483 int ivars_count, meths_count;
5484 struct __i_desc *ivars[];
5485 struct __m_desc *meths[];
5486 struct __t_desc *parents[];
5487 struct __t_desc *vbases[];
5488 int offsets[];
5491 ...as per Linton's paper. */
5493 __t_desc_type_node = make_lang_type (RECORD_TYPE);
5494 __i_desc_type_node = make_lang_type (RECORD_TYPE);
5495 __m_desc_type_node = make_lang_type (RECORD_TYPE);
5496 __t_desc_array_type
5497 = build_array_type (build_pointer_type (__t_desc_type_node),
5498 NULL_TREE);
5499 __i_desc_array_type
5500 = build_array_type (build_pointer_type (__i_desc_type_node),
5501 NULL_TREE);
5502 __m_desc_array_type
5503 = build_array_type (build_pointer_type (__m_desc_type_node),
5504 NULL_TREE);
5506 fields[0] = build_lang_field_decl (FIELD_DECL, get_identifier ("name"),
5507 string_type_node);
5508 fields[1] = build_lang_field_decl (FIELD_DECL, get_identifier ("size"),
5509 unsigned_type_node);
5510 fields[2] = build_lang_field_decl (FIELD_DECL, get_identifier ("bits"),
5511 unsigned_type_node);
5512 fields[3] = build_lang_field_decl (FIELD_DECL,
5513 get_identifier ("points_to"),
5514 build_pointer_type (__t_desc_type_node));
5515 fields[4] = build_lang_field_decl (FIELD_DECL,
5516 get_identifier ("ivars_count"),
5517 integer_type_node);
5518 fields[5] = build_lang_field_decl (FIELD_DECL,
5519 get_identifier ("meths_count"),
5520 integer_type_node);
5521 fields[6] = build_lang_field_decl (FIELD_DECL, get_identifier ("ivars"),
5522 build_pointer_type (__i_desc_array_type));
5523 fields[7] = build_lang_field_decl (FIELD_DECL, get_identifier ("meths"),
5524 build_pointer_type (__m_desc_array_type));
5525 fields[8] = build_lang_field_decl (FIELD_DECL, get_identifier ("parents"),
5526 build_pointer_type (__t_desc_array_type));
5527 fields[9] = build_lang_field_decl (FIELD_DECL, get_identifier ("vbases"),
5528 build_pointer_type (__t_desc_array_type));
5529 fields[10] = build_lang_field_decl (FIELD_DECL, get_identifier ("offsets"),
5530 build_pointer_type (integer_type_node));
5531 finish_builtin_type (__t_desc_type_node, "__t_desc", fields, 10, integer_type_node);
5533 /* ivar descriptors look like this:
5535 struct __i_desc
5537 const char *name;
5538 int offset;
5539 struct __t_desc *type;
5543 fields[0] = build_lang_field_decl (FIELD_DECL, get_identifier ("name"),
5544 string_type_node);
5545 fields[1] = build_lang_field_decl (FIELD_DECL, get_identifier ("offset"),
5546 integer_type_node);
5547 fields[2] = build_lang_field_decl (FIELD_DECL, get_identifier ("type"),
5548 build_pointer_type (__t_desc_type_node));
5549 finish_builtin_type (__i_desc_type_node, "__i_desc", fields, 2,
5550 integer_type_node);
5552 /* method descriptors look like this:
5554 struct __m_desc
5556 const char *name;
5557 int vindex;
5558 struct __t_desc *vcontext;
5559 struct __t_desc *return_type;
5560 void (*address)();
5561 short parm_count;
5562 short required_parms;
5563 struct __t_desc *parm_types[];
5567 fields[0] = build_lang_field_decl (FIELD_DECL, get_identifier ("name"),
5568 string_type_node);
5569 fields[1] = build_lang_field_decl (FIELD_DECL, get_identifier ("vindex"),
5570 integer_type_node);
5571 fields[2] = build_lang_field_decl (FIELD_DECL, get_identifier ("vcontext"),
5572 build_pointer_type (__t_desc_type_node));
5573 fields[3] = build_lang_field_decl (FIELD_DECL, get_identifier ("return_type"),
5574 build_pointer_type (__t_desc_type_node));
5575 fields[4] = build_lang_field_decl (FIELD_DECL, get_identifier ("address"),
5576 build_pointer_type (default_function_type));
5577 fields[5] = build_lang_field_decl (FIELD_DECL, get_identifier ("parm_count"),
5578 short_integer_type_node);
5579 fields[6] = build_lang_field_decl (FIELD_DECL, get_identifier ("required_parms"),
5580 short_integer_type_node);
5581 fields[7] = build_lang_field_decl (FIELD_DECL, get_identifier ("parm_types"),
5582 build_pointer_type (build_array_type (build_pointer_type (__t_desc_type_node), NULL_TREE)));
5583 finish_builtin_type (__m_desc_type_node, "__m_desc", fields, 7,
5584 integer_type_node);
5586 #endif /*flag_rtti*/
5588 /* Now, C++. */
5589 current_lang_name = lang_name_cplusplus;
5591 auto_function (ansi_opname[(int) NEW_EXPR], ptr_ftype_sizetype,
5592 NOT_BUILT_IN);
5593 auto_function (ansi_opname[(int) VEC_NEW_EXPR], ptr_ftype_sizetype,
5594 NOT_BUILT_IN);
5595 auto_function (ansi_opname[(int) DELETE_EXPR], void_ftype_ptr,
5596 NOT_BUILT_IN);
5597 auto_function (ansi_opname[(int) VEC_DELETE_EXPR], void_ftype_ptr,
5598 NOT_BUILT_IN);
5600 abort_fndecl
5601 = define_function ("__pure_virtual", void_ftype,
5602 NOT_BUILT_IN, 0, 0);
5604 /* Perform other language dependent initializations. */
5605 init_class_processing ();
5606 init_init_processing ();
5607 init_search_processing ();
5608 init_rtti_processing ();
5610 if (flag_exceptions)
5611 init_exception_processing ();
5612 if (flag_no_inline)
5614 flag_inline_functions = 0;
5617 if (! supports_one_only ())
5618 flag_weak = 0;
5620 /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__. */
5621 declare_function_name ();
5623 /* Prepare to check format strings against argument lists. */
5624 init_function_format_info ();
5626 /* Show we use EH for cleanups. */
5627 using_eh_for_cleanups ();
5630 /* initialize type descriptor type node of various rtti type. */
5633 init_type_desc()
5635 tree tdecl;
5637 tdecl = lookup_name (get_identifier ("type_info"), 0);
5638 if (tdecl == NULL_TREE)
5639 return 0;
5640 __t_desc_type_node = TREE_TYPE (tdecl);
5641 #if 0
5642 __tp_desc_type_node = build_pointer_type (__t_desc_type_node);
5643 #endif
5645 #if 0
5646 tdecl = lookup_name (get_identifier ("__baselist_type_info"), 0);
5647 if (tdecl == NULL_TREE)
5648 return 0;
5649 __baselist_desc_type_node = TREE_TYPE (tdecl);
5650 #endif
5652 tdecl = lookup_name (get_identifier ("__builtin_type_info"), 0);
5653 if (tdecl == NULL_TREE)
5654 return 0;
5655 __bltn_desc_type_node = TREE_TYPE (tdecl);
5657 tdecl = lookup_name (get_identifier ("__user_type_info"), 0);
5658 if (tdecl == NULL_TREE)
5659 return 0;
5660 __user_desc_type_node = TREE_TYPE (tdecl);
5662 tdecl = lookup_name (get_identifier ("__class_type_info"), 0);
5663 if (tdecl == NULL_TREE)
5664 return 0;
5665 __class_desc_type_node = TREE_TYPE (tdecl);
5667 tdecl = lookup_field (__class_desc_type_node,
5668 get_identifier ("access_mode"), 0, 0);
5669 if (tdecl == NULL_TREE)
5670 return 0;
5671 __access_mode_type_node = TREE_TYPE (tdecl);
5673 tdecl = lookup_name (get_identifier ("__attr_type_info"), 0);
5674 if (tdecl == NULL_TREE)
5675 return 0;
5676 __attr_desc_type_node = TREE_TYPE (tdecl);
5678 tdecl = lookup_name (get_identifier ("__pointer_type_info"), 0);
5679 if (tdecl == NULL_TREE)
5680 return 0;
5681 __ptr_desc_type_node = TREE_TYPE (tdecl);
5683 tdecl = lookup_name (get_identifier ("__func_type_info"), 0);
5684 if (tdecl == NULL_TREE)
5685 return 0;
5686 __func_desc_type_node = TREE_TYPE (tdecl);
5688 tdecl = lookup_name (get_identifier ("__ptmf_type_info"), 0);
5689 if (tdecl == NULL_TREE)
5690 return 0;
5691 __ptmf_desc_type_node = TREE_TYPE (tdecl);
5693 tdecl = lookup_name (get_identifier ("__ptmd_type_info"), 0);
5694 if (tdecl == NULL_TREE)
5695 return 0;
5696 __ptmd_desc_type_node = TREE_TYPE (tdecl);
5698 return 1;
5700 /* Make a definition for a builtin function named NAME and whose data type
5701 is TYPE. TYPE should be a function type with argument types.
5702 FUNCTION_CODE tells later passes how to compile calls to this function.
5703 See tree.h for its possible values.
5705 If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
5706 the name to be called if we can't opencode the function. */
5708 tree
5709 define_function (name, type, function_code, pfn, library_name)
5710 char *name;
5711 tree type;
5712 enum built_in_function function_code;
5713 void (*pfn) PROTO((tree));
5714 char *library_name;
5716 tree decl = build_lang_decl (FUNCTION_DECL, get_identifier (name), type);
5717 DECL_EXTERNAL (decl) = 1;
5718 TREE_PUBLIC (decl) = 1;
5719 DECL_ARTIFICIAL (decl) = 1;
5721 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
5722 we cannot change DECL_ASSEMBLER_NAME until we have installed this
5723 function in the namespace. */
5724 if (pfn) (*pfn) (decl);
5725 if (library_name)
5726 DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
5727 make_function_rtl (decl);
5728 if (function_code != NOT_BUILT_IN)
5730 DECL_BUILT_IN (decl) = 1;
5731 DECL_FUNCTION_CODE (decl) = function_code;
5733 return decl;
5736 /* Called when a declaration is seen that contains no names to declare.
5737 If its type is a reference to a structure, union or enum inherited
5738 from a containing scope, shadow that tag name for the current scope
5739 with a forward reference.
5740 If its type defines a new named structure or union
5741 or defines an enum, it is valid but we need not do anything here.
5742 Otherwise, it is an error.
5744 C++: may have to grok the declspecs to learn about static,
5745 complain for anonymous unions. */
5747 void
5748 shadow_tag (declspecs)
5749 tree declspecs;
5751 int found_tag = 0;
5752 tree ob_modifier = NULL_TREE;
5753 register tree link;
5754 register enum tree_code code, ok_code = ERROR_MARK;
5755 register tree t = NULL_TREE;
5757 for (link = declspecs; link; link = TREE_CHAIN (link))
5759 register tree value = TREE_VALUE (link);
5761 code = TREE_CODE (value);
5762 if (IS_AGGR_TYPE_CODE (code) || code == ENUMERAL_TYPE)
5764 my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
5766 if (IS_AGGR_TYPE (value) && CLASSTYPE_USE_TEMPLATE (value))
5768 if (CLASSTYPE_IMPLICIT_INSTANTIATION (value)
5769 && TYPE_SIZE (value) == NULL_TREE)
5771 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (value);
5772 if (processing_template_decl)
5773 push_template_decl (TYPE_MAIN_DECL (value));
5775 else if (CLASSTYPE_TEMPLATE_INSTANTIATION (value))
5776 cp_error ("specialization after instantiation of `%T'", value);
5779 t = value;
5780 ok_code = code;
5781 found_tag++;
5783 else if (value == ridpointers[(int) RID_STATIC]
5784 || value == ridpointers[(int) RID_EXTERN]
5785 || value == ridpointers[(int) RID_AUTO]
5786 || value == ridpointers[(int) RID_REGISTER]
5787 || value == ridpointers[(int) RID_INLINE]
5788 || value == ridpointers[(int) RID_VIRTUAL]
5789 || value == ridpointers[(int) RID_EXPLICIT])
5790 ob_modifier = value;
5793 /* This is where the variables in an anonymous union are
5794 declared. An anonymous union declaration looks like:
5795 union { ... } ;
5796 because there is no declarator after the union, the parser
5797 sends that declaration here. */
5798 if (ok_code == UNION_TYPE
5799 && t != NULL_TREE
5800 && ((TREE_CODE (TYPE_NAME (t)) == IDENTIFIER_NODE
5801 && ANON_AGGRNAME_P (TYPE_NAME (t)))
5802 || (TREE_CODE (TYPE_NAME (t)) == TYPE_DECL
5803 && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))))
5805 /* See also grok_x_components. */
5806 tree *q;
5808 /* Wipe out memory of synthesized methods */
5809 TYPE_HAS_CONSTRUCTOR (t) = 0;
5810 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
5811 TYPE_HAS_INIT_REF (t) = 0;
5812 TYPE_HAS_CONST_INIT_REF (t) = 0;
5813 TYPE_HAS_ASSIGN_REF (t) = 0;
5814 TYPE_HAS_ASSIGNMENT (t) = 0;
5815 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
5817 q = &TYPE_METHODS (t);
5818 while (*q)
5820 if (DECL_ARTIFICIAL (*q))
5821 *q = TREE_CHAIN (*q);
5822 else
5823 q = &TREE_CHAIN (*q);
5826 /* ANSI C++ June 5 1992 WP 9.5.3. Anonymous unions may not have
5827 function members. */
5828 if (TYPE_METHODS (t))
5829 error ("an anonymous union cannot have function members");
5831 if (TYPE_FIELDS (t))
5833 tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
5834 NULL_TREE);
5835 finish_anon_union (decl);
5838 else
5840 /* Anonymous unions are objects, that's why we only check for
5841 inappropriate specifiers in this branch. */
5843 if (ob_modifier)
5845 if (ob_modifier == ridpointers[(int) RID_INLINE]
5846 || ob_modifier == ridpointers[(int) RID_VIRTUAL])
5847 cp_error ("`%D' can only be specified for functions", ob_modifier);
5848 else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
5849 cp_error ("`%D' can only be specified for constructors",
5850 ob_modifier);
5851 else
5852 cp_error ("`%D' can only be specified for objects and functions",
5853 ob_modifier);
5856 if (found_tag == 0)
5857 pedwarn ("abstract declarator used as declaration");
5858 else if (found_tag > 1)
5859 pedwarn ("multiple types in one declaration");
5863 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
5865 tree
5866 groktypename (typename)
5867 tree typename;
5869 if (TREE_CODE (typename) != TREE_LIST)
5870 return typename;
5871 return grokdeclarator (TREE_VALUE (typename),
5872 TREE_PURPOSE (typename),
5873 TYPENAME, 0, NULL_TREE);
5876 /* Decode a declarator in an ordinary declaration or data definition.
5877 This is called as soon as the type information and variable name
5878 have been parsed, before parsing the initializer if any.
5879 Here we create the ..._DECL node, fill in its type,
5880 and put it on the list of decls for the current context.
5881 The ..._DECL node is returned as the value.
5883 Exception: for arrays where the length is not specified,
5884 the type is left null, to be filled in by `cp_finish_decl'.
5886 Function definitions do not come here; they go to start_function
5887 instead. However, external and forward declarations of functions
5888 do go through here. Structure field declarations are done by
5889 grokfield and not through here. */
5891 /* Set this to zero to debug not using the temporary obstack
5892 to parse initializers. */
5893 int debug_temp_inits = 1;
5895 tree
5896 start_decl (declarator, declspecs, initialized)
5897 tree declarator, declspecs;
5898 int initialized;
5900 register tree decl;
5901 register tree type, tem;
5902 tree context;
5903 extern int have_extern_spec;
5904 extern int used_extern_spec;
5906 #if 0
5907 /* See code below that used this. */
5908 int init_written = initialized;
5909 #endif
5911 /* This should only be done once on the top most decl. */
5912 if (have_extern_spec && !used_extern_spec)
5914 declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
5915 declspecs);
5916 used_extern_spec = 1;
5919 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
5920 NULL_TREE);
5921 if (decl == NULL_TREE || decl == void_type_node)
5922 return NULL_TREE;
5924 type = TREE_TYPE (decl);
5926 /* Don't lose if destructors must be executed at file-level. */
5927 if (! processing_template_decl && TREE_STATIC (decl)
5928 && TYPE_NEEDS_DESTRUCTOR (complete_type (type))
5929 && !TREE_PERMANENT (decl))
5931 push_obstacks (&permanent_obstack, &permanent_obstack);
5932 decl = copy_node (decl);
5933 if (TREE_CODE (type) == ARRAY_TYPE)
5935 tree itype = TYPE_DOMAIN (type);
5936 if (itype && ! TREE_PERMANENT (itype))
5938 itype = build_index_type (copy_to_permanent (TYPE_MAX_VALUE (itype)));
5939 type = build_cplus_array_type (TREE_TYPE (type), itype);
5940 TREE_TYPE (decl) = type;
5943 pop_obstacks ();
5946 context
5947 = (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
5948 ? DECL_CLASS_CONTEXT (decl)
5949 : DECL_CONTEXT (decl);
5951 if (initialized)
5952 /* Is it valid for this decl to have an initializer at all?
5953 If not, set INITIALIZED to zero, which will indirectly
5954 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
5955 switch (TREE_CODE (decl))
5957 case TYPE_DECL:
5958 /* typedef foo = bar means give foo the same type as bar.
5959 We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
5960 Any other case of an initialization in a TYPE_DECL is an error. */
5961 if (pedantic || list_length (declspecs) > 1)
5963 cp_error ("typedef `%D' is initialized", decl);
5964 initialized = 0;
5966 break;
5968 case FUNCTION_DECL:
5969 cp_error ("function `%#D' is initialized like a variable", decl);
5970 initialized = 0;
5971 break;
5973 default:
5974 if (! processing_template_decl)
5976 if (type != error_mark_node)
5978 if (TYPE_SIZE (type) != NULL_TREE
5979 && ! TREE_CONSTANT (TYPE_SIZE (type)))
5981 cp_error
5982 ("variable-sized object `%D' may not be initialized",
5983 decl);
5984 initialized = 0;
5987 if (TREE_CODE (type) == ARRAY_TYPE
5988 && TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
5990 cp_error
5991 ("elements of array `%#D' have incomplete type", decl);
5992 initialized = 0;
5998 if (initialized)
6000 if (! toplevel_bindings_p ()
6001 && DECL_EXTERNAL (decl))
6002 cp_warning ("declaration of `%#D' has `extern' and is initialized",
6003 decl);
6004 DECL_EXTERNAL (decl) = 0;
6005 if (toplevel_bindings_p ())
6006 TREE_STATIC (decl) = 1;
6008 /* Tell `pushdecl' this is an initialized decl
6009 even though we don't yet have the initializer expression.
6010 Also tell `cp_finish_decl' it may store the real initializer. */
6011 DECL_INITIAL (decl) = error_mark_node;
6014 if (context && TYPE_SIZE (complete_type (context)) != NULL_TREE)
6016 if (TREE_CODE (decl) == VAR_DECL)
6018 tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
6019 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
6020 cp_error ("`%#D' is not a static member of `%#T'", decl, context);
6021 else
6023 if (DECL_CONTEXT (field) != context)
6025 cp_pedwarn ("ANSI C++ does not permit `%T::%D' to be defined as `%T::%D'",
6026 DECL_CONTEXT (field), DECL_NAME (decl),
6027 context, DECL_NAME (decl));
6028 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
6030 if (duplicate_decls (decl, field))
6031 decl = field;
6034 else
6036 tree field = check_classfn (context, decl);
6037 if (field && duplicate_decls (decl, field))
6038 decl = field;
6041 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
6042 if (DECL_LANG_SPECIFIC (decl))
6043 DECL_IN_AGGR_P (decl) = 0;
6044 if (DECL_USE_TEMPLATE (decl) || CLASSTYPE_USE_TEMPLATE (context))
6045 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
6047 /* Stupid stupid stupid stupid (jason 7/21/95) */
6048 if (pedantic && DECL_EXTERNAL (decl)
6049 && ! DECL_TEMPLATE_SPECIALIZATION (decl))
6050 cp_pedwarn ("declaration of `%#D' outside of class is not definition",
6051 decl);
6053 pushclass (context, 2);
6056 /* Add this decl to the current binding level, but not if it
6057 comes from another scope, e.g. a static member variable.
6058 TEM may equal DECL or it may be a previous decl of the same name. */
6060 if ((TREE_CODE (decl) != PARM_DECL && DECL_CONTEXT (decl) != NULL_TREE)
6061 || (TREE_CODE (decl) == TEMPLATE_DECL && !global_bindings_p ())
6062 || TREE_CODE (type) == LANG_TYPE)
6063 tem = decl;
6064 else
6065 tem = pushdecl (decl);
6067 if (processing_template_decl)
6069 if (! current_function_decl)
6070 push_template_decl (tem);
6071 else if (minimal_parse_mode)
6072 DECL_VINDEX (decl)
6073 = build_min_nt (DECL_STMT, copy_to_permanent (declarator),
6074 copy_to_permanent (declspecs),
6075 NULL_TREE);
6079 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
6080 /* Tell the back-end to use or not use .common as appropriate. If we say
6081 -fconserve-space, we want this to save .data space, at the expense of
6082 wrong semantics. If we say -fno-conserve-space, we want this to
6083 produce errors about redefs; to do this we force variables into the
6084 data segment. */
6085 DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
6086 #endif
6088 if (! processing_template_decl)
6089 start_decl_1 (tem);
6091 /* Corresponding pop_obstacks is done in `cp_finish_decl'. */
6092 push_obstacks_nochange ();
6094 #if 0
6095 /* We have no way of knowing whether the initializer will need to be
6096 evaluated at run-time or not until we've parsed it, so let's just put
6097 it in the permanent obstack. (jason) */
6098 if (init_written
6099 && ! (TREE_CODE (tem) == PARM_DECL
6100 || (TREE_READONLY (tem)
6101 && (TREE_CODE (tem) == VAR_DECL
6102 || TREE_CODE (tem) == FIELD_DECL))))
6104 /* When parsing and digesting the initializer,
6105 use temporary storage. Do this even if we will ignore the value. */
6106 if (toplevel_bindings_p () && debug_temp_inits)
6108 if (processing_template_decl
6109 || TYPE_NEEDS_CONSTRUCTING (type)
6110 || TREE_CODE (type) == REFERENCE_TYPE)
6111 /* In this case, the initializer must lay down in permanent
6112 storage, since it will be saved until `finish_file' is run. */
6114 else
6115 temporary_allocation ();
6118 #endif
6120 return tem;
6123 void
6124 start_decl_1 (decl)
6125 tree decl;
6127 tree type = TREE_TYPE (decl);
6128 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
6130 /* If this type of object needs a cleanup, and control may
6131 jump past it, make a new binding level so that it is cleaned
6132 up only when it is initialized first. */
6133 if (TYPE_NEEDS_DESTRUCTOR (type)
6134 && current_binding_level->more_cleanups_ok == 0)
6135 pushlevel_temporary (1);
6137 if (initialized)
6138 /* Is it valid for this decl to have an initializer at all?
6139 If not, set INITIALIZED to zero, which will indirectly
6140 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
6142 /* Don't allow initializations for incomplete types except for
6143 arrays which might be completed by the initialization. */
6144 if (type == error_mark_node)
6145 ; /* Don't complain again. */
6146 else if (TYPE_SIZE (complete_type (type)) != NULL_TREE)
6147 ; /* A complete type is ok. */
6148 else if (TREE_CODE (type) != ARRAY_TYPE)
6150 cp_error ("variable `%#D' has initializer but incomplete type",
6151 decl);
6152 initialized = 0;
6154 else if (TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
6156 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
6157 cp_error ("elements of array `%#D' have incomplete type", decl);
6158 /* else we already gave an error in start_decl. */
6159 initialized = 0;
6163 if (!initialized
6164 && TREE_CODE (decl) != TYPE_DECL
6165 && TREE_CODE (decl) != TEMPLATE_DECL
6166 && IS_AGGR_TYPE (type) && ! DECL_EXTERNAL (decl))
6168 if ((! processing_template_decl || ! uses_template_parms (type))
6169 && TYPE_SIZE (complete_type (type)) == NULL_TREE)
6171 cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
6172 decl);
6173 /* Change the type so that assemble_variable will give
6174 DECL an rtl we can live with: (mem (const_int 0)). */
6175 TREE_TYPE (decl) = error_mark_node;
6176 type = error_mark_node;
6178 else
6180 /* If any base type in the hierarchy of TYPE needs a constructor,
6181 then we set initialized to 1. This way any nodes which are
6182 created for the purposes of initializing this aggregate
6183 will live as long as it does. This is necessary for global
6184 aggregates which do not have their initializers processed until
6185 the end of the file. */
6186 initialized = TYPE_NEEDS_CONSTRUCTING (type);
6190 #if 0
6191 /* We don't do this yet for GNU C++. */
6192 /* For a local variable, define the RTL now. */
6193 if (! toplevel_bindings_p ()
6194 /* But not if this is a duplicate decl
6195 and we preserved the rtl from the previous one
6196 (which may or may not happen). */
6197 && DECL_RTL (tem) == NULL_RTX)
6199 if (TYPE_SIZE (TREE_TYPE (tem)) != NULL_TREE)
6200 expand_decl (tem);
6201 else if (TREE_CODE (TREE_TYPE (tem)) == ARRAY_TYPE
6202 && DECL_INITIAL (tem) != NULL_TREE)
6203 expand_decl (tem);
6205 #endif
6207 if (! initialized)
6208 DECL_INITIAL (decl) = NULL_TREE;
6211 /* Handle initialization of references.
6212 These three arguments from from `cp_finish_decl', and have the
6213 same meaning here that they do there.
6215 Quotes on semantics can be found in ARM 8.4.3. */
6217 static void
6218 grok_reference_init (decl, type, init, cleanupp)
6219 tree decl, type, init;
6220 tree *cleanupp;
6222 tree tmp;
6224 if (init == NULL_TREE)
6226 if ((DECL_LANG_SPECIFIC (decl) == 0
6227 || DECL_IN_AGGR_P (decl) == 0)
6228 && ! DECL_THIS_EXTERN (decl))
6230 cp_error ("`%D' declared as reference but not initialized", decl);
6231 if (TREE_CODE (decl) == VAR_DECL)
6232 SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
6234 return;
6237 if (init == error_mark_node)
6238 return;
6240 if (TREE_CODE (type) == REFERENCE_TYPE
6241 && TREE_CODE (init) == CONSTRUCTOR)
6243 cp_error ("ANSI C++ forbids use of initializer list to initialize reference `%D'", decl);
6244 return;
6247 if (TREE_TYPE (init) && TREE_CODE (TREE_TYPE (init)) == UNKNOWN_TYPE)
6248 /* decay_conversion is probably wrong for references to functions. */
6249 init = decay_conversion (instantiate_type (TREE_TYPE (type), init, 1));
6251 if (TREE_CODE (init) == TREE_LIST)
6252 init = build_compound_expr (init);
6254 if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
6255 init = convert_from_reference (init);
6257 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
6258 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
6260 /* Note: default conversion is only called in very special cases. */
6261 init = default_conversion (init);
6264 tmp = convert_to_reference
6265 (type, init, CONV_IMPLICIT,
6266 LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
6268 if (tmp == error_mark_node)
6269 goto fail;
6270 else if (tmp != NULL_TREE)
6272 init = tmp;
6273 DECL_INITIAL (decl) = save_expr (init);
6275 else
6277 cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
6278 goto fail;
6281 /* ?? Can this be optimized in some cases to
6282 hand back the DECL_INITIAL slot?? */
6283 if (TYPE_SIZE (TREE_TYPE (type)))
6285 init = convert_from_reference (decl);
6286 if (TREE_PERMANENT (decl))
6287 init = copy_to_permanent (init);
6288 SET_DECL_REFERENCE_SLOT (decl, init);
6291 if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
6293 expand_static_init (decl, DECL_INITIAL (decl));
6294 DECL_INITIAL (decl) = NULL_TREE;
6296 return;
6298 fail:
6299 if (TREE_CODE (decl) == VAR_DECL)
6300 SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
6301 return;
6304 /* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
6305 mucking with forces it does not comprehend (i.e. initialization with a
6306 constructor). If we are at global scope and won't go into COMMON, fill
6307 it in with a dummy CONSTRUCTOR to force the variable into .data;
6308 otherwise we can use error_mark_node. */
6310 static tree
6311 obscure_complex_init (decl, init)
6312 tree decl, init;
6314 if (! flag_no_inline && TREE_STATIC (decl))
6316 if (extract_init (decl, init))
6317 return NULL_TREE;
6320 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
6321 if (toplevel_bindings_p () && ! DECL_COMMON (decl))
6322 DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
6323 NULL_TREE);
6324 else
6325 #endif
6326 DECL_INITIAL (decl) = error_mark_node;
6328 return init;
6331 /* Finish processing of a declaration;
6332 install its line number and initial value.
6333 If the length of an array type is not known before,
6334 it must be determined now, from the initial value, or it is an error.
6336 Call `pop_obstacks' iff NEED_POP is nonzero.
6338 For C++, `cp_finish_decl' must be fairly evasive: it must keep initializers
6339 for aggregates that have constructors alive on the permanent obstack,
6340 so that the global initializing functions can be written at the end.
6342 INIT0 holds the value of an initializer that should be allowed to escape
6343 the normal rules.
6345 FLAGS is LOOKUP_ONLYCONVERTING is the = init syntax was used, else 0
6346 if the (init) syntax was used.
6348 For functions that take default parameters, DECL points to its
6349 "maximal" instantiation. `cp_finish_decl' must then also declared its
6350 subsequently lower and lower forms of instantiation, checking for
6351 ambiguity as it goes. This can be sped up later. */
6353 void
6354 cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
6355 tree decl, init;
6356 tree asmspec_tree;
6357 int need_pop;
6358 int flags;
6360 register tree type;
6361 tree cleanup = NULL_TREE, ttype;
6362 int was_incomplete;
6363 int temporary = allocation_temporary_p ();
6364 char *asmspec = NULL;
6365 int was_readonly = 0;
6366 int already_used = 0;
6368 /* If this is 0, then we did not change obstacks. */
6369 if (! decl)
6371 if (init)
6372 error ("assignment (not initialization) in declaration");
6373 return;
6376 /* If a name was specified, get the string. */
6377 if (asmspec_tree)
6378 asmspec = TREE_STRING_POINTER (asmspec_tree);
6380 /* If the type of the thing we are declaring either has
6381 a constructor, or has a virtual function table pointer,
6382 AND its initialization was accepted by `start_decl',
6383 then we stayed on the permanent obstack through the
6384 declaration, otherwise, changed obstacks as GCC would. */
6386 type = TREE_TYPE (decl);
6388 if (type == error_mark_node)
6390 if (toplevel_bindings_p () && temporary)
6391 end_temporary_allocation ();
6393 return;
6396 if (processing_template_decl)
6398 if (init && DECL_INITIAL (decl))
6399 DECL_INITIAL (decl) = init;
6400 if (minimal_parse_mode && ! DECL_ARTIFICIAL (decl))
6402 tree stmt = DECL_VINDEX (decl);
6403 DECL_VINDEX (decl) = NULL_TREE;
6404 TREE_OPERAND (stmt, 2) = copy_to_permanent (init);
6405 add_tree (stmt);
6408 goto finish_end0;
6410 /* Take care of TYPE_DECLs up front. */
6411 if (TREE_CODE (decl) == TYPE_DECL)
6413 if (init && DECL_INITIAL (decl))
6415 /* typedef foo = bar; store the type of bar as the type of foo. */
6416 TREE_TYPE (decl) = type = TREE_TYPE (init);
6417 DECL_INITIAL (decl) = init = NULL_TREE;
6419 if (type != error_mark_node
6420 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
6422 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6423 cp_warning ("shadowing previous type declaration of `%#D'", decl);
6424 set_identifier_type_value (DECL_NAME (decl), type);
6425 CLASSTYPE_GOT_SEMICOLON (type) = 1;
6427 GNU_xref_decl (current_function_decl, decl);
6429 /* If we have installed this as the canonical typedef for this
6430 type, and that type has not been defined yet, delay emitting
6431 the debug information for it, as we will emit it later. */
6432 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6433 && TYPE_SIZE (TREE_TYPE (decl)) == NULL_TREE)
6434 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6436 rest_of_decl_compilation (decl, NULL_PTR,
6437 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
6438 goto finish_end;
6440 if (TREE_CODE (decl) != FUNCTION_DECL)
6442 ttype = target_type (type);
6445 if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
6446 && TYPE_NEEDS_CONSTRUCTING (type))
6449 /* Currently, GNU C++ puts constants in text space, making them
6450 impossible to initialize. In the future, one would hope for
6451 an operating system which understood the difference between
6452 initialization and the running of a program. */
6453 was_readonly = 1;
6454 TREE_READONLY (decl) = 0;
6457 if (TREE_CODE (decl) == FIELD_DECL)
6459 if (init && init != error_mark_node)
6460 my_friendly_assert (TREE_PERMANENT (init), 147);
6462 if (asmspec)
6464 /* This must override the asm specifier which was placed
6465 by grokclassfn. Lay this out fresh. */
6466 DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
6467 DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
6468 make_decl_rtl (decl, asmspec, 0);
6471 /* If `start_decl' didn't like having an initialization, ignore it now. */
6472 else if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
6473 init = NULL_TREE;
6474 else if (DECL_EXTERNAL (decl))
6476 else if (TREE_CODE (type) == REFERENCE_TYPE
6477 || (TYPE_LANG_SPECIFIC (type) && IS_SIGNATURE_REFERENCE (type)))
6479 if (TREE_STATIC (decl))
6480 make_decl_rtl (decl, NULL_PTR,
6481 toplevel_bindings_p ()
6482 || pseudo_global_level_p ());
6483 grok_reference_init (decl, type, init, &cleanup);
6484 init = NULL_TREE;
6487 GNU_xref_decl (current_function_decl, decl);
6489 if (TREE_CODE (decl) == FIELD_DECL)
6491 else if (TREE_CODE (decl) == CONST_DECL)
6493 my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
6495 DECL_INITIAL (decl) = init;
6497 /* This will keep us from needing to worry about our obstacks. */
6498 my_friendly_assert (init != NULL_TREE, 149);
6499 init = NULL_TREE;
6501 else if (init)
6503 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
6505 if (TREE_CODE (type) == ARRAY_TYPE)
6506 init = digest_init (type, init, (tree *) 0);
6507 else if (TREE_CODE (init) == CONSTRUCTOR)
6509 if (TYPE_NON_AGGREGATE_CLASS (type))
6511 cp_error ("`%D' must be initialized by constructor, not by `{...}'",
6512 decl);
6513 init = error_mark_node;
6515 else
6516 goto dont_use_constructor;
6519 else
6521 dont_use_constructor:
6522 if (TREE_CODE (init) != TREE_VEC)
6523 init = store_init_value (decl, init);
6526 if (init)
6527 /* We must hide the initializer so that expand_decl
6528 won't try to do something it does not understand. */
6529 init = obscure_complex_init (decl, init);
6531 else if (DECL_EXTERNAL (decl))
6533 else if (TREE_CODE_CLASS (TREE_CODE (type)) == 't'
6534 && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
6536 tree ctype = type;
6537 while (TREE_CODE (ctype) == ARRAY_TYPE)
6538 ctype = TREE_TYPE (ctype);
6539 if (! TYPE_NEEDS_CONSTRUCTING (ctype))
6541 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (ctype))
6542 cp_error ("structure `%D' with uninitialized const members", decl);
6543 if (CLASSTYPE_REF_FIELDS_NEED_INIT (ctype))
6544 cp_error ("structure `%D' with uninitialized reference members",
6545 decl);
6548 if (TREE_CODE (decl) == VAR_DECL
6549 && !DECL_INITIAL (decl)
6550 && !TYPE_NEEDS_CONSTRUCTING (type)
6551 && (TYPE_READONLY (type) || TREE_READONLY (decl)))
6552 cp_error ("uninitialized const `%D'", decl);
6554 if (TYPE_SIZE (type) != NULL_TREE
6555 && TYPE_NEEDS_CONSTRUCTING (type))
6556 init = obscure_complex_init (decl, NULL_TREE);
6558 else if (TREE_CODE (decl) == VAR_DECL
6559 && TREE_CODE (type) != REFERENCE_TYPE
6560 && (TYPE_READONLY (type) || TREE_READONLY (decl)))
6562 /* ``Unless explicitly declared extern, a const object does not have
6563 external linkage and must be initialized. ($8.4; $12.1)'' ARM 7.1.6
6564 However, if it's `const int foo = 1; const int foo;', don't complain
6565 about the second decl, since it does have an initializer before.
6566 We deliberately don't complain about arrays, because they're
6567 supposed to be initialized by a constructor. */
6568 if (! DECL_INITIAL (decl)
6569 && TREE_CODE (type) != ARRAY_TYPE
6570 && (!pedantic || !current_class_type))
6571 cp_error ("uninitialized const `%#D'", decl);
6574 /* For top-level declaration, the initial value was read in
6575 the temporary obstack. MAXINDEX, rtl, etc. to be made below
6576 must go in the permanent obstack; but don't discard the
6577 temporary data yet. */
6579 if (toplevel_bindings_p () && temporary)
6580 end_temporary_allocation ();
6582 /* Deduce size of array from initialization, if not already known. */
6584 if (TREE_CODE (type) == ARRAY_TYPE
6585 && TYPE_DOMAIN (type) == NULL_TREE
6586 && TREE_CODE (decl) != TYPE_DECL)
6588 int do_default
6589 = (TREE_STATIC (decl)
6590 /* Even if pedantic, an external linkage array
6591 may have incomplete type at first. */
6592 ? pedantic && ! DECL_EXTERNAL (decl)
6593 : !DECL_EXTERNAL (decl));
6594 tree initializer = init ? init : DECL_INITIAL (decl);
6595 int failure = complete_array_type (type, initializer, do_default);
6597 if (failure == 1)
6598 cp_error ("initializer fails to determine size of `%D'", decl);
6600 if (failure == 2)
6602 if (do_default)
6603 cp_error ("array size missing in `%D'", decl);
6604 /* If a `static' var's size isn't known, make it extern as
6605 well as static, so it does not get allocated. If it's not
6606 `static', then don't mark it extern; finish_incomplete_decl
6607 will give it a default size and it will get allocated. */
6608 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
6609 DECL_EXTERNAL (decl) = 1;
6612 if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
6613 && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
6614 integer_zero_node))
6615 cp_error ("zero-size array `%D'", decl);
6617 layout_decl (decl, 0);
6620 if (TREE_CODE (decl) == VAR_DECL)
6622 if (DECL_SIZE (decl) == NULL_TREE
6623 && TYPE_SIZE (complete_type (TREE_TYPE (decl))) != NULL_TREE)
6624 layout_decl (decl, 0);
6626 if (TREE_STATIC (decl) && DECL_SIZE (decl) == NULL_TREE)
6628 /* A static variable with an incomplete type:
6629 that is an error if it is initialized.
6630 Otherwise, let it through, but if it is not `extern'
6631 then it may cause an error message later. */
6632 if (DECL_INITIAL (decl) != NULL_TREE)
6633 cp_error ("storage size of `%D' isn't known", decl);
6634 init = NULL_TREE;
6636 else if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
6638 /* An automatic variable with an incomplete type: that is an error.
6639 Don't talk about array types here, since we took care of that
6640 message in grokdeclarator. */
6641 cp_error ("storage size of `%D' isn't known", decl);
6642 TREE_TYPE (decl) = error_mark_node;
6644 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
6645 /* Let debugger know it should output info for this type. */
6646 note_debug_info_needed (ttype);
6648 if (TREE_STATIC (decl) && DECL_CONTEXT (decl)
6649 && TREE_CODE_CLASS (TREE_CODE (DECL_CONTEXT (decl))) == 't')
6650 note_debug_info_needed (DECL_CONTEXT (decl));
6652 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
6653 && DECL_SIZE (decl) != NULL_TREE
6654 && ! TREE_CONSTANT (DECL_SIZE (decl)))
6656 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
6657 constant_expression_warning (DECL_SIZE (decl));
6658 else
6659 cp_error ("storage size of `%D' isn't constant", decl);
6662 if (! DECL_EXTERNAL (decl) && TYPE_NEEDS_DESTRUCTOR (type)
6663 /* Cleanups for static variables are handled by `finish_file'. */
6664 && ! TREE_STATIC (decl))
6666 int yes = suspend_momentary ();
6667 cleanup = maybe_build_cleanup (decl);
6668 resume_momentary (yes);
6671 /* PARM_DECLs get cleanups, too. */
6672 else if (TREE_CODE (decl) == PARM_DECL && TYPE_NEEDS_DESTRUCTOR (type))
6674 if (temporary)
6675 end_temporary_allocation ();
6676 cleanup = maybe_build_cleanup (decl);
6677 if (temporary)
6678 resume_temporary_allocation ();
6681 /* Output the assembler code and/or RTL code for variables and functions,
6682 unless the type is an undefined structure or union.
6683 If not, it will get done when the type is completed. */
6685 was_incomplete = (DECL_SIZE (decl) == NULL_TREE);
6687 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
6688 || TREE_CODE (decl) == RESULT_DECL)
6690 /* ??? FIXME: What about nested classes? */
6691 int toplev = toplevel_bindings_p () || pseudo_global_level_p ();
6692 int was_temp
6693 = (TREE_STATIC (decl) && TYPE_NEEDS_DESTRUCTOR (type)
6694 && allocation_temporary_p ());
6696 if (was_temp)
6697 end_temporary_allocation ();
6699 /* Extern inline function static data has external linkage. */
6700 if (TREE_CODE (decl) == VAR_DECL
6701 && TREE_STATIC (decl)
6702 && current_function_decl
6703 && DECL_CONTEXT (decl) == current_function_decl
6704 && DECL_THIS_INLINE (current_function_decl)
6705 && TREE_PUBLIC (current_function_decl))
6707 if (DECL_INTERFACE_KNOWN (current_function_decl))
6709 TREE_PUBLIC (decl) = 1;
6710 DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
6712 /* We can only do this if we can use common or weak, and we
6713 can't if it has been initialized and we don't support weak. */
6714 else if (DECL_INITIAL (decl) == NULL_TREE
6715 || DECL_INITIAL (decl) == error_mark_node)
6717 TREE_PUBLIC (decl) = 1;
6718 DECL_COMMON (decl) = 1;
6720 else if (flag_weak)
6721 make_decl_one_only (decl);
6723 if (TREE_PUBLIC (decl))
6724 DECL_ASSEMBLER_NAME (decl)
6725 = build_static_name (current_function_decl, DECL_NAME (decl));
6726 else if (! DECL_ARTIFICIAL (decl))
6727 cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
6730 else if (TREE_CODE (decl) == VAR_DECL
6731 && DECL_LANG_SPECIFIC (decl)
6732 && DECL_COMDAT (decl))
6734 /* Dynamically initialized vars go into common. */
6735 if (DECL_INITIAL (decl) == NULL_TREE
6736 || DECL_INITIAL (decl) == error_mark_node)
6737 DECL_COMMON (decl) = 1;
6738 else if (EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
6740 DECL_COMMON (decl) = 1;
6741 DECL_INITIAL (decl) = error_mark_node;
6743 else
6745 /* Statically initialized vars are weak or comdat, if
6746 supported. */
6747 if (flag_weak)
6748 make_decl_one_only (decl);
6749 else
6751 /* we can't do anything useful; leave vars for explicit
6752 instantiation. */
6753 DECL_EXTERNAL (decl) = 1;
6754 DECL_NOT_REALLY_EXTERN (decl) = 0;
6759 if (TREE_CODE (decl) == VAR_DECL && DECL_VIRTUAL_P (decl))
6760 make_decl_rtl (decl, NULL_PTR, toplev);
6761 else if (TREE_CODE (decl) == VAR_DECL
6762 && TREE_READONLY (decl)
6763 && DECL_INITIAL (decl) != NULL_TREE
6764 && DECL_INITIAL (decl) != error_mark_node
6765 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
6767 DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
6769 if (asmspec)
6770 DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
6772 if (! toplev
6773 && TREE_STATIC (decl)
6774 && ! TREE_SIDE_EFFECTS (decl)
6775 && ! TREE_PUBLIC (decl)
6776 && ! DECL_EXTERNAL (decl)
6777 && ! TYPE_NEEDS_DESTRUCTOR (type)
6778 && DECL_MODE (decl) != BLKmode)
6780 /* If this variable is really a constant, then fill its DECL_RTL
6781 slot with something which won't take up storage.
6782 If something later should take its address, we can always give
6783 it legitimate RTL at that time. */
6784 DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
6785 store_expr (DECL_INITIAL (decl), DECL_RTL (decl), 0);
6786 TREE_ASM_WRITTEN (decl) = 1;
6788 else if (toplev && ! TREE_PUBLIC (decl))
6790 /* If this is a static const, change its apparent linkage
6791 if it belongs to a #pragma interface. */
6792 if (!interface_unknown)
6794 TREE_PUBLIC (decl) = 1;
6795 DECL_EXTERNAL (decl) = interface_only;
6797 make_decl_rtl (decl, asmspec, toplev);
6799 else
6800 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
6802 else if (TREE_CODE (decl) == VAR_DECL
6803 && DECL_LANG_SPECIFIC (decl)
6804 && DECL_IN_AGGR_P (decl))
6806 if (TREE_STATIC (decl))
6808 if (init == NULL_TREE
6809 #ifdef DEFAULT_STATIC_DEFS
6810 /* If this code is dead, then users must
6811 explicitly declare static member variables
6812 outside the class def'n as well. */
6813 && TYPE_NEEDS_CONSTRUCTING (type)
6814 #endif
6817 DECL_EXTERNAL (decl) = 1;
6818 make_decl_rtl (decl, asmspec, 1);
6820 else
6821 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
6823 else
6824 /* Just a constant field. Should not need any rtl. */
6825 goto finish_end0;
6827 else
6828 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
6830 if (was_temp)
6831 resume_temporary_allocation ();
6833 if (type != error_mark_node
6834 && TYPE_LANG_SPECIFIC (type)
6835 && CLASSTYPE_ABSTRACT_VIRTUALS (type))
6836 abstract_virtuals_error (decl, type);
6837 else if ((TREE_CODE (type) == FUNCTION_TYPE
6838 || TREE_CODE (type) == METHOD_TYPE)
6839 && TYPE_LANG_SPECIFIC (TREE_TYPE (type))
6840 && CLASSTYPE_ABSTRACT_VIRTUALS (TREE_TYPE (type)))
6841 abstract_virtuals_error (decl, TREE_TYPE (type));
6843 if (TYPE_LANG_SPECIFIC (type) && IS_SIGNATURE (type))
6844 signature_error (decl, type);
6845 else if ((TREE_CODE (type) == FUNCTION_TYPE
6846 || TREE_CODE (type) == METHOD_TYPE)
6847 && TYPE_LANG_SPECIFIC (TREE_TYPE (type))
6848 && IS_SIGNATURE (TREE_TYPE (type)))
6849 signature_error (decl, TREE_TYPE (type));
6851 if (TREE_CODE (decl) == FUNCTION_DECL)
6853 else if (DECL_EXTERNAL (decl)
6854 && ! (DECL_LANG_SPECIFIC (decl)
6855 && DECL_NOT_REALLY_EXTERN (decl)))
6857 if (init)
6858 DECL_INITIAL (decl) = init;
6860 else if (TREE_STATIC (decl) && type != error_mark_node)
6862 /* Cleanups for static variables are handled by `finish_file'. */
6863 if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
6864 || TYPE_NEEDS_DESTRUCTOR (type))
6865 expand_static_init (decl, init);
6867 else if (! toplev)
6869 /* This is a declared decl which must live until the
6870 end of the binding contour. It may need a cleanup. */
6872 /* Recompute the RTL of a local array now
6873 if it used to be an incomplete type. */
6874 if (was_incomplete && ! TREE_STATIC (decl))
6876 /* If we used it already as memory, it must stay in memory. */
6877 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
6878 /* If it's still incomplete now, no init will save it. */
6879 if (DECL_SIZE (decl) == NULL_TREE)
6880 DECL_INITIAL (decl) = NULL_TREE;
6881 expand_decl (decl);
6883 else if (! TREE_ASM_WRITTEN (decl)
6884 && (TYPE_SIZE (type) != NULL_TREE
6885 || TREE_CODE (type) == ARRAY_TYPE))
6887 /* Do this here, because we did not expand this decl's
6888 rtl in start_decl. */
6889 if (DECL_RTL (decl) == NULL_RTX)
6890 expand_decl (decl);
6891 else if (cleanup)
6893 /* XXX: Why don't we use decl here? */
6894 /* Ans: Because it was already expanded? */
6895 if (! expand_decl_cleanup (NULL_TREE, cleanup))
6896 cp_error ("parser lost in parsing declaration of `%D'",
6897 decl);
6898 /* Cleanup used up here. */
6899 cleanup = NULL_TREE;
6903 if (current_binding_level->is_for_scope)
6905 struct binding_level *outer = current_binding_level->level_chain;
6907 /* Check to see if the same name is already bound at
6908 the outer level, either because it was directly declared,
6909 or because a dead for-decl got preserved. In either case,
6910 the code would not have been valid under the ARM
6911 scope rules, so clear is_for_scope for the
6912 current_binding_level.
6914 Otherwise, we need to preserve the temp slot for decl
6915 to last into the outer binding level. */
6917 int handling_dead_for_vars = 0;
6918 tree link = outer->names;
6919 for (; ; link = TREE_CHAIN (link))
6921 if (link == NULL && handling_dead_for_vars == 0)
6923 link = outer->dead_vars_from_for;
6924 handling_dead_for_vars = 1;
6926 if (link == NULL)
6928 if (DECL_IN_MEMORY_P (decl))
6929 preserve_temp_slots (DECL_RTL (decl));
6930 break;
6932 if (DECL_NAME (link) == DECL_NAME (decl))
6934 if (handling_dead_for_vars)
6936 tree shadowing
6937 = purpose_member (DECL_NAME (decl),
6938 current_binding_level->shadowed);
6939 if (shadowing && TREE_VALUE (shadowing) == link)
6940 TREE_VALUE (shadowing)
6941 = DECL_SHADOWED_FOR_VAR (link);
6943 current_binding_level->is_for_scope = 0;
6944 break;
6949 expand_start_target_temps ();
6951 if (DECL_SIZE (decl) && type != error_mark_node)
6953 /* Compute and store the initial value. */
6954 expand_decl_init (decl);
6955 already_used = TREE_USED (decl) || TREE_USED (type);
6957 if (init || TYPE_NEEDS_CONSTRUCTING (type))
6959 emit_line_note (DECL_SOURCE_FILE (decl),
6960 DECL_SOURCE_LINE (decl));
6961 expand_aggr_init (decl, init, 0, flags);
6964 /* Set this to 0 so we can tell whether an aggregate which
6965 was initialized was ever used. Don't do this if it has a
6966 destructor, so we don't complain about the 'resource
6967 allocation is initialization' idiom. */
6968 /* Now set attribute((unused)) on types so decls of
6969 of that type will be marked used. (see TREE_USED, above.)
6970 This avoids the warning problems this particular code
6971 tried to work around. */
6973 if (TYPE_NEEDS_CONSTRUCTING (type)
6974 && ! already_used
6975 && cleanup == NULL_TREE
6976 && DECL_NAME (decl))
6977 TREE_USED (decl) = 0;
6979 if (already_used)
6980 TREE_USED (decl) = 1;
6983 /* Cleanup any temporaries needed for the initial value. */
6984 expand_end_target_temps ();
6986 if (DECL_SIZE (decl) && type != error_mark_node)
6988 /* Store the cleanup, if there was one. */
6989 if (cleanup)
6991 if (! expand_decl_cleanup (decl, cleanup))
6992 cp_error ("parser lost in parsing declaration of `%D'",
6993 decl);
6997 finish_end0:
6999 /* Undo call to `pushclass' that was done in `start_decl'
7000 due to initialization of qualified member variable.
7001 I.e., Foo::x = 10; */
7003 tree context = DECL_REAL_CONTEXT (decl);
7004 if (context
7005 && TREE_CODE_CLASS (TREE_CODE (context)) == 't'
7006 && (TREE_CODE (decl) == VAR_DECL
7007 /* We also have a pushclass done that we need to undo here
7008 if we're at top level and declare a method. */
7009 || TREE_CODE (decl) == FUNCTION_DECL)
7010 /* If size hasn't been set, we're still defining it,
7011 and therefore inside the class body; don't pop
7012 the binding level.. */
7013 && TYPE_SIZE (context) != NULL_TREE
7014 && context == current_class_type)
7015 popclass (1);
7019 finish_end:
7021 /* If requested, warn about definitions of large data objects. */
7023 if (warn_larger_than
7024 && ! processing_template_decl
7025 && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
7026 && !DECL_EXTERNAL (decl))
7028 register tree decl_size = DECL_SIZE (decl);
7030 if (decl_size && TREE_CODE (decl_size) == INTEGER_CST)
7032 unsigned units = TREE_INT_CST_LOW (decl_size) / BITS_PER_UNIT;
7034 if (units > larger_than_size)
7035 warning_with_decl (decl, "size of `%s' is %u bytes", units);
7039 if (need_pop)
7041 /* Resume permanent allocation, if not within a function. */
7042 /* The corresponding push_obstacks_nochange is in start_decl,
7043 start_method, groktypename, and in grokfield. */
7044 pop_obstacks ();
7047 if (was_readonly)
7048 TREE_READONLY (decl) = 1;
7051 /* This is here for a midend callback from c-common.c */
7053 void
7054 finish_decl (decl, init, asmspec_tree)
7055 tree decl, init;
7056 tree asmspec_tree;
7058 cp_finish_decl (decl, init, asmspec_tree, 1, 0);
7061 void
7062 expand_static_init (decl, init)
7063 tree decl;
7064 tree init;
7066 tree oldstatic = value_member (decl, static_aggregates);
7068 if (oldstatic)
7070 if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
7071 cp_error ("multiple initializations given for `%D'", decl);
7073 else if (! toplevel_bindings_p () && ! pseudo_global_level_p ())
7075 /* Emit code to perform this initialization but once. */
7076 tree temp;
7078 /* Remember this information until end of file. */
7079 push_obstacks (&permanent_obstack, &permanent_obstack);
7081 /* Emit code to perform this initialization but once. */
7082 temp = get_temp_name (integer_type_node, 1);
7083 rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
7084 expand_start_cond (build_binary_op (EQ_EXPR, temp,
7085 integer_zero_node, 1), 0);
7086 expand_start_target_temps ();
7088 expand_assignment (temp, integer_one_node, 0, 0);
7089 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
7090 || (init && TREE_CODE (init) == TREE_LIST))
7092 expand_aggr_init (decl, init, 0, 0);
7093 do_pending_stack_adjust ();
7095 else if (init)
7096 expand_assignment (decl, init, 0, 0);
7098 /* Cleanup any temporaries needed for the initial value. */
7099 expand_end_target_temps ();
7101 if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
7103 tree cleanup, fcall;
7104 static tree Atexit = 0;
7105 if (Atexit == 0)
7107 tree atexit_fndecl, PFV, pfvlist;
7108 /* Remember this information until end of file. */
7109 push_obstacks (&permanent_obstack, &permanent_obstack);
7110 PFV = build_pointer_type (build_function_type
7111 (void_type_node, void_list_node));
7113 pfvlist = tree_cons (NULL_TREE, PFV, void_list_node);
7115 push_lang_context (lang_name_c);
7116 atexit_fndecl
7117 = builtin_function ("atexit",
7118 build_function_type (void_type_node,
7119 pfvlist),
7120 NOT_BUILT_IN, NULL_PTR);
7121 assemble_external (atexit_fndecl);
7122 Atexit = default_conversion (atexit_fndecl);
7123 pop_lang_context ();
7124 pop_obstacks ();
7127 cleanup = start_anon_func ();
7128 expand_expr_stmt (build_cleanup (decl));
7129 end_anon_func ();
7130 mark_addressable (cleanup);
7131 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
7132 fcall = build_function_call (Atexit, expr_tree_cons (NULL_TREE, cleanup, NULL_TREE));
7133 expand_expr_stmt (fcall);
7136 expand_end_cond ();
7137 if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
7139 static_aggregates = perm_tree_cons (temp, decl, static_aggregates);
7140 TREE_STATIC (static_aggregates) = 1;
7143 /* Resume old (possibly temporary) allocation. */
7144 pop_obstacks ();
7146 else
7148 /* This code takes into account memory allocation
7149 policy of `start_decl'. Namely, if TYPE_NEEDS_CONSTRUCTING
7150 does not hold for this object, then we must make permanent
7151 the storage currently in the temporary obstack. */
7152 if (! TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
7153 preserve_initializer ();
7154 static_aggregates = perm_tree_cons (init, decl, static_aggregates);
7158 /* Make TYPE a complete type based on INITIAL_VALUE.
7159 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
7160 2 if there was no information (in which case assume 1 if DO_DEFAULT). */
7163 complete_array_type (type, initial_value, do_default)
7164 tree type, initial_value;
7165 int do_default;
7167 register tree maxindex = NULL_TREE;
7168 int value = 0;
7170 if (initial_value)
7172 /* Note MAXINDEX is really the maximum index,
7173 one less than the size. */
7174 if (TREE_CODE (initial_value) == STRING_CST)
7176 int eltsize
7177 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
7178 maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
7179 / eltsize) - 1, 0);
7181 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
7183 tree elts = CONSTRUCTOR_ELTS (initial_value);
7184 maxindex = size_binop (MINUS_EXPR, integer_zero_node, size_one_node);
7185 for (; elts; elts = TREE_CHAIN (elts))
7187 if (TREE_PURPOSE (elts))
7188 maxindex = TREE_PURPOSE (elts);
7189 else
7190 maxindex = size_binop (PLUS_EXPR, maxindex, size_one_node);
7192 maxindex = copy_node (maxindex);
7194 else
7196 /* Make an error message unless that happened already. */
7197 if (initial_value != error_mark_node)
7198 value = 1;
7200 /* Prevent further error messages. */
7201 maxindex = build_int_2 (0, 0);
7205 if (!maxindex)
7207 if (do_default)
7208 maxindex = build_int_2 (0, 0);
7209 value = 2;
7212 if (maxindex)
7214 tree itype;
7216 TYPE_DOMAIN (type) = build_index_type (maxindex);
7217 if (! TREE_TYPE (maxindex))
7218 TREE_TYPE (maxindex) = TYPE_DOMAIN (type);
7219 if (initial_value)
7220 itype = TREE_TYPE (initial_value);
7221 else
7222 itype = NULL;
7223 if (itype && !TYPE_DOMAIN (itype))
7224 TYPE_DOMAIN (itype) = TYPE_DOMAIN (type);
7225 /* The type of the main variant should never be used for arrays
7226 of different sizes. It should only ever be completed with the
7227 size of the array. */
7228 if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
7229 TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = TYPE_DOMAIN (type);
7232 /* Lay out the type now that we can get the real answer. */
7234 layout_type (type);
7236 return value;
7239 /* Return zero if something is declared to be a member of type
7240 CTYPE when in the context of CUR_TYPE. STRING is the error
7241 message to print in that case. Otherwise, quietly return 1. */
7243 static int
7244 member_function_or_else (ctype, cur_type, string)
7245 tree ctype, cur_type;
7246 char *string;
7248 if (ctype && ctype != cur_type)
7250 error (string, TYPE_NAME_STRING (ctype));
7251 return 0;
7253 return 1;
7256 /* Subroutine of `grokdeclarator'. */
7258 /* Generate errors possibly applicable for a given set of specifiers.
7259 This is for ARM $7.1.2. */
7261 static void
7262 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
7263 tree object;
7264 char *type;
7265 int virtualp, quals, friendp, raises, inlinep;
7267 if (virtualp)
7268 cp_error ("`%D' declared as a `virtual' %s", object, type);
7269 if (inlinep)
7270 cp_error ("`%D' declared as an `inline' %s", object, type);
7271 if (quals)
7272 cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
7273 object, type);
7274 if (friendp)
7275 cp_error_at ("invalid friend declaration", object);
7276 if (raises)
7277 cp_error_at ("invalid exception specifications", object);
7280 /* CTYPE is class type, or null if non-class.
7281 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
7282 or METHOD_TYPE.
7283 DECLARATOR is the function's name.
7284 VIRTUALP is truthvalue of whether the function is virtual or not.
7285 FLAGS are to be passed through to `grokclassfn'.
7286 QUALS are qualifiers indicating whether the function is `const'
7287 or `volatile'.
7288 RAISES is a list of exceptions that this function can raise.
7289 CHECK is 1 if we must find this method in CTYPE, 0 if we should
7290 not look, and -1 if we should not call `grokclassfn' at all. */
7292 static tree
7293 grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
7294 raises, attrlist, check, friendp, publicp, inlinep, funcdef_flag,
7295 template_count)
7296 tree ctype, type;
7297 tree declarator;
7298 tree orig_declarator;
7299 int virtualp;
7300 enum overload_flags flags;
7301 tree quals, raises, attrlist;
7302 int check, friendp, publicp, inlinep, funcdef_flag, template_count;
7304 tree cname, decl;
7305 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
7306 tree t;
7308 if (ctype)
7309 cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
7310 ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
7311 else
7312 cname = NULL_TREE;
7314 if (raises)
7316 type = build_exception_variant (type, raises);
7319 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
7320 /* propagate volatile out from type to decl */
7321 if (TYPE_VOLATILE (type))
7322 TREE_THIS_VOLATILE (decl) = 1;
7324 /* Should probably propagate const out from type to decl I bet (mrs). */
7325 if (staticp)
7327 DECL_STATIC_FUNCTION_P (decl) = 1;
7328 DECL_CONTEXT (decl) = ctype;
7331 if (ctype)
7332 DECL_CLASS_CONTEXT (decl) = ctype;
7334 if (ctype == NULL_TREE && ! strcmp (IDENTIFIER_POINTER (declarator), "main"))
7336 if (inlinep)
7337 error ("cannot declare `main' to be inline");
7338 else if (! publicp)
7339 error ("cannot declare `main' to be static");
7340 inlinep = 0;
7341 publicp = 1;
7344 TREE_PUBLIC (decl) = publicp;
7345 if (! publicp)
7347 DECL_INTERFACE_KNOWN (decl) = 1;
7348 DECL_NOT_REALLY_EXTERN (decl) = 1;
7351 if (inlinep)
7352 DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
7354 DECL_EXTERNAL (decl) = 1;
7355 if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
7357 cp_error ("%smember function `%D' cannot have `%T' method qualifier",
7358 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
7359 quals = NULL_TREE;
7362 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
7363 grok_op_properties (decl, virtualp, check < 0);
7365 if (ctype && hack_decl_function_context (decl))
7366 DECL_NO_STATIC_CHAIN (decl) = 1;
7368 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
7369 if (TREE_PURPOSE (t)
7370 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
7372 add_defarg_fn (decl);
7373 break;
7376 /* Caller will do the rest of this. */
7377 check_explicit_specialization (orig_declarator, decl,
7378 template_count,
7379 funcdef_flag ? 2 :
7380 (friendp ? 3 : 0));
7382 if (check < 0)
7383 return decl;
7385 if (check && funcdef_flag)
7386 DECL_INITIAL (decl) = error_mark_node;
7388 if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
7390 tree tmp;
7391 /* Just handle constructors here. We could do this
7392 inside the following if stmt, but I think
7393 that the code is more legible by breaking this
7394 case out. See comments below for what each of
7395 the following calls is supposed to do. */
7396 DECL_CONSTRUCTOR_P (decl) = 1;
7398 grokclassfn (ctype, declarator, decl, flags, quals);
7400 if (check)
7402 tmp = check_classfn (ctype, decl);
7404 if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
7405 tmp = DECL_TEMPLATE_RESULT(tmp);
7407 if (tmp && DECL_ARTIFICIAL (tmp))
7408 cp_error ("definition of implicitly-declared `%D'", tmp);
7409 if (tmp && duplicate_decls (decl, tmp))
7410 return tmp;
7412 if (! grok_ctor_properties (ctype, decl))
7413 return NULL_TREE;
7415 if (check == 0 && ! current_function_decl)
7417 tmp = IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (decl));
7418 if (tmp == NULL_TREE)
7419 IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (decl)) = decl;
7420 else if (TREE_CODE (tmp) != TREE_CODE (decl))
7421 cp_error ("inconsistent declarations for `%D'", decl);
7422 else
7424 duplicate_decls (decl, tmp);
7425 decl = tmp;
7426 /* avoid creating circularities. */
7427 DECL_CHAIN (decl) = NULL_TREE;
7429 make_decl_rtl (decl, NULL_PTR, 1);
7432 else
7434 tree tmp;
7436 /* Function gets the ugly name, field gets the nice one.
7437 This call may change the type of the function (because
7438 of default parameters)! */
7439 if (ctype != NULL_TREE)
7440 grokclassfn (ctype, cname, decl, flags, quals);
7442 if (ctype != NULL_TREE && check)
7444 tmp = check_classfn (ctype, decl);
7446 if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
7447 tmp = DECL_TEMPLATE_RESULT(tmp);
7449 if (tmp && DECL_STATIC_FUNCTION_P (tmp)
7450 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
7452 /* Remove the `this' parm added by grokclassfn.
7453 XXX Isn't this done in start_function, too? */
7454 revert_static_member_fn (&decl, NULL, NULL);
7455 last_function_parms = TREE_CHAIN (last_function_parms);
7457 if (tmp && DECL_ARTIFICIAL (tmp))
7458 cp_error ("definition of implicitly-declared `%D'", tmp);
7459 if (tmp)
7461 if (!duplicate_decls (decl, tmp))
7462 my_friendly_abort (892);
7463 return tmp;
7467 if (ctype == NULL_TREE || check)
7468 return decl;
7470 /* Now install the declaration of this function so that others may
7471 find it (esp. its DECL_FRIENDLIST). Don't do this for local class
7472 methods, though. */
7473 if (! current_function_decl)
7475 /* FIXME: this should only need to look at
7476 IDENTIFIER_GLOBAL_VALUE. */
7477 tmp = lookup_name (DECL_ASSEMBLER_NAME (decl), 0);
7478 if (tmp == NULL_TREE)
7479 IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (decl)) = decl;
7480 else if (TREE_CODE (tmp) != TREE_CODE (decl))
7481 cp_error ("inconsistent declarations for `%D'", decl);
7482 else
7484 duplicate_decls (decl, tmp);
7485 decl = tmp;
7486 /* avoid creating circularities. */
7487 DECL_CHAIN (decl) = NULL_TREE;
7490 if (attrlist)
7491 cplus_decl_attributes (decl, TREE_PURPOSE (attrlist),
7492 TREE_VALUE (attrlist));
7493 make_decl_rtl (decl, NULL_PTR, 1);
7495 if (virtualp)
7497 DECL_VIRTUAL_P (decl) = 1;
7498 if (DECL_VINDEX (decl) == NULL_TREE)
7499 DECL_VINDEX (decl) = error_mark_node;
7500 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
7503 return decl;
7506 static tree
7507 grokvardecl (type, declarator, specbits_in, initialized, constp)
7508 tree type;
7509 tree declarator;
7510 RID_BIT_TYPE *specbits_in;
7511 int initialized;
7512 int constp;
7514 tree decl;
7515 RID_BIT_TYPE specbits;
7517 specbits = *specbits_in;
7519 if (TREE_CODE (type) == OFFSET_TYPE)
7521 /* If you declare a static member so that it
7522 can be initialized, the code will reach here. */
7523 tree basetype = TYPE_OFFSET_BASETYPE (type);
7524 type = TREE_TYPE (type);
7525 decl = build_lang_field_decl (VAR_DECL, declarator, type);
7526 DECL_CONTEXT (decl) = basetype;
7527 DECL_CLASS_CONTEXT (decl) = basetype;
7528 DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
7530 else
7531 decl = build_decl (VAR_DECL, declarator, complete_type (type));
7533 DECL_ASSEMBLER_NAME (decl) = current_namespace_id (DECL_ASSEMBLER_NAME (decl));
7535 if (RIDBIT_SETP (RID_EXTERN, specbits))
7537 DECL_THIS_EXTERN (decl) = 1;
7538 DECL_EXTERNAL (decl) = !initialized;
7541 /* In class context, static means one per class,
7542 public access, and static storage. */
7543 if (DECL_FIELD_CONTEXT (decl) != NULL_TREE
7544 && IS_AGGR_TYPE (DECL_FIELD_CONTEXT (decl)))
7546 TREE_PUBLIC (decl) = 1;
7547 TREE_STATIC (decl) = 1;
7548 DECL_EXTERNAL (decl) = 0;
7550 /* At top level, either `static' or no s.c. makes a definition
7551 (perhaps tentative), and absence of `static' makes it public. */
7552 else if (toplevel_bindings_p ())
7554 TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
7555 && (DECL_THIS_EXTERN (decl) || ! constp));
7556 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
7558 /* Not at top level, only `static' makes a static definition. */
7559 else
7561 TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
7562 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
7564 return decl;
7567 /* Create a canonical pointer to member function type. */
7569 tree
7570 build_ptrmemfunc_type (type)
7571 tree type;
7573 tree fields[4];
7574 tree t;
7575 tree u;
7577 /* If a canonical type already exists for this type, use it. We use
7578 this method instead of type_hash_canon, because it only does a
7579 simple equality check on the list of field members. */
7581 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
7582 return t;
7584 push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
7586 u = make_lang_type (UNION_TYPE);
7587 IS_AGGR_TYPE (u) = 0;
7588 fields[0] = build_lang_field_decl (FIELD_DECL, pfn_identifier, type);
7589 fields[1] = build_lang_field_decl (FIELD_DECL, delta2_identifier,
7590 delta_type_node);
7591 finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
7592 TYPE_NAME (u) = NULL_TREE;
7594 t = make_lang_type (RECORD_TYPE);
7596 /* Let the front-end know this is a pointer to member function. */
7597 TYPE_PTRMEMFUNC_FLAG (t) = 1;
7598 /* and not really an aggregate. */
7599 IS_AGGR_TYPE (t) = 0;
7601 fields[0] = build_lang_field_decl (FIELD_DECL, delta_identifier,
7602 delta_type_node);
7603 fields[1] = build_lang_field_decl (FIELD_DECL, index_identifier,
7604 delta_type_node);
7605 fields[2] = build_lang_field_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
7606 finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
7608 pop_obstacks ();
7610 /* Zap out the name so that the back-end will give us the debugging
7611 information for this anonymous RECORD_TYPE. */
7612 TYPE_NAME (t) = NULL_TREE;
7614 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
7616 /* Seems to be wanted. */
7617 CLASSTYPE_GOT_SEMICOLON (t) = 1;
7618 return t;
7621 /* Given declspecs and a declarator,
7622 determine the name and type of the object declared
7623 and construct a ..._DECL node for it.
7624 (In one case we can return a ..._TYPE node instead.
7625 For invalid input we sometimes return 0.)
7627 DECLSPECS is a chain of tree_list nodes whose value fields
7628 are the storage classes and type specifiers.
7630 DECL_CONTEXT says which syntactic context this declaration is in:
7631 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
7632 FUNCDEF for a function definition. Like NORMAL but a few different
7633 error messages in each case. Return value may be zero meaning
7634 this definition is too screwy to try to parse.
7635 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
7636 handle member functions (which have FIELD context).
7637 Return value may be zero meaning this definition is too screwy to
7638 try to parse.
7639 PARM for a parameter declaration (either within a function prototype
7640 or before a function body). Make a PARM_DECL, or return void_type_node.
7641 CATCHPARM for a parameter declaration before a catch clause.
7642 TYPENAME if for a typename (in a cast or sizeof).
7643 Don't make a DECL node; just return the ..._TYPE node.
7644 FIELD for a struct or union field; make a FIELD_DECL.
7645 BITFIELD for a field with specified width.
7646 INITIALIZED is 1 if the decl has an initializer.
7648 In the TYPENAME case, DECLARATOR is really an absolute declarator.
7649 It may also be so in the PARM case, for a prototype where the
7650 argument type is specified but not the name.
7652 This function is where the complicated C meanings of `static'
7653 and `extern' are interpreted.
7655 For C++, if there is any monkey business to do, the function which
7656 calls this one must do it, i.e., prepending instance variables,
7657 renaming overloaded function names, etc.
7659 Note that for this C++, it is an error to define a method within a class
7660 which does not belong to that class.
7662 Except in the case where SCOPE_REFs are implicitly known (such as
7663 methods within a class being redundantly qualified),
7664 declarations which involve SCOPE_REFs are returned as SCOPE_REFs
7665 (class_name::decl_name). The caller must also deal with this.
7667 If a constructor or destructor is seen, and the context is FIELD,
7668 then the type gains the attribute TREE_HAS_x. If such a declaration
7669 is erroneous, NULL_TREE is returned.
7671 QUALS is used only for FUNCDEF and MEMFUNCDEF cases. For a member
7672 function, these are the qualifiers to give to the `this' pointer.
7674 May return void_type_node if the declarator turned out to be a friend.
7675 See grokfield for details. */
7677 enum return_types { return_normal, return_ctor, return_dtor, return_conversion };
7679 tree
7680 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
7681 tree declspecs;
7682 tree declarator;
7683 enum decl_context decl_context;
7684 int initialized;
7685 tree attrlist;
7687 RID_BIT_TYPE specbits;
7688 int nclasses = 0;
7689 tree spec;
7690 tree type = NULL_TREE;
7691 int longlong = 0;
7692 int constp;
7693 int volatilep;
7694 int virtualp, explicitp, friendp, inlinep, staticp;
7695 int explicit_int = 0;
7696 int explicit_char = 0;
7697 int defaulted_int = 0;
7698 int opaque_typedef = 0;
7699 tree typedef_decl = NULL_TREE;
7700 char *name;
7701 tree typedef_type = NULL_TREE;
7702 int funcdef_flag = 0;
7703 enum tree_code innermost_code = ERROR_MARK;
7704 int bitfield = 0;
7705 #if 0
7706 /* See the code below that used this. */
7707 tree decl_machine_attr = NULL_TREE;
7708 #endif
7709 /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
7710 All FIELD_DECLs we build here have `init' put into their DECL_INITIAL. */
7711 tree init = NULL_TREE;
7713 /* Keep track of what sort of function is being processed
7714 so that we can warn about default return values, or explicit
7715 return values which do not match prescribed defaults. */
7716 enum return_types return_type = return_normal;
7718 tree dname = NULL_TREE;
7719 tree ctype = current_class_type;
7720 tree ctor_return_type = NULL_TREE;
7721 enum overload_flags flags = NO_SPECIAL;
7722 tree quals = NULL_TREE;
7723 tree raises = NULL_TREE;
7724 int template_count = 0;
7726 RIDBIT_RESET_ALL (specbits);
7727 if (decl_context == FUNCDEF)
7728 funcdef_flag = 1, decl_context = NORMAL;
7729 else if (decl_context == MEMFUNCDEF)
7730 funcdef_flag = -1, decl_context = FIELD;
7731 else if (decl_context == BITFIELD)
7732 bitfield = 1, decl_context = FIELD;
7734 /* Look inside a declarator for the name being declared
7735 and get it as a string, for an error message. */
7737 tree *next = &declarator;
7738 register tree decl;
7739 name = NULL;
7741 while (next && *next)
7743 decl = *next;
7744 switch (TREE_CODE (decl))
7746 case COND_EXPR:
7747 ctype = NULL_TREE;
7748 next = &TREE_OPERAND (decl, 0);
7749 break;
7751 case BIT_NOT_EXPR: /* for C++ destructors! */
7753 tree name = TREE_OPERAND (decl, 0);
7754 tree rename = NULL_TREE;
7756 my_friendly_assert (flags == NO_SPECIAL, 152);
7757 flags = DTOR_FLAG;
7758 return_type = return_dtor;
7759 if (TREE_CODE (name) == TYPE_DECL)
7760 TREE_OPERAND (decl, 0) = name = constructor_name (name);
7761 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
7762 if (ctype == NULL_TREE)
7764 if (current_class_type == NULL_TREE)
7766 error ("destructors must be member functions");
7767 flags = NO_SPECIAL;
7769 else
7771 tree t = constructor_name (current_class_name);
7772 if (t != name)
7773 rename = t;
7776 else
7778 tree t = constructor_name (ctype);
7779 if (t != name)
7780 rename = t;
7783 if (rename)
7785 cp_error ("destructor `%T' must match class name `%T'",
7786 name, rename);
7787 TREE_OPERAND (decl, 0) = rename;
7789 next = &name;
7791 break;
7793 case ADDR_EXPR: /* C++ reference declaration */
7794 /* fall through */
7795 case ARRAY_REF:
7796 case INDIRECT_REF:
7797 ctype = NULL_TREE;
7798 innermost_code = TREE_CODE (decl);
7799 next = &TREE_OPERAND (decl, 0);
7800 break;
7802 case CALL_EXPR:
7803 if (parmlist_is_exprlist (TREE_OPERAND (decl, 1)))
7805 /* This is actually a variable declaration using constructor
7806 syntax. We need to call start_decl and cp_finish_decl so we
7807 can get the variable initialized... */
7809 *next = TREE_OPERAND (decl, 0);
7810 init = TREE_OPERAND (decl, 1);
7812 decl = start_decl (declarator, declspecs, 1);
7813 /* Look for __unused__ attribute */
7814 if (TREE_USED (TREE_TYPE (decl)))
7815 TREE_USED (decl) = 1;
7816 finish_decl (decl, init, NULL_TREE);
7817 return 0;
7819 innermost_code = TREE_CODE (decl);
7820 if (decl_context == FIELD && ctype == NULL_TREE)
7821 ctype = current_class_type;
7822 if (ctype
7823 && TREE_OPERAND (decl, 0)
7824 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
7825 && ((DECL_NAME (TREE_OPERAND (decl, 0))
7826 == constructor_name_full (ctype))
7827 || (DECL_NAME (TREE_OPERAND (decl, 0))
7828 == constructor_name (ctype)))))
7829 TREE_OPERAND (decl, 0) = constructor_name (ctype);
7830 next = &TREE_OPERAND (decl, 0);
7831 decl = *next;
7832 if (ctype != NULL_TREE
7833 && decl != NULL_TREE && flags != DTOR_FLAG
7834 && decl == constructor_name (ctype))
7836 return_type = return_ctor;
7837 ctor_return_type = ctype;
7839 ctype = NULL_TREE;
7840 break;
7842 case TEMPLATE_ID_EXPR:
7844 tree fns = TREE_OPERAND (decl, 0);
7846 if (TREE_CODE (fns) == LOOKUP_EXPR)
7847 fns = TREE_OPERAND (fns, 0);
7849 if (TREE_CODE (fns) == IDENTIFIER_NODE)
7850 dname = fns;
7851 else if (really_overloaded_fn (fns))
7852 dname = DECL_NAME (get_first_fn (fns));
7853 else
7854 dname = DECL_NAME (fns);
7856 /* fall through */
7858 case IDENTIFIER_NODE:
7859 if (TREE_CODE (decl) == IDENTIFIER_NODE)
7860 dname = decl;
7862 next = 0;
7864 if (is_rid (dname))
7866 cp_error ("declarator-id missing; using reserved word `%D'",
7867 dname);
7868 name = IDENTIFIER_POINTER (dname);
7870 if (! IDENTIFIER_OPNAME_P (dname)
7871 /* GNU/Linux headers use '__op'. Arrgh. */
7872 || IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname))
7873 name = IDENTIFIER_POINTER (dname);
7874 else
7876 if (IDENTIFIER_TYPENAME_P (dname))
7878 my_friendly_assert (flags == NO_SPECIAL, 154);
7879 flags = TYPENAME_FLAG;
7880 ctor_return_type = TREE_TYPE (dname);
7881 return_type = return_conversion;
7883 name = operator_name_string (dname);
7885 break;
7887 /* C++ extension */
7888 case SCOPE_REF:
7890 /* Perform error checking, and decide on a ctype. */
7891 tree cname = TREE_OPERAND (decl, 0);
7892 if (cname == NULL_TREE)
7893 ctype = NULL_TREE;
7894 else if (! is_aggr_type (cname, 1))
7895 TREE_OPERAND (decl, 0) = NULL_TREE;
7896 /* Must test TREE_OPERAND (decl, 1), in case user gives
7897 us `typedef (class::memfunc)(int); memfunc *memfuncptr;' */
7898 else if (TREE_OPERAND (decl, 1)
7899 && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
7900 ctype = cname;
7901 else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM)
7903 cp_error ("`%T::%D' is not a valid declarator", cname,
7904 TREE_OPERAND (decl, 1));
7905 cp_error (" perhaps you want `typename %T::%D' to make it a type",
7906 cname, TREE_OPERAND (decl, 1));
7907 return void_type_node;
7909 else if (ctype == NULL_TREE)
7910 ctype = cname;
7911 else if (TREE_COMPLEXITY (decl) == current_class_depth)
7912 TREE_OPERAND (decl, 0) = ctype;
7913 else
7915 if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
7917 cp_error ("type `%T' is not derived from type `%T'",
7918 cname, ctype);
7919 TREE_OPERAND (decl, 0) = NULL_TREE;
7921 else
7922 ctype = cname;
7925 if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
7926 && ((DECL_NAME (TREE_OPERAND (decl, 1))
7927 == constructor_name_full (ctype))
7928 || (DECL_NAME (TREE_OPERAND (decl, 1))
7929 == constructor_name (ctype))))
7930 TREE_OPERAND (decl, 1) = constructor_name (ctype);
7931 next = &TREE_OPERAND (decl, 1);
7932 decl = *next;
7933 if (ctype)
7935 if (TREE_CODE (decl) == IDENTIFIER_NODE
7936 && constructor_name (ctype) == decl)
7938 return_type = return_ctor;
7939 ctor_return_type = ctype;
7941 else if (TREE_CODE (decl) == BIT_NOT_EXPR
7942 && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
7943 && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
7944 || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
7946 return_type = return_dtor;
7947 ctor_return_type = ctype;
7948 flags = DTOR_FLAG;
7949 TREE_OPERAND (decl, 0) = constructor_name (ctype);
7950 next = &TREE_OPERAND (decl, 0);
7954 break;
7956 case ERROR_MARK:
7957 next = 0;
7958 break;
7960 case TYPE_DECL:
7961 /* Parse error puts this typespec where
7962 a declarator should go. */
7963 cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
7964 if (TREE_TYPE (decl) == current_class_type)
7965 cp_error (" perhaps you want `%T' for a constructor",
7966 current_class_name);
7967 dname = DECL_NAME (decl);
7968 name = IDENTIFIER_POINTER (dname);
7970 /* Avoid giving two errors for this. */
7971 IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
7973 declspecs = temp_tree_cons (NULL_TREE, integer_type_node,
7974 declspecs);
7975 *next = dname;
7976 next = 0;
7977 break;
7979 default:
7980 cp_compiler_error ("`%D' as declarator", decl);
7981 return 0; /* We used to do a 155 abort here. */
7984 if (name == NULL)
7985 name = "type name";
7988 /* A function definition's declarator must have the form of
7989 a function declarator. */
7991 if (funcdef_flag && innermost_code != CALL_EXPR)
7992 return 0;
7994 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
7995 && innermost_code != CALL_EXPR
7996 && ! (ctype && declspecs == NULL_TREE))
7998 cp_error ("declaration of `%D' as non-function", dname);
7999 return void_type_node;
8002 /* Anything declared one level down from the top level
8003 must be one of the parameters of a function
8004 (because the body is at least two levels down). */
8006 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
8007 by not allowing C++ class definitions to specify their parameters
8008 with xdecls (must be spec.d in the parmlist).
8010 Since we now wait to push a class scope until we are sure that
8011 we are in a legitimate method context, we must set oldcname
8012 explicitly (since current_class_name is not yet alive).
8014 We also want to avoid calling this a PARM if it is in a namespace. */
8016 if (decl_context == NORMAL && ! namespace_bindings_p ()
8017 && ! pseudo_global_level_p ())
8019 struct binding_level *b = current_binding_level;
8020 current_binding_level = b->level_chain;
8021 if (current_binding_level != 0 && toplevel_bindings_p ())
8022 decl_context = PARM;
8023 current_binding_level = b;
8026 /* Look through the decl specs and record which ones appear.
8027 Some typespecs are defined as built-in typenames.
8028 Others, the ones that are modifiers of other types,
8029 are represented by bits in SPECBITS: set the bits for
8030 the modifiers that appear. Storage class keywords are also in SPECBITS.
8032 If there is a typedef name or a type, store the type in TYPE.
8033 This includes builtin typedefs such as `int'.
8035 Set EXPLICIT_INT if the type is `int' or `char' and did not
8036 come from a user typedef.
8038 Set LONGLONG if `long' is mentioned twice.
8040 For C++, constructors and destructors have their own fast treatment. */
8042 for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
8044 register int i;
8045 register tree id;
8047 /* Certain parse errors slip through. For example,
8048 `int class;' is not caught by the parser. Try
8049 weakly to recover here. */
8050 if (TREE_CODE (spec) != TREE_LIST)
8051 return 0;
8053 id = TREE_VALUE (spec);
8055 if (TREE_CODE (id) == IDENTIFIER_NODE)
8057 if (id == ridpointers[(int) RID_INT]
8058 || id == ridpointers[(int) RID_CHAR]
8059 || id == ridpointers[(int) RID_BOOL]
8060 || id == ridpointers[(int) RID_WCHAR])
8062 if (type)
8064 if (id == ridpointers[(int) RID_BOOL])
8065 error ("`bool' is now a keyword");
8066 else
8067 cp_error ("extraneous `%T' ignored", id);
8069 else
8071 if (id == ridpointers[(int) RID_INT])
8072 explicit_int = 1;
8073 else if (id == ridpointers[(int) RID_CHAR])
8074 explicit_char = 1;
8075 type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
8077 goto found;
8079 /* C++ aggregate types. */
8080 if (IDENTIFIER_HAS_TYPE_VALUE (id))
8082 if (type)
8083 cp_error ("multiple declarations `%T' and `%T'", type, id);
8084 else
8085 type = IDENTIFIER_TYPE_VALUE (id);
8086 goto found;
8089 for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
8091 if (ridpointers[i] == id)
8093 if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
8095 if (pedantic && ! in_system_header)
8096 pedwarn ("ANSI C++ does not support `long long'");
8097 if (longlong)
8098 error ("`long long long' is too long for GCC");
8099 else
8100 longlong = 1;
8102 else if (RIDBIT_SETP (i, specbits))
8103 pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
8104 RIDBIT_SET (i, specbits);
8105 goto found;
8109 /* C++ aggregate types. */
8110 else if (TREE_CODE (id) == TYPE_DECL)
8112 if (type)
8113 cp_error ("multiple declarations `%T' and `%T'", type,
8114 TREE_TYPE (id));
8115 else
8117 type = TREE_TYPE (id);
8118 TREE_VALUE (spec) = type;
8120 goto found;
8122 if (type)
8123 error ("two or more data types in declaration of `%s'", name);
8124 else if (TREE_CODE (id) == IDENTIFIER_NODE)
8126 register tree t = lookup_name (id, 1);
8127 if (!t || TREE_CODE (t) != TYPE_DECL)
8128 error ("`%s' fails to be a typedef or built in type",
8129 IDENTIFIER_POINTER (id));
8130 else
8132 type = TREE_TYPE (t);
8133 #if 0
8134 /* See the code below that used this. */
8135 decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
8136 #endif
8137 typedef_decl = t;
8140 else if (id != error_mark_node)
8141 /* Can't change CLASS nodes into RECORD nodes here! */
8142 type = id;
8144 found: ;
8147 typedef_type = type;
8149 /* No type at all: default to `int', and set DEFAULTED_INT
8150 because it was not a user-defined typedef.
8151 Except when we have a `typedef' inside a signature, in
8152 which case the type defaults to `unknown type' and is
8153 instantiated when assigning to a signature pointer or ref. */
8155 if (type == NULL_TREE
8156 && (RIDBIT_SETP (RID_SIGNED, specbits)
8157 || RIDBIT_SETP (RID_UNSIGNED, specbits)
8158 || RIDBIT_SETP (RID_LONG, specbits)
8159 || RIDBIT_SETP (RID_SHORT, specbits)))
8161 /* These imply 'int'. */
8162 type = integer_type_node;
8163 defaulted_int = 1;
8166 if (type == NULL_TREE)
8168 explicit_int = -1;
8169 if (return_type == return_dtor)
8170 type = void_type_node;
8171 else if (return_type == return_ctor)
8172 type = build_pointer_type (ctor_return_type);
8173 else if (return_type == return_conversion)
8174 type = ctor_return_type;
8175 else if (current_class_type
8176 && IS_SIGNATURE (current_class_type)
8177 && RIDBIT_SETP (RID_TYPEDEF, specbits)
8178 && (decl_context == FIELD || decl_context == NORMAL))
8180 explicit_int = 0;
8181 opaque_typedef = 1;
8182 type = copy_node (opaque_type_node);
8184 else
8186 if (funcdef_flag)
8188 if (warn_return_type
8189 && return_type == return_normal)
8190 /* Save warning until we know what is really going on. */
8191 warn_about_return_type = 1;
8193 else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
8194 pedwarn ("ANSI C++ forbids typedef which does not specify a type");
8195 else if (declspecs == NULL_TREE
8196 && (innermost_code != CALL_EXPR || pedantic))
8197 cp_pedwarn ("ANSI C++ forbids declaration `%D' with no type or storage class",
8198 dname);
8199 type = integer_type_node;
8202 else if (return_type == return_dtor)
8204 error ("return type specification for destructor invalid");
8205 type = void_type_node;
8207 else if (return_type == return_ctor)
8209 error ("return type specification for constructor invalid");
8210 type = build_pointer_type (ctor_return_type);
8212 else if (return_type == return_conversion)
8214 if (comptypes (type, ctor_return_type, 1) == 0)
8215 cp_error ("operator `%T' declared to return `%T'",
8216 ctor_return_type, type);
8217 else
8218 cp_pedwarn ("return type specified for `operator %T'",
8219 ctor_return_type);
8221 type = ctor_return_type;
8224 ctype = NULL_TREE;
8226 /* Now process the modifiers that were specified
8227 and check for invalid combinations. */
8229 /* Long double is a special combination. */
8231 if (RIDBIT_SETP (RID_LONG, specbits)
8232 && TYPE_MAIN_VARIANT (type) == double_type_node)
8234 RIDBIT_RESET (RID_LONG, specbits);
8235 type = build_type_variant (long_double_type_node, TYPE_READONLY (type),
8236 TYPE_VOLATILE (type));
8239 /* Check all other uses of type modifiers. */
8241 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
8242 || RIDBIT_SETP (RID_SIGNED, specbits)
8243 || RIDBIT_SETP (RID_LONG, specbits)
8244 || RIDBIT_SETP (RID_SHORT, specbits))
8246 int ok = 0;
8248 if (TREE_CODE (type) == REAL_TYPE)
8249 error ("short, signed or unsigned invalid for `%s'", name);
8250 else if (TREE_CODE (type) != INTEGER_TYPE)
8251 error ("long, short, signed or unsigned invalid for `%s'", name);
8252 else if (RIDBIT_SETP (RID_LONG, specbits)
8253 && RIDBIT_SETP (RID_SHORT, specbits))
8254 error ("long and short specified together for `%s'", name);
8255 else if ((RIDBIT_SETP (RID_LONG, specbits)
8256 || RIDBIT_SETP (RID_SHORT, specbits))
8257 && explicit_char)
8258 error ("long or short specified with char for `%s'", name);
8259 else if ((RIDBIT_SETP (RID_LONG, specbits)
8260 || RIDBIT_SETP (RID_SHORT, specbits))
8261 && TREE_CODE (type) == REAL_TYPE)
8262 error ("long or short specified with floating type for `%s'", name);
8263 else if (RIDBIT_SETP (RID_SIGNED, specbits)
8264 && RIDBIT_SETP (RID_UNSIGNED, specbits))
8265 error ("signed and unsigned given together for `%s'", name);
8266 else
8268 ok = 1;
8269 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
8271 pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
8272 name);
8273 if (flag_pedantic_errors)
8274 ok = 0;
8278 /* Discard the type modifiers if they are invalid. */
8279 if (! ok)
8281 RIDBIT_RESET (RID_UNSIGNED, specbits);
8282 RIDBIT_RESET (RID_SIGNED, specbits);
8283 RIDBIT_RESET (RID_LONG, specbits);
8284 RIDBIT_RESET (RID_SHORT, specbits);
8285 longlong = 0;
8289 if (RIDBIT_SETP (RID_COMPLEX, specbits)
8290 && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
8292 error ("complex invalid for `%s'", name);
8293 RIDBIT_RESET (RID_COMPLEX, specbits);
8296 /* Decide whether an integer type is signed or not.
8297 Optionally treat bitfields as signed by default. */
8298 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
8299 || (bitfield && ! flag_signed_bitfields
8300 && (explicit_int || defaulted_int || explicit_char
8301 /* A typedef for plain `int' without `signed'
8302 can be controlled just like plain `int'. */
8303 || ! (typedef_decl != NULL_TREE
8304 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
8305 && TREE_CODE (type) != ENUMERAL_TYPE
8306 && RIDBIT_NOTSETP (RID_SIGNED, specbits)))
8308 if (longlong)
8309 type = long_long_unsigned_type_node;
8310 else if (RIDBIT_SETP (RID_LONG, specbits))
8311 type = long_unsigned_type_node;
8312 else if (RIDBIT_SETP (RID_SHORT, specbits))
8313 type = short_unsigned_type_node;
8314 else if (type == char_type_node)
8315 type = unsigned_char_type_node;
8316 else if (typedef_decl)
8317 type = unsigned_type (type);
8318 else
8319 type = unsigned_type_node;
8321 else if (RIDBIT_SETP (RID_SIGNED, specbits)
8322 && type == char_type_node)
8323 type = signed_char_type_node;
8324 else if (longlong)
8325 type = long_long_integer_type_node;
8326 else if (RIDBIT_SETP (RID_LONG, specbits))
8327 type = long_integer_type_node;
8328 else if (RIDBIT_SETP (RID_SHORT, specbits))
8329 type = short_integer_type_node;
8331 if (RIDBIT_SETP (RID_COMPLEX, specbits))
8333 /* If we just have "complex", it is equivalent to
8334 "complex double", but if any modifiers at all are specified it is
8335 the complex form of TYPE. E.g, "complex short" is
8336 "complex short int". */
8338 if (defaulted_int && ! longlong
8339 && ! (RIDBIT_SETP (RID_LONG, specbits)
8340 || RIDBIT_SETP (RID_SHORT, specbits)
8341 || RIDBIT_SETP (RID_SIGNED, specbits)
8342 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
8343 type = complex_double_type_node;
8344 else if (type == integer_type_node)
8345 type = complex_integer_type_node;
8346 else if (type == float_type_node)
8347 type = complex_float_type_node;
8348 else if (type == double_type_node)
8349 type = complex_double_type_node;
8350 else if (type == long_double_type_node)
8351 type = complex_long_double_type_node;
8352 else
8353 type = build_complex_type (type);
8356 /* Set CONSTP if this declaration is `const', whether by
8357 explicit specification or via a typedef.
8358 Likewise for VOLATILEP. */
8360 constp = !! RIDBIT_SETP (RID_CONST, specbits) + TYPE_READONLY (type);
8361 volatilep = !! RIDBIT_SETP (RID_VOLATILE, specbits) + TYPE_VOLATILE (type);
8362 staticp = 0;
8363 inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
8364 virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
8365 RIDBIT_RESET (RID_VIRTUAL, specbits);
8366 explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
8367 RIDBIT_RESET (RID_EXPLICIT, specbits);
8369 if (RIDBIT_SETP (RID_STATIC, specbits))
8370 staticp = 1 + (decl_context == FIELD);
8372 if (virtualp && staticp == 2)
8374 cp_error ("member `%D' cannot be declared both virtual and static",
8375 dname);
8376 staticp = 0;
8378 friendp = RIDBIT_SETP (RID_FRIEND, specbits);
8379 RIDBIT_RESET (RID_FRIEND, specbits);
8381 if (RIDBIT_SETP (RID_MUTABLE, specbits))
8383 if (decl_context == PARM)
8385 error ("non-member `%s' cannot be declared `mutable'", name);
8386 RIDBIT_RESET (RID_MUTABLE, specbits);
8388 else if (friendp || decl_context == TYPENAME)
8390 error ("non-object member `%s' cannot be declared `mutable'", name);
8391 RIDBIT_RESET (RID_MUTABLE, specbits);
8395 /* Warn if two storage classes are given. Default to `auto'. */
8397 if (RIDBIT_ANY_SET (specbits))
8399 if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
8400 if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
8401 if (decl_context == PARM && nclasses > 0)
8402 error ("storage class specifiers invalid in parameter declarations");
8403 if (RIDBIT_SETP (RID_TYPEDEF, specbits))
8405 if (decl_context == PARM)
8406 error ("typedef declaration invalid in parameter declaration");
8407 nclasses++;
8409 if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
8410 if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
8413 /* Give error if `virtual' is used outside of class declaration. */
8414 if (virtualp
8415 && (current_class_name == NULL_TREE || decl_context != FIELD))
8417 error ("virtual outside class declaration");
8418 virtualp = 0;
8420 if (current_class_name == NULL_TREE && RIDBIT_SETP (RID_MUTABLE, specbits))
8422 error ("only members can be declared mutable");
8423 RIDBIT_RESET (RID_MUTABLE, specbits);
8426 /* Static anonymous unions are dealt with here. */
8427 if (staticp && decl_context == TYPENAME
8428 && TREE_CODE (declspecs) == TREE_LIST
8429 && TREE_CODE (TREE_VALUE (declspecs)) == UNION_TYPE
8430 && ANON_AGGRNAME_P (TYPE_IDENTIFIER (TREE_VALUE (declspecs))))
8431 decl_context = FIELD;
8433 /* Give error if `const,' `volatile,' `inline,' `friend,' or `virtual'
8434 is used in a signature member function declaration. */
8435 if (decl_context == FIELD
8436 && IS_SIGNATURE (current_class_type)
8437 && RIDBIT_NOTSETP (RID_TYPEDEF, specbits))
8439 if (constp)
8441 error ("`const' specified for signature member function `%s'", name);
8442 constp = 0;
8444 if (volatilep)
8446 error ("`volatile' specified for signature member function `%s'",
8447 name);
8448 volatilep = 0;
8450 if (inlinep)
8452 error ("`inline' specified for signature member function `%s'", name);
8453 /* Later, we'll make signature member functions inline. */
8454 inlinep = 0;
8456 if (friendp)
8458 error ("`friend' declaration in signature definition");
8459 friendp = 0;
8461 if (virtualp)
8463 error ("`virtual' specified for signature member function `%s'",
8464 name);
8465 /* Later, we'll make signature member functions virtual. */
8466 virtualp = 0;
8470 /* Warn about storage classes that are invalid for certain
8471 kinds of declarations (parameters, typenames, etc.). */
8473 if (nclasses > 1)
8474 error ("multiple storage classes in declaration of `%s'", name);
8475 else if (decl_context != NORMAL && nclasses > 0)
8477 if ((decl_context == PARM || decl_context == CATCHPARM)
8478 && (RIDBIT_SETP (RID_REGISTER, specbits)
8479 || RIDBIT_SETP (RID_AUTO, specbits)))
8481 else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
8483 else if (decl_context == FIELD
8484 && ! IS_SIGNATURE (current_class_type)
8485 /* C++ allows static class elements */
8486 && RIDBIT_SETP (RID_STATIC, specbits))
8487 /* C++ also allows inlines and signed and unsigned elements,
8488 but in those cases we don't come in here. */
8490 else
8492 if (decl_context == FIELD)
8494 tree tmp = NULL_TREE;
8495 register int op = 0;
8497 if (declarator)
8499 /* Avoid trying to get an operand off an identifier node. */
8500 if (TREE_CODE (declarator) == IDENTIFIER_NODE)
8501 tmp = declarator;
8502 else
8503 tmp = TREE_OPERAND (declarator, 0);
8504 op = IDENTIFIER_OPNAME_P (tmp);
8506 error ("storage class specified for %s `%s'",
8507 IS_SIGNATURE (current_class_type)
8508 ? (op
8509 ? "signature member operator"
8510 : "signature member function")
8511 : (op ? "member operator" : "field"),
8512 op ? operator_name_string (tmp) : name);
8514 else
8515 error (((decl_context == PARM || decl_context == CATCHPARM)
8516 ? "storage class specified for parameter `%s'"
8517 : "storage class specified for typename"), name);
8518 RIDBIT_RESET (RID_REGISTER, specbits);
8519 RIDBIT_RESET (RID_AUTO, specbits);
8520 RIDBIT_RESET (RID_EXTERN, specbits);
8522 if (decl_context == FIELD && IS_SIGNATURE (current_class_type))
8524 RIDBIT_RESET (RID_STATIC, specbits);
8525 staticp = 0;
8529 else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
8531 if (toplevel_bindings_p ())
8533 /* It's common practice (and completely valid) to have a const
8534 be initialized and declared extern. */
8535 if (! constp)
8536 warning ("`%s' initialized and declared `extern'", name);
8538 else
8539 error ("`%s' has both `extern' and initializer", name);
8541 else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
8542 && ! toplevel_bindings_p ())
8543 error ("nested function `%s' declared `extern'", name);
8544 else if (toplevel_bindings_p ())
8546 if (RIDBIT_SETP (RID_AUTO, specbits))
8547 error ("top-level declaration of `%s' specifies `auto'", name);
8550 if (nclasses > 0 && friendp)
8551 error ("storage class specifiers invalid in friend function declarations");
8553 /* Now figure out the structure of the declarator proper.
8554 Descend through it, creating more complex types, until we reach
8555 the declared identifier (or NULL_TREE, in an absolute declarator). */
8557 while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
8558 && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
8560 /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
8561 an INDIRECT_REF (for *...),
8562 a CALL_EXPR (for ...(...)),
8563 an identifier (for the name being declared)
8564 or a null pointer (for the place in an absolute declarator
8565 where the name was omitted).
8566 For the last two cases, we have just exited the loop.
8568 For C++ it could also be
8569 a SCOPE_REF (for class :: ...). In this case, we have converted
8570 sensible names to types, and those are the values we use to
8571 qualify the member name.
8572 an ADDR_EXPR (for &...),
8573 a BIT_NOT_EXPR (for destructors)
8575 At this point, TYPE is the type of elements of an array,
8576 or for a function to return, or for a pointer to point to.
8577 After this sequence of ifs, TYPE is the type of the
8578 array or function or pointer, and DECLARATOR has had its
8579 outermost layer removed. */
8581 if (type == error_mark_node)
8583 if (TREE_CODE (declarator) == SCOPE_REF)
8584 declarator = TREE_OPERAND (declarator, 1);
8585 else
8586 declarator = TREE_OPERAND (declarator, 0);
8587 continue;
8589 if (quals != NULL_TREE
8590 && (declarator == NULL_TREE
8591 || TREE_CODE (declarator) != SCOPE_REF))
8593 if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
8594 ctype = TYPE_METHOD_BASETYPE (type);
8595 if (ctype != NULL_TREE)
8597 tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
8598 ctype = grok_method_quals (ctype, dummy, quals);
8599 type = TREE_TYPE (dummy);
8600 quals = NULL_TREE;
8603 switch (TREE_CODE (declarator))
8605 case ARRAY_REF:
8607 register tree itype = NULL_TREE;
8608 register tree size = TREE_OPERAND (declarator, 1);
8609 /* The index is a signed object `sizetype' bits wide. */
8610 tree index_type = signed_type (sizetype);
8612 declarator = TREE_OPERAND (declarator, 0);
8614 /* Check for some types that there cannot be arrays of. */
8616 if (TYPE_MAIN_VARIANT (type) == void_type_node)
8618 cp_error ("declaration of `%D' as array of voids", dname);
8619 type = error_mark_node;
8622 if (TREE_CODE (type) == FUNCTION_TYPE)
8624 cp_error ("declaration of `%D' as array of functions", dname);
8625 type = error_mark_node;
8628 /* ARM $8.4.3: Since you can't have a pointer to a reference,
8629 you can't have arrays of references. If we allowed them,
8630 then we'd be saying x[i] is valid for an array x, but
8631 then you'd have to ask: what does `*(x + i)' mean? */
8632 if (TREE_CODE (type) == REFERENCE_TYPE)
8634 if (decl_context == TYPENAME)
8635 cp_error ("cannot make arrays of references");
8636 else
8637 cp_error ("declaration of `%D' as array of references",
8638 dname);
8639 type = error_mark_node;
8642 if (TREE_CODE (type) == OFFSET_TYPE)
8644 cp_error ("declaration of `%D' as array of data members",
8645 dname);
8646 type = error_mark_node;
8649 if (TREE_CODE (type) == METHOD_TYPE)
8651 cp_error ("declaration of `%D' as array of function members",
8652 dname);
8653 type = error_mark_node;
8656 if (size == error_mark_node)
8657 type = error_mark_node;
8659 if (type == error_mark_node)
8660 continue;
8662 if (size)
8664 /* Must suspend_momentary here because the index
8665 type may need to live until the end of the function.
8666 For example, it is used in the declaration of a
8667 variable which requires destructing at the end of
8668 the function; then build_vec_delete will need this
8669 value. */
8670 int yes = suspend_momentary ();
8671 /* might be a cast */
8672 if (TREE_CODE (size) == NOP_EXPR
8673 && TREE_TYPE (size) == TREE_TYPE (TREE_OPERAND (size, 0)))
8674 size = TREE_OPERAND (size, 0);
8676 /* If this involves a template parameter, it'll be
8677 constant, but we don't know what the value is yet. */
8678 if (processing_template_decl)
8680 itype = make_node (INTEGER_TYPE);
8681 TYPE_MIN_VALUE (itype) = size_zero_node;
8682 TYPE_MAX_VALUE (itype) = build_min
8683 (MINUS_EXPR, sizetype, size, integer_one_node);
8684 goto dont_grok_size;
8687 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
8688 && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE)
8690 cp_error ("size of array `%D' has non-integer type",
8691 dname);
8692 size = integer_one_node;
8694 if (TREE_READONLY_DECL_P (size))
8695 size = decl_constant_value (size);
8696 if (pedantic && integer_zerop (size))
8697 cp_pedwarn ("ANSI C++ forbids zero-size array `%D'", dname);
8698 if (TREE_CONSTANT (size))
8700 int old_flag_pedantic_errors = flag_pedantic_errors;
8701 int old_pedantic = pedantic;
8702 pedantic = flag_pedantic_errors = 1;
8703 /* Always give overflow errors on array subscripts. */
8704 constant_expression_warning (size);
8705 pedantic = old_pedantic;
8706 flag_pedantic_errors = old_flag_pedantic_errors;
8707 if (INT_CST_LT (size, integer_zero_node))
8709 cp_error ("size of array `%D' is negative", dname);
8710 size = integer_one_node;
8713 else
8715 if (pedantic)
8717 if (dname)
8718 cp_pedwarn ("ANSI C++ forbids variable-size array `%D'",
8719 dname);
8720 else
8721 cp_pedwarn ("ANSI C++ forbids variable-size array");
8725 itype
8726 = fold (build_binary_op (MINUS_EXPR,
8727 cp_convert (index_type, size),
8728 cp_convert (index_type,
8729 integer_one_node), 1));
8730 if (! TREE_CONSTANT (itype))
8731 itype = variable_size (itype);
8732 else if (TREE_OVERFLOW (itype))
8734 error ("overflow in array dimension");
8735 TREE_OVERFLOW (itype) = 0;
8738 /* If we're a parm, we need to have a permanent type so
8739 mangling checks for re-use will work right. If both the
8740 element and index types are permanent, the array type
8741 will be, too. */
8742 if (decl_context == PARM
8743 && allocation_temporary_p () && TREE_PERMANENT (type))
8745 push_obstacks (&permanent_obstack, &permanent_obstack);
8746 itype = build_index_type (itype);
8747 pop_obstacks ();
8749 else
8750 itype = build_index_type (itype);
8752 dont_grok_size:
8753 resume_momentary (yes);
8756 /* Build the array type itself, then merge any constancy or
8757 volatility into the target type. We must do it in this order
8758 to ensure that the TYPE_MAIN_VARIANT field of the array type
8759 is set correctly. */
8761 type = build_cplus_array_type (type, itype);
8762 if (constp || volatilep)
8763 type = cp_build_type_variant (type, constp, volatilep);
8765 ctype = NULL_TREE;
8767 break;
8769 case CALL_EXPR:
8771 tree arg_types;
8772 int funcdecl_p;
8773 tree inner_parms = TREE_OPERAND (declarator, 1);
8774 tree inner_decl = TREE_OPERAND (declarator, 0);
8776 /* Declaring a function type.
8777 Make sure we have a valid type for the function to return. */
8778 #if 0
8779 /* Is this an error? Should they be merged into TYPE here? */
8780 if (pedantic && (constp || volatilep))
8781 pedwarn ("function declared to return const or volatile result");
8782 #else
8783 /* Merge any constancy or volatility into the function return
8784 type. */
8786 if (constp || volatilep)
8788 type = cp_build_type_variant (type, constp, volatilep);
8789 if (IS_AGGR_TYPE (type))
8790 build_pointer_type (type);
8791 constp = 0;
8792 volatilep = 0;
8794 #endif
8796 /* Warn about some types functions can't return. */
8798 if (TREE_CODE (type) == FUNCTION_TYPE)
8800 error ("`%s' declared as function returning a function", name);
8801 type = integer_type_node;
8803 if (TREE_CODE (type) == ARRAY_TYPE)
8805 error ("`%s' declared as function returning an array", name);
8806 type = integer_type_node;
8809 if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
8810 inner_decl = TREE_OPERAND (inner_decl, 1);
8812 if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR)
8813 inner_decl = dname;
8815 /* Pick up type qualifiers which should be applied to `this'. */
8816 quals = TREE_OPERAND (declarator, 2);
8818 /* Pick up the exception specifications. */
8819 raises = TREE_TYPE (declarator);
8821 /* Say it's a definition only for the CALL_EXPR
8822 closest to the identifier. */
8823 funcdecl_p
8824 = inner_decl
8825 && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
8826 || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR
8827 || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
8829 if (ctype == NULL_TREE
8830 && decl_context == FIELD
8831 && funcdecl_p
8832 && (friendp == 0 || dname == current_class_name))
8833 ctype = current_class_type;
8835 if (ctype && return_type == return_conversion)
8836 TYPE_HAS_CONVERSION (ctype) = 1;
8837 if (ctype && constructor_name (ctype) == dname)
8839 /* We are within a class's scope. If our declarator name
8840 is the same as the class name, and we are defining
8841 a function, then it is a constructor/destructor, and
8842 therefore returns a void type. */
8844 if (flags == DTOR_FLAG)
8846 /* ANSI C++ June 5 1992 WP 12.4.1. A destructor may
8847 not be declared const or volatile. A destructor
8848 may not be static. */
8849 if (staticp == 2)
8850 error ("destructor cannot be static member function");
8851 if (quals)
8853 error ("destructors cannot be declared `const' or `volatile'");
8854 return void_type_node;
8856 if (decl_context == FIELD)
8858 if (! member_function_or_else (ctype, current_class_type,
8859 "destructor for alien class `%s' cannot be a member"))
8860 return void_type_node;
8863 else /* it's a constructor. */
8865 if (explicitp == 1)
8866 explicitp = 2;
8867 /* ANSI C++ June 5 1992 WP 12.1.2. A constructor may
8868 not be declared const or volatile. A constructor may
8869 not be virtual. A constructor may not be static. */
8870 if (staticp == 2)
8871 error ("constructor cannot be static member function");
8872 if (virtualp)
8874 pedwarn ("constructors cannot be declared virtual");
8875 virtualp = 0;
8877 if (quals)
8879 error ("constructors cannot be declared `const' or `volatile'");
8880 return void_type_node;
8883 RID_BIT_TYPE tmp_bits;
8884 bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
8885 RIDBIT_RESET (RID_INLINE, tmp_bits);
8886 RIDBIT_RESET (RID_STATIC, tmp_bits);
8887 if (RIDBIT_ANY_SET (tmp_bits))
8888 error ("return value type specifier for constructor ignored");
8890 type = build_pointer_type (ctype);
8891 if (decl_context == FIELD
8892 && IS_SIGNATURE (current_class_type))
8894 error ("constructor not allowed in signature");
8895 return void_type_node;
8897 else if (decl_context == FIELD)
8899 if (! member_function_or_else (ctype, current_class_type,
8900 "constructor for alien class `%s' cannot be member"))
8901 return void_type_node;
8902 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
8903 if (return_type != return_ctor)
8904 return NULL_TREE;
8907 if (decl_context == FIELD)
8908 staticp = 0;
8910 else if (friendp)
8912 if (initialized)
8913 error ("can't initialize friend function `%s'", name);
8914 if (virtualp)
8916 /* Cannot be both friend and virtual. */
8917 error ("virtual functions cannot be friends");
8918 RIDBIT_RESET (RID_FRIEND, specbits);
8919 friendp = 0;
8921 if (decl_context == NORMAL)
8922 error ("friend declaration not in class definition");
8923 if (current_function_decl && funcdef_flag)
8924 cp_error ("can't define friend function `%s' in a local class definition",
8925 name);
8928 /* Construct the function type and go to the next
8929 inner layer of declarator. */
8931 declarator = TREE_OPERAND (declarator, 0);
8933 /* FIXME: This is where default args should be fully
8934 processed. */
8936 arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
8938 if (declarator)
8940 /* Get past destructors, etc.
8941 We know we have one because FLAGS will be non-zero.
8943 Complain about improper parameter lists here. */
8944 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
8946 declarator = TREE_OPERAND (declarator, 0);
8948 if (strict_prototype == 0 && arg_types == NULL_TREE)
8949 arg_types = void_list_node;
8950 else if (arg_types == NULL_TREE
8951 || arg_types != void_list_node)
8953 error ("destructors cannot be specified with parameters");
8954 arg_types = void_list_node;
8959 /* ANSI says that `const int foo ();'
8960 does not make the function foo const. */
8961 type = build_function_type (type, arg_types);
8964 tree t;
8965 for (t = arg_types; t; t = TREE_CHAIN (t))
8966 if (TREE_PURPOSE (t)
8967 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8969 add_defarg_fn (type);
8970 break;
8974 break;
8976 case ADDR_EXPR:
8977 case INDIRECT_REF:
8978 /* Filter out pointers-to-references and references-to-references.
8979 We can get these if a TYPE_DECL is used. */
8981 if (TREE_CODE (type) == REFERENCE_TYPE)
8983 error ("cannot declare %s to references",
8984 TREE_CODE (declarator) == ADDR_EXPR
8985 ? "references" : "pointers");
8986 declarator = TREE_OPERAND (declarator, 0);
8987 continue;
8990 if (TREE_CODE (type) == OFFSET_TYPE
8991 && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
8992 || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
8994 cp_error ("cannot declare pointer to `%#T' member",
8995 TREE_TYPE (type));
8996 type = TREE_TYPE (type);
8999 /* Merge any constancy or volatility into the target type
9000 for the pointer. */
9002 if (constp || volatilep)
9004 /* A const or volatile signature pointer/reference is
9005 pointing to a const or volatile object, i.e., the
9006 `optr' is const or volatile, respectively, not the
9007 signature pointer/reference itself. */
9008 if (! IS_SIGNATURE (type))
9010 type = cp_build_type_variant (type, constp, volatilep);
9011 if (IS_AGGR_TYPE (type))
9012 build_pointer_type (type);
9013 constp = 0;
9014 volatilep = 0;
9018 if (IS_SIGNATURE (type))
9020 if (TREE_CODE (declarator) == ADDR_EXPR)
9022 if (CLASSTYPE_METHOD_VEC (type) == NULL_TREE
9023 && TYPE_SIZE (type))
9024 cp_warning ("empty signature `%T' used in signature reference declaration",
9025 type);
9026 #if 0
9027 type = build_signature_reference_type (type,
9028 constp, volatilep);
9029 #else
9030 sorry ("signature reference");
9031 return NULL_TREE;
9032 #endif
9034 else
9036 if (CLASSTYPE_METHOD_VEC (type) == NULL_TREE
9037 && TYPE_SIZE (type))
9038 cp_warning ("empty signature `%T' used in signature pointer declaration",
9039 type);
9040 type = build_signature_pointer_type (type,
9041 constp, volatilep);
9043 constp = 0;
9044 volatilep = 0;
9046 else if (TREE_CODE (declarator) == ADDR_EXPR)
9048 if (TREE_CODE (type) == FUNCTION_TYPE)
9050 error ("cannot declare references to functions; use pointer to function instead");
9051 type = build_pointer_type (type);
9053 else
9055 if (TYPE_MAIN_VARIANT (type) == void_type_node)
9056 error ("invalid type: `void &'");
9057 else
9058 type = build_reference_type (type);
9061 else if (TREE_CODE (type) == METHOD_TYPE)
9063 type = build_ptrmemfunc_type (build_pointer_type (type));
9065 else
9066 type = build_pointer_type (type);
9068 /* Process a list of type modifier keywords (such as
9069 const or volatile) that were given inside the `*' or `&'. */
9071 if (TREE_TYPE (declarator))
9073 register tree typemodlist;
9074 int erred = 0;
9075 for (typemodlist = TREE_TYPE (declarator); typemodlist;
9076 typemodlist = TREE_CHAIN (typemodlist))
9078 if (TREE_VALUE (typemodlist) == ridpointers[(int) RID_CONST])
9079 constp++;
9080 else if (TREE_VALUE (typemodlist) == ridpointers[(int) RID_VOLATILE])
9081 volatilep++;
9082 else if (!erred)
9084 erred = 1;
9085 error ("invalid type modifier within %s declarator",
9086 TREE_CODE (declarator) == ADDR_EXPR
9087 ? "reference" : "pointer");
9090 if (constp > 1)
9091 pedwarn ("duplicate `const'");
9092 if (volatilep > 1)
9093 pedwarn ("duplicate `volatile'");
9094 if (TREE_CODE (declarator) == ADDR_EXPR
9095 && (constp || volatilep))
9097 if (constp)
9098 pedwarn ("discarding `const' applied to a reference");
9099 if (volatilep)
9100 pedwarn ("discarding `volatile' applied to a reference");
9101 constp = volatilep = 0;
9104 declarator = TREE_OPERAND (declarator, 0);
9105 ctype = NULL_TREE;
9106 break;
9108 case SCOPE_REF:
9110 /* We have converted type names to NULL_TREE if the
9111 name was bogus, or to a _TYPE node, if not.
9113 The variable CTYPE holds the type we will ultimately
9114 resolve to. The code here just needs to build
9115 up appropriate member types. */
9116 tree sname = TREE_OPERAND (declarator, 1);
9117 tree t;
9119 /* Destructors can have their visibilities changed as well. */
9120 if (TREE_CODE (sname) == BIT_NOT_EXPR)
9121 sname = TREE_OPERAND (sname, 0);
9123 if (TREE_COMPLEXITY (declarator) == 0)
9124 /* This needs to be here, in case we are called
9125 multiple times. */ ;
9126 else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
9127 /* don't fall out into global scope. Hides real bug? --eichin */ ;
9128 else if (! IS_AGGR_TYPE_CODE
9129 (TREE_CODE (TREE_OPERAND (declarator, 0))))
9131 else if (TREE_COMPLEXITY (declarator) == current_class_depth)
9133 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
9134 that refer to ctype. They couldn't be resolved earlier
9135 because we hadn't pushed into the class yet.
9136 Example: resolve 'B<T>::type' in
9137 'B<typename B<T>::type> B<T>::f () { }'. */
9138 if (current_template_parms
9139 && uses_template_parms (type)
9140 && uses_template_parms (current_class_type))
9142 tree args = current_template_args ();
9143 type = tsubst (type, args,
9144 TREE_VEC_LENGTH (TREE_VEC_ELT
9145 (args, 0)),
9146 NULL_TREE);
9149 /* This pop_nested_class corresponds to the
9150 push_nested_class used to push into class scope for
9151 parsing the argument list of a function decl, in
9152 qualified_id. */
9153 pop_nested_class (1);
9154 TREE_COMPLEXITY (declarator) = current_class_depth;
9156 else
9157 my_friendly_abort (16);
9159 if (TREE_OPERAND (declarator, 0) == NULL_TREE)
9161 /* We had a reference to a global decl, or
9162 perhaps we were given a non-aggregate typedef,
9163 in which case we cleared this out, and should just
9164 keep going as though it wasn't there. */
9165 declarator = sname;
9166 continue;
9168 ctype = TREE_OPERAND (declarator, 0);
9170 t = ctype;
9171 while (t != NULL_TREE)
9173 if (CLASSTYPE_TEMPLATE_INFO (t))
9174 template_count += 1;
9175 t = TYPE_MAIN_DECL (t);
9176 if (DECL_LANG_SPECIFIC (t))
9177 t = DECL_CLASS_CONTEXT (t);
9178 else
9179 t = NULL_TREE;
9182 if (sname == NULL_TREE)
9183 goto done_scoping;
9185 if (TREE_CODE (sname) == IDENTIFIER_NODE)
9187 /* This is the `standard' use of the scoping operator:
9188 basetype :: member . */
9190 if (ctype == current_class_type)
9192 /* class A {
9193 void A::f ();
9196 Is this ill-formed? */
9198 if (pedantic)
9199 cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
9200 ctype, name);
9202 else if (TREE_CODE (type) == FUNCTION_TYPE)
9204 if (current_class_type == NULL_TREE
9205 || friendp)
9206 type = build_cplus_method_type (build_type_variant (ctype, constp, volatilep),
9207 TREE_TYPE (type), TYPE_ARG_TYPES (type));
9208 else
9210 cp_error ("cannot declare member function `%T::%s' within `%T'",
9211 ctype, name, current_class_type);
9212 return void_type_node;
9215 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
9216 || TYPE_SIZE (complete_type (ctype)) != NULL_TREE)
9218 /* have to move this code elsewhere in this function.
9219 this code is used for i.e., typedef int A::M; M *pm;
9221 It is? How? jason 10/2/94 */
9223 if (current_class_type)
9225 cp_error ("cannot declare member `%T::%s' within `%T'",
9226 ctype, name, current_class_type);
9227 return void_type_node;
9229 type = build_offset_type (ctype, type);
9231 else if (uses_template_parms (ctype))
9233 if (TREE_CODE (type) == FUNCTION_TYPE)
9234 type
9235 = build_cplus_method_type (build_type_variant (ctype,
9236 constp,
9237 volatilep),
9238 TREE_TYPE (type),
9239 TYPE_ARG_TYPES (type));
9241 else
9243 cp_error ("structure `%T' not yet defined", ctype);
9244 return error_mark_node;
9247 declarator = sname;
9249 else if (TREE_CODE (sname) == SCOPE_REF)
9250 my_friendly_abort (17);
9251 else
9253 done_scoping:
9254 declarator = TREE_OPERAND (declarator, 1);
9255 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
9256 /* In this case, we will deal with it later. */
9258 else
9260 if (TREE_CODE (type) == FUNCTION_TYPE)
9261 type = build_cplus_method_type (build_type_variant (ctype, constp, volatilep), TREE_TYPE (type), TYPE_ARG_TYPES (type));
9262 else
9263 type = build_offset_type (ctype, type);
9267 break;
9269 case BIT_NOT_EXPR:
9270 declarator = TREE_OPERAND (declarator, 0);
9271 break;
9273 case RECORD_TYPE:
9274 case UNION_TYPE:
9275 case ENUMERAL_TYPE:
9276 declarator = NULL_TREE;
9277 break;
9279 case ERROR_MARK:
9280 declarator = NULL_TREE;
9281 break;
9283 default:
9284 my_friendly_abort (158);
9288 if (explicitp == 1)
9290 error ("only constructors can be declared `explicit'");
9291 explicitp = 0;
9294 /* Now TYPE has the actual type. */
9296 /* If this is declaring a typedef name, return a TYPE_DECL. */
9298 if (RIDBIT_SETP (RID_MUTABLE, specbits))
9300 if (constp)
9302 error ("const `%s' cannot be declared `mutable'", name);
9303 RIDBIT_RESET (RID_MUTABLE, specbits);
9305 else if (staticp)
9307 error ("static `%s' cannot be declared `mutable'", name);
9308 RIDBIT_RESET (RID_MUTABLE, specbits);
9312 if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
9314 tree decl;
9316 /* Note that the grammar rejects storage classes
9317 in typenames, fields or parameters. */
9318 if (constp || volatilep)
9319 type = cp_build_type_variant (type, constp, volatilep);
9321 if (decl_context == FIELD)
9323 if (declarator == current_class_name)
9324 cp_pedwarn ("ANSI C++ forbids nested type `%D' with same name as enclosing class",
9325 declarator);
9326 decl = build_lang_decl (TYPE_DECL, declarator, type);
9327 if (IS_SIGNATURE (current_class_type) && opaque_typedef)
9328 SIGNATURE_HAS_OPAQUE_TYPEDECLS (current_class_type) = 1;
9330 else
9331 decl = build_decl (TYPE_DECL, declarator, type);
9333 /* If the user declares "struct {...} foo" then `foo' will have
9334 an anonymous name. Fill that name in now. Nothing can
9335 refer to it, so nothing needs know about the name change.
9336 The TYPE_NAME field was filled in by build_struct_xref. */
9337 if (type != error_mark_node
9338 && TYPE_NAME (type)
9339 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
9340 && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type)))
9342 /* replace the anonymous name with the real name everywhere. */
9343 lookup_tag_reverse (type, declarator);
9344 TYPE_NAME (type) = decl;
9346 if (TYPE_LANG_SPECIFIC (type))
9347 TYPE_WAS_ANONYMOUS (type) = 1;
9349 DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
9350 DECL_ASSEMBLER_NAME (decl)
9351 = get_identifier (build_overload_name (type, 1, 1));
9354 if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
9356 cp_error_at ("typedef name may not be class-qualified", decl);
9357 return NULL_TREE;
9359 else if (quals)
9361 if (ctype == NULL_TREE)
9363 if (TREE_CODE (type) != METHOD_TYPE)
9364 cp_error_at ("invalid type qualifier for non-method type", decl);
9365 else
9366 ctype = TYPE_METHOD_BASETYPE (type);
9368 if (ctype != NULL_TREE)
9369 grok_method_quals (ctype, decl, quals);
9372 if (RIDBIT_SETP (RID_SIGNED, specbits)
9373 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
9374 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
9376 if (RIDBIT_SETP (RID_MUTABLE, specbits))
9378 error ("non-object member `%s' cannot be declared mutable", name);
9381 bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
9382 inlinep, friendp, raises != NULL_TREE);
9384 if (initialized)
9385 error ("typedef declaration includes an initializer");
9387 return decl;
9390 /* Detect the case of an array type of unspecified size
9391 which came, as such, direct from a typedef name.
9392 We must copy the type, so that each identifier gets
9393 a distinct type, so that each identifier's size can be
9394 controlled separately by its own initializer. */
9396 if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
9397 && TYPE_DOMAIN (type) == NULL_TREE)
9399 type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
9402 /* If this is a type name (such as, in a cast or sizeof),
9403 compute the type and return it now. */
9405 if (decl_context == TYPENAME)
9407 /* Note that the grammar rejects storage classes
9408 in typenames, fields or parameters. */
9409 if (constp || volatilep)
9410 if (IS_SIGNATURE (type))
9411 error ("`const' or `volatile' specified with signature type");
9412 else
9413 type = cp_build_type_variant (type, constp, volatilep);
9415 /* Special case: "friend class foo" looks like a TYPENAME context. */
9416 if (friendp)
9418 if (volatilep)
9420 cp_error ("`volatile' specified for friend class declaration");
9421 volatilep = 0;
9423 if (inlinep)
9425 cp_error ("`inline' specified for friend class declaration");
9426 inlinep = 0;
9429 /* Only try to do this stuff if we didn't already give up. */
9430 if (type != integer_type_node)
9432 /* A friendly class? */
9433 if (current_class_type)
9434 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
9435 else
9436 error ("trying to make class `%s' a friend of global scope",
9437 TYPE_NAME_STRING (type));
9438 type = void_type_node;
9441 else if (quals)
9443 tree dummy = build_decl (TYPE_DECL, declarator, type);
9444 if (ctype == NULL_TREE)
9446 my_friendly_assert (TREE_CODE (type) == METHOD_TYPE, 159);
9447 ctype = TYPE_METHOD_BASETYPE (type);
9449 grok_method_quals (ctype, dummy, quals);
9450 type = TREE_TYPE (dummy);
9453 return type;
9455 else if (declarator == NULL_TREE && decl_context != PARM
9456 && decl_context != CATCHPARM
9457 && TREE_CODE (type) != UNION_TYPE
9458 && ! bitfield)
9460 cp_error ("abstract declarator `%T' used as declaration", type);
9461 declarator = make_anon_name ();
9464 /* `void' at top level (not within pointer)
9465 is allowed only in typedefs or type names.
9466 We don't complain about parms either, but that is because
9467 a better error message can be made later. */
9469 if (TYPE_MAIN_VARIANT (type) == void_type_node && decl_context != PARM)
9471 if (! declarator)
9472 error ("unnamed variable or field declared void");
9473 else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
9475 if (IDENTIFIER_OPNAME_P (declarator))
9476 my_friendly_abort (356);
9477 else
9478 error ("variable or field `%s' declared void", name);
9480 else
9481 error ("variable or field declared void");
9482 type = integer_type_node;
9485 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
9486 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
9489 register tree decl;
9491 if (decl_context == PARM)
9493 if (ctype)
9494 error ("cannot use `::' in parameter declaration");
9496 /* A parameter declared as an array of T is really a pointer to T.
9497 One declared as a function is really a pointer to a function.
9498 One declared as a member is really a pointer to member. */
9500 if (TREE_CODE (type) == ARRAY_TYPE)
9502 /* Transfer const-ness of array into that of type pointed to. */
9503 type = build_pointer_type
9504 (cp_build_type_variant (TREE_TYPE (type), constp, volatilep));
9505 volatilep = constp = 0;
9507 else if (TREE_CODE (type) == FUNCTION_TYPE)
9508 type = build_pointer_type (type);
9509 else if (TREE_CODE (type) == OFFSET_TYPE)
9510 type = build_pointer_type (type);
9511 else if (type == void_type_node && declarator)
9513 error ("declaration of `%s' as void", name);
9514 return NULL_TREE;
9517 decl = build_decl (PARM_DECL, declarator, complete_type (type));
9519 bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
9520 inlinep, friendp, raises != NULL_TREE);
9521 if (current_class_type
9522 && IS_SIGNATURE (current_class_type))
9524 if (inlinep)
9525 error ("parameter of signature member function declared `inline'");
9526 if (RIDBIT_SETP (RID_AUTO, specbits))
9527 error ("parameter of signature member function declared `auto'");
9528 if (RIDBIT_SETP (RID_REGISTER, specbits))
9529 error ("parameter of signature member function declared `register'");
9532 /* Compute the type actually passed in the parmlist,
9533 for the case where there is no prototype.
9534 (For example, shorts and chars are passed as ints.)
9535 When there is a prototype, this is overridden later. */
9537 DECL_ARG_TYPE (decl) = type_promotes_to (type);
9539 else if (decl_context == FIELD)
9541 if (type == error_mark_node)
9543 /* Happens when declaring arrays of sizes which
9544 are error_mark_node, for example. */
9545 decl = NULL_TREE;
9547 else if (TREE_CODE (type) == FUNCTION_TYPE)
9549 int publicp = 0;
9551 /* We catch the others as conflicts with the builtin
9552 typedefs. */
9553 if (friendp && declarator == ridpointers[(int) RID_SIGNED])
9555 cp_error ("function `%D' cannot be declared friend",
9556 declarator);
9557 friendp = 0;
9560 if (friendp == 0)
9562 if (ctype == NULL_TREE)
9563 ctype = current_class_type;
9565 if (ctype == NULL_TREE)
9567 cp_error ("can't make `%D' into a method -- not in a class",
9568 declarator);
9569 return void_type_node;
9572 /* ``A union may [ ... ] not [ have ] virtual functions.''
9573 ARM 9.5 */
9574 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
9576 cp_error ("function `%D' declared virtual inside a union",
9577 declarator);
9578 return void_type_node;
9581 if (declarator == ansi_opname[(int) NEW_EXPR]
9582 || declarator == ansi_opname[(int) VEC_NEW_EXPR]
9583 || declarator == ansi_opname[(int) DELETE_EXPR]
9584 || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
9586 if (virtualp)
9588 cp_error ("`%D' cannot be declared virtual, since it is always static",
9589 declarator);
9590 virtualp = 0;
9593 else if (staticp < 2)
9594 type = build_cplus_method_type (build_type_variant (ctype, constp, volatilep),
9595 TREE_TYPE (type), TYPE_ARG_TYPES (type));
9598 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
9599 publicp = (! friendp || ! staticp);
9600 decl = grokfndecl (ctype, type,
9601 TREE_CODE (declarator) != TEMPLATE_ID_EXPR
9602 ? declarator : dname,
9603 declarator,
9604 virtualp, flags, quals, raises, attrlist,
9605 friendp ? -1 : 0, friendp, publicp, inlinep,
9606 funcdef_flag, template_count);
9607 if (decl == NULL_TREE)
9608 return NULL_TREE;
9609 #if 0
9610 /* This clobbers the attrs stored in `decl' from `attrlist'. */
9611 /* The decl and setting of decl_machine_attr is also turned off. */
9612 decl = build_decl_attribute_variant (decl, decl_machine_attr);
9613 #endif
9615 if (explicitp == 2)
9616 DECL_NONCONVERTING_P (decl) = 1;
9618 else if (TREE_CODE (type) == METHOD_TYPE)
9620 /* We only get here for friend declarations of
9621 members of other classes. */
9622 /* All method decls are public, so tell grokfndecl to set
9623 TREE_PUBLIC, also. */
9624 decl = grokfndecl (ctype, type, declarator, declarator,
9625 virtualp, flags, quals, raises, attrlist,
9626 friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
9627 template_count);
9628 if (decl == NULL_TREE)
9629 return NULL_TREE;
9631 else if (!staticp && ! processing_template_decl
9632 && TYPE_SIZE (complete_type (type)) == NULL_TREE
9633 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
9635 if (declarator)
9636 cp_error ("field `%D' has incomplete type", declarator);
9637 else
9638 cp_error ("name `%T' has incomplete type", type);
9640 /* If we're instantiating a template, tell them which
9641 instantiation made the field's type be incomplete. */
9642 if (current_class_type
9643 && TYPE_NAME (current_class_type)
9644 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
9645 && declspecs && TREE_VALUE (declspecs)
9646 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
9647 cp_error (" in instantiation of template `%T'",
9648 current_class_type);
9650 type = error_mark_node;
9651 decl = NULL_TREE;
9653 else
9655 if (friendp)
9657 error ("`%s' is neither function nor method; cannot be declared friend",
9658 IDENTIFIER_POINTER (declarator));
9659 friendp = 0;
9661 decl = NULL_TREE;
9664 if (friendp)
9666 /* Friends are treated specially. */
9667 if (ctype == current_class_type)
9668 warning ("member functions are implicitly friends of their class");
9669 else
9671 tree t = NULL_TREE;
9672 if (decl && DECL_NAME (decl))
9673 t = do_friend (ctype, declarator, decl,
9674 last_function_parms, flags, quals,
9675 funcdef_flag);
9676 if (t && funcdef_flag)
9677 return t;
9679 return void_type_node;
9683 /* Structure field. It may not be a function, except for C++ */
9685 if (decl == NULL_TREE)
9687 if (initialized)
9689 /* Motion 10 at San Diego: If a static const integral data
9690 member is initialized with an integral constant
9691 expression, the initializer may appear either in the
9692 declaration (within the class), or in the definition,
9693 but not both. If it appears in the class, the member is
9694 a member constant. The file-scope definition is always
9695 required. */
9696 if (staticp)
9698 if (pedantic)
9700 if (! constp)
9701 cp_pedwarn ("ANSI C++ forbids in-class initialization of non-const static member `%D'",
9702 declarator);
9704 else if (! INTEGRAL_TYPE_P (type))
9705 cp_pedwarn ("ANSI C++ forbids member constant `%D' of non-integral type `%T'", declarator, type);
9709 /* Note that initialization of const members is prohibited
9710 by the draft ANSI standard, though it appears to be in
9711 common practice. 12.6.2: The argument list is used to
9712 initialize the named nonstatic member.... This (or an
9713 initializer list) is the only way to initialize
9714 nonstatic const and reference members. */
9715 else if (pedantic || ! constp)
9716 cp_pedwarn ("ANSI C++ forbids initialization of %s `%D'",
9717 constp ? "const member" : "member", declarator);
9720 if (staticp || (constp && initialized))
9722 /* ANSI C++ Apr '95 wp 9.2 */
9723 if (staticp && declarator == current_class_name)
9724 cp_pedwarn ("ANSI C++ forbids static member `%D' with same name as enclosing class",
9725 declarator);
9727 /* C++ allows static class members.
9728 All other work for this is done by grokfield.
9729 This VAR_DECL is built by build_lang_field_decl.
9730 All other VAR_DECLs are built by build_decl. */
9731 decl = build_lang_field_decl (VAR_DECL, declarator, type);
9732 TREE_STATIC (decl) = 1;
9733 /* In class context, 'static' means public access. */
9734 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = !!staticp;
9736 else
9738 decl = build_lang_field_decl (FIELD_DECL, declarator, type);
9739 if (RIDBIT_SETP (RID_MUTABLE, specbits))
9741 DECL_MUTABLE_P (decl) = 1;
9742 RIDBIT_RESET (RID_MUTABLE, specbits);
9746 bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
9747 inlinep, friendp, raises != NULL_TREE);
9750 else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
9752 tree original_name;
9753 int publicp = 0;
9755 if (! declarator)
9756 return NULL_TREE;
9758 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
9759 original_name = dname;
9760 else
9761 original_name = declarator;
9763 if (RIDBIT_SETP (RID_AUTO, specbits))
9764 error ("storage class `auto' invalid for function `%s'", name);
9765 else if (RIDBIT_SETP (RID_REGISTER, specbits))
9766 error ("storage class `register' invalid for function `%s'", name);
9768 /* Function declaration not at top level.
9769 Storage classes other than `extern' are not allowed
9770 and `extern' makes no difference. */
9771 if (! toplevel_bindings_p ()
9772 && (RIDBIT_SETP (RID_STATIC, specbits)
9773 || RIDBIT_SETP (RID_INLINE, specbits))
9774 && pedantic)
9776 if (RIDBIT_SETP (RID_STATIC, specbits))
9777 pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
9778 else
9779 pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
9782 if (ctype == NULL_TREE)
9784 if (virtualp)
9786 error ("virtual non-class function `%s'", name);
9787 virtualp = 0;
9790 if (current_lang_name == lang_name_cplusplus
9791 && ! processing_template_decl
9792 && ! (IDENTIFIER_LENGTH (original_name) == 4
9793 && IDENTIFIER_POINTER (original_name)[0] == 'm'
9794 && strcmp (IDENTIFIER_POINTER (original_name), "main") == 0)
9795 && ! (IDENTIFIER_LENGTH (original_name) > 10
9796 && IDENTIFIER_POINTER (original_name)[0] == '_'
9797 && IDENTIFIER_POINTER (original_name)[1] == '_'
9798 && strncmp (IDENTIFIER_POINTER (original_name)+2, "builtin_", 8) == 0))
9799 /* Plain overloading: will not be grok'd by grokclassfn. */
9800 if (name_mangling_version < 1
9801 || TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
9802 declarator = build_decl_overload (dname, TYPE_ARG_TYPES (type), 0);
9804 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
9805 type = build_cplus_method_type (build_type_variant (ctype, constp, volatilep),
9806 TREE_TYPE (type), TYPE_ARG_TYPES (type));
9808 /* Record presence of `static'. */
9809 publicp = (ctype != NULL_TREE
9810 || RIDBIT_SETP (RID_EXTERN, specbits)
9811 || !RIDBIT_SETP (RID_STATIC, specbits));
9813 decl = grokfndecl (ctype, type, original_name, declarator,
9814 virtualp, flags, quals, raises, attrlist,
9815 friendp ? 2 : 1, friendp,
9816 publicp, inlinep, funcdef_flag,
9817 template_count);
9818 if (decl == NULL_TREE)
9819 return NULL_TREE;
9821 if (ctype == NULL_TREE && DECL_LANGUAGE (decl) != lang_c
9822 && (!DECL_TEMPLATE_SPECIALIZATION (decl) ||
9823 name_mangling_version < 1))
9824 DECL_ASSEMBLER_NAME (decl) = current_namespace_id (declarator);
9826 if (staticp == 1)
9828 int illegal_static = 0;
9830 /* Don't allow a static member function in a class, and forbid
9831 declaring main to be static. */
9832 if (TREE_CODE (type) == METHOD_TYPE)
9834 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
9835 illegal_static = 1;
9837 else if (current_function_decl)
9839 /* FIXME need arm citation */
9840 error ("cannot declare static function inside another function");
9841 illegal_static = 1;
9844 if (illegal_static)
9846 staticp = 0;
9847 RIDBIT_RESET (RID_STATIC, specbits);
9851 else
9853 /* It's a variable. */
9855 if (decl_context == CATCHPARM)
9857 if (ctype)
9859 ctype = NULL_TREE;
9860 error ("cannot use `::' in parameter declaration");
9863 /* A parameter declared as an array of T is really a pointer to T.
9864 One declared as a function is really a pointer to a function.
9865 One declared as a member is really a pointer to member. */
9867 if (TREE_CODE (type) == ARRAY_TYPE)
9869 /* Transfer const-ness of array into that of type
9870 pointed to. */
9871 type = build_pointer_type
9872 (cp_build_type_variant (TREE_TYPE (type), constp, volatilep));
9873 volatilep = constp = 0;
9875 else if (TREE_CODE (type) == FUNCTION_TYPE)
9876 type = build_pointer_type (type);
9877 else if (TREE_CODE (type) == OFFSET_TYPE)
9878 type = build_pointer_type (type);
9881 /* An uninitialized decl with `extern' is a reference. */
9882 decl = grokvardecl (type, declarator, &specbits, initialized, constp);
9883 bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
9884 inlinep, friendp, raises != NULL_TREE);
9886 if (ctype)
9888 DECL_CONTEXT (decl) = ctype;
9889 if (staticp == 1)
9891 cp_pedwarn ("static member `%D' re-declared as static", decl);
9892 staticp = 0;
9893 RIDBIT_RESET (RID_STATIC, specbits);
9895 if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
9897 cp_error ("static member `%D' declared `register'", decl);
9898 RIDBIT_RESET (RID_REGISTER, specbits);
9900 if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
9902 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
9903 decl);
9904 RIDBIT_RESET (RID_EXTERN, specbits);
9909 if (RIDBIT_SETP (RID_MUTABLE, specbits))
9911 error ("`%s' cannot be declared mutable", name);
9914 /* Record `register' declaration for warnings on &
9915 and in case doing stupid register allocation. */
9917 if (RIDBIT_SETP (RID_REGISTER, specbits))
9918 DECL_REGISTER (decl) = 1;
9920 if (RIDBIT_SETP (RID_EXTERN, specbits))
9921 DECL_THIS_EXTERN (decl) = 1;
9923 if (RIDBIT_SETP (RID_STATIC, specbits))
9924 DECL_THIS_STATIC (decl) = 1;
9926 /* Record constancy and volatility. */
9928 if (constp)
9929 TREE_READONLY (decl) = TREE_CODE (type) != REFERENCE_TYPE;
9930 if (volatilep)
9932 TREE_SIDE_EFFECTS (decl) = 1;
9933 TREE_THIS_VOLATILE (decl) = 1;
9936 return decl;
9940 /* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
9941 An empty exprlist is a parmlist. An exprlist which
9942 contains only identifiers at the global level
9943 is a parmlist. Otherwise, it is an exprlist. */
9946 parmlist_is_exprlist (exprs)
9947 tree exprs;
9949 if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
9950 return 0;
9952 if (toplevel_bindings_p ())
9954 /* At the global level, if these are all identifiers,
9955 then it is a parmlist. */
9956 while (exprs)
9958 if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
9959 return 1;
9960 exprs = TREE_CHAIN (exprs);
9962 return 0;
9964 return 1;
9967 /* Subroutine of `grokparms'. In a fcn definition, arg types must
9968 be complete.
9970 C++: also subroutine of `start_function'. */
9972 static void
9973 require_complete_types_for_parms (parms)
9974 tree parms;
9976 if (processing_template_decl)
9977 return;
9979 while (parms)
9981 tree type = TREE_TYPE (parms);
9982 if (TYPE_SIZE (complete_type (type)) == NULL_TREE)
9984 if (DECL_NAME (parms))
9985 error ("parameter `%s' has incomplete type",
9986 IDENTIFIER_POINTER (DECL_NAME (parms)));
9987 else
9988 error ("parameter has incomplete type");
9989 TREE_TYPE (parms) = error_mark_node;
9991 #if 0
9992 /* If the arg types are incomplete in a declaration,
9993 they must include undefined tags.
9994 These tags can never be defined in the scope of the declaration,
9995 so the types can never be completed,
9996 and no call can be compiled successfully. */
9997 /* This is not the right behavior for C++, but not having
9998 it is also probably wrong. */
9999 else
10001 /* Now warn if is a pointer to an incomplete type. */
10002 while (TREE_CODE (type) == POINTER_TYPE
10003 || TREE_CODE (type) == REFERENCE_TYPE)
10004 type = TREE_TYPE (type);
10005 type = TYPE_MAIN_VARIANT (type);
10006 if (TYPE_SIZE (type) == NULL_TREE)
10008 if (DECL_NAME (parm) != NULL_TREE)
10009 warning ("parameter `%s' points to incomplete type",
10010 IDENTIFIER_POINTER (DECL_NAME (parm)));
10011 else
10012 warning ("parameter points to incomplete type");
10015 #endif
10016 parms = TREE_CHAIN (parms);
10020 /* Decode the list of parameter types for a function type.
10021 Given the list of things declared inside the parens,
10022 return a list of types.
10024 The list we receive can have three kinds of elements:
10025 an IDENTIFIER_NODE for names given without types,
10026 a TREE_LIST node for arguments given as typespecs or names with typespecs,
10027 or void_type_node, to mark the end of an argument list
10028 when additional arguments are not permitted (... was not used).
10030 FUNCDEF_FLAG is nonzero for a function definition, 0 for
10031 a mere declaration. A nonempty identifier-list gets an error message
10032 when FUNCDEF_FLAG is zero.
10033 If FUNCDEF_FLAG is 1, then parameter types must be complete.
10034 If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
10036 If all elements of the input list contain types,
10037 we return a list of the types.
10038 If all elements contain no type (except perhaps a void_type_node
10039 at the end), we return a null list.
10040 If some have types and some do not, it is an error, and we
10041 return a null list.
10043 Also set last_function_parms to either
10044 a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
10045 A list of names is converted to a chain of PARM_DECLs
10046 by store_parm_decls so that ultimately it is always a chain of decls.
10048 Note that in C++, parameters can take default values. These default
10049 values are in the TREE_PURPOSE field of the TREE_LIST. It is
10050 an error to specify default values which are followed by parameters
10051 that have no default values, or an ELLIPSES. For simplicities sake,
10052 only parameters which are specified with their types can take on
10053 default values. */
10055 static tree
10056 grokparms (first_parm, funcdef_flag)
10057 tree first_parm;
10058 int funcdef_flag;
10060 tree result = NULL_TREE;
10061 tree decls = NULL_TREE;
10063 if (first_parm != NULL_TREE
10064 && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
10066 if (! funcdef_flag)
10067 pedwarn ("parameter names (without types) in function declaration");
10068 last_function_parms = first_parm;
10069 return NULL_TREE;
10071 else if (first_parm != NULL_TREE
10072 && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
10073 && TREE_VALUE (first_parm) != void_type_node)
10074 my_friendly_abort (145);
10075 else
10077 /* Types were specified. This is a list of declarators
10078 each represented as a TREE_LIST node. */
10079 register tree parm, chain;
10080 int any_init = 0, any_error = 0;
10082 if (first_parm != NULL_TREE)
10084 tree last_result = NULL_TREE;
10085 tree last_decl = NULL_TREE;
10087 for (parm = first_parm; parm != NULL_TREE; parm = chain)
10089 tree type, list_node = parm;
10090 register tree decl = TREE_VALUE (parm);
10091 tree init = TREE_PURPOSE (parm);
10093 chain = TREE_CHAIN (parm);
10094 /* @@ weak defense against parse errors. */
10095 if (decl != void_type_node && TREE_CODE (decl) != TREE_LIST)
10097 /* Give various messages as the need arises. */
10098 if (TREE_CODE (decl) == STRING_CST)
10099 cp_error ("invalid string constant `%E'", decl);
10100 else if (TREE_CODE (decl) == INTEGER_CST)
10101 error ("invalid integer constant in parameter list, did you forget to give parameter name?");
10102 continue;
10105 if (decl != void_type_node)
10107 decl = grokdeclarator (TREE_VALUE (decl),
10108 TREE_PURPOSE (decl),
10109 PARM, init != NULL_TREE,
10110 NULL_TREE);
10111 if (! decl)
10112 continue;
10113 type = TREE_TYPE (decl);
10114 if (TYPE_MAIN_VARIANT (type) == void_type_node)
10115 decl = void_type_node;
10116 else if (TREE_CODE (type) == METHOD_TYPE)
10118 if (DECL_NAME (decl))
10119 /* Cannot use the decl here because
10120 we don't have DECL_CONTEXT set up yet. */
10121 cp_error ("parameter `%D' invalidly declared method type",
10122 DECL_NAME (decl));
10123 else
10124 error ("parameter invalidly declared method type");
10125 type = build_pointer_type (type);
10126 TREE_TYPE (decl) = type;
10128 else if (TREE_CODE (type) == OFFSET_TYPE)
10130 if (DECL_NAME (decl))
10131 cp_error ("parameter `%D' invalidly declared offset type",
10132 DECL_NAME (decl));
10133 else
10134 error ("parameter invalidly declared offset type");
10135 type = build_pointer_type (type);
10136 TREE_TYPE (decl) = type;
10138 else if (TREE_CODE (type) == RECORD_TYPE
10139 && TYPE_LANG_SPECIFIC (type)
10140 && CLASSTYPE_ABSTRACT_VIRTUALS (type))
10142 abstract_virtuals_error (decl, type);
10143 any_error = 1; /* seems like a good idea */
10145 else if (TREE_CODE (type) == RECORD_TYPE
10146 && TYPE_LANG_SPECIFIC (type)
10147 && IS_SIGNATURE (type))
10149 signature_error (decl, type);
10150 any_error = 1; /* seems like a good idea */
10154 if (decl == void_type_node)
10156 if (result == NULL_TREE)
10158 result = void_list_node;
10159 last_result = result;
10161 else
10163 TREE_CHAIN (last_result) = void_list_node;
10164 last_result = void_list_node;
10166 if (chain
10167 && (chain != void_list_node || TREE_CHAIN (chain)))
10168 error ("`void' in parameter list must be entire list");
10169 break;
10172 /* Since there is a prototype, args are passed in their own types. */
10173 DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
10174 #ifdef PROMOTE_PROTOTYPES
10175 if ((TREE_CODE (type) == INTEGER_TYPE
10176 || TREE_CODE (type) == ENUMERAL_TYPE)
10177 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
10178 DECL_ARG_TYPE (decl) = integer_type_node;
10179 #endif
10180 if (!any_error)
10182 if (init)
10184 any_init++;
10185 if (TREE_CODE (init) == SAVE_EXPR)
10186 PARM_DECL_EXPR (init) = 1;
10187 else if (processing_template_decl)
10189 /* Unparsed default arg from in-class decl. */
10190 else if (TREE_CODE (init) == DEFAULT_ARG)
10192 else if (TREE_CODE (init) == VAR_DECL
10193 || TREE_CODE (init) == PARM_DECL)
10195 if (IDENTIFIER_LOCAL_VALUE (DECL_NAME (init)))
10197 /* ``Local variables may not be used in default
10198 argument expressions.'' dpANSI C++ 8.2.6 */
10199 /* If extern int i; within a function is not
10200 considered a local variable, then this code is
10201 wrong. */
10202 cp_error ("local variable `%D' may not be used as a default argument", init);
10203 any_error = 1;
10205 else if (TREE_READONLY_DECL_P (init))
10206 init = decl_constant_value (init);
10208 else
10209 init = require_instantiated_type (type, init, integer_zero_node);
10210 if (! processing_template_decl
10211 && TREE_CODE (init) != DEFAULT_ARG
10212 && ! can_convert_arg (type, TREE_TYPE (init), init))
10213 cp_pedwarn ("invalid type `%T' for default argument to `%#D'",
10214 TREE_TYPE (init), decl);
10217 else
10218 init = NULL_TREE;
10220 if (decls == NULL_TREE)
10222 decls = decl;
10223 last_decl = decls;
10225 else
10227 TREE_CHAIN (last_decl) = decl;
10228 last_decl = decl;
10230 if (! current_function_decl && TREE_PERMANENT (list_node))
10232 TREE_PURPOSE (list_node) = init;
10233 TREE_VALUE (list_node) = type;
10234 TREE_CHAIN (list_node) = NULL_TREE;
10236 else
10237 list_node = saveable_tree_cons (init, type, NULL_TREE);
10238 if (result == NULL_TREE)
10240 result = list_node;
10241 last_result = result;
10243 else
10245 TREE_CHAIN (last_result) = list_node;
10246 last_result = list_node;
10249 if (last_result)
10250 TREE_CHAIN (last_result) = NULL_TREE;
10251 /* If there are no parameters, and the function does not end
10252 with `...', then last_decl will be NULL_TREE. */
10253 if (last_decl != NULL_TREE)
10254 TREE_CHAIN (last_decl) = NULL_TREE;
10258 last_function_parms = decls;
10260 /* In a fcn definition, arg types must be complete. */
10261 if (funcdef_flag > 0)
10262 require_complete_types_for_parms (last_function_parms);
10264 return result;
10267 /* Called from the parser to update an element of TYPE_ARG_TYPES for some
10268 FUNCTION_TYPE with the newly parsed version of its default argument, which
10269 was previously digested as text. See snarf_defarg et al in lex.c. */
10271 void
10272 replace_defarg (arg, init)
10273 tree arg, init;
10275 if (! processing_template_decl
10276 && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
10277 cp_pedwarn ("invalid type `%T' for default argument to `%T'",
10278 TREE_TYPE (init), TREE_VALUE (arg));
10279 TREE_PURPOSE (arg) = init;
10283 copy_args_p (d)
10284 tree d;
10286 tree t = FUNCTION_ARG_CHAIN (d);
10287 if (DECL_CONSTRUCTOR_P (d)
10288 && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (d)))
10289 t = TREE_CHAIN (t);
10290 if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
10291 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
10292 == DECL_CLASS_CONTEXT (d))
10293 && (TREE_CHAIN (t) == NULL_TREE
10294 || TREE_CHAIN (t) == void_list_node
10295 || TREE_PURPOSE (TREE_CHAIN (t))))
10296 return 1;
10297 return 0;
10300 /* These memoizing functions keep track of special properties which
10301 a class may have. `grok_ctor_properties' notices whether a class
10302 has a constructor of the form X(X&), and also complains
10303 if the class has a constructor of the form X(X).
10304 `grok_op_properties' takes notice of the various forms of
10305 operator= which are defined, as well as what sorts of type conversion
10306 may apply. Both functions take a FUNCTION_DECL as an argument. */
10309 grok_ctor_properties (ctype, decl)
10310 tree ctype, decl;
10312 tree parmtypes = FUNCTION_ARG_CHAIN (decl);
10313 tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
10315 /* When a type has virtual baseclasses, a magical first int argument is
10316 added to any ctor so we can tell if the class has been initialized
10317 yet. This could screw things up in this function, so we deliberately
10318 ignore the leading int if we're in that situation. */
10319 if (parmtypes
10320 && TREE_VALUE (parmtypes) == integer_type_node
10321 && TYPE_USES_VIRTUAL_BASECLASSES (ctype))
10323 parmtypes = TREE_CHAIN (parmtypes);
10324 parmtype = TREE_VALUE (parmtypes);
10327 if (TREE_CODE (parmtype) == REFERENCE_TYPE
10328 && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype)
10330 if (TREE_CHAIN (parmtypes) == NULL_TREE
10331 || TREE_CHAIN (parmtypes) == void_list_node
10332 || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
10334 TYPE_HAS_INIT_REF (ctype) = 1;
10335 if (TYPE_READONLY (TREE_TYPE (parmtype)))
10336 TYPE_HAS_CONST_INIT_REF (ctype) = 1;
10338 else
10339 TYPE_GETS_INIT_AGGR (ctype) = 1;
10341 else if (TYPE_MAIN_VARIANT (parmtype) == ctype)
10343 if (TREE_CHAIN (parmtypes) != NULL_TREE
10344 && TREE_CHAIN (parmtypes) == void_list_node)
10346 cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
10347 ctype, ctype);
10348 SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
10350 return 0;
10352 else
10353 TYPE_GETS_INIT_AGGR (ctype) = 1;
10355 else if (TREE_CODE (parmtype) == VOID_TYPE
10356 || TREE_PURPOSE (parmtypes) != NULL_TREE)
10357 TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
10359 return 1;
10362 /* An operator with this name can be either unary or binary. */
10364 static int
10365 ambi_op_p (name)
10366 tree name;
10368 return (name == ansi_opname [(int) INDIRECT_REF]
10369 || name == ansi_opname [(int) ADDR_EXPR]
10370 || name == ansi_opname [(int) NEGATE_EXPR]
10371 || name == ansi_opname[(int) POSTINCREMENT_EXPR]
10372 || name == ansi_opname[(int) POSTDECREMENT_EXPR]
10373 || name == ansi_opname [(int) CONVERT_EXPR]);
10376 /* An operator with this name can only be unary. */
10378 static int
10379 unary_op_p (name)
10380 tree name;
10382 return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
10383 || name == ansi_opname [(int) BIT_NOT_EXPR]
10384 || name == ansi_opname [(int) COMPONENT_REF]
10385 || OPERATOR_TYPENAME_P (name));
10388 /* Do a little sanity-checking on how they declared their operator. */
10390 void
10391 grok_op_properties (decl, virtualp, friendp)
10392 tree decl;
10393 int virtualp, friendp;
10395 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
10396 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
10397 tree name = DECL_NAME (decl);
10399 if (current_class_type == NULL_TREE)
10400 friendp = 1;
10402 if (! friendp)
10404 if (name == ansi_opname[(int) MODIFY_EXPR])
10405 TYPE_HAS_ASSIGNMENT (current_class_type) = 1;
10406 else if (name == ansi_opname[(int) CALL_EXPR])
10407 TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
10408 else if (name == ansi_opname[(int) ARRAY_REF])
10409 TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
10410 else if (name == ansi_opname[(int) COMPONENT_REF]
10411 || name == ansi_opname[(int) MEMBER_REF])
10412 TYPE_OVERLOADS_ARROW (current_class_type) = 1;
10413 else if (name == ansi_opname[(int) NEW_EXPR])
10414 TYPE_GETS_NEW (current_class_type) |= 1;
10415 else if (name == ansi_opname[(int) DELETE_EXPR])
10416 TYPE_GETS_DELETE (current_class_type) |= 1;
10417 else if (name == ansi_opname[(int) VEC_NEW_EXPR])
10418 TYPE_GETS_NEW (current_class_type) |= 2;
10419 else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
10420 TYPE_GETS_DELETE (current_class_type) |= 2;
10423 if (name == ansi_opname[(int) NEW_EXPR]
10424 || name == ansi_opname[(int) VEC_NEW_EXPR])
10426 /* When the compiler encounters the definition of A::operator new, it
10427 doesn't look at the class declaration to find out if it's static. */
10428 if (methodp)
10429 revert_static_member_fn (&decl, NULL, NULL);
10431 /* Take care of function decl if we had syntax errors. */
10432 if (argtypes == NULL_TREE)
10433 TREE_TYPE (decl)
10434 = build_function_type (ptr_type_node,
10435 hash_tree_chain (integer_type_node,
10436 void_list_node));
10437 else
10438 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
10440 else if (name == ansi_opname[(int) DELETE_EXPR]
10441 || name == ansi_opname[(int) VEC_DELETE_EXPR])
10443 if (methodp)
10444 revert_static_member_fn (&decl, NULL, NULL);
10446 if (argtypes == NULL_TREE)
10447 TREE_TYPE (decl)
10448 = build_function_type (void_type_node,
10449 hash_tree_chain (ptr_type_node,
10450 void_list_node));
10451 else
10453 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
10455 if (! friendp && name == ansi_opname[(int) VEC_DELETE_EXPR]
10456 && (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
10457 != void_list_node))
10458 TYPE_VEC_DELETE_TAKES_SIZE (current_class_type) = 1;
10461 else
10463 /* An operator function must either be a non-static member function
10464 or have at least one parameter of a class, a reference to a class,
10465 an enumeration, or a reference to an enumeration. 13.4.0.6 */
10466 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
10468 if (OPERATOR_TYPENAME_P (name)
10469 || name == ansi_opname[(int) CALL_EXPR]
10470 || name == ansi_opname[(int) MODIFY_EXPR]
10471 || name == ansi_opname[(int) COMPONENT_REF]
10472 || name == ansi_opname[(int) ARRAY_REF])
10473 cp_error ("`%D' must be a nonstatic member function", decl);
10474 else
10476 tree p = argtypes;
10478 if (DECL_STATIC_FUNCTION_P (decl))
10479 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
10481 if (p)
10482 for (; TREE_VALUE (p) != void_type_node ; p = TREE_CHAIN (p))
10484 tree arg = TREE_VALUE (p);
10485 if (TREE_CODE (arg) == REFERENCE_TYPE)
10486 arg = TREE_TYPE (arg);
10488 /* This lets bad template code slip through. */
10489 if (IS_AGGR_TYPE (arg)
10490 || TREE_CODE (arg) == ENUMERAL_TYPE
10491 || TREE_CODE (arg) == TEMPLATE_TYPE_PARM)
10492 goto foundaggr;
10494 cp_error
10495 ("`%D' must have an argument of class or enumerated type",
10496 decl);
10497 foundaggr:
10502 if (name == ansi_opname[(int) CALL_EXPR]
10503 || name == ansi_opname[(int) METHOD_CALL_EXPR])
10504 return; /* no restrictions on args */
10506 if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
10508 tree t = TREE_TYPE (name);
10509 if (TREE_CODE (t) == VOID_TYPE)
10510 pedwarn ("void is not a valid type conversion operator");
10511 else if (! friendp)
10513 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
10514 char *what = 0;
10515 if (ref)
10516 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
10518 if (t == current_class_type)
10519 what = "the same type";
10520 /* Don't force t to be complete here. */
10521 else if (IS_AGGR_TYPE (t)
10522 && TYPE_SIZE (t)
10523 && DERIVED_FROM_P (t, current_class_type))
10524 what = "a base class";
10526 if (what)
10527 warning ("conversion to %s%s will never use a type conversion operator",
10528 ref ? "a reference to " : "", what);
10532 if (name == ansi_opname[(int) MODIFY_EXPR])
10534 tree parmtype;
10536 if (list_length (argtypes) != 3 && methodp)
10538 cp_error ("`%D' must take exactly one argument", decl);
10539 return;
10541 parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
10543 if (copy_assignment_arg_p (parmtype, virtualp)
10544 && ! friendp)
10546 TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
10547 if (TREE_CODE (parmtype) != REFERENCE_TYPE
10548 || TYPE_READONLY (TREE_TYPE (parmtype)))
10549 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
10552 else if (name == ansi_opname[(int) COND_EXPR])
10554 /* 13.4.0.3 */
10555 pedwarn ("ANSI C++ prohibits overloading operator ?:");
10556 if (list_length (argtypes) != 4)
10557 cp_error ("`%D' must take exactly three arguments", decl);
10559 else if (ambi_op_p (name))
10561 if (list_length (argtypes) == 2)
10562 /* prefix */;
10563 else if (list_length (argtypes) == 3)
10565 if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
10566 || name == ansi_opname[(int) POSTDECREMENT_EXPR])
10567 && ! processing_template_decl
10568 && TREE_VALUE (TREE_CHAIN (argtypes)) != integer_type_node)
10570 if (methodp)
10571 cp_error ("postfix `%D' must take `int' as its argument",
10572 decl);
10573 else
10574 cp_error
10575 ("postfix `%D' must take `int' as its second argument",
10576 decl);
10579 else
10581 if (methodp)
10582 cp_error ("`%D' must take either zero or one argument", decl);
10583 else
10584 cp_error ("`%D' must take either one or two arguments", decl);
10587 /* More Effective C++ rule 6. */
10588 if (warn_ecpp
10589 && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
10590 || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
10592 tree arg = TREE_VALUE (argtypes);
10593 tree ret = TREE_TYPE (TREE_TYPE (decl));
10594 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
10595 arg = TREE_TYPE (arg);
10596 arg = TYPE_MAIN_VARIANT (arg);
10597 if (list_length (argtypes) == 2)
10599 if (TREE_CODE (ret) != REFERENCE_TYPE
10600 || !comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
10601 arg, 1))
10602 cp_warning ("prefix `%D' should return `%T'", decl,
10603 build_reference_type (arg));
10605 else
10607 if (!comptypes (TYPE_MAIN_VARIANT (ret), arg, 1))
10608 cp_warning ("postfix `%D' should return `%T'", decl, arg);
10612 else if (unary_op_p (name))
10614 if (list_length (argtypes) != 2)
10616 if (methodp)
10617 cp_error ("`%D' must take `void'", decl);
10618 else
10619 cp_error ("`%D' must take exactly one argument", decl);
10622 else /* if (binary_op_p (name)) */
10624 if (list_length (argtypes) != 3)
10626 if (methodp)
10627 cp_error ("`%D' must take exactly one argument", decl);
10628 else
10629 cp_error ("`%D' must take exactly two arguments", decl);
10632 /* More Effective C++ rule 7. */
10633 if (warn_ecpp
10634 && (name == ansi_opname [TRUTH_ANDIF_EXPR]
10635 || name == ansi_opname [TRUTH_ORIF_EXPR]
10636 || name == ansi_opname [COMPOUND_EXPR]))
10637 cp_warning ("user-defined `%D' always evaluates both arguments",
10638 decl);
10641 /* Effective C++ rule 23. */
10642 if (warn_ecpp
10643 && list_length (argtypes) == 3
10644 && (name == ansi_opname [PLUS_EXPR]
10645 || name == ansi_opname [MINUS_EXPR]
10646 || name == ansi_opname [TRUNC_DIV_EXPR]
10647 || name == ansi_opname [MULT_EXPR])
10648 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
10649 cp_warning ("`%D' should return by value", decl);
10651 /* 13.4.0.8 */
10652 if (argtypes)
10653 for (; argtypes != void_list_node ; argtypes = TREE_CHAIN (argtypes))
10654 if (TREE_PURPOSE (argtypes))
10656 TREE_PURPOSE (argtypes) = NULL_TREE;
10657 if (name == ansi_opname[(int) POSTINCREMENT_EXPR]
10658 || name == ansi_opname[(int) POSTDECREMENT_EXPR])
10660 if (pedantic)
10661 cp_pedwarn ("`%D' cannot have default arguments", decl);
10663 else
10664 cp_error ("`%D' cannot have default arguments", decl);
10669 /* Get the struct, enum or union (CODE says which) with tag NAME.
10670 Define the tag as a forward-reference if it is not defined.
10672 C++: If a class derivation is given, process it here, and report
10673 an error if multiple derivation declarations are not identical.
10675 If this is a definition, come in through xref_tag and only look in
10676 the current frame for the name (since C++ allows new names in any
10677 scope.) */
10679 tree
10680 xref_tag (code_type_node, name, binfo, globalize)
10681 tree code_type_node;
10682 tree name, binfo;
10683 int globalize;
10685 enum tag_types tag_code;
10686 enum tree_code code;
10687 int temp = 0;
10688 register tree ref, t;
10689 struct binding_level *b = inner_binding_level;
10690 int got_type = 0;
10692 tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
10693 switch (tag_code)
10695 case record_type:
10696 case class_type:
10697 case signature_type:
10698 code = RECORD_TYPE;
10699 break;
10700 case union_type:
10701 code = UNION_TYPE;
10702 break;
10703 case enum_type:
10704 code = ENUMERAL_TYPE;
10705 break;
10706 default:
10707 my_friendly_abort (18);
10710 /* If a cross reference is requested, look up the type
10711 already defined for this tag and return it. */
10712 if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
10714 t = name;
10715 name = TYPE_IDENTIFIER (t);
10716 got_type = 1;
10718 else
10719 t = IDENTIFIER_TYPE_VALUE (name);
10720 if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM)
10721 t = NULL_TREE;
10723 if (! globalize)
10725 if (pedantic && t && TREE_CODE (t) == TEMPLATE_TYPE_PARM)
10727 cp_pedwarn ("redeclaration of template type-parameter `%T'", name);
10728 cp_pedwarn_at (" previously declared here", t);
10730 if (t && TYPE_CONTEXT (t) && got_type)
10731 ref = t;
10732 else
10734 /* If we know we are defining this tag, only look it up in
10735 this scope and don't try to find it as a type. */
10736 ref = lookup_tag (code, name, b, 1);
10739 else
10741 if (t)
10742 ref = t;
10743 else
10744 ref = lookup_tag (code, name, b, 0);
10746 if (! ref)
10748 /* Try finding it as a type declaration. If that wins, use it. */
10749 ref = lookup_name (name, 1);
10750 if (ref && TREE_CODE (ref) == TYPE_DECL
10751 && TREE_CODE (TREE_TYPE (ref)) == code)
10752 ref = TREE_TYPE (ref);
10753 else
10754 ref = NULL_TREE;
10758 push_obstacks_nochange ();
10760 if (! ref)
10762 /* If no such tag is yet defined, create a forward-reference node
10763 and record it as the "definition".
10764 When a real declaration of this type is found,
10765 the forward-reference will be altered into a real type. */
10767 /* In C++, since these migrate into the global scope, we must
10768 build them on the permanent obstack. */
10770 temp = allocation_temporary_p ();
10771 if (temp)
10772 end_temporary_allocation ();
10774 if (code == ENUMERAL_TYPE)
10776 cp_error ("use of enum `%#D' without previous declaration", name);
10778 ref = make_node (ENUMERAL_TYPE);
10780 /* Give the type a default layout like unsigned int
10781 to avoid crashing if it does not get defined. */
10782 TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
10783 TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
10784 TREE_UNSIGNED (ref) = 1;
10785 TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
10786 TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
10787 TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
10789 /* Enable us to recognize when a type is created in class context.
10790 To do nested classes correctly, this should probably be cleared
10791 out when we leave this classes scope. Currently this in only
10792 done in `start_enum'. */
10794 pushtag (name, ref, globalize);
10796 else
10798 struct binding_level *old_b = class_binding_level;
10800 ref = make_lang_type (code);
10802 if (tag_code == signature_type)
10804 SET_SIGNATURE (ref);
10805 /* Since a signature type will be turned into the type
10806 of signature tables, it's not only an interface. */
10807 CLASSTYPE_INTERFACE_ONLY (ref) = 0;
10808 SET_CLASSTYPE_INTERFACE_KNOWN (ref);
10809 /* A signature doesn't have a vtable. */
10810 CLASSTYPE_VTABLE_NEEDS_WRITING (ref) = 0;
10813 #ifdef NONNESTED_CLASSES
10814 /* Class types don't nest the way enums do. */
10815 class_binding_level = (struct binding_level *)0;
10816 #endif
10817 pushtag (name, ref, globalize);
10818 class_binding_level = old_b;
10821 else
10823 /* If it no longer looks like a nested type, make sure it's
10824 in global scope. */
10825 if (b == global_binding_level && !class_binding_level
10826 && IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
10827 IDENTIFIER_GLOBAL_VALUE (name) = TYPE_NAME (ref);
10830 if (binfo)
10831 xref_basetypes (code_type_node, name, ref, binfo);
10833 just_return:
10835 /* Until the type is defined, tentatively accept whatever
10836 structure tag the user hands us. */
10837 if (TYPE_SIZE (ref) == NULL_TREE
10838 && ref != current_class_type
10839 /* Have to check this, in case we have contradictory tag info. */
10840 && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
10842 if (tag_code == class_type)
10843 CLASSTYPE_DECLARED_CLASS (ref) = 1;
10844 else if (tag_code == record_type || tag_code == signature_type)
10845 CLASSTYPE_DECLARED_CLASS (ref) = 0;
10848 pop_obstacks ();
10850 return ref;
10853 tree
10854 xref_tag_from_type (old, id, globalize)
10855 tree old, id;
10856 int globalize;
10858 tree code_type_node;
10860 if (TREE_CODE (old) == RECORD_TYPE)
10861 code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
10862 ? class_type_node : record_type_node);
10863 else
10864 code_type_node = union_type_node;
10866 if (id == NULL_TREE)
10867 id = TYPE_IDENTIFIER (old);
10869 return xref_tag (code_type_node, id, NULL_TREE, globalize);
10872 void
10873 xref_basetypes (code_type_node, name, ref, binfo)
10874 tree code_type_node;
10875 tree name, ref;
10876 tree binfo;
10878 /* In the declaration `A : X, Y, ... Z' we mark all the types
10879 (A, X, Y, ..., Z) so we can check for duplicates. */
10880 tree binfos;
10881 int i, len;
10882 enum tag_types tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
10884 if (tag_code == union_type)
10886 cp_error ("derived union `%T' invalid", ref);
10887 return;
10890 len = list_length (binfo);
10891 push_obstacks (TYPE_OBSTACK (ref), TYPE_OBSTACK (ref));
10893 SET_CLASSTYPE_MARKED (ref);
10894 BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
10896 for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
10898 /* The base of a derived struct is public by default. */
10899 int via_public
10900 = (TREE_PURPOSE (binfo) == access_public_node
10901 || TREE_PURPOSE (binfo) == access_public_virtual_node
10902 || (tag_code != class_type
10903 && (TREE_PURPOSE (binfo) == access_default_node
10904 || TREE_PURPOSE (binfo) == access_default_virtual_node)));
10905 int via_protected = TREE_PURPOSE (binfo) == access_protected_node;
10906 int via_virtual
10907 = (TREE_PURPOSE (binfo) == access_private_virtual_node
10908 || TREE_PURPOSE (binfo) == access_public_virtual_node
10909 || TREE_PURPOSE (binfo) == access_default_virtual_node);
10910 tree basetype = TREE_VALUE (binfo);
10911 tree base_binfo;
10913 GNU_xref_hier (IDENTIFIER_POINTER (name),
10914 IDENTIFIER_POINTER (TREE_VALUE (binfo)),
10915 via_public, via_virtual, 0);
10917 if (basetype && TREE_CODE (basetype) == TYPE_DECL)
10918 basetype = TREE_TYPE (basetype);
10919 if (!basetype
10920 || (TREE_CODE (basetype) != RECORD_TYPE
10921 && TREE_CODE (basetype) != TYPENAME_TYPE
10922 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM))
10924 cp_error ("base type `%T' fails to be a struct or class type",
10925 TREE_VALUE (binfo));
10926 continue;
10928 #if 1
10929 /* This code replaces similar code in layout_basetypes. */
10930 else if (TYPE_SIZE (complete_type (basetype)) == NULL_TREE
10931 && ! (current_template_parms && uses_template_parms (basetype)))
10933 cp_error ("base class `%T' has incomplete type", basetype);
10934 continue;
10936 #endif
10937 else
10939 if (CLASSTYPE_MARKED (basetype))
10941 if (basetype == ref)
10942 cp_error ("recursive type `%T' undefined", basetype);
10943 else
10944 cp_error ("duplicate base type `%T' invalid", basetype);
10945 continue;
10948 /* Note that the BINFO records which describe individual
10949 inheritances are *not* shared in the lattice! They
10950 cannot be shared because a given baseclass may be
10951 inherited with different `accessibility' by different
10952 derived classes. (Each BINFO record describing an
10953 individual inheritance contains flags which say what
10954 the `accessibility' of that particular inheritance is.) */
10956 base_binfo = make_binfo (integer_zero_node, basetype,
10957 TYPE_BINFO_VTABLE (basetype),
10958 TYPE_BINFO_VIRTUALS (basetype), NULL_TREE);
10960 TREE_VEC_ELT (binfos, i) = base_binfo;
10961 TREE_VIA_PUBLIC (base_binfo) = via_public;
10962 TREE_VIA_PROTECTED (base_binfo) = via_protected;
10963 TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
10964 BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
10966 SET_CLASSTYPE_MARKED (basetype);
10968 /* We are free to modify these bits because they are meaningless
10969 at top level, and BASETYPE is a top-level type. */
10970 if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
10972 TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
10973 TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
10976 TYPE_OVERLOADS_METHOD_CALL_EXPR (ref) |= TYPE_OVERLOADS_METHOD_CALL_EXPR (basetype);
10977 TYPE_GETS_NEW (ref) |= TYPE_GETS_NEW (basetype);
10978 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
10979 CLASSTYPE_LOCAL_TYPEDECLS (ref) |= CLASSTYPE_LOCAL_TYPEDECLS (basetype);
10980 i += 1;
10983 if (i)
10984 TREE_VEC_LENGTH (binfos) = i;
10985 else
10986 BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
10988 if (i > 1)
10989 TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
10990 else if (i == 1)
10991 TYPE_USES_MULTIPLE_INHERITANCE (ref)
10992 = TYPE_USES_MULTIPLE_INHERITANCE (BINFO_TYPE (TREE_VEC_ELT (binfos, 0)));
10993 if (TYPE_USES_MULTIPLE_INHERITANCE (ref))
10994 TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
10996 /* Unmark all the types. */
10997 while (--i >= 0)
10998 CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
10999 CLEAR_CLASSTYPE_MARKED (ref);
11001 pop_obstacks ();
11005 tree current_local_enum = NULL_TREE;
11007 /* Begin compiling the definition of an enumeration type.
11008 NAME is its name (or null if anonymous).
11009 Returns the type object, as yet incomplete.
11010 Also records info about it so that build_enumerator
11011 may be used to declare the individual values as they are read. */
11013 tree
11014 start_enum (name)
11015 tree name;
11017 register tree enumtype = NULL_TREE;
11018 struct binding_level *b = inner_binding_level;
11020 if (processing_template_decl && current_function_decl)
11021 end_temporary_allocation ();
11023 /* If this is the real definition for a previous forward reference,
11024 fill in the contents in the same object that used to be the
11025 forward reference. */
11027 if (name != NULL_TREE)
11028 enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
11030 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
11031 cp_error ("multiple definition of `%#T'", enumtype);
11032 else
11034 enumtype = make_node (ENUMERAL_TYPE);
11035 pushtag (name, enumtype, 0);
11038 if (b->pseudo_global)
11039 cp_error ("template declaration of `%#T'", enumtype);
11041 if (current_class_type)
11042 TREE_ADDRESSABLE (b->tags) = 1;
11044 current_local_enum = NULL_TREE;
11046 /* We don't copy this value because build_enumerator needs to do it. */
11047 enum_next_value = integer_zero_node;
11048 enum_overflow = 0;
11050 GNU_xref_decl (current_function_decl, enumtype);
11051 return enumtype;
11054 /* After processing and defining all the values of an enumeration type,
11055 install their decls in the enumeration type and finish it off.
11056 ENUMTYPE is the type object and VALUES a list of name-value pairs.
11057 Returns ENUMTYPE. */
11059 tree
11060 finish_enum (enumtype, values)
11061 register tree enumtype, values;
11063 register tree minnode, maxnode;
11064 /* Calculate the maximum value of any enumerator in this type. */
11066 if (values)
11068 register tree pair;
11069 register tree value = DECL_INITIAL (TREE_VALUE (values));
11071 if (! processing_template_decl)
11073 /* Speed up the main loop by performing some precalculations */
11074 TREE_TYPE (TREE_VALUE (values)) = enumtype;
11075 TREE_TYPE (value) = enumtype;
11076 minnode = maxnode = value;
11078 TREE_VALUE (values) = value;
11080 for (pair = TREE_CHAIN (values); pair; pair = TREE_CHAIN (pair))
11082 value = DECL_INITIAL (TREE_VALUE (pair));
11083 if (! processing_template_decl)
11085 TREE_TYPE (TREE_VALUE (pair)) = enumtype;
11086 TREE_TYPE (value) = enumtype;
11087 if (tree_int_cst_lt (maxnode, value))
11088 maxnode = value;
11089 else if (tree_int_cst_lt (value, minnode))
11090 minnode = value;
11092 TREE_VALUE (pair) = value;
11095 else
11096 maxnode = minnode = integer_zero_node;
11098 TYPE_VALUES (enumtype) = nreverse (values);
11100 if (processing_template_decl)
11102 if (current_function_decl)
11104 add_tree (build_min (TAG_DEFN, enumtype));
11105 resume_temporary_allocation ();
11107 return enumtype;
11111 int unsignedp = tree_int_cst_sgn (minnode) >= 0;
11112 int lowprec = min_precision (minnode, unsignedp);
11113 int highprec = min_precision (maxnode, unsignedp);
11114 int precision = MAX (lowprec, highprec);
11116 TYPE_SIZE (enumtype) = NULL_TREE;
11118 /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'. */
11120 TYPE_PRECISION (enumtype) = precision;
11121 if (unsignedp)
11122 fixup_unsigned_type (enumtype);
11123 else
11124 fixup_signed_type (enumtype);
11126 if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
11127 /* Use the width of the narrowest normal C type which is wide enough. */
11128 TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
11129 (precision, 1));
11130 else
11131 TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
11133 TYPE_SIZE (enumtype) = 0;
11134 layout_type (enumtype);
11138 register tree tem;
11140 /* Fix up all variant types of this enum type. */
11141 for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
11142 tem = TYPE_NEXT_VARIANT (tem))
11144 TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
11145 TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
11146 TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
11147 TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
11148 TYPE_MODE (tem) = TYPE_MODE (enumtype);
11149 TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
11150 TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
11151 TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
11155 /* Finish debugging output for this type. */
11156 rest_of_type_compilation (enumtype, global_bindings_p ());
11158 return enumtype;
11161 /* Build and install a CONST_DECL for one value of the
11162 current enumeration type (one that was begun with start_enum).
11163 Return a tree-list containing the name and its value.
11164 Assignment of sequential values by default is handled here. */
11166 tree
11167 build_enumerator (name, value)
11168 tree name, value;
11170 tree decl, result;
11172 /* Remove no-op casts from the value. */
11173 if (value)
11174 STRIP_TYPE_NOPS (value);
11176 if (! processing_template_decl)
11178 /* Validate and default VALUE. */
11179 if (value != NULL_TREE)
11181 if (TREE_READONLY_DECL_P (value))
11182 value = decl_constant_value (value);
11184 if (TREE_CODE (value) == INTEGER_CST)
11186 value = default_conversion (value);
11187 constant_expression_warning (value);
11189 else
11191 cp_error ("enumerator value for `%D' not integer constant", name);
11192 value = NULL_TREE;
11196 /* Default based on previous value. */
11197 if (value == NULL_TREE && ! processing_template_decl)
11199 value = enum_next_value;
11200 if (enum_overflow)
11201 cp_error ("overflow in enumeration values at `%D'", name);
11204 /* Remove no-op casts from the value. */
11205 if (value)
11206 STRIP_TYPE_NOPS (value);
11208 /* We have to always copy here; not all INTEGER_CSTs are unshared,
11209 and there's no wedding ring. Look at size_int()...*/
11210 value = copy_node (value);
11211 #if 0
11212 /* To fix MAX_VAL enum consts. (bkoz) */
11213 TREE_TYPE (value) = integer_type_node;
11214 #endif
11217 /* C++ associates enums with global, function, or class declarations. */
11219 decl = current_scope ();
11220 if (decl && decl == current_class_type)
11222 /* This enum declaration is local to the class, so we must put
11223 it in that class's list of decls. */
11224 decl = build_lang_field_decl (CONST_DECL, name, integer_type_node);
11225 DECL_INITIAL (decl) = value;
11226 TREE_READONLY (decl) = 1;
11227 pushdecl_class_level (decl);
11228 TREE_CHAIN (decl) = current_local_enum;
11229 current_local_enum = decl;
11231 else
11233 /* It's a global enum, or it's local to a function. (Note local to
11234 a function could mean local to a class method. */
11235 decl = build_decl (CONST_DECL, name, integer_type_node);
11236 DECL_INITIAL (decl) = value;
11237 TREE_READONLY (decl) = 1;
11239 pushdecl (decl);
11240 GNU_xref_decl (current_function_decl, decl);
11243 if (! processing_template_decl)
11245 /* Set basis for default for next value. */
11246 enum_next_value = build_binary_op_nodefault (PLUS_EXPR, value,
11247 integer_one_node, PLUS_EXPR);
11248 enum_overflow = tree_int_cst_lt (enum_next_value, value);
11251 result = saveable_tree_cons (name, decl, NULL_TREE);
11252 return result;
11255 tree
11256 grok_enum_decls (type, decl)
11257 tree type, decl;
11259 tree d = current_local_enum;
11261 if (d == NULL_TREE)
11262 return decl;
11264 while (1)
11266 TREE_TYPE (d) = type;
11267 if (TREE_CHAIN (d) == NULL_TREE)
11269 TREE_CHAIN (d) = decl;
11270 break;
11272 d = TREE_CHAIN (d);
11275 decl = current_local_enum;
11276 current_local_enum = NULL_TREE;
11278 return decl;
11281 static int function_depth;
11283 /* Create the FUNCTION_DECL for a function definition.
11284 DECLSPECS and DECLARATOR are the parts of the declaration;
11285 they describe the function's name and the type it returns,
11286 but twisted together in a fashion that parallels the syntax of C.
11288 This function creates a binding context for the function body
11289 as well as setting up the FUNCTION_DECL in current_function_decl.
11291 Returns 1 on success. If the DECLARATOR is not suitable for a function
11292 (it defines a datum instead), we return 0, which tells
11293 yyparse to report a parse error.
11295 For C++, we must first check whether that datum makes any sense.
11296 For example, "class A local_a(1,2);" means that variable local_a
11297 is an aggregate of type A, which should have a constructor
11298 applied to it with the argument list [1, 2].
11300 @@ There is currently no way to retrieve the storage
11301 @@ allocated to FUNCTION (or all of its parms) if we return
11302 @@ something we had previously. */
11305 start_function (declspecs, declarator, attrs, pre_parsed_p)
11306 tree declspecs, declarator, attrs;
11307 int pre_parsed_p;
11309 tree decl1;
11310 tree ctype = NULL_TREE;
11311 tree fntype;
11312 tree restype;
11313 extern int have_extern_spec;
11314 extern int used_extern_spec;
11315 int doing_friend = 0;
11317 /* Sanity check. */
11318 my_friendly_assert (TREE_VALUE (void_list_node) == void_type_node, 160);
11319 my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
11321 /* Assume, until we see it does. */
11322 current_function_returns_value = 0;
11323 current_function_returns_null = 0;
11324 warn_about_return_type = 0;
11325 named_labels = 0;
11326 shadowed_labels = 0;
11327 current_function_assigns_this = 0;
11328 current_function_just_assigned_this = 0;
11329 current_function_parms_stored = 0;
11330 original_result_rtx = NULL_RTX;
11331 base_init_expr = NULL_TREE;
11332 current_base_init_list = NULL_TREE;
11333 current_member_init_list = NULL_TREE;
11334 ctor_label = dtor_label = NULL_TREE;
11335 static_labelno = 0;
11337 clear_temp_name ();
11339 /* This should only be done once on the top most decl. */
11340 if (have_extern_spec && !used_extern_spec)
11342 declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
11343 used_extern_spec = 1;
11346 if (pre_parsed_p)
11348 decl1 = declarator;
11350 if (! DECL_ARGUMENTS (decl1)
11351 && !DECL_STATIC_FUNCTION_P (decl1)
11352 && DECL_CONTEXT (decl1)
11353 && TYPE_IDENTIFIER (DECL_CONTEXT (decl1))
11354 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (DECL_CONTEXT (decl1))))
11356 cp_error ("redeclaration of `%#D'", decl1);
11357 if (IDENTIFIER_CLASS_VALUE (DECL_NAME (decl1)))
11358 cp_error_at ("previous declaration here", IDENTIFIER_CLASS_VALUE (DECL_NAME (decl1)));
11359 else if (IDENTIFIER_GLOBAL_VALUE (DECL_NAME (decl1)))
11360 cp_error_at ("previous declaration here", IDENTIFIER_GLOBAL_VALUE (DECL_NAME (decl1)));
11363 fntype = TREE_TYPE (decl1);
11364 if (TREE_CODE (fntype) == METHOD_TYPE)
11365 ctype = TYPE_METHOD_BASETYPE (fntype);
11367 /* ANSI C++ June 5 1992 WP 11.4.5. A friend function defined in a
11368 class is in the (lexical) scope of the class in which it is
11369 defined. */
11370 if (!ctype && DECL_FRIEND_P (decl1))
11372 ctype = DECL_CLASS_CONTEXT (decl1);
11374 /* CTYPE could be null here if we're dealing with a template;
11375 for example, `inline friend float foo()' inside a template
11376 will have no CTYPE set. */
11377 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
11378 ctype = NULL_TREE;
11379 else
11380 doing_friend = 1;
11383 /* In a fcn definition, arg types must be complete. */
11384 require_complete_types_for_parms (DECL_ARGUMENTS (decl1));
11386 /* In case some arg types were completed since the declaration was
11387 parsed, fix up the decls. */
11389 tree t = DECL_ARGUMENTS (decl1);
11390 for (; t; t = TREE_CHAIN (t))
11391 layout_decl (t, 0);
11394 last_function_parms = DECL_ARGUMENTS (decl1);
11395 last_function_parm_tags = NULL_TREE;
11397 else
11399 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
11400 /* If the declarator is not suitable for a function definition,
11401 cause a syntax error. */
11402 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
11404 fntype = TREE_TYPE (decl1);
11406 restype = TREE_TYPE (fntype);
11407 if (IS_AGGR_TYPE (restype) && ! TYPE_PTRMEMFUNC_P (restype)
11408 && ! CLASSTYPE_GOT_SEMICOLON (restype))
11410 cp_error ("semicolon missing after declaration of `%#T'", restype);
11411 shadow_tag (build_expr_list (NULL_TREE, restype));
11412 CLASSTYPE_GOT_SEMICOLON (restype) = 1;
11413 if (TREE_CODE (fntype) == FUNCTION_TYPE)
11414 fntype = build_function_type (integer_type_node,
11415 TYPE_ARG_TYPES (fntype));
11416 else
11417 fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
11418 integer_type_node,
11419 TYPE_ARG_TYPES (fntype));
11420 TREE_TYPE (decl1) = fntype;
11423 if (TREE_CODE (fntype) == METHOD_TYPE)
11424 ctype = TYPE_METHOD_BASETYPE (fntype);
11425 else if (IDENTIFIER_LENGTH (DECL_NAME (decl1)) == 4
11426 && ! strcmp (IDENTIFIER_POINTER (DECL_NAME (decl1)), "main")
11427 && DECL_CONTEXT (decl1) == NULL_TREE)
11429 /* If this doesn't return integer_type, complain. */
11430 if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
11432 if (pedantic || warn_return_type)
11433 pedwarn ("return type for `main' changed to `int'");
11434 TREE_TYPE (decl1) = fntype = default_function_type;
11436 warn_about_return_type = 0;
11440 /* Warn if function was previously implicitly declared
11441 (but not if we warned then). */
11442 if (! warn_implicit
11443 && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
11444 cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
11446 current_function_decl = decl1;
11447 /* Save the parm names or decls from this function's declarator
11448 where store_parm_decls will find them. */
11449 current_function_parms = last_function_parms;
11450 current_function_parm_tags = last_function_parm_tags;
11452 announce_function (decl1);
11454 if (! processing_template_decl)
11456 if (TYPE_SIZE (complete_type (TREE_TYPE (fntype))) == NULL_TREE)
11458 cp_error ("return-type `%#T' is an incomplete type",
11459 TREE_TYPE (fntype));
11461 /* Make it return void instead, but don't change the
11462 type of the DECL_RESULT, in case we have a named return value. */
11463 if (ctype)
11464 TREE_TYPE (decl1)
11465 = build_cplus_method_type (build_type_variant (ctype,
11466 TREE_READONLY (decl1),
11467 TREE_SIDE_EFFECTS (decl1)),
11468 void_type_node,
11469 FUNCTION_ARG_CHAIN (decl1));
11470 else
11471 TREE_TYPE (decl1)
11472 = build_function_type (void_type_node,
11473 TYPE_ARG_TYPES (TREE_TYPE (decl1)));
11474 DECL_RESULT (decl1)
11475 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (TREE_TYPE (fntype)));
11476 TREE_READONLY (DECL_RESULT (decl1)) = TYPE_READONLY (TREE_TYPE (fntype));
11477 TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = TYPE_VOLATILE (TREE_TYPE (fntype));
11480 if (TYPE_LANG_SPECIFIC (TREE_TYPE (fntype))
11481 && CLASSTYPE_ABSTRACT_VIRTUALS (TREE_TYPE (fntype)))
11482 abstract_virtuals_error (decl1, TREE_TYPE (fntype));
11485 if (warn_about_return_type)
11486 pedwarn ("return-type defaults to `int'");
11488 /* Effective C++ rule 15. See also c_expand_return. */
11489 if (warn_ecpp
11490 && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
11491 && TREE_TYPE (fntype) == void_type_node)
11492 cp_warning ("`operator=' should return a reference to `*this'");
11494 /* Make the init_value nonzero so pushdecl knows this is not tentative.
11495 error_mark_node is replaced below (in poplevel) with the BLOCK. */
11496 DECL_INITIAL (decl1) = error_mark_node;
11498 /* This function exists in static storage.
11499 (This does not mean `static' in the C sense!) */
11500 TREE_STATIC (decl1) = 1;
11502 /* Record the decl so that the function name is defined.
11503 If we already have a decl for this name, and it is a FUNCTION_DECL,
11504 use the old decl. */
11506 if (processing_template_decl)
11507 push_template_decl (decl1);
11508 else if (pre_parsed_p == 0)
11510 decl1 = pushdecl (decl1);
11511 DECL_MAIN_VARIANT (decl1) = decl1;
11512 fntype = TREE_TYPE (decl1);
11515 current_function_decl = decl1;
11517 if (DECL_INTERFACE_KNOWN (decl1))
11519 if (DECL_NOT_REALLY_EXTERN (decl1))
11520 DECL_EXTERNAL (decl1) = 0;
11522 /* If this function belongs to an interface, it is public.
11523 If it belongs to someone else's interface, it is also external.
11524 It doesn't matter whether it's inline or not. */
11525 else if (interface_unknown == 0
11526 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
11527 || flag_alt_external_templates))
11529 if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
11530 || processing_template_decl)
11531 DECL_EXTERNAL (decl1)
11532 = (interface_only
11533 || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines));
11534 else
11535 DECL_EXTERNAL (decl1) = 0;
11536 DECL_NOT_REALLY_EXTERN (decl1) = 0;
11537 DECL_INTERFACE_KNOWN (decl1) = 1;
11539 else
11541 /* This is a definition, not a reference.
11542 So clear DECL_EXTERNAL. */
11543 DECL_EXTERNAL (decl1) = 0;
11545 if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
11546 && ! DECL_INTERFACE_KNOWN (decl1)
11547 /* Don't try to defer nested functions for now. */
11548 && ! hack_decl_function_context (decl1))
11549 DECL_DEFER_OUTPUT (decl1) = 1;
11550 else
11551 DECL_INTERFACE_KNOWN (decl1) = 1;
11554 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1))
11556 if (TREE_CODE (fntype) == METHOD_TYPE)
11557 TREE_TYPE (decl1) = fntype
11558 = build_function_type (TREE_TYPE (fntype),
11559 TREE_CHAIN (TYPE_ARG_TYPES (fntype)));
11560 current_function_parms = TREE_CHAIN (current_function_parms);
11561 DECL_ARGUMENTS (decl1) = current_function_parms;
11562 ctype = NULL_TREE;
11564 restype = TREE_TYPE (fntype);
11566 if (ctype)
11568 push_nested_class (ctype, 1);
11570 /* If we're compiling a friend function, neither of the variables
11571 current_class_ptr nor current_class_type will have values. */
11572 if (! doing_friend)
11574 /* We know that this was set up by `grokclassfn'.
11575 We do not wait until `store_parm_decls', since evil
11576 parse errors may never get us to that point. Here
11577 we keep the consistency between `current_class_type'
11578 and `current_class_ptr'. */
11579 tree t = current_function_parms;
11581 my_friendly_assert (t != NULL_TREE
11582 && TREE_CODE (t) == PARM_DECL, 162);
11584 if (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE)
11586 int i = suspend_momentary ();
11588 /* Fool build_indirect_ref. */
11589 current_class_ptr = NULL_TREE;
11590 current_class_ref = build_indirect_ref (t, NULL_PTR);
11591 current_class_ptr = t;
11592 resume_momentary (i);
11594 else
11595 /* We're having a signature pointer here. */
11596 current_class_ref = current_class_ptr = t;
11600 else
11602 if (DECL_STATIC_FUNCTION_P (decl1))
11603 push_nested_class (DECL_CONTEXT (decl1), 2);
11604 else
11605 push_memoized_context (0, 1);
11606 current_class_ptr = current_class_ref = NULL_TREE;
11609 pushlevel (0);
11610 current_binding_level->parm_flag = 1;
11612 GNU_xref_function (decl1, current_function_parms);
11614 if (attrs)
11615 cplus_decl_attributes (decl1, NULL_TREE, attrs);
11616 make_function_rtl (decl1);
11618 /* Promote the value to int before returning it. */
11619 if (C_PROMOTING_INTEGER_TYPE_P (restype))
11620 restype = type_promotes_to (restype);
11622 /* If this fcn was already referenced via a block-scope `extern' decl
11623 (or an implicit decl), propagate certain information about the usage. */
11624 if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
11625 TREE_ADDRESSABLE (decl1) = 1;
11627 if (DECL_RESULT (decl1) == NULL_TREE)
11629 DECL_RESULT (decl1)
11630 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
11631 TREE_READONLY (DECL_RESULT (decl1)) = TYPE_READONLY (restype);
11632 TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = TYPE_VOLATILE (restype);
11635 /* Allocate further tree nodes temporarily during compilation
11636 of this function only. Tiemann moved up here from bottom of fn. */
11637 temporary_allocation ();
11639 if (processing_template_decl)
11641 extern tree last_tree;
11642 ++minimal_parse_mode;
11643 last_tree = DECL_SAVED_TREE (decl1)
11644 = build_nt (EXPR_STMT, void_zero_node);
11647 ++function_depth;
11649 if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl1))
11650 && DECL_LANGUAGE (decl1) == lang_cplusplus)
11652 dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
11653 ctor_label = NULL_TREE;
11655 else
11657 dtor_label = NULL_TREE;
11658 if (DECL_CONSTRUCTOR_P (decl1))
11659 ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
11662 return 1;
11665 void
11666 store_after_parms (insns)
11667 rtx insns;
11669 rtx x;
11671 for (x = get_insns (); x; x = next_insn (x))
11673 if (GET_CODE (x) == NOTE && NOTE_LINE_NUMBER (x) == NOTE_INSN_FUNCTION_BEG)
11675 emit_insns_after (insns, x);
11676 return;
11679 #if 0
11680 /* This doesn't work, because the inline output routine doesn't reset
11681 last_parm_insn correctly for get_first_nonparm_insn () to work. */
11683 last_parm_insn = get_first_nonparm_insn ();
11684 if (last_parm_insn == NULL_RTX)
11685 emit_insns (insns);
11686 else
11687 emit_insns_before (insns, last_parm_insn);
11688 #endif
11691 void
11692 expand_start_early_try_stmts ()
11694 rtx insns;
11695 start_sequence ();
11696 expand_start_try_stmts ();
11697 insns = get_insns ();
11698 end_sequence ();
11699 #if 1
11700 emit_insns_after (insns, get_insns ());
11701 #else
11702 store_after_parms (insns);
11703 #endif
11706 /* Store the parameter declarations into the current function declaration.
11707 This is called after parsing the parameter declarations, before
11708 digesting the body of the function.
11710 Also install to binding contour return value identifier, if any. */
11712 void
11713 store_parm_decls ()
11715 register tree fndecl = current_function_decl;
11716 register tree parm;
11717 int parms_have_cleanups = 0;
11718 tree cleanups = NULL_TREE;
11720 /* This is either a chain of PARM_DECLs (when a prototype is used). */
11721 tree specparms = current_function_parms;
11723 /* This is a list of types declared among parms in a prototype. */
11724 tree parmtags = current_function_parm_tags;
11726 /* This is a chain of any other decls that came in among the parm
11727 declarations. If a parm is declared with enum {foo, bar} x;
11728 then CONST_DECLs for foo and bar are put here. */
11729 tree nonparms = NULL_TREE;
11731 if (toplevel_bindings_p ())
11732 fatal ("parse errors have confused me too much");
11734 /* Initialize RTL machinery. */
11735 init_function_start (fndecl, input_filename, lineno);
11737 /* Declare __FUNCTION__ and __PRETTY_FUNCTION__ for this function. */
11738 declare_function_name ();
11740 /* Create a binding level for the parms. */
11741 expand_start_bindings (0);
11743 if (specparms != NULL_TREE)
11745 /* This case is when the function was defined with an ANSI prototype.
11746 The parms already have decls, so we need not do anything here
11747 except record them as in effect
11748 and complain if any redundant old-style parm decls were written. */
11750 register tree next;
11752 /* Must clear this because it might contain TYPE_DECLs declared
11753 at class level. */
11754 storedecls (NULL_TREE);
11756 for (parm = nreverse (specparms); parm; parm = next)
11758 next = TREE_CHAIN (parm);
11759 if (TREE_CODE (parm) == PARM_DECL)
11761 tree cleanup;
11762 if (DECL_NAME (parm) == NULL_TREE)
11764 pushdecl (parm);
11766 else if (TYPE_MAIN_VARIANT (TREE_TYPE (parm)) == void_type_node)
11767 cp_error ("parameter `%D' declared void", parm);
11768 else
11770 /* Now fill in DECL_REFERENCE_SLOT for any of the parm decls.
11771 A parameter is assumed not to have any side effects.
11772 If this should change for any reason, then this
11773 will have to wrap the bashed reference type in a save_expr.
11775 Also, if the parameter type is declared to be an X
11776 and there is an X(X&) constructor, we cannot lay it
11777 into the stack (any more), so we make this parameter
11778 look like it is really of reference type. Functions
11779 which pass parameters to this function will know to
11780 create a temporary in their frame, and pass a reference
11781 to that. */
11783 if (TREE_CODE (TREE_TYPE (parm)) == REFERENCE_TYPE
11784 && TYPE_SIZE (TREE_TYPE (TREE_TYPE (parm))))
11785 SET_DECL_REFERENCE_SLOT (parm, convert_from_reference (parm));
11787 pushdecl (parm);
11789 if (! processing_template_decl
11790 && (cleanup = maybe_build_cleanup (parm), cleanup))
11792 expand_decl (parm);
11793 parms_have_cleanups = 1;
11795 /* Keep track of the cleanups. */
11796 cleanups = tree_cons (parm, cleanup, cleanups);
11799 else
11801 /* If we find an enum constant or a type tag,
11802 put it aside for the moment. */
11803 TREE_CHAIN (parm) = NULL_TREE;
11804 nonparms = chainon (nonparms, parm);
11808 /* Get the decls in their original chain order
11809 and record in the function. This is all and only the
11810 PARM_DECLs that were pushed into scope by the loop above. */
11811 DECL_ARGUMENTS (fndecl) = getdecls ();
11813 storetags (chainon (parmtags, gettags ()));
11815 else
11816 DECL_ARGUMENTS (fndecl) = NULL_TREE;
11818 /* Now store the final chain of decls for the arguments
11819 as the decl-chain of the current lexical scope.
11820 Put the enumerators in as well, at the front so that
11821 DECL_ARGUMENTS is not modified. */
11823 storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
11825 /* Initialize the RTL code for the function. */
11826 DECL_SAVED_INSNS (fndecl) = NULL_RTX;
11827 if (! processing_template_decl)
11828 expand_function_start (fndecl, parms_have_cleanups);
11830 current_function_parms_stored = 1;
11832 /* If this function is `main', emit a call to `__main'
11833 to run global initializers, etc. */
11834 if (DECL_NAME (fndecl)
11835 && IDENTIFIER_LENGTH (DECL_NAME (fndecl)) == 4
11836 && strcmp (IDENTIFIER_POINTER (DECL_NAME (fndecl)), "main") == 0
11837 && DECL_CONTEXT (fndecl) == NULL_TREE)
11839 expand_main_function ();
11842 /* Now that we have initialized the parms, we can start their
11843 cleanups. We cannot do this before, since expand_decl_cleanup
11844 should not be called before the parm can be used. */
11845 if (cleanups
11846 && ! processing_template_decl)
11848 for (cleanups = nreverse (cleanups); cleanups; cleanups = TREE_CHAIN (cleanups))
11850 if (! expand_decl_cleanup (TREE_PURPOSE (cleanups), TREE_VALUE (cleanups)))
11851 cp_error ("parser lost in parsing declaration of `%D'",
11852 TREE_PURPOSE (cleanups));
11856 /* Create a binding contour which can be used to catch
11857 cleanup-generated temporaries. Also, if the return value needs or
11858 has initialization, deal with that now. */
11859 if (parms_have_cleanups)
11861 pushlevel (0);
11862 expand_start_bindings (0);
11865 if (! processing_template_decl && flag_exceptions)
11867 /* Do the starting of the exception specifications, if we have any. */
11868 if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
11869 expand_start_eh_spec ();
11872 last_parm_cleanup_insn = get_last_insn ();
11873 last_dtor_insn = get_last_insn ();
11876 /* Bind a name and initialization to the return value of
11877 the current function. */
11879 void
11880 store_return_init (return_id, init)
11881 tree return_id, init;
11883 tree decl = DECL_RESULT (current_function_decl);
11885 if (pedantic)
11886 /* Give this error as many times as there are occurrences,
11887 so that users can use Emacs compilation buffers to find
11888 and fix all such places. */
11889 pedwarn ("ANSI C++ does not permit named return values");
11891 if (return_id != NULL_TREE)
11893 if (DECL_NAME (decl) == NULL_TREE)
11895 DECL_NAME (decl) = return_id;
11896 DECL_ASSEMBLER_NAME (decl) = return_id;
11898 else
11899 cp_error ("return identifier `%D' already in place", decl);
11902 /* Can't let this happen for constructors. */
11903 if (DECL_CONSTRUCTOR_P (current_function_decl))
11905 error ("can't redefine default return value for constructors");
11906 return;
11909 /* If we have a named return value, put that in our scope as well. */
11910 if (DECL_NAME (decl) != NULL_TREE)
11912 /* If this named return value comes in a register,
11913 put it in a pseudo-register. */
11914 if (DECL_REGISTER (decl))
11916 original_result_rtx = DECL_RTL (decl);
11917 DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
11920 /* Let `cp_finish_decl' know that this initializer is ok. */
11921 DECL_INITIAL (decl) = init;
11922 pushdecl (decl);
11924 if (minimal_parse_mode)
11925 add_tree (build_min_nt (RETURN_INIT, return_id,
11926 copy_to_permanent (init)));
11927 else
11928 cp_finish_decl (decl, init, NULL_TREE, 0, 0);
11933 /* Finish up a function declaration and compile that function
11934 all the way to assembler language output. The free the storage
11935 for the function definition.
11937 This is called after parsing the body of the function definition.
11938 LINENO is the current line number.
11940 C++: CALL_POPLEVEL is non-zero if an extra call to poplevel
11941 (and expand_end_bindings) must be made to take care of the binding
11942 contour for the base initializers. This is only relevant for
11943 constructors.
11945 NESTED is nonzero if we were in the middle of compiling another function
11946 when we started on this one. */
11948 void
11949 finish_function (lineno, call_poplevel, nested)
11950 int lineno;
11951 int call_poplevel;
11952 int nested;
11954 register tree fndecl = current_function_decl;
11955 tree fntype, ctype = NULL_TREE;
11956 rtx last_parm_insn, insns;
11957 /* Label to use if this function is supposed to return a value. */
11958 tree no_return_label = NULL_TREE;
11959 tree decls = NULL_TREE;
11961 /* When we get some parse errors, we can end up without a
11962 current_function_decl, so cope. */
11963 if (fndecl == NULL_TREE)
11964 return;
11966 if (! nested && function_depth > 1)
11967 nested = 1;
11969 fntype = TREE_TYPE (fndecl);
11971 /* TREE_READONLY (fndecl) = 1;
11972 This caused &foo to be of type ptr-to-const-function
11973 which then got a warning when stored in a ptr-to-function variable. */
11975 /* This happens on strange parse errors. */
11976 if (! current_function_parms_stored)
11978 call_poplevel = 0;
11979 store_parm_decls ();
11982 if (processing_template_decl)
11984 if (DECL_CONSTRUCTOR_P (fndecl) && call_poplevel)
11986 decls = getdecls ();
11987 expand_end_bindings (decls, decls != NULL_TREE, 0);
11988 poplevel (decls != NULL_TREE, 0, 0);
11991 else
11993 if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
11995 tree ttype = target_type (fntype);
11996 tree parmdecl;
11998 if (IS_AGGR_TYPE (ttype))
11999 /* Let debugger know it should output info for this type. */
12000 note_debug_info_needed (ttype);
12002 for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
12004 ttype = target_type (TREE_TYPE (parmdecl));
12005 if (IS_AGGR_TYPE (ttype))
12006 /* Let debugger know it should output info for this type. */
12007 note_debug_info_needed (ttype);
12011 /* Clean house because we will need to reorder insns here. */
12012 do_pending_stack_adjust ();
12014 if (dtor_label)
12016 tree binfo = TYPE_BINFO (current_class_type);
12017 tree cond = integer_one_node;
12018 tree exprstmt;
12019 tree in_charge_node = lookup_name (in_charge_identifier, 0);
12020 tree virtual_size;
12021 int ok_to_optimize_dtor = 0;
12022 int empty_dtor = get_last_insn () == last_dtor_insn;
12024 if (current_function_assigns_this)
12025 cond = build (NE_EXPR, boolean_type_node,
12026 current_class_ptr, integer_zero_node);
12027 else
12029 int n_baseclasses = CLASSTYPE_N_BASECLASSES (current_class_type);
12031 /* If this destructor is empty, then we don't need to check
12032 whether `this' is NULL in some cases. */
12033 if ((flag_this_is_variable & 1) == 0)
12034 ok_to_optimize_dtor = 1;
12035 else if (empty_dtor)
12036 ok_to_optimize_dtor
12037 = (n_baseclasses == 0
12038 || (n_baseclasses == 1
12039 && TYPE_HAS_DESTRUCTOR (TYPE_BINFO_BASETYPE (current_class_type, 0))));
12042 /* These initializations might go inline. Protect
12043 the binding level of the parms. */
12044 pushlevel (0);
12045 expand_start_bindings (0);
12047 if (current_function_assigns_this)
12049 current_function_assigns_this = 0;
12050 current_function_just_assigned_this = 0;
12053 /* Generate the code to call destructor on base class.
12054 If this destructor belongs to a class with virtual
12055 functions, then set the virtual function table
12056 pointer to represent the type of our base class. */
12058 /* This side-effect makes call to `build_delete' generate the
12059 code we have to have at the end of this destructor. */
12060 TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
12062 /* These are two cases where we cannot delegate deletion. */
12063 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)
12064 || TYPE_GETS_REG_DELETE (current_class_type))
12065 exprstmt = build_delete (current_class_type, current_class_ref, integer_zero_node,
12066 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
12067 else
12068 exprstmt = build_delete (current_class_type, current_class_ref, in_charge_node,
12069 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
12071 /* If we did not assign to this, then `this' is non-zero at
12072 the end of a destructor. As a special optimization, don't
12073 emit test if this is an empty destructor. If it does nothing,
12074 it does nothing. If it calls a base destructor, the base
12075 destructor will perform the test. */
12077 if (exprstmt != error_mark_node
12078 && (TREE_CODE (exprstmt) != NOP_EXPR
12079 || TREE_OPERAND (exprstmt, 0) != integer_zero_node
12080 || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
12082 expand_label (dtor_label);
12083 if (cond != integer_one_node)
12084 expand_start_cond (cond, 0);
12085 if (exprstmt != void_zero_node)
12086 /* Don't call `expand_expr_stmt' if we're not going to do
12087 anything, since -Wall will give a diagnostic. */
12088 expand_expr_stmt (exprstmt);
12090 /* Run destructor on all virtual baseclasses. */
12091 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
12093 tree vbases = nreverse (copy_list (CLASSTYPE_VBASECLASSES (current_class_type)));
12094 expand_start_cond (build (BIT_AND_EXPR, integer_type_node,
12095 in_charge_node, integer_two_node), 0);
12096 while (vbases)
12098 if (TYPE_NEEDS_DESTRUCTOR (BINFO_TYPE (vbases)))
12100 tree vb = get_vbase
12101 (BINFO_TYPE (vbases),
12102 TYPE_BINFO (current_class_type));
12103 expand_expr_stmt
12104 (build_scoped_method_call
12105 (current_class_ref, vb, dtor_identifier,
12106 build_expr_list (NULL_TREE, integer_zero_node)));
12108 vbases = TREE_CHAIN (vbases);
12110 expand_end_cond ();
12113 do_pending_stack_adjust ();
12114 if (cond != integer_one_node)
12115 expand_end_cond ();
12118 TYPE_HAS_DESTRUCTOR (current_class_type) = 1;
12120 virtual_size = c_sizeof (current_class_type);
12122 /* At the end, call delete if that's what's requested. */
12123 if (TYPE_GETS_REG_DELETE (current_class_type))
12124 /* This NOP_EXPR means we are in a static call context. */
12125 exprstmt
12126 = build_method_call (build_indirect_ref (build1 (NOP_EXPR,
12127 build_pointer_type (current_class_type),
12128 error_mark_node),
12129 NULL_PTR),
12130 ansi_opname[(int) DELETE_EXPR],
12131 expr_tree_cons (NULL_TREE, current_class_ptr,
12132 build_expr_list (NULL_TREE, virtual_size)),
12133 NULL_TREE, LOOKUP_NORMAL);
12134 else if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
12135 exprstmt = build_x_delete (ptr_type_node, current_class_ptr, 0,
12136 virtual_size);
12137 else
12138 exprstmt = NULL_TREE;
12140 if (exprstmt)
12142 cond = build (BIT_AND_EXPR, integer_type_node,
12143 in_charge_node, integer_one_node);
12144 expand_start_cond (cond, 0);
12145 expand_expr_stmt (exprstmt);
12146 expand_end_cond ();
12149 /* End of destructor. */
12150 expand_end_bindings (NULL_TREE, getdecls () != NULL_TREE, 0);
12151 poplevel (2, 0, 0); /* XXX change to 1 */
12153 /* Back to the top of destructor. */
12154 /* Don't execute destructor code if `this' is NULL. */
12156 start_sequence ();
12158 /* If the dtor is empty, and we know there is not possible way we
12159 could use any vtable entries, before they are possibly set by
12160 a base class dtor, we don't have to setup the vtables, as we
12161 know that any base class dtoring will set up any vtables it
12162 needs. We avoid MI, because one base class dtor can do a
12163 virtual dispatch to an overridden function that would need to
12164 have a non-related vtable set up, we cannot avoid setting up
12165 vtables in that case. We could change this to see if there is
12166 just one vtable. */
12167 if (! empty_dtor || TYPE_USES_COMPLEX_INHERITANCE (current_class_type))
12169 /* Make all virtual function table pointers in non-virtual base
12170 classes point to CURRENT_CLASS_TYPE's virtual function
12171 tables. */
12172 expand_direct_vtbls_init (binfo, binfo, 1, 0, current_class_ptr);
12174 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
12175 expand_indirect_vtbls_init (binfo, current_class_ref, current_class_ptr);
12178 if (! ok_to_optimize_dtor)
12180 cond = build_binary_op (NE_EXPR,
12181 current_class_ptr, integer_zero_node, 1);
12182 expand_start_cond (cond, 0);
12185 insns = get_insns ();
12186 end_sequence ();
12188 last_parm_insn = get_first_nonparm_insn ();
12189 if (last_parm_insn == NULL_RTX)
12190 last_parm_insn = get_last_insn ();
12191 else
12192 last_parm_insn = previous_insn (last_parm_insn);
12194 emit_insns_after (insns, last_parm_insn);
12196 if (! ok_to_optimize_dtor)
12197 expand_end_cond ();
12199 else if (current_function_assigns_this)
12201 /* Does not need to call emit_base_init, because
12202 that is done (if needed) just after assignment to this
12203 is seen. */
12205 if (DECL_CONSTRUCTOR_P (current_function_decl))
12207 end_protect_partials ();
12208 expand_label (ctor_label);
12209 ctor_label = NULL_TREE;
12211 if (call_poplevel)
12213 decls = getdecls ();
12214 expand_end_bindings (decls, decls != NULL_TREE, 0);
12215 poplevel (decls != NULL_TREE, 0, 0);
12217 c_expand_return (current_class_ptr);
12219 else if (TYPE_MAIN_VARIANT (TREE_TYPE (
12220 DECL_RESULT (current_function_decl))) != void_type_node
12221 && return_label != NULL_RTX)
12222 no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
12224 current_function_assigns_this = 0;
12225 current_function_just_assigned_this = 0;
12226 base_init_expr = NULL_TREE;
12228 else if (DECL_CONSTRUCTOR_P (fndecl))
12230 tree cond, thenclause;
12231 /* Allow constructor for a type to get a new instance of the object
12232 using `build_new'. */
12233 tree abstract_virtuals = CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type);
12234 CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = NULL_TREE;
12236 DECL_RETURNS_FIRST_ARG (fndecl) = 1;
12238 if (flag_this_is_variable > 0)
12240 cond = build_binary_op (EQ_EXPR,
12241 current_class_ptr, integer_zero_node, 1);
12242 thenclause = build_modify_expr (current_class_ptr, NOP_EXPR,
12243 build_new (NULL_TREE, current_class_type, void_type_node, 0));
12246 CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = abstract_virtuals;
12248 start_sequence ();
12250 if (flag_this_is_variable > 0)
12252 expand_start_cond (cond, 0);
12253 expand_expr_stmt (thenclause);
12254 expand_end_cond ();
12257 /* Emit insns from `emit_base_init' which sets up virtual
12258 function table pointer(s). */
12259 if (base_init_expr)
12261 expand_expr_stmt (base_init_expr);
12262 base_init_expr = NULL_TREE;
12265 insns = get_insns ();
12266 end_sequence ();
12268 /* This is where the body of the constructor begins. */
12270 emit_insns_after (insns, last_parm_cleanup_insn);
12272 end_protect_partials ();
12274 /* This is where the body of the constructor ends. */
12275 expand_label (ctor_label);
12276 ctor_label = NULL_TREE;
12278 if (call_poplevel)
12280 decls = getdecls ();
12281 expand_end_bindings (decls, decls != NULL_TREE, 0);
12282 poplevel (decls != NULL_TREE, 1, 0);
12285 c_expand_return (current_class_ptr);
12287 current_function_assigns_this = 0;
12288 current_function_just_assigned_this = 0;
12290 else if (IDENTIFIER_LENGTH (DECL_NAME (fndecl)) == 4
12291 && ! strcmp (IDENTIFIER_POINTER (DECL_NAME (fndecl)), "main")
12292 && DECL_CONTEXT (fndecl) == NULL_TREE)
12294 /* Make it so that `main' always returns 0 by default. */
12295 #ifdef VMS
12296 c_expand_return (integer_one_node);
12297 #else
12298 c_expand_return (integer_zero_node);
12299 #endif
12301 else if (return_label != NULL_RTX
12302 && current_function_return_value == NULL_TREE
12303 && ! DECL_NAME (DECL_RESULT (current_function_decl)))
12304 no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
12306 if (flag_exceptions)
12307 expand_exception_blocks ();
12309 /* If this function is supposed to return a value, ensure that
12310 we do not fall into the cleanups by mistake. The end of our
12311 function will look like this:
12313 user code (may have return stmt somewhere)
12314 goto no_return_label
12315 cleanup_label:
12316 cleanups
12317 goto return_label
12318 no_return_label:
12319 NOTE_INSN_FUNCTION_END
12320 return_label:
12321 things for return
12323 If the user omits a return stmt in the USER CODE section, we
12324 will have a control path which reaches NOTE_INSN_FUNCTION_END.
12325 Otherwise, we won't. */
12326 if (no_return_label)
12328 DECL_CONTEXT (no_return_label) = fndecl;
12329 DECL_INITIAL (no_return_label) = error_mark_node;
12330 DECL_SOURCE_FILE (no_return_label) = input_filename;
12331 DECL_SOURCE_LINE (no_return_label) = lineno;
12332 expand_goto (no_return_label);
12335 if (cleanup_label)
12337 /* remove the binding contour which is used
12338 to catch cleanup-generated temporaries. */
12339 expand_end_bindings (0, 0, 0);
12340 poplevel (0, 0, 0);
12342 /* Emit label at beginning of cleanup code for parameters. */
12343 emit_label (cleanup_label);
12346 /* Get return value into register if that's where it's supposed to be. */
12347 if (original_result_rtx)
12348 fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
12350 /* Finish building code that will trigger warnings if users forget
12351 to make their functions return values. */
12352 if (no_return_label || cleanup_label)
12353 emit_jump (return_label);
12354 if (no_return_label)
12356 /* We don't need to call `expand_*_return' here because we
12357 don't need any cleanups here--this path of code is only
12358 for error checking purposes. */
12359 expand_label (no_return_label);
12362 /* Generate rtl for function exit. */
12363 expand_function_end (input_filename, lineno, 1);
12366 /* This must come after expand_function_end because cleanups might
12367 have declarations (from inline functions) that need to go into
12368 this function's blocks. */
12369 if (current_binding_level->parm_flag != 1)
12370 my_friendly_abort (122);
12371 poplevel (1, 0, 1);
12373 /* reset scope for C++: if we were in the scope of a class,
12374 then when we finish this function, we are not longer so.
12375 This cannot be done until we know for sure that no more
12376 class members will ever be referenced in this function
12377 (i.e., calls to destructors). */
12378 if (current_class_name)
12380 ctype = current_class_type;
12381 pop_nested_class (1);
12383 else
12384 pop_memoized_context (1);
12386 /* Must mark the RESULT_DECL as being in this function. */
12387 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
12389 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
12390 to the FUNCTION_DECL node itself. */
12391 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
12393 if (! processing_template_decl)
12395 /* So we can tell if jump_optimize sets it to 1. */
12396 can_reach_end = 0;
12398 /* Run the optimizers and output the assembler code for this
12399 function. */
12401 if (DECL_ARTIFICIAL (fndecl))
12403 /* Do we really *want* to inline this synthesized method? */
12405 int save_fif = flag_inline_functions;
12406 flag_inline_functions = 1;
12408 /* Turn off DECL_INLINE for the moment so function_cannot_inline_p
12409 will check our size. */
12410 DECL_INLINE (fndecl) = 0;
12412 rest_of_compilation (fndecl);
12413 flag_inline_functions = save_fif;
12415 else
12416 rest_of_compilation (fndecl);
12418 if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
12420 /* Set DECL_EXTERNAL so that assemble_external will be called as
12421 necessary. We'll clear it again in finish_file. */
12422 if (! DECL_EXTERNAL (fndecl))
12423 DECL_NOT_REALLY_EXTERN (fndecl) = 1;
12424 DECL_EXTERNAL (fndecl) = 1;
12425 mark_inline_for_output (fndecl);
12428 if (ctype && TREE_ASM_WRITTEN (fndecl))
12429 note_debug_info_needed (ctype);
12431 current_function_returns_null |= can_reach_end;
12433 /* Since we don't normally go through c_expand_return for constructors,
12434 this normally gets the wrong value.
12435 Also, named return values have their return codes emitted after
12436 NOTE_INSN_FUNCTION_END, confusing jump.c. */
12437 if (DECL_CONSTRUCTOR_P (fndecl)
12438 || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
12439 current_function_returns_null = 0;
12441 if (TREE_THIS_VOLATILE (fndecl) && current_function_returns_null)
12442 cp_warning ("`noreturn' function `%D' does return", fndecl);
12443 else if ((warn_return_type || pedantic)
12444 && current_function_returns_null
12445 && TYPE_MAIN_VARIANT (TREE_TYPE (fntype)) != void_type_node)
12447 /* If this function returns non-void and control can drop through,
12448 complain. */
12449 cp_warning ("control reaches end of non-void function `%D'", fndecl);
12451 /* With just -W, complain only if function returns both with
12452 and without a value. */
12453 else if (extra_warnings
12454 && current_function_returns_value && current_function_returns_null)
12455 warning ("this function may return with or without a value");
12458 --function_depth;
12460 /* Free all the tree nodes making up this function. */
12461 /* Switch back to allocating nodes permanently
12462 until we start another function. */
12463 if (processing_template_decl)
12465 --minimal_parse_mode;
12466 DECL_SAVED_TREE (fndecl) = TREE_CHAIN (DECL_SAVED_TREE (fndecl));
12469 if (! nested)
12470 permanent_allocation (1);
12472 if (DECL_SAVED_INSNS (fndecl) == NULL_RTX)
12474 tree t;
12476 /* Stop pointing to the local nodes about to be freed. */
12477 /* But DECL_INITIAL must remain nonzero so we know this
12478 was an actual function definition. */
12479 DECL_INITIAL (fndecl) = error_mark_node;
12480 for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
12481 DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
12484 if (DECL_STATIC_CONSTRUCTOR (fndecl))
12485 static_ctors = perm_tree_cons (NULL_TREE, fndecl, static_ctors);
12486 if (DECL_STATIC_DESTRUCTOR (fndecl))
12487 static_dtors = perm_tree_cons (NULL_TREE, fndecl, static_dtors);
12489 if (! nested)
12491 /* Let the error reporting routines know that we're outside a
12492 function. For a nested function, this value is used in
12493 pop_cp_function_context and then reset via pop_function_context. */
12494 current_function_decl = NULL_TREE;
12497 named_label_uses = NULL;
12498 current_class_ptr = NULL_TREE;
12499 current_class_ref = NULL_TREE;
12502 /* Create the FUNCTION_DECL for a function definition.
12503 LINE1 is the line number that the definition absolutely begins on.
12504 LINE2 is the line number that the name of the function appears on.
12505 DECLSPECS and DECLARATOR are the parts of the declaration;
12506 they describe the return type and the name of the function,
12507 but twisted together in a fashion that parallels the syntax of C.
12509 This function creates a binding context for the function body
12510 as well as setting up the FUNCTION_DECL in current_function_decl.
12512 Returns a FUNCTION_DECL on success.
12514 If the DECLARATOR is not suitable for a function (it defines a datum
12515 instead), we return 0, which tells yyparse to report a parse error.
12517 May return void_type_node indicating that this method is actually
12518 a friend. See grokfield for more details.
12520 Came here with a `.pushlevel' .
12522 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
12523 CHANGES TO CODE IN `grokfield'. */
12525 tree
12526 start_method (declspecs, declarator)
12527 tree declarator, declspecs;
12529 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
12530 NULL_TREE);
12532 /* Something too ugly to handle. */
12533 if (fndecl == NULL_TREE)
12534 return NULL_TREE;
12536 /* Pass friends other than inline friend functions back. */
12537 if (TYPE_MAIN_VARIANT (fndecl) == void_type_node)
12538 return fndecl;
12540 if (TREE_CODE (fndecl) != FUNCTION_DECL)
12541 /* Not a function, tell parser to report parse error. */
12542 return NULL_TREE;
12544 if (IS_SIGNATURE (current_class_type))
12545 IS_DEFAULT_IMPLEMENTATION (fndecl) = 1;
12547 if (DECL_IN_AGGR_P (fndecl))
12549 if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
12551 if (DECL_CONTEXT (fndecl))
12552 cp_error ("`%D' is already defined in class %s", fndecl,
12553 TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
12555 return void_type_node;
12558 DECL_THIS_INLINE (fndecl) = 1;
12560 if (flag_default_inline)
12561 DECL_INLINE (fndecl) = 1;
12563 if (processing_template_decl && ! current_function_decl)
12564 push_template_decl (fndecl);
12566 /* We read in the parameters on the maybepermanent_obstack,
12567 but we won't be getting back to them until after we
12568 may have clobbered them. So the call to preserve_data
12569 will keep them safe. */
12570 preserve_data ();
12572 if (! DECL_FRIEND_P (fndecl))
12574 if (DECL_CHAIN (fndecl) != NULL_TREE)
12576 /* Need a fresh node here so that we don't get circularity
12577 when we link these together. If FNDECL was a friend, then
12578 `pushdecl' does the right thing, which is nothing wrt its
12579 current value of DECL_CHAIN. */
12580 fndecl = copy_node (fndecl);
12582 if (TREE_CHAIN (fndecl))
12584 fndecl = copy_node (fndecl);
12585 TREE_CHAIN (fndecl) = NULL_TREE;
12588 if (DECL_CONSTRUCTOR_P (fndecl))
12590 if (! grok_ctor_properties (current_class_type, fndecl))
12591 return void_type_node;
12593 else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
12594 grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
12597 cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0, 0);
12599 /* Make a place for the parms */
12600 pushlevel (0);
12601 current_binding_level->parm_flag = 1;
12603 DECL_IN_AGGR_P (fndecl) = 1;
12604 return fndecl;
12607 /* Go through the motions of finishing a function definition.
12608 We don't compile this method until after the whole class has
12609 been processed.
12611 FINISH_METHOD must return something that looks as though it
12612 came from GROKFIELD (since we are defining a method, after all).
12614 This is called after parsing the body of the function definition.
12615 STMTS is the chain of statements that makes up the function body.
12617 DECL is the ..._DECL that `start_method' provided. */
12619 tree
12620 finish_method (decl)
12621 tree decl;
12623 register tree fndecl = decl;
12624 tree old_initial;
12626 register tree link;
12628 if (TYPE_MAIN_VARIANT (decl) == void_type_node)
12629 return decl;
12631 old_initial = DECL_INITIAL (fndecl);
12633 /* Undo the level for the parms (from start_method).
12634 This is like poplevel, but it causes nothing to be
12635 saved. Saving information here confuses symbol-table
12636 output routines. Besides, this information will
12637 be correctly output when this method is actually
12638 compiled. */
12640 /* Clear out the meanings of the local variables of this level;
12641 also record in each decl which block it belongs to. */
12643 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
12645 if (DECL_NAME (link) != NULL_TREE)
12646 IDENTIFIER_LOCAL_VALUE (DECL_NAME (link)) = 0;
12647 my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
12648 DECL_CONTEXT (link) = NULL_TREE;
12651 /* Restore all name-meanings of the outer levels
12652 that were shadowed by this level. */
12654 for (link = current_binding_level->shadowed; link; link = TREE_CHAIN (link))
12655 IDENTIFIER_LOCAL_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
12656 for (link = current_binding_level->class_shadowed;
12657 link; link = TREE_CHAIN (link))
12658 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
12659 for (link = current_binding_level->type_shadowed;
12660 link; link = TREE_CHAIN (link))
12661 IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
12663 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
12664 (HOST_WIDE_INT) current_binding_level->level_chain,
12665 current_binding_level->parm_flag,
12666 current_binding_level->keep);
12668 poplevel (0, 0, 0);
12670 DECL_INITIAL (fndecl) = old_initial;
12672 /* We used to check if the context of FNDECL was different from
12673 current_class_type as another way to get inside here. This didn't work
12674 for String.cc in libg++. */
12675 if (DECL_FRIEND_P (fndecl))
12677 CLASSTYPE_INLINE_FRIENDS (current_class_type)
12678 = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
12679 decl = void_type_node;
12682 return decl;
12685 /* Called when a new struct TYPE is defined.
12686 If this structure or union completes the type of any previous
12687 variable declaration, lay it out and output its rtl. */
12689 void
12690 hack_incomplete_structures (type)
12691 tree type;
12693 tree *list;
12695 if (current_binding_level->incomplete == NULL_TREE)
12696 return;
12698 if (!type) /* Don't do this for class templates. */
12699 return;
12701 for (list = &current_binding_level->incomplete; *list; )
12703 tree decl = TREE_VALUE (*list);
12704 if (decl && TREE_TYPE (decl) == type
12705 || (TREE_TYPE (decl)
12706 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
12707 && TREE_TYPE (TREE_TYPE (decl)) == type))
12709 int toplevel = toplevel_bindings_p ();
12710 if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
12711 && TREE_TYPE (TREE_TYPE (decl)) == type)
12712 layout_type (TREE_TYPE (decl));
12713 layout_decl (decl, 0);
12714 rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
12715 if (! toplevel)
12717 tree cleanup;
12718 expand_decl (decl);
12719 cleanup = maybe_build_cleanup (decl);
12720 expand_decl_init (decl);
12721 if (! expand_decl_cleanup (decl, cleanup))
12722 cp_error ("parser lost in parsing declaration of `%D'",
12723 decl);
12725 *list = TREE_CHAIN (*list);
12727 else
12728 list = &TREE_CHAIN (*list);
12732 /* If DECL is of a type which needs a cleanup, build that cleanup here.
12733 See build_delete for information about AUTO_DELETE.
12735 Don't build these on the momentary obstack; they must live
12736 the life of the binding contour. */
12738 static tree
12739 maybe_build_cleanup_1 (decl, auto_delete)
12740 tree decl, auto_delete;
12742 tree type = TREE_TYPE (decl);
12743 if (TYPE_NEEDS_DESTRUCTOR (type))
12745 int temp = 0, flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
12746 tree rval;
12748 if (TREE_CODE (decl) != PARM_DECL)
12749 temp = suspend_momentary ();
12751 if (TREE_CODE (type) == ARRAY_TYPE)
12752 rval = decl;
12753 else
12755 mark_addressable (decl);
12756 rval = build_unary_op (ADDR_EXPR, decl, 0);
12759 /* Optimize for space over speed here. */
12760 if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
12761 || flag_expensive_optimizations)
12762 flags |= LOOKUP_NONVIRTUAL;
12764 rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
12766 if (TYPE_USES_VIRTUAL_BASECLASSES (type)
12767 && ! TYPE_HAS_DESTRUCTOR (type))
12768 rval = build_compound_expr (expr_tree_cons (NULL_TREE, rval,
12769 build_expr_list (NULL_TREE, build_vbase_delete (type, decl))));
12771 if (TREE_CODE (decl) != PARM_DECL)
12772 resume_momentary (temp);
12774 return rval;
12776 return 0;
12779 /* If DECL is of a type which needs a cleanup, build that cleanup
12780 here. The cleanup does free the storage with a call to delete. */
12782 tree
12783 maybe_build_cleanup_and_delete (decl)
12784 tree decl;
12786 return maybe_build_cleanup_1 (decl, integer_three_node);
12789 /* If DECL is of a type which needs a cleanup, build that cleanup
12790 here. The cleanup does not free the storage with a call a delete. */
12792 tree
12793 maybe_build_cleanup (decl)
12794 tree decl;
12796 return maybe_build_cleanup_1 (decl, integer_two_node);
12799 /* Expand a C++ expression at the statement level.
12800 This is needed to ferret out nodes which have UNKNOWN_TYPE.
12801 The C++ type checker should get all of these out when
12802 expressions are combined with other, type-providing, expressions,
12803 leaving only orphan expressions, such as:
12805 &class::bar; / / takes its address, but does nothing with it. */
12807 void
12808 cplus_expand_expr_stmt (exp)
12809 tree exp;
12811 if (processing_template_decl)
12813 add_tree (build_min_nt (EXPR_STMT, exp));
12814 return;
12817 /* Arrange for all temps to disappear. */
12818 expand_start_target_temps ();
12820 if (TREE_TYPE (exp) == unknown_type_node)
12822 if (TREE_CODE (exp) == ADDR_EXPR || TREE_CODE (exp) == TREE_LIST)
12823 error ("address of overloaded function with no contextual type information");
12824 else if (TREE_CODE (exp) == COMPONENT_REF)
12825 warning ("useless reference to a member function name, did you forget the ()?");
12827 else
12829 if (TREE_CODE (exp) == FUNCTION_DECL)
12831 cp_warning ("reference, not call, to function `%D'", exp);
12832 warning ("at this point in file");
12835 #if 0
12836 /* We should do this eventually, but right now this causes regex.o from
12837 libg++ to miscompile, and tString to core dump. */
12838 exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
12839 #endif
12840 /* If we don't do this, we end up down inside expand_expr
12841 trying to do TYPE_MODE on the ERROR_MARK, and really
12842 go outside the bounds of the type. */
12843 if (exp != error_mark_node)
12844 expand_expr_stmt (break_out_cleanups (exp));
12847 /* Clean up any pending cleanups. This happens when a function call
12848 returns a cleanup-needing value that nobody uses. */
12849 expand_end_target_temps ();
12852 /* When a stmt has been parsed, this function is called.
12854 Currently, this function only does something within a
12855 constructor's scope: if a stmt has just assigned to this,
12856 and we are in a derived class, we call `emit_base_init'. */
12858 void
12859 finish_stmt ()
12861 extern struct nesting *cond_stack, *loop_stack, *case_stack;
12864 if (current_function_assigns_this
12865 || ! current_function_just_assigned_this)
12866 return;
12867 if (DECL_CONSTRUCTOR_P (current_function_decl))
12869 /* Constructors must wait until we are out of control
12870 zones before calling base constructors. */
12871 if (cond_stack || loop_stack || case_stack)
12872 return;
12873 expand_expr_stmt (base_init_expr);
12874 check_base_init (current_class_type);
12876 current_function_assigns_this = 1;
12879 /* Change a static member function definition into a FUNCTION_TYPE, instead
12880 of the METHOD_TYPE that we create when it's originally parsed.
12882 WARNING: DO NOT pass &TREE_TYPE (decl) to FN or &TYPE_ARG_TYPES
12883 (TREE_TYPE (decl)) to ARGTYPES, as doing so will corrupt the types of
12884 other decls. Either pass the addresses of local variables or NULL. */
12886 static void
12887 revert_static_member_fn (decl, fn, argtypes)
12888 tree *decl, *fn, *argtypes;
12890 tree tmp;
12891 tree function = fn ? *fn : TREE_TYPE (*decl);
12892 tree args = argtypes ? *argtypes : TYPE_ARG_TYPES (function);
12894 if (TYPE_READONLY (TREE_TYPE (TREE_VALUE (args))))
12895 cp_error ("static member function `%#D' declared const", *decl);
12896 if (TYPE_VOLATILE (TREE_TYPE (TREE_VALUE (args))))
12897 cp_error ("static member function `%#D' declared volatile", *decl);
12899 args = TREE_CHAIN (args);
12900 tmp = build_function_type (TREE_TYPE (function), args);
12901 tmp = build_type_variant (tmp, TYPE_READONLY (function),
12902 TYPE_VOLATILE (function));
12903 tmp = build_exception_variant (tmp,
12904 TYPE_RAISES_EXCEPTIONS (function));
12905 TREE_TYPE (*decl) = tmp;
12906 if (DECL_ARGUMENTS (*decl))
12907 DECL_ARGUMENTS (*decl) = TREE_CHAIN (DECL_ARGUMENTS (*decl));
12908 DECL_STATIC_FUNCTION_P (*decl) = 1;
12909 if (fn)
12910 *fn = tmp;
12911 if (argtypes)
12912 *argtypes = args;
12916 id_in_current_class (id)
12917 tree id;
12919 return !!purpose_member (id, class_binding_level->class_shadowed);
12922 struct cp_function
12924 int returns_value;
12925 int returns_null;
12926 int warn_about_return_type;
12927 int assigns_this;
12928 int just_assigned_this;
12929 int parms_stored;
12930 int temp_name_counter;
12931 tree named_labels;
12932 tree shadowed_labels;
12933 tree ctor_label;
12934 tree dtor_label;
12935 rtx last_dtor_insn;
12936 rtx last_parm_cleanup_insn;
12937 tree base_init_list;
12938 tree member_init_list;
12939 tree base_init_expr;
12940 tree current_class_ptr;
12941 tree current_class_ref;
12942 rtx result_rtx;
12943 struct cp_function *next;
12944 struct binding_level *binding_level;
12945 int static_labelno;
12948 static struct cp_function *cp_function_chain;
12950 extern int temp_name_counter;
12952 /* Save and reinitialize the variables
12953 used during compilation of a C++ function. */
12955 void
12956 push_cp_function_context (context)
12957 tree context;
12959 struct cp_function *p
12960 = (struct cp_function *) xmalloc (sizeof (struct cp_function));
12962 push_function_context_to (context);
12964 p->next = cp_function_chain;
12965 cp_function_chain = p;
12967 p->named_labels = named_labels;
12968 p->shadowed_labels = shadowed_labels;
12969 p->returns_value = current_function_returns_value;
12970 p->returns_null = current_function_returns_null;
12971 p->warn_about_return_type = warn_about_return_type;
12972 p->binding_level = current_binding_level;
12973 p->ctor_label = ctor_label;
12974 p->dtor_label = dtor_label;
12975 p->last_dtor_insn = last_dtor_insn;
12976 p->last_parm_cleanup_insn = last_parm_cleanup_insn;
12977 p->assigns_this = current_function_assigns_this;
12978 p->just_assigned_this = current_function_just_assigned_this;
12979 p->parms_stored = current_function_parms_stored;
12980 p->result_rtx = original_result_rtx;
12981 p->base_init_expr = base_init_expr;
12982 p->temp_name_counter = temp_name_counter;
12983 p->base_init_list = current_base_init_list;
12984 p->member_init_list = current_member_init_list;
12985 p->current_class_ptr = current_class_ptr;
12986 p->current_class_ref = current_class_ref;
12987 p->static_labelno = static_labelno;
12990 /* Restore the variables used during compilation of a C++ function. */
12992 void
12993 pop_cp_function_context (context)
12994 tree context;
12996 struct cp_function *p = cp_function_chain;
12997 tree link;
12999 /* Bring back all the labels that were shadowed. */
13000 for (link = shadowed_labels; link; link = TREE_CHAIN (link))
13001 if (DECL_NAME (TREE_VALUE (link)) != 0)
13002 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link)),
13003 TREE_VALUE (link));
13005 pop_function_context_from (context);
13007 cp_function_chain = p->next;
13009 named_labels = p->named_labels;
13010 shadowed_labels = p->shadowed_labels;
13011 current_function_returns_value = p->returns_value;
13012 current_function_returns_null = p->returns_null;
13013 warn_about_return_type = p->warn_about_return_type;
13014 current_binding_level = p->binding_level;
13015 ctor_label = p->ctor_label;
13016 dtor_label = p->dtor_label;
13017 last_dtor_insn = p->last_dtor_insn;
13018 last_parm_cleanup_insn = p->last_parm_cleanup_insn;
13019 current_function_assigns_this = p->assigns_this;
13020 current_function_just_assigned_this = p->just_assigned_this;
13021 current_function_parms_stored = p->parms_stored;
13022 original_result_rtx = p->result_rtx;
13023 base_init_expr = p->base_init_expr;
13024 temp_name_counter = p->temp_name_counter;
13025 current_base_init_list = p->base_init_list;
13026 current_member_init_list = p->member_init_list;
13027 current_class_ptr = p->current_class_ptr;
13028 current_class_ref = p->current_class_ref;
13029 static_labelno = p->static_labelno;
13031 free (p);
13035 in_function_p ()
13037 return function_depth != 0;
13040 /* FSF LOCAL dje prefix attributes */
13041 /* Strip attributes from SPECS_ATTRS, a list of declspecs and attributes.
13042 This function is used by the parser when a rule will accept attributes
13043 in a particular position, but we don't want to support that just yet.
13045 A warning is issued for every ignored attribute. */
13047 tree
13048 strip_attrs (specs_attrs)
13049 tree specs_attrs;
13051 tree specs, attrs;
13053 split_specs_attrs (specs_attrs, &specs, &attrs);
13055 while (attrs)
13057 warning ("`%s' attribute ignored",
13058 IDENTIFIER_POINTER (TREE_PURPOSE (attrs)));
13059 attrs = TREE_CHAIN (attrs);
13062 return specs;
13064 /* END FSF LOCAL */