OSDN Git Service

92th Cygnus<->FSF quick merge
[pf3gnuchains/gcc-fork.git] / gcc / cp / decl.c
1 /* Process declarations and variables for C compiler.
2    Copyright (C) 1988, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
3    Hacked by Michael Tiemann (tiemann@cygnus.com)
4
5 This file is part of GNU CC.
6
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.
11
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.
16
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.  */
21
22
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.  */
26
27 /* ??? not all decl nodes are given the most useful possible
28    line numbers.  For example, the CONST_DECLs for enum values.  */
29
30 #include <stdio.h>
31 #include "config.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
43 #define obstack_chunk_alloc xmalloc
44 #define obstack_chunk_free free
45
46 extern tree builtin_return_address_fndecl;
47
48 extern struct obstack permanent_obstack;
49
50 extern int current_class_depth;
51
52 extern tree static_ctors, static_dtors;
53
54 extern int static_labelno;
55
56 /* Stack of places to restore the search obstack back to.  */
57    
58 /* Obstack used for remembering local class declarations (like
59    enums and static (const) members.  */
60 #include "stack.h"
61 struct obstack decl_obstack;
62 static struct stack_level *decl_stack;
63
64 #ifndef CHAR_TYPE_SIZE
65 #define CHAR_TYPE_SIZE BITS_PER_UNIT
66 #endif
67
68 #ifndef SHORT_TYPE_SIZE
69 #define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2))
70 #endif
71
72 #ifndef INT_TYPE_SIZE
73 #define INT_TYPE_SIZE BITS_PER_WORD
74 #endif
75
76 #ifndef LONG_TYPE_SIZE
77 #define LONG_TYPE_SIZE BITS_PER_WORD
78 #endif
79
80 #ifndef LONG_LONG_TYPE_SIZE
81 #define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
82 #endif
83
84 #ifndef WCHAR_UNSIGNED
85 #define WCHAR_UNSIGNED 0
86 #endif
87
88 #ifndef FLOAT_TYPE_SIZE
89 #define FLOAT_TYPE_SIZE BITS_PER_WORD
90 #endif
91
92 #ifndef DOUBLE_TYPE_SIZE
93 #define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
94 #endif
95
96 #ifndef LONG_DOUBLE_TYPE_SIZE
97 #define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
98 #endif
99
100 #ifndef BOOL_TYPE_SIZE
101 #ifdef SLOW_BYTE_ACCESS
102 #define BOOL_TYPE_SIZE ((SLOW_BYTE_ACCESS) ? (POINTER_SIZE) : (CHAR_TYPE_SIZE))
103 #else
104 #define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
105 #endif
106 #endif
107
108 /* We let tm.h override the types used here, to handle trivial differences
109    such as the choice of unsigned int or long unsigned int for size_t.
110    When machines start needing nontrivial differences in the size type,
111    it would be best to do something here to figure out automatically
112    from other information what type to use.  */
113
114 #ifndef SIZE_TYPE
115 #define SIZE_TYPE "long unsigned int"
116 #endif
117
118 #ifndef PTRDIFF_TYPE
119 #define PTRDIFF_TYPE "long int"
120 #endif
121
122 #ifndef WCHAR_TYPE
123 #define WCHAR_TYPE "int"
124 #endif
125
126 static tree grokparms                           PROTO((tree, int));
127 static tree lookup_nested_type                  PROTO((tree, tree));
128 static char *redeclaration_error_message        PROTO((tree, tree));
129 static void revert_static_member_fn             PROTO((tree *, tree *, tree *));
130 static tree push_overloaded_decl                PROTO((tree, int));
131 static void push_overloaded_decl_top_level      PROTO((tree, int));
132
133 tree define_function            
134         PROTO((char *, tree, enum built_in_function, void (*)(), char *));
135
136 /* a node which has tree code ERROR_MARK, and whose type is itself.
137    All erroneous expressions are replaced with this node.  All functions
138    that accept nodes as arguments should avoid generating error messages
139    if this node is one of the arguments, since it is undesirable to get
140    multiple error messages from one error in the input.  */
141
142 tree error_mark_node;
143
144 /* Erroneous argument lists can use this *IFF* they do not modify it.  */
145 tree error_mark_list;
146
147 /* INTEGER_TYPE and REAL_TYPE nodes for the standard data types */
148
149 tree short_integer_type_node;
150 tree integer_type_node;
151 tree long_integer_type_node;
152 tree long_long_integer_type_node;
153
154 tree short_unsigned_type_node;
155 tree unsigned_type_node;
156 tree long_unsigned_type_node;
157 tree long_long_unsigned_type_node;
158
159 tree ptrdiff_type_node;
160
161 tree unsigned_char_type_node;
162 tree signed_char_type_node;
163 tree char_type_node;
164 tree wchar_type_node;
165 tree signed_wchar_type_node;
166 tree unsigned_wchar_type_node;
167
168 tree wchar_decl_node;
169
170 tree float_type_node;
171 tree double_type_node;
172 tree long_double_type_node;
173
174 tree complex_integer_type_node;
175 tree complex_float_type_node;
176 tree complex_double_type_node;
177 tree complex_long_double_type_node;
178
179 tree intQI_type_node;
180 tree intHI_type_node;
181 tree intSI_type_node;
182 tree intDI_type_node;
183
184 tree unsigned_intQI_type_node;
185 tree unsigned_intHI_type_node;
186 tree unsigned_intSI_type_node;
187 tree unsigned_intDI_type_node;
188
189 /* a VOID_TYPE node, and the same, packaged in a TREE_LIST.  */
190
191 tree void_type_node, void_list_node;
192 tree void_zero_node;
193
194 /* Nodes for types `void *' and `const void *'.  */
195
196 tree ptr_type_node;
197 static tree const_ptr_type_node;
198
199 /* Nodes for types `char *' and `const char *'.  */
200
201 tree string_type_node, const_string_type_node;
202
203 /* Type `char[256]' or something like it.
204    Used when an array of char is needed and the size is irrelevant.  */
205
206 tree char_array_type_node;
207
208 /* Type `int[256]' or something like it.
209    Used when an array of int needed and the size is irrelevant.  */
210
211 tree int_array_type_node;
212
213 /* Type `wchar_t[256]' or something like it.
214    Used when a wide string literal is created.  */
215
216 tree wchar_array_type_node;
217
218 /* The bool data type, and constants */
219 tree boolean_type_node, boolean_true_node, boolean_false_node;
220
221 /* type `int ()' -- used for implicit declaration of functions.  */
222
223 tree default_function_type;
224
225 /* function types `double (double)' and `double (double, double)', etc.  */
226
227 static tree double_ftype_double, double_ftype_double_double;
228 static tree int_ftype_int, long_ftype_long;
229 static tree float_ftype_float;
230 static tree ldouble_ftype_ldouble;
231
232 /* Function type `int (const void *, const void *, size_t)' */
233 static tree int_ftype_cptr_cptr_sizet;
234
235 /* C++ extensions */
236 tree vtable_entry_type;
237 tree delta_type_node;
238 #if 0
239 /* Old rtti stuff.  */
240 tree __baselist_desc_type_node;
241 tree __i_desc_type_node, __m_desc_type_node;
242 tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
243 #endif
244 tree __t_desc_type_node;
245 #if 0
246 tree __tp_desc_type_node;
247 #endif
248 tree __access_mode_type_node;
249 tree __bltn_desc_type_node, __user_desc_type_node, __class_desc_type_node;
250 tree __ptr_desc_type_node, __attr_desc_type_node, __func_desc_type_node;
251 tree __ptmf_desc_type_node, __ptmd_desc_type_node;
252 #if 0
253 /* Not needed yet?  May be needed one day?  */
254 tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
255 tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
256 tree __ptmf_desc_array_type, __ptmd_desc_array_type;
257 #endif
258
259 tree class_star_type_node;
260 tree class_type_node, record_type_node, union_type_node, enum_type_node;
261 tree unknown_type_node;
262 tree opaque_type_node, signature_type_node;
263 tree sigtable_entry_type;
264
265 /* Array type `vtable_entry_type[]' */
266 tree vtbl_type_node;
267
268 /* namespace std */
269 tree std_node;
270
271 /* In a destructor, the point at which all derived class destroying
272    has been done, just before any base class destroying will be done.  */
273
274 tree dtor_label;
275
276 /* In a destructor, the last insn emitted after the start of the
277    function and the parms.  */
278
279 static rtx last_dtor_insn;
280
281 /* In a constructor, the last insn emitted after the start of the
282    function and the parms, but before the start of the exception
283    specification.  */
284
285 static rtx last_parm_cleanup_insn;
286
287 /* In a constructor, the point at which we are ready to return
288    the pointer to the initialized object.  */
289
290 tree ctor_label;
291
292 /* A FUNCTION_DECL which can call `abort'.  Not necessarily the
293    one that the user will declare, but sufficient to be called
294    by routines that want to abort the program.  */
295
296 tree abort_fndecl;
297
298 extern rtx cleanup_label, return_label;
299
300 /* If original DECL_RESULT of current function was a register,
301    but due to being an addressable named return value, would up
302    on the stack, this variable holds the named return value's
303    original location.  */
304 static rtx original_result_rtx;
305
306 /* Sequence of insns which represents base initialization.  */
307 tree base_init_expr;
308
309 /* C++: Keep these around to reduce calls to `get_identifier'.
310    Identifiers for `this' in member functions and the auto-delete
311    parameter for destructors.  */
312 tree this_identifier, in_charge_identifier;
313 tree ctor_identifier, dtor_identifier;
314 /* Used in pointer to member functions, in vtables, and in sigtables.  */
315 tree pfn_identifier, index_identifier, delta_identifier, delta2_identifier;
316 tree pfn_or_delta2_identifier, tag_identifier;
317 tree vt_off_identifier;
318
319 struct named_label_list
320 {
321   struct binding_level *binding_level;
322   tree names_in_scope;
323   tree label_decl;
324   char *filename_o_goto;
325   int lineno_o_goto;
326   struct named_label_list *next;
327 };
328
329 /* A list (chain of TREE_LIST nodes) of named label uses.
330    The TREE_PURPOSE field is the list of variables defined
331    the the label's scope defined at the point of use.
332    The TREE_VALUE field is the LABEL_DECL used.
333    The TREE_TYPE field holds `current_binding_level' at the
334    point of the label's use.
335
336    BWAHAHAAHAHahhahahahaah.  No, no, no, said the little chicken.
337
338    Look at the pretty struct named_label_list. See the pretty struct
339    with the pretty named fields that describe what they do. See the
340    pretty lack of gratuitous casts. Notice the code got a lot cleaner.
341
342    Used only for jumps to as-yet undefined labels, since
343    jumps to defined labels can have their validity checked
344    by stmt.c.  */
345
346 static struct named_label_list *named_label_uses = NULL;
347
348 /* A list of objects which have constructors or destructors
349    which reside in the global scope.  The decl is stored in
350    the TREE_VALUE slot and the initializer is stored
351    in the TREE_PURPOSE slot.  */
352 tree static_aggregates;
353
354 /* -- end of C++ */
355
356 /* Two expressions that are constants with value zero.
357    The first is of type `int', the second of type `void *'.  */
358
359 tree integer_zero_node;
360 tree null_pointer_node;
361
362 /* The value for __null (NULL), either of type `void *' or, with -ansi,
363    an integer type of the same size.  */
364
365 tree null_node;
366
367 /* A node for the integer constants 1, 2, and 3.  */
368
369 tree integer_one_node, integer_two_node, integer_three_node;
370
371 /* While defining an enum type, this is 1 plus the last enumerator
372    constant value.  */
373
374 static tree enum_next_value;
375
376 /* Nonzero means that there was overflow computing enum_next_value.  */
377
378 static int enum_overflow;
379
380 /* Parsing a function declarator leaves a list of parameter names
381    or a chain or parameter decls here.  */
382
383 tree last_function_parms;
384
385 /* Parsing a function declarator leaves here a chain of structure
386    and enum types declared in the parmlist.  */
387
388 static tree last_function_parm_tags;
389
390 /* After parsing the declarator that starts a function definition,
391    `start_function' puts here the list of parameter names or chain of decls.
392    `store_parm_decls' finds it here.  */
393
394 static tree current_function_parms;
395
396 /* Similar, for last_function_parm_tags.  */
397 static tree current_function_parm_tags;
398
399 /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
400    that have names.  Here so we can clear out their names' definitions
401    at the end of the function.  */
402
403 static tree named_labels;
404
405 /* A list of LABEL_DECLs from outer contexts that are currently shadowed.  */
406
407 static tree shadowed_labels;
408
409 /* The FUNCTION_DECL for the function currently being compiled,
410    or 0 if between functions.  */
411 tree current_function_decl;
412
413 /* Set to 0 at beginning of a function definition, set to 1 if
414    a return statement that specifies a return value is seen.  */
415
416 int current_function_returns_value;
417
418 /* Set to 0 at beginning of a function definition, set to 1 if
419    a return statement with no argument is seen.  */
420
421 int current_function_returns_null;
422
423 /* Set to 0 at beginning of a function definition, and whenever
424    a label (case or named) is defined.  Set to value of expression
425    returned from function when that value can be transformed into
426    a named return value.  */
427
428 tree current_function_return_value;
429
430 /* Set to nonzero by `grokdeclarator' for a function
431    whose return type is defaulted, if warnings for this are desired.  */
432
433 static int warn_about_return_type;
434
435 /* Nonzero means give `double' the same size as `float'.  */
436
437 extern int flag_short_double;
438
439 /* Nonzero means don't recognize any builtin functions.  */
440
441 extern int flag_no_builtin;
442
443 /* Nonzero means don't recognize the non-ANSI builtin functions.
444    -ansi sets this.  */
445
446 extern int flag_no_nonansi_builtin;
447
448 /* Nonzero means enable obscure ANSI features and disable GNU extensions
449    that might cause ANSI-compliant code to be miscompiled.  */
450
451 extern int flag_ansi;
452
453 /* Nonzero if we want to support huge (> 2^(sizeof(short)*8-1) bytes)
454    objects.  */
455 extern int flag_huge_objects;
456
457 /* Nonzero if we want to conserve space in the .o files.  We do this
458    by putting uninitialized data and runtime initialized data into
459    .common instead of .data at the expense of not flagging multiple
460    definitions.  */
461 extern int flag_conserve_space;
462
463 /* Pointers to the base and current top of the language name stack.  */
464
465 extern tree *current_lang_base, *current_lang_stack;
466 \f
467 /* C and C++ flags are in decl2.c.  */
468
469 /* Set to 0 at beginning of a constructor, set to 1
470    if that function does an allocation before referencing its
471    instance variable.  */
472 static int current_function_assigns_this;
473 int current_function_just_assigned_this;
474
475 /* Set to 0 at beginning of a function.  Set non-zero when
476    store_parm_decls is called.  Don't call store_parm_decls
477    if this flag is non-zero!  */
478 int current_function_parms_stored;
479
480 /* Flag used when debugging spew.c */
481
482 extern int spew_debug;
483
484 /* This is a copy of the class_shadowed list of the previous class binding
485    contour when at global scope.  It's used to reset IDENTIFIER_CLASS_VALUEs
486    when entering another class scope (i.e. a cache miss).  */
487 extern tree previous_class_values;
488
489 /* A expression of value 0 with the same precision as a sizetype
490    node, but signed.  */
491 tree signed_size_zero_node;
492
493 \f
494 /* Allocate a level of searching.  */
495
496 static
497 struct stack_level *
498 push_decl_level (stack, obstack)
499      struct stack_level *stack;
500      struct obstack *obstack;
501 {
502   struct stack_level tem;
503   tem.prev = stack;
504
505   return push_stack_level (obstack, (char *)&tem, sizeof (tem));
506 }
507 \f
508 /* For each binding contour we allocate a binding_level structure
509    which records the names defined in that contour.
510    Contours include:
511     0) the global one
512     1) one for each function definition,
513        where internal declarations of the parameters appear.
514     2) one for each compound statement,
515        to record its declarations.
516
517    The current meaning of a name can be found by searching the levels
518    from the current one out to the global one.
519
520    Off to the side, may be the class_binding_level.  This exists only
521    to catch class-local declarations.  It is otherwise nonexistent.
522
523    Also there may be binding levels that catch cleanups that must be
524    run when exceptions occur.  */
525
526 /* Note that the information in the `names' component of the global contour
527    is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers.  */
528
529 struct binding_level
530   {
531     /* A chain of _DECL nodes for all variables, constants, functions,
532        and typedef types.  These are in the reverse of the order
533        supplied.  */
534     tree names;
535
536     /* A list of structure, union and enum definitions, for looking up
537        tag names.
538        It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
539        or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
540        or ENUMERAL_TYPE node.
541
542        C++: the TREE_VALUE nodes can be simple types for
543        component_bindings.  */
544     tree tags;
545
546     /* For each level, a list of shadowed outer-level local definitions
547        to be restored when this level is popped.
548        Each link is a TREE_LIST whose TREE_PURPOSE is an identifier and
549        whose TREE_VALUE is its old definition (a kind of ..._DECL node).  */
550     tree shadowed;
551
552     /* Same, for IDENTIFIER_CLASS_VALUE.  */
553     tree class_shadowed;
554
555     /* Same, for IDENTIFIER_TYPE_VALUE.  */
556     tree type_shadowed;
557
558     /* For each level (except not the global one),
559        a chain of BLOCK nodes for all the levels
560        that were entered and exited one level down.  */
561     tree blocks;
562
563     /* The BLOCK node for this level, if one has been preallocated.
564        If 0, the BLOCK is allocated (if needed) when the level is popped.  */
565     tree this_block;
566
567     /* The binding level which this one is contained in (inherits from).  */
568     struct binding_level *level_chain;
569
570     /* List of decls in `names' that have incomplete
571        structure or union types.  */
572     tree incomplete;
573
574     /* List of VAR_DECLS saved from a previous for statement.
575        These would be dead in ANSI-conforming code, but might
576        be referenced in ARM-era code.  */
577     tree dead_vars_from_for;
578
579     /* 1 for the level that holds the parameters of a function.
580        2 for the level that holds a class declaration.
581        3 for levels that hold parameter declarations.  */
582     unsigned parm_flag : 4;
583
584     /* 1 means make a BLOCK for this level regardless of all else.
585        2 for temporary binding contours created by the compiler.  */
586     unsigned keep : 3;
587
588     /* Nonzero if this level "doesn't exist" for tags.  */
589     unsigned tag_transparent : 1;
590
591     /* Nonzero if this level can safely have additional
592        cleanup-needing variables added to it.  */
593     unsigned more_cleanups_ok : 1;
594     unsigned have_cleanups : 1;
595
596     /* Nonzero if this level is for storing the decls for template
597        parameters and generic decls; these decls will be discarded and
598        replaced with a TEMPLATE_DECL.  */
599     unsigned pseudo_global : 1;
600
601     /* This is set for a namespace binding level.  */
602     unsigned namespace_p : 1;
603
604     /* True if this level is that of a for-statement where we need to
605        worry about ambiguous (ARM or ANSI) scope rules.  */
606     unsigned is_for_scope : 1;
607
608     /* Two bits left for this word.  */
609
610 #if defined(DEBUG_CP_BINDING_LEVELS)
611     /* Binding depth at which this level began.  */
612     unsigned binding_depth;
613 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
614   };
615
616 #define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
617   
618 /* The (non-class) binding level currently in effect.  */
619
620 static struct binding_level *current_binding_level;
621
622 /* The binding level of the current class, if any.  */
623
624 static struct binding_level *class_binding_level;
625
626 /* The current (class or non-class) binding level currently in effect.  */
627
628 #define inner_binding_level \
629   (class_binding_level ? class_binding_level : current_binding_level)
630
631 /* A chain of binding_level structures awaiting reuse.  */
632
633 static struct binding_level *free_binding_level;
634
635 /* The outermost binding level, for names of file scope.
636    This is created when the compiler is started and exists
637    through the entire run.  */
638
639 static struct binding_level *global_binding_level;
640
641 /* Binding level structures are initialized by copying this one.  */
642
643 static struct binding_level clear_binding_level;
644
645 /* Nonzero means unconditionally make a BLOCK for the next level pushed.  */
646
647 static int keep_next_level_flag;
648
649 #if defined(DEBUG_CP_BINDING_LEVELS)
650 static int binding_depth = 0;
651 static int is_class_level = 0;
652
653 static void
654 indent ()
655 {
656   register unsigned i;
657
658   for (i = 0; i < binding_depth*2; i++)
659     putc (' ', stderr);
660 }
661 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
662
663 static tree pushdecl_with_scope PROTO((tree, struct binding_level *));
664
665 static void
666 push_binding_level (newlevel, tag_transparent, keep)
667      struct binding_level *newlevel;
668      int tag_transparent, keep;
669 {
670   /* Add this level to the front of the chain (stack) of levels that
671      are active.  */
672   *newlevel = clear_binding_level;
673   if (class_binding_level)
674     {
675       newlevel->level_chain = class_binding_level;
676       class_binding_level = (struct binding_level *)0;
677     }
678   else
679     {
680       newlevel->level_chain = current_binding_level;
681     }
682   current_binding_level = newlevel;
683   newlevel->tag_transparent = tag_transparent;
684   newlevel->more_cleanups_ok = 1;
685   newlevel->keep = keep;
686 #if defined(DEBUG_CP_BINDING_LEVELS)
687   newlevel->binding_depth = binding_depth;
688   indent ();
689   fprintf (stderr, "push %s level 0x%08x line %d\n",
690            (is_class_level) ? "class" : "block", newlevel, lineno);
691   is_class_level = 0;
692   binding_depth++;
693 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
694 }
695
696 static void
697 pop_binding_level ()
698 {
699   if (class_binding_level)
700     current_binding_level = class_binding_level;
701
702   if (global_binding_level)
703     {
704       /* cannot pop a level, if there are none left to pop.  */
705       if (current_binding_level == global_binding_level)
706         my_friendly_abort (123);
707     }
708   /* Pop the current level, and free the structure for reuse.  */
709 #if defined(DEBUG_CP_BINDING_LEVELS)
710   binding_depth--;
711   indent ();
712   fprintf (stderr, "pop  %s level 0x%08x line %d\n",
713           (is_class_level) ? "class" : "block",
714           current_binding_level, lineno);
715   if (is_class_level != (current_binding_level == class_binding_level))
716     {
717       indent ();
718       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
719     }
720   is_class_level = 0;
721 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
722   {
723     register struct binding_level *level = current_binding_level;
724     current_binding_level = current_binding_level->level_chain;
725     level->level_chain = free_binding_level;
726 #if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
727     if (level->binding_depth != binding_depth)
728       abort ();
729 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
730       free_binding_level = level;
731
732     class_binding_level = current_binding_level;
733     if (class_binding_level->parm_flag != 2)
734       class_binding_level = 0;
735     while (current_binding_level->parm_flag == 2)
736       current_binding_level = current_binding_level->level_chain;
737   }
738 }
739
740 static void
741 suspend_binding_level ()
742 {
743   if (class_binding_level)
744     current_binding_level = class_binding_level;
745
746   if (global_binding_level)
747     {
748       /* cannot suspend a level, if there are none left to suspend.  */
749       if (current_binding_level == global_binding_level)
750         my_friendly_abort (123);
751     }
752   /* Suspend the current level.  */
753 #if defined(DEBUG_CP_BINDING_LEVELS)
754   binding_depth--;
755   indent ();
756   fprintf (stderr, "suspend  %s level 0x%08x line %d\n",
757           (is_class_level) ? "class" : "block",
758           current_binding_level, lineno);
759   if (is_class_level != (current_binding_level == class_binding_level))
760     {
761       indent ();
762       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
763     }
764   is_class_level = 0;
765 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
766   {
767     current_binding_level = current_binding_level->level_chain;
768     class_binding_level = current_binding_level;
769     if (class_binding_level->parm_flag != 2)
770       class_binding_level = 0;
771     while (current_binding_level->parm_flag == 2)
772       current_binding_level = current_binding_level->level_chain;
773   }
774 }
775
776 static void
777 resume_binding_level (b)
778      struct binding_level *b;
779 {
780   if (class_binding_level)
781     {
782 #if 1
783       /* These are here because we cannot deal with shadows yet.  */
784       sorry ("cannot resume a namespace inside class");
785       return;
786 #else
787       b->level_chain = class_binding_level;
788       class_binding_level = (struct binding_level *)0;
789 #endif
790     }
791   else
792     {
793 #if 1
794       /* These are here because we cannot deal with shadows yet.  */
795       if (b->level_chain != current_binding_level)
796         {
797           sorry ("cannot resume a namespace inside a different namespace");
798           return;
799         }
800 #endif
801       b->level_chain = current_binding_level;
802     }
803   current_binding_level = b;
804 #if defined(DEBUG_CP_BINDING_LEVELS)
805   b->binding_depth = binding_depth;
806   indent ();
807   fprintf (stderr, "resume %s level 0x%08x line %d\n",
808            (is_class_level) ? "class" : "block", b, lineno);
809   is_class_level = 0;
810   binding_depth++;
811 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
812 }
813 \f
814 /* Create a new `struct binding_level'.  */
815
816 static
817 struct binding_level *
818 make_binding_level ()
819 {
820   /* NOSTRICT */
821   return (struct binding_level *) xmalloc (sizeof (struct binding_level));
822 }
823
824 /* Nonzero if we are currently in the global binding level.  */
825
826 int
827 global_bindings_p ()
828 {
829   return current_binding_level == global_binding_level;
830 }
831
832 /* Nonzero if we are currently in a toplevel binding level.  This
833    means either the global binding level or a namespace in a toplevel
834    binding level.  */
835
836 int
837 toplevel_bindings_p ()
838 {
839   struct binding_level *b = current_binding_level;
840
841   while (1)
842     {
843       if (b == global_binding_level)
844         return 1;
845       if (b->pseudo_global)
846         return 1;
847       if (! b->namespace_p)
848         return 0;
849       b=b->level_chain;
850     }
851 }
852
853 /* Nonzero if this is a namespace scope.  */
854
855 static int
856 namespace_bindings_p ()
857 {
858   return current_binding_level->namespace_p;
859 }
860
861 void
862 keep_next_level ()
863 {
864   keep_next_level_flag = 1;
865 }
866
867 /* Nonzero if the current level needs to have a BLOCK made.  */
868
869 int
870 kept_level_p ()
871 {
872   return (current_binding_level->blocks != NULL_TREE
873           || current_binding_level->keep
874           || current_binding_level->names != NULL_TREE
875           || (current_binding_level->tags != NULL_TREE
876               && !current_binding_level->tag_transparent));
877 }
878
879 /* Identify this binding level as a level of parameters.  */
880
881 void
882 declare_parm_level ()
883 {
884   current_binding_level->parm_flag = 1;
885 }
886
887 void
888 declare_pseudo_global_level ()
889 {
890   current_binding_level->pseudo_global = 1;
891 }
892
893 static void
894 declare_namespace_level ()
895 {
896   current_binding_level->namespace_p = 1;
897 }
898
899 int
900 pseudo_global_level_p ()
901 {
902   return current_binding_level->pseudo_global;
903 }
904
905 void
906 set_class_shadows (shadows)
907      tree shadows;
908 {
909   class_binding_level->class_shadowed = shadows;
910 }
911
912 /* Enter a new binding level.
913    If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
914    not for that of tags.  */
915
916 void
917 pushlevel (tag_transparent)
918      int tag_transparent;
919 {
920   register struct binding_level *newlevel = NULL_BINDING_LEVEL;
921
922   /* If this is the top level of a function,
923      just make sure that NAMED_LABELS is 0.
924      They should have been set to 0 at the end of the previous function.  */
925
926   if (current_binding_level == global_binding_level)
927     my_friendly_assert (named_labels == NULL_TREE, 134);
928
929   /* Reuse or create a struct for this binding level.  */
930
931 #if defined(DEBUG_CP_BINDING_LEVELS)
932   if (0)
933 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
934   if (free_binding_level)
935 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
936     {
937       newlevel = free_binding_level;
938       free_binding_level = free_binding_level->level_chain;
939     }
940   else
941     {
942       newlevel = make_binding_level ();
943     }
944
945   push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
946   GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
947   keep_next_level_flag = 0;
948 }
949
950 void
951 note_level_for_for ()
952 {
953   current_binding_level->is_for_scope = 1;
954 }
955
956 void
957 pushlevel_temporary (tag_transparent)
958      int tag_transparent;
959 {
960   pushlevel (tag_transparent);
961   current_binding_level->keep = 2;
962   clear_last_expr ();
963
964   /* Note we don't call push_momentary() here.  Otherwise, it would cause
965      cleanups to be allocated on the momentary obstack, and they will be
966      overwritten by the next statement.  */
967
968   expand_start_bindings (0);
969 }
970
971 /* Exit a binding level.
972    Pop the level off, and restore the state of the identifier-decl mappings
973    that were in effect when this level was entered.
974
975    If KEEP == 1, this level had explicit declarations, so
976    and create a "block" (a BLOCK node) for the level
977    to record its declarations and subblocks for symbol table output.
978
979    If KEEP == 2, this level's subblocks go to the front,
980    not the back of the current binding level.  This happens,
981    for instance, when code for constructors and destructors
982    need to generate code at the end of a function which must
983    be moved up to the front of the function.
984
985    If FUNCTIONBODY is nonzero, this level is the body of a function,
986    so create a block as if KEEP were set and also clear out all
987    label names.
988
989    If REVERSE is nonzero, reverse the order of decls before putting
990    them into the BLOCK.  */
991
992 tree
993 poplevel (keep, reverse, functionbody)
994      int keep;
995      int reverse;
996      int functionbody;
997 {
998   register tree link;
999   /* The chain of decls was accumulated in reverse order.
1000      Put it into forward order, just for cleanliness.  */
1001   tree decls;
1002   int tmp = functionbody;
1003   int real_functionbody = current_binding_level->keep == 2
1004     ? ((functionbody = 0), tmp) : functionbody;
1005   tree tags = functionbody >= 0 ? current_binding_level->tags : 0;
1006   tree subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1007   tree block = NULL_TREE;
1008   tree decl;
1009   int block_previously_created;
1010
1011   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1012                       (HOST_WIDE_INT) current_binding_level->level_chain,
1013                       current_binding_level->parm_flag,
1014                       current_binding_level->keep);
1015
1016   if (current_binding_level->keep == 1)
1017     keep = 1;
1018
1019   /* Get the decls in the order they were written.
1020      Usually current_binding_level->names is in reverse order.
1021      But parameter decls were previously put in forward order.  */
1022
1023   if (reverse)
1024     current_binding_level->names
1025       = decls = nreverse (current_binding_level->names);
1026   else
1027     decls = current_binding_level->names;
1028
1029   /* Output any nested inline functions within this block
1030      if they weren't already output.  */
1031
1032   for (decl = decls; decl; decl = TREE_CHAIN (decl))
1033     if (TREE_CODE (decl) == FUNCTION_DECL
1034         && ! TREE_ASM_WRITTEN (decl)
1035         && DECL_INITIAL (decl) != NULL_TREE
1036         && TREE_ADDRESSABLE (decl)
1037         && decl_function_context (decl) == current_function_decl)
1038       {
1039         /* If this decl was copied from a file-scope decl
1040            on account of a block-scope extern decl,
1041            propagate TREE_ADDRESSABLE to the file-scope decl.  */
1042         if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1043           TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1044         else
1045           {
1046             push_function_context ();
1047             output_inline_function (decl);
1048             pop_function_context ();
1049           }
1050       }
1051
1052   /* If there were any declarations or structure tags in that level,
1053      or if this level is a function body,
1054      create a BLOCK to record them for the life of this function.  */
1055
1056   block = NULL_TREE;
1057   block_previously_created = (current_binding_level->this_block != NULL_TREE);
1058   if (block_previously_created)
1059     block = current_binding_level->this_block;
1060   else if (keep == 1 || functionbody)
1061     block = make_node (BLOCK);
1062   if (block != NULL_TREE)
1063     {
1064       if (block_previously_created)
1065         {
1066           if (decls || tags || subblocks)
1067             {
1068               if (BLOCK_VARS (block) || BLOCK_TYPE_TAGS (block))
1069                 {
1070                   warning ("internal compiler error: debugging info corrupted");
1071                 }
1072               BLOCK_VARS (block) = decls;
1073               BLOCK_TYPE_TAGS (block) = tags;
1074
1075               /* We can have previous subblocks and new subblocks when
1076                  doing fixup_gotos with complex cleanups.  We chain the new
1077                  subblocks onto the end of any pre-existing subblocks.  */
1078               BLOCK_SUBBLOCKS (block) = chainon (BLOCK_SUBBLOCKS (block),
1079                                                  subblocks);
1080             }
1081           /* If we created the block earlier on, and we are just
1082              diddling it now, then it already should have a proper
1083              BLOCK_END_NOTE value associated with it.  */
1084         }
1085       else
1086         {
1087           BLOCK_VARS (block) = decls;
1088           BLOCK_TYPE_TAGS (block) = tags;
1089           BLOCK_SUBBLOCKS (block) = subblocks;
1090           /* Otherwise, for a new block, install a new BLOCK_END_NOTE value.  */
1091           remember_end_note (block);
1092         }
1093     }
1094
1095   /* In each subblock, record that this is its superior.  */
1096
1097   if (keep >= 0)
1098     for (link = subblocks; link; link = TREE_CHAIN (link))
1099       BLOCK_SUPERCONTEXT (link) = block;
1100
1101   /* Clear out the meanings of the local variables of this level.  */
1102
1103   if (current_binding_level->is_for_scope && flag_new_for_scope == 1)
1104     {
1105       struct binding_level *outer = current_binding_level->level_chain;
1106       for (link = decls; link; link = TREE_CHAIN (link))
1107         {
1108           if (TREE_CODE (link) == VAR_DECL)
1109             DECL_DEAD_FOR_LOCAL (link) = 1;
1110           else
1111             IDENTIFIER_LOCAL_VALUE (DECL_NAME (link)) = NULL_TREE;
1112         }
1113
1114       /* Save declarations made in a 'for' statement so we can support pre-ANSI
1115          'for' scoping semantics.  */
1116
1117       for (link = current_binding_level->shadowed; link; link = TREE_CHAIN (link))
1118         {
1119           tree id = TREE_PURPOSE (link);
1120           tree decl = IDENTIFIER_LOCAL_VALUE (id);
1121
1122           if (decl && DECL_DEAD_FOR_LOCAL (decl))
1123             {
1124               /* In this case keep the dead for-decl visible,
1125                  but remember what (if anything) it shadowed.  */
1126               DECL_SHADOWED_FOR_VAR (decl) = TREE_VALUE (link);
1127               TREE_CHAIN (decl) = outer->dead_vars_from_for;
1128               outer->dead_vars_from_for = decl;
1129             }
1130           else
1131             IDENTIFIER_LOCAL_VALUE (id) = TREE_VALUE (link);
1132         }
1133     }
1134   else /* Not special for scope.  */
1135     {
1136       for (link = decls; link; link = TREE_CHAIN (link))
1137         {
1138           if (DECL_NAME (link) != NULL_TREE)
1139             {
1140               /* If the ident. was used or addressed via a local extern decl,
1141                  don't forget that fact.  */
1142               if (DECL_EXTERNAL (link))
1143                 {
1144                   if (TREE_USED (link))
1145                     TREE_USED (DECL_ASSEMBLER_NAME (link)) = 1;
1146                   if (TREE_ADDRESSABLE (link))
1147                     TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (link)) = 1;
1148                 }
1149               IDENTIFIER_LOCAL_VALUE (DECL_NAME (link)) = NULL_TREE;
1150             }
1151         }
1152
1153       /* Restore all name-meanings of the outer levels
1154          that were shadowed by this level.  */
1155
1156       for (link = current_binding_level->shadowed;
1157            link; link = TREE_CHAIN (link))
1158         IDENTIFIER_LOCAL_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
1159
1160       /* We first restore the regular decls and *then* the dead_vars_from_for
1161          to handle this case:
1162
1163          int i; // i#1
1164          {
1165            for (int i; ; ) { ...} // i#2
1166            int i; // i#3
1167          } // we are here
1168
1169          In this case, we want remove the binding for i#3, restoring
1170          that of i#2.  Then we want to remove the binding for i#2,
1171          and restore that of i#1.  */
1172
1173       link = current_binding_level->dead_vars_from_for;
1174       for (; link != NULL_TREE; link = TREE_CHAIN (link))
1175         {
1176           tree id = DECL_NAME (link);
1177           if (IDENTIFIER_LOCAL_VALUE (id) == link)
1178             IDENTIFIER_LOCAL_VALUE (id) = DECL_SHADOWED_FOR_VAR (link);
1179         }
1180
1181       for (link = current_binding_level->class_shadowed;
1182            link; link = TREE_CHAIN (link))
1183         IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
1184       for (link = current_binding_level->type_shadowed;
1185            link; link = TREE_CHAIN (link))
1186         IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
1187     }
1188
1189   /* If the level being exited is the top level of a function,
1190      check over all the labels.  */
1191
1192   if (functionbody)
1193     {
1194       /* If this is the top level block of a function,
1195          the vars are the function's parameters.
1196          Don't leave them in the BLOCK because they are
1197          found in the FUNCTION_DECL instead.  */
1198
1199       BLOCK_VARS (block) = 0;
1200
1201       /* Clear out the definitions of all label names,
1202          since their scopes end here.  */
1203
1204       for (link = named_labels; link; link = TREE_CHAIN (link))
1205         {
1206           register tree label = TREE_VALUE (link);
1207
1208           if (DECL_INITIAL (label) == NULL_TREE)
1209             {
1210               cp_error_at ("label `%D' used but not defined", label);
1211               /* Avoid crashing later.  */
1212               define_label (input_filename, 1, DECL_NAME (label));
1213             }
1214           else if (warn_unused && !TREE_USED (label))
1215             cp_warning_at ("label `%D' defined but not used", label);
1216           SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), NULL_TREE);
1217
1218           /* Put the labels into the "variables" of the
1219              top-level block, so debugger can see them.  */
1220           TREE_CHAIN (label) = BLOCK_VARS (block);
1221           BLOCK_VARS (block) = label;
1222         }
1223
1224       named_labels = NULL_TREE;
1225     }
1226
1227   /* Any uses of undefined labels now operate under constraints
1228      of next binding contour.  */
1229   {
1230     struct binding_level *level_chain;
1231     level_chain = current_binding_level->level_chain;
1232     if (level_chain)
1233       {
1234         struct named_label_list *labels;
1235         for (labels = named_label_uses; labels; labels = labels->next)
1236           if (labels->binding_level == current_binding_level)
1237             {
1238               labels->binding_level = level_chain;
1239               labels->names_in_scope = level_chain->names;
1240             }
1241       }
1242   }
1243
1244   tmp = current_binding_level->keep;
1245
1246   pop_binding_level ();
1247   if (functionbody)
1248     DECL_INITIAL (current_function_decl) = block;
1249   else if (block)
1250     {
1251       if (!block_previously_created)
1252         current_binding_level->blocks
1253           = chainon (current_binding_level->blocks, block);
1254     }
1255   /* If we did not make a block for the level just exited,
1256      any blocks made for inner levels
1257      (since they cannot be recorded as subblocks in that level)
1258      must be carried forward so they will later become subblocks
1259      of something else.  */
1260   else if (subblocks)
1261     {
1262       if (keep == 2)
1263         current_binding_level->blocks
1264           = chainon (subblocks, current_binding_level->blocks);
1265       else
1266         current_binding_level->blocks
1267           = chainon (current_binding_level->blocks, subblocks);
1268     }
1269
1270   /* Take care of compiler's internal binding structures.  */
1271   if (tmp == 2)
1272     {
1273       expand_end_bindings (getdecls (), keep, 1);
1274       /* Each and every BLOCK node created here in `poplevel' is important
1275          (e.g. for proper debugging information) so if we created one
1276          earlier, mark it as "used".  */
1277       if (block)
1278         TREE_USED (block) = 1;
1279       block = poplevel (keep, reverse, real_functionbody);
1280     }
1281
1282   /* Each and every BLOCK node created here in `poplevel' is important
1283      (e.g. for proper debugging information) so if we created one
1284      earlier, mark it as "used".  */
1285   if (block)
1286     TREE_USED (block) = 1;
1287   return block;
1288 }
1289
1290 /* Resume a binding level for a namespace.  */
1291
1292 void
1293 resume_level (b)
1294      struct binding_level *b;
1295 {
1296   tree decls, link;
1297
1298   resume_binding_level (b);
1299
1300   /* Resume the variable caches.  */
1301   decls = current_binding_level->names;
1302
1303   /* Restore the meanings of the local variables of this level.  */
1304
1305   for (link = decls; link; link = TREE_CHAIN (link))
1306     {
1307       /* If it doesn't have a name, there is nothing left to do with it.  */
1308       if (DECL_NAME (link) == NULL_TREE)
1309         continue;
1310
1311       IDENTIFIER_LOCAL_VALUE (DECL_NAME (link)) = link;
1312
1313       /* If this is a TYPE_DECL, push it into the type value slot.  */
1314       if (TREE_CODE (link) == TYPE_DECL)
1315         SET_IDENTIFIER_TYPE_VALUE (DECL_NAME (link), TREE_TYPE (link));
1316     }
1317 }
1318
1319 /* Delete the node BLOCK from the current binding level.
1320    This is used for the block inside a stmt expr ({...})
1321    so that the block can be reinserted where appropriate.  */
1322
1323 void
1324 delete_block (block)
1325      tree block;
1326 {
1327   tree t;
1328   if (current_binding_level->blocks == block)
1329     current_binding_level->blocks = TREE_CHAIN (block);
1330   for (t = current_binding_level->blocks; t;)
1331     {
1332       if (TREE_CHAIN (t) == block)
1333         TREE_CHAIN (t) = TREE_CHAIN (block);
1334       else
1335         t = TREE_CHAIN (t);
1336     }
1337   TREE_CHAIN (block) = NULL_TREE;
1338   /* Clear TREE_USED which is always set by poplevel.
1339      The flag is set again if insert_block is called.  */
1340   TREE_USED (block) = 0;
1341 }
1342
1343 /* Insert BLOCK at the end of the list of subblocks of the
1344    current binding level.  This is used when a BIND_EXPR is expanded,
1345    to handle the BLOCK node inside the BIND_EXPR.  */
1346
1347 void
1348 insert_block (block)
1349      tree block;
1350 {
1351   TREE_USED (block) = 1;
1352   current_binding_level->blocks
1353     = chainon (current_binding_level->blocks, block);
1354 }
1355
1356 /* Add BLOCK to the current list of blocks for this binding contour.  */
1357
1358 void
1359 add_block_current_level (block)
1360      tree block;
1361 {
1362   current_binding_level->blocks
1363     = chainon (current_binding_level->blocks, block);
1364 }
1365
1366 /* Set the BLOCK node for the innermost scope
1367    (the one we are currently in).  */
1368
1369 void
1370 set_block (block)
1371     register tree block;
1372 {
1373   current_binding_level->this_block = block;
1374 }
1375
1376 /* Do a pushlevel for class declarations.  */
1377
1378 void
1379 pushlevel_class ()
1380 {
1381   register struct binding_level *newlevel;
1382
1383   /* Reuse or create a struct for this binding level.  */
1384 #if defined(DEBUG_CP_BINDING_LEVELS)
1385   if (0)
1386 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1387   if (free_binding_level)
1388 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1389     {
1390       newlevel = free_binding_level;
1391       free_binding_level = free_binding_level->level_chain;
1392     }
1393   else
1394     {
1395       newlevel = make_binding_level ();
1396     }
1397
1398 #if defined(DEBUG_CP_BINDING_LEVELS)
1399   is_class_level = 1;
1400 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1401
1402   push_binding_level (newlevel, 0, 0);
1403
1404   decl_stack = push_decl_level (decl_stack, &decl_obstack);
1405   class_binding_level = current_binding_level;
1406   class_binding_level->parm_flag = 2;
1407   /* We have just pushed into a new binding level.  Now, fake out the rest
1408      of the compiler.  Set the `current_binding_level' back to point to
1409      the most closely containing non-class binding level.  */
1410   do
1411     {
1412       current_binding_level = current_binding_level->level_chain;
1413     }
1414   while (current_binding_level->parm_flag == 2);
1415 }
1416
1417 /* ...and a poplevel for class declarations.  FORCE is used to force
1418    clearing out of CLASS_VALUEs after a class definition.  */
1419
1420 tree
1421 poplevel_class (force)
1422      int force;
1423 {
1424   register struct binding_level *level = class_binding_level;
1425   tree block = NULL_TREE;
1426   tree shadowed;
1427
1428   my_friendly_assert (level != 0, 354);
1429   
1430   decl_stack = pop_stack_level (decl_stack);
1431   for (shadowed = level->shadowed; shadowed; shadowed = TREE_CHAIN (shadowed))
1432     IDENTIFIER_LOCAL_VALUE (TREE_PURPOSE (shadowed)) = TREE_VALUE (shadowed);
1433   /* If we're leaving a toplevel class, don't bother to do the setting
1434      of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
1435      shouldn't even be used when current_class_type isn't set, and second,
1436      if we don't touch it here, we're able to use the cache effect if the
1437      next time we're entering a class scope, it is the same class.  */
1438   if (current_class_depth != 1 || force)
1439     for (shadowed = level->class_shadowed;
1440          shadowed;
1441          shadowed = TREE_CHAIN (shadowed))
1442       IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = TREE_VALUE (shadowed);
1443   else
1444     /* Remember to save what IDENTIFIER's were bound in this scope so we
1445        can recover from cache misses.  */
1446     {
1447       previous_class_type = current_class_type;
1448       previous_class_values = class_binding_level->class_shadowed;
1449     }
1450   for (shadowed = level->type_shadowed;
1451        shadowed;
1452        shadowed = TREE_CHAIN (shadowed))
1453     IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed)) = TREE_VALUE (shadowed);
1454
1455   GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1456                       (HOST_WIDE_INT) class_binding_level->level_chain,
1457                       class_binding_level->parm_flag,
1458                       class_binding_level->keep);
1459
1460   if (class_binding_level->parm_flag != 2)
1461     class_binding_level = (struct binding_level *)0;
1462
1463   /* Now, pop out of the the binding level which we created up in the
1464      `pushlevel_class' routine.  */
1465 #if defined(DEBUG_CP_BINDING_LEVELS)
1466   is_class_level = 1;
1467 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1468
1469   pop_binding_level ();
1470
1471   return block;
1472 }
1473 \f
1474 /* For debugging.  */
1475 static int no_print_functions = 0;
1476 static int no_print_builtins = 0;
1477
1478 void
1479 print_binding_level (lvl)
1480      struct binding_level *lvl;
1481 {
1482   tree t;
1483   int i = 0, len;
1484   fprintf (stderr, " blocks=");
1485   fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
1486   fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
1487            list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
1488   if (lvl->tag_transparent)
1489     fprintf (stderr, " tag-transparent");
1490   if (lvl->more_cleanups_ok)
1491     fprintf (stderr, " more-cleanups-ok");
1492   if (lvl->have_cleanups)
1493     fprintf (stderr, " have-cleanups");
1494   fprintf (stderr, "\n");
1495   if (lvl->names)
1496     {
1497       fprintf (stderr, " names:\t");
1498       /* We can probably fit 3 names to a line?  */
1499       for (t = lvl->names; t; t = TREE_CHAIN (t))
1500         {
1501           if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL)) 
1502             continue;
1503           if (no_print_builtins
1504               && (TREE_CODE (t) == TYPE_DECL)
1505               && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
1506             continue;
1507
1508           /* Function decls tend to have longer names.  */
1509           if (TREE_CODE (t) == FUNCTION_DECL)
1510             len = 3;
1511           else
1512             len = 2;
1513           i += len;
1514           if (i > 6)
1515             {
1516               fprintf (stderr, "\n\t");
1517               i = len;
1518             }
1519           print_node_brief (stderr, "", t, 0);
1520           if (t == error_mark_node)
1521             break;
1522         }
1523       if (i)
1524         fprintf (stderr, "\n");
1525     }
1526   if (lvl->tags)
1527     {
1528       fprintf (stderr, " tags:\t");
1529       i = 0;
1530       for (t = lvl->tags; t; t = TREE_CHAIN (t))
1531         {
1532           if (TREE_PURPOSE (t) == NULL_TREE)
1533             len = 3;
1534           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1535             len = 2;
1536           else
1537             len = 4;
1538           i += len;
1539           if (i > 5)
1540             {
1541               fprintf (stderr, "\n\t");
1542               i = len;
1543             }
1544           if (TREE_PURPOSE (t) == NULL_TREE)
1545             {
1546               print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
1547               fprintf (stderr, ">");
1548             }
1549           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1550             print_node_brief (stderr, "", TREE_VALUE (t), 0);
1551           else
1552             {
1553               print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
1554               print_node_brief (stderr, "", TREE_VALUE (t), 0);
1555               fprintf (stderr, ">");
1556             }
1557         }
1558       if (i)
1559         fprintf (stderr, "\n");
1560     }
1561   if (lvl->shadowed)
1562     {
1563       fprintf (stderr, " shadowed:");
1564       for (t = lvl->shadowed; t; t = TREE_CHAIN (t))
1565         {
1566           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1567         }
1568       fprintf (stderr, "\n");
1569     }
1570   if (lvl->class_shadowed)
1571     {
1572       fprintf (stderr, " class-shadowed:");
1573       for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
1574         {
1575           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1576         }
1577       fprintf (stderr, "\n");
1578     }
1579   if (lvl->type_shadowed)
1580     {
1581       fprintf (stderr, " type-shadowed:");
1582       for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
1583         {
1584           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1585         }
1586       fprintf (stderr, "\n");
1587     }
1588 }
1589
1590 void
1591 print_other_binding_stack (stack)
1592      struct binding_level *stack;
1593 {
1594   struct binding_level *level;
1595   for (level = stack; level != global_binding_level; level = level->level_chain)
1596     {
1597       fprintf (stderr, "binding level ");
1598       fprintf (stderr, HOST_PTR_PRINTF, level);
1599       fprintf (stderr, "\n");
1600       print_binding_level (level);
1601     }
1602 }
1603
1604 void
1605 print_binding_stack ()
1606 {
1607   struct binding_level *b;
1608   fprintf (stderr, "current_binding_level=");
1609   fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
1610   fprintf (stderr, "\nclass_binding_level=");
1611   fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
1612   fprintf (stderr, "\nglobal_binding_level=");
1613   fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
1614   fprintf (stderr, "\n");
1615   if (class_binding_level)
1616     {
1617       for (b = class_binding_level; b; b = b->level_chain)
1618         if (b == current_binding_level)
1619           break;
1620       if (b)
1621         b = class_binding_level;
1622       else
1623         b = current_binding_level;
1624     }
1625   else
1626     b = current_binding_level;
1627   print_other_binding_stack (b);
1628   fprintf (stderr, "global:\n");
1629   print_binding_level (global_binding_level);
1630 }
1631
1632 extern char * first_global_object_name;
1633
1634 /* Get a unique name for each call to this routine for unnamed namespaces.
1635    Mostly copied from get_file_function_name.  */
1636
1637 static tree
1638 get_unique_name ()
1639 {
1640   static int temp_name_counter = 0;
1641   char *buf;
1642   register char *p;
1643
1644   if (first_global_object_name)
1645     p = first_global_object_name;
1646   else if (main_input_filename)
1647     p = main_input_filename;
1648   else
1649     p = input_filename;
1650
1651 #define UNNAMED_NAMESPACE_FORMAT "__%s_%d"
1652
1653   buf = (char *) alloca (sizeof (UNNAMED_NAMESPACE_FORMAT) + strlen (p));
1654
1655   sprintf (buf, UNNAMED_NAMESPACE_FORMAT, p, temp_name_counter++);
1656
1657   /* Don't need to pull weird characters out of global names.  */
1658   if (p != first_global_object_name)
1659     {
1660       for (p = buf+11; *p; p++)
1661         if (! ((*p >= '0' && *p <= '9')
1662 #ifndef NO_DOLLAR_IN_LABEL      /* this for `$'; unlikely, but... -- kr */
1663                || *p == '$'
1664 #endif
1665 #ifndef NO_DOT_IN_LABEL         /* this for `.'; unlikely, but...  */
1666                || *p == '.'
1667 #endif
1668                || (*p >= 'A' && *p <= 'Z')
1669                || (*p >= 'a' && *p <= 'z')))
1670           *p = '_';
1671     }
1672
1673   return get_identifier (buf);
1674 }
1675
1676 /* Push into the scope of the NAME namespace.  If NAME is NULL_TREE, then we
1677    select a name that is unique to this compilation unit.  */
1678
1679 void
1680 push_namespace (name)
1681      tree name;
1682 {
1683 #if 1
1684   static int warned;
1685   if (! warned)
1686     sorry ("namespace");
1687   
1688   warned = 1;
1689 #else
1690   extern tree current_namespace;
1691   tree old_id = get_namespace_id ();
1692   char *buf;
1693   tree d;
1694
1695   if (! name)
1696     {
1697       /* Create a truly ugly name! */
1698       name = get_unique_name ();
1699     }
1700
1701   d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
1702
1703   /* Mark them as external, so redeclaration_error_message doesn't think
1704      they are duplicates.  */
1705
1706   DECL_EXTERNAL (d) = 1;
1707   d = pushdecl (d);
1708
1709   if (NAMESPACE_LEVEL (d) == 0)
1710     {
1711       /* This is new for this compilation unit.  */
1712       pushlevel (0);
1713       declare_namespace_level ();
1714       NAMESPACE_LEVEL (d) = current_binding_level;
1715     }
1716   else
1717     resume_level (NAMESPACE_LEVEL (d));
1718
1719   /* This code is just is bit old now...  */ 
1720   current_namespace = tree_cons (NULL_TREE, name, current_namespace);
1721   buf = (char *) alloca (4 + (old_id ? IDENTIFIER_LENGTH (old_id) : 0)
1722                          + IDENTIFIER_LENGTH (name));
1723   sprintf (buf, "%s%s", old_id ? IDENTIFIER_POINTER (old_id) : "",
1724            IDENTIFIER_POINTER (name));
1725   TREE_PURPOSE (current_namespace) = get_identifier (buf);
1726 #endif
1727 }
1728
1729 /* Pop from the scope of the current namespace.  */
1730
1731 void
1732 pop_namespace ()
1733 {
1734 #if 0
1735   extern tree current_namespace;
1736   tree decls, link;
1737   current_namespace = TREE_CHAIN (current_namespace);
1738
1739   /* Just in case we get out of sync.  */
1740   if (! namespace_bindings_p ())
1741     poplevel (0, 0, 0);
1742
1743   decls = current_binding_level->names;
1744
1745   /* Clear out the meanings of the local variables of this level.  */
1746
1747   for (link = decls; link; link = TREE_CHAIN (link))
1748     {
1749       if (DECL_NAME (link) != NULL_TREE)
1750         {
1751           /* If the ident. was used or addressed via a local extern decl,
1752              don't forget that fact.  */
1753           if (DECL_EXTERNAL (link))
1754             {
1755               if (TREE_USED (link))
1756                 TREE_USED (DECL_ASSEMBLER_NAME (link)) = 1;
1757               if (TREE_ADDRESSABLE (link))
1758                 TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (link)) = 1;
1759             }
1760           IDENTIFIER_LOCAL_VALUE (DECL_NAME (link)) = NULL_TREE;
1761         }
1762     }
1763
1764   /* Restore all name-meanings of the outer levels
1765      that were shadowed by this level.  */
1766
1767   for (link = current_binding_level->shadowed; link; link = TREE_CHAIN (link))
1768     IDENTIFIER_LOCAL_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
1769   for (link = current_binding_level->class_shadowed;
1770        link; link = TREE_CHAIN (link))
1771     IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
1772   for (link = current_binding_level->type_shadowed;
1773        link; link = TREE_CHAIN (link))
1774     IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
1775
1776   /* suspend a level.  */
1777   suspend_binding_level ();
1778 #endif
1779 }
1780 \f
1781 /* Subroutines for reverting temporarily to top-level for instantiation
1782    of templates and such.  We actually need to clear out the class- and
1783    local-value slots of all identifiers, so that only the global values
1784    are at all visible.  Simply setting current_binding_level to the global
1785    scope isn't enough, because more binding levels may be pushed.  */
1786 struct saved_scope {
1787   struct binding_level *old_binding_level;
1788   tree old_bindings;
1789   struct saved_scope *prev;
1790   tree class_name, class_type, function_decl;
1791   struct binding_level *class_bindings;
1792   tree *lang_base, *lang_stack, lang_name;
1793   int lang_stacksize;
1794   int minimal_parse_mode;
1795   tree last_function_parms;
1796   tree template_parms;
1797   HOST_WIDE_INT processing_template_decl;
1798   tree previous_class_type, previous_class_values;
1799 };
1800 static struct saved_scope *current_saved_scope;
1801
1802 static tree
1803 store_bindings (names, old_bindings)
1804      tree names, old_bindings;
1805 {
1806   tree t;
1807   for (t = names; t; t = TREE_CHAIN (t))
1808     {
1809       tree binding, t1, id;
1810
1811       if (TREE_CODE (t) == TREE_LIST)
1812         id = TREE_PURPOSE (t);
1813       else
1814         id = DECL_NAME (t);
1815
1816       if (!id
1817           || (!IDENTIFIER_LOCAL_VALUE (id)
1818               && !IDENTIFIER_CLASS_VALUE (id)))
1819         continue;
1820
1821       for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
1822         if (TREE_VEC_ELT (t1, 0) == id)
1823           goto skip_it;
1824             
1825       binding = make_tree_vec (4);
1826       if (id)
1827         {
1828           my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
1829           TREE_VEC_ELT (binding, 0) = id;
1830           TREE_VEC_ELT (binding, 1) = IDENTIFIER_TYPE_VALUE (id);
1831           TREE_VEC_ELT (binding, 2) = IDENTIFIER_LOCAL_VALUE (id);
1832           TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
1833           IDENTIFIER_LOCAL_VALUE (id) = NULL_TREE;
1834           IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
1835         }
1836       TREE_CHAIN (binding) = old_bindings;
1837       old_bindings = binding;
1838     skip_it:
1839       ;
1840     }
1841   return old_bindings;
1842 }
1843
1844 void
1845 maybe_push_to_top_level (pseudo)
1846      int pseudo;
1847 {
1848   extern int current_lang_stacksize;
1849   struct saved_scope *s
1850     = (struct saved_scope *) xmalloc (sizeof (struct saved_scope));
1851   struct binding_level *b = inner_binding_level;
1852   tree old_bindings = NULL_TREE;
1853
1854   if (current_function_decl)
1855     push_cp_function_context (NULL_TREE);
1856
1857   if (previous_class_type)
1858     old_bindings = store_bindings (previous_class_values, old_bindings);
1859
1860   /* Have to include global_binding_level, because class-level decls
1861      aren't listed anywhere useful.  */
1862   for (; b; b = b->level_chain)
1863     {
1864       tree t;
1865
1866       if (b == global_binding_level || (pseudo && b->pseudo_global))
1867         break;
1868
1869       old_bindings = store_bindings (b->names, old_bindings);
1870       /* We also need to check class_shadowed to save class-level type
1871          bindings, since pushclass doesn't fill in b->names.  */
1872       if (b->parm_flag == 2)
1873         old_bindings = store_bindings (b->class_shadowed, old_bindings);
1874
1875       /* Unwind type-value slots back to top level.  */
1876       for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
1877         SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
1878     }
1879
1880   s->old_binding_level = current_binding_level;
1881   current_binding_level = b;
1882
1883   s->class_name = current_class_name;
1884   s->class_type = current_class_type;
1885   s->function_decl = current_function_decl;
1886   s->class_bindings = class_binding_level;
1887   s->lang_stack = current_lang_stack;
1888   s->lang_base = current_lang_base;
1889   s->lang_stacksize = current_lang_stacksize;
1890   s->lang_name = current_lang_name;
1891   s->minimal_parse_mode = minimal_parse_mode;
1892   s->last_function_parms = last_function_parms;
1893   s->template_parms = current_template_parms;
1894   s->processing_template_decl = processing_template_decl;
1895   s->previous_class_type = previous_class_type;
1896   s->previous_class_values = previous_class_values;
1897
1898   current_class_name = current_class_type = NULL_TREE;
1899   current_function_decl = NULL_TREE;
1900   class_binding_level = (struct binding_level *)0;
1901   current_lang_stacksize = 10;
1902   current_lang_stack = current_lang_base
1903     = (tree *) xmalloc (current_lang_stacksize * sizeof (tree));
1904   current_lang_name = lang_name_cplusplus;
1905   strict_prototype = strict_prototypes_lang_cplusplus;
1906   named_labels = NULL_TREE;
1907   minimal_parse_mode = 0;
1908   previous_class_type = previous_class_values = NULL_TREE;
1909   if (!pseudo)
1910     {
1911       current_template_parms = NULL_TREE;
1912       processing_template_decl = 0;
1913     }
1914
1915   s->prev = current_saved_scope;
1916   s->old_bindings = old_bindings;
1917   current_saved_scope = s;
1918
1919   push_obstacks (&permanent_obstack, &permanent_obstack);
1920 }
1921
1922 void
1923 push_to_top_level ()
1924 {
1925   maybe_push_to_top_level (0);
1926 }
1927
1928 void
1929 pop_from_top_level ()
1930 {
1931   extern int current_lang_stacksize;
1932   struct saved_scope *s = current_saved_scope;
1933   tree t;
1934
1935   /* Clear out class-level bindings cache.  */
1936   if (previous_class_type)
1937     {
1938       popclass (-1);
1939       previous_class_type = NULL_TREE;
1940     }
1941
1942   pop_obstacks ();
1943
1944   current_binding_level = s->old_binding_level;
1945   current_saved_scope = s->prev;
1946   for (t = s->old_bindings; t; t = TREE_CHAIN (t))
1947     {
1948       tree id = TREE_VEC_ELT (t, 0);
1949       if (id)
1950         {
1951           IDENTIFIER_TYPE_VALUE (id) = TREE_VEC_ELT (t, 1);
1952           IDENTIFIER_LOCAL_VALUE (id) = TREE_VEC_ELT (t, 2);
1953           IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
1954         }
1955     }
1956   current_class_name = s->class_name;
1957   current_class_type = s->class_type;
1958   current_function_decl = s->function_decl;
1959   class_binding_level = s->class_bindings;
1960   free (current_lang_base);
1961   current_lang_base = s->lang_base;
1962   current_lang_stack = s->lang_stack;
1963   current_lang_name = s->lang_name;
1964   current_lang_stacksize = s->lang_stacksize;
1965   if (current_lang_name == lang_name_cplusplus)
1966     strict_prototype = strict_prototypes_lang_cplusplus;
1967   else if (current_lang_name == lang_name_c)
1968     strict_prototype = strict_prototypes_lang_c;
1969   minimal_parse_mode = s->minimal_parse_mode;
1970   last_function_parms = s->last_function_parms;
1971   current_template_parms = s->template_parms;
1972   processing_template_decl = s->processing_template_decl;
1973   previous_class_type = s->previous_class_type;
1974   previous_class_values = s->previous_class_values;
1975
1976   free (s);
1977
1978   if (current_function_decl)
1979     pop_cp_function_context (NULL_TREE);
1980 }
1981 \f
1982 /* Push a definition of struct, union or enum tag "name".
1983    into binding_level "b".   "type" should be the type node, 
1984    We assume that the tag "name" is not already defined.
1985
1986    Note that the definition may really be just a forward reference.
1987    In that case, the TYPE_SIZE will be a NULL_TREE.
1988
1989    C++ gratuitously puts all these tags in the name space.  */
1990
1991 /* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
1992    record the shadowed value for this binding contour.  TYPE is
1993    the type that ID maps to.  */
1994
1995 static void
1996 set_identifier_type_value_with_scope (id, type, b)
1997      tree id;
1998      tree type;
1999      struct binding_level *b;
2000 {
2001   if (b != global_binding_level)
2002     {
2003       tree old_type_value = IDENTIFIER_TYPE_VALUE (id);
2004       b->type_shadowed
2005         = tree_cons (id, old_type_value, b->type_shadowed);
2006     }
2007   SET_IDENTIFIER_TYPE_VALUE (id, type);
2008 }
2009
2010 /* As set_identifier_type_value_with_scope, but using inner_binding_level.  */
2011
2012 void
2013 set_identifier_type_value (id, type)
2014      tree id;
2015      tree type;
2016 {
2017   set_identifier_type_value_with_scope (id, type, inner_binding_level);
2018 }
2019
2020 /* Pop off extraneous binding levels left over due to syntax errors.
2021
2022    We don't pop past namespaces, as they might be valid.  */
2023
2024 void
2025 pop_everything ()
2026 {
2027 #ifdef DEBUG_CP_BINDING_LEVELS
2028   fprintf (stderr, "XXX entering pop_everything ()\n");
2029 #endif
2030   while (! toplevel_bindings_p () && ! pseudo_global_level_p ())
2031     {
2032       if (class_binding_level)
2033         pop_nested_class (1);
2034       else
2035         poplevel (0, 0, 0);
2036     }
2037 #ifdef DEBUG_CP_BINDING_LEVELS
2038   fprintf (stderr, "XXX leaving pop_everything ()\n");
2039 #endif
2040 }
2041
2042 /* Push a tag name NAME for struct/class/union/enum type TYPE.
2043    Normally put into into the inner-most non-tag-transparent scope,
2044    but if GLOBALIZE is true, put it in the inner-most non-class scope.
2045    The latter is needed for implicit declarations.  */
2046
2047 void
2048 pushtag (name, type, globalize)
2049      tree name, type;
2050      int globalize;
2051 {
2052   register struct binding_level *b;
2053   tree context = 0;
2054   tree c_decl = 0;
2055
2056   b = inner_binding_level;
2057   while (b->tag_transparent
2058          || (globalize && b->parm_flag == 2))
2059     b = b->level_chain;
2060
2061   if (toplevel_bindings_p ())
2062     b->tags = perm_tree_cons (name, type, b->tags);
2063   else
2064     b->tags = saveable_tree_cons (name, type, b->tags);
2065
2066   if (name)
2067     {
2068       context = type ? TYPE_CONTEXT (type) : NULL_TREE;
2069       if (! context && ! globalize)
2070         context = current_scope ();
2071       if (context)
2072         c_decl = TREE_CODE (context) == FUNCTION_DECL
2073           ? context : TYPE_MAIN_DECL (context);
2074
2075       /* Do C++ gratuitous typedefing.  */
2076       if (IDENTIFIER_TYPE_VALUE (name) != type)
2077         {
2078           register tree d;
2079           int newdecl = 0;
2080           
2081           if (b->parm_flag != 2
2082               || TYPE_SIZE (current_class_type) != NULL_TREE)
2083             {
2084               d = lookup_nested_type (type, c_decl);
2085
2086               if (d == NULL_TREE)
2087                 {
2088                   newdecl = 1;
2089                   d = build_decl (TYPE_DECL, name, type);
2090                   SET_DECL_ARTIFICIAL (d);
2091                   set_identifier_type_value_with_scope (name, type, b);
2092                 }
2093               else
2094                 d = TYPE_MAIN_DECL (d);
2095
2096               TYPE_NAME (type) = d;
2097               DECL_CONTEXT (d) = context;
2098               if (! globalize && processing_template_decl && IS_AGGR_TYPE (type))
2099                 push_template_decl (d);
2100
2101               if (b->parm_flag == 2)
2102                 d = pushdecl_class_level (d);
2103               else
2104                 d = pushdecl_with_scope (d, b);
2105             }
2106           else
2107             {
2108               /* Make nested declarations go into class-level scope.  */
2109               newdecl = 1;
2110               d = build_decl (TYPE_DECL, name, type);
2111               SET_DECL_ARTIFICIAL (d);
2112               TYPE_NAME (type) = d;
2113               DECL_CONTEXT (d) = context;
2114               if (! globalize && processing_template_decl && IS_AGGR_TYPE (type))
2115                 push_template_decl (d);
2116
2117               d = pushdecl_class_level (d);
2118             }
2119           if (newdecl)
2120             {
2121               if (ANON_AGGRNAME_P (name))
2122                 DECL_IGNORED_P (d) = 1;
2123
2124               TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2125               DECL_ASSEMBLER_NAME (d)
2126                 = get_identifier (build_overload_name (type, 1, 1));
2127             }
2128         }
2129       if (b->parm_flag == 2)
2130         {
2131           TREE_NONLOCAL_FLAG (type) = 1;
2132           if (TYPE_SIZE (current_class_type) == NULL_TREE)
2133             CLASSTYPE_TAGS (current_class_type) = b->tags;
2134         }
2135     }
2136
2137   if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2138     /* Use the canonical TYPE_DECL for this node.  */
2139     TYPE_STUB_DECL (type) = TYPE_NAME (type);
2140   else
2141     {
2142       /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2143          will be the tagged type we just added to the current
2144          binding level.  This fake NULL-named TYPE_DECL node helps
2145          dwarfout.c to know when it needs to output a
2146          representation of a tagged type, and it also gives us a
2147          convenient place to record the "scope start" address for
2148          the tagged type.  */
2149
2150       tree d = build_decl (TYPE_DECL, NULL_TREE, type);
2151       TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2152     }
2153 }
2154
2155 /* Counter used to create anonymous type names.  */
2156
2157 static int anon_cnt = 0;
2158
2159 /* Return an IDENTIFIER which can be used as a name for
2160    anonymous structs and unions.  */
2161
2162 tree
2163 make_anon_name ()
2164 {
2165   char buf[32];
2166
2167   sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2168   return get_identifier (buf);
2169 }
2170
2171 /* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2172    This keeps dbxout from getting confused.  */
2173
2174 void
2175 clear_anon_tags ()
2176 {
2177   register struct binding_level *b;
2178   register tree tags;
2179   static int last_cnt = 0;
2180
2181   /* Fast out if no new anon names were declared.  */
2182   if (last_cnt == anon_cnt)
2183     return;
2184
2185   b = current_binding_level;
2186   while (b->tag_transparent)
2187     b = b->level_chain;
2188   tags = b->tags;
2189   while (tags)
2190     {
2191       /* A NULL purpose means we have already processed all tags
2192          from here to the end of the list.  */
2193       if (TREE_PURPOSE (tags) == NULL_TREE)
2194         break;
2195       if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2196         TREE_PURPOSE (tags) = NULL_TREE;
2197       tags = TREE_CHAIN (tags);
2198     }
2199   last_cnt = anon_cnt;
2200 }
2201 \f
2202 /* Subroutine of duplicate_decls: return truthvalue of whether
2203    or not types of these decls match.
2204
2205    For C++, we must compare the parameter list so that `int' can match
2206    `int&' in a parameter position, but `int&' is not confused with
2207    `const int&'.  */
2208
2209 int
2210 decls_match (newdecl, olddecl)
2211      tree newdecl, olddecl;
2212 {
2213   int types_match;
2214
2215   if (TREE_CODE (newdecl) == FUNCTION_DECL
2216       && TREE_CODE (olddecl) == FUNCTION_DECL)
2217     {
2218       tree f1 = TREE_TYPE (newdecl);
2219       tree f2 = TREE_TYPE (olddecl);
2220       tree p1 = TYPE_ARG_TYPES (f1);
2221       tree p2 = TYPE_ARG_TYPES (f2);
2222
2223       /* When we parse a static member function definition,
2224          we put together a FUNCTION_DECL which thinks its type
2225          is METHOD_TYPE.  Change that to FUNCTION_TYPE, and
2226          proceed.  */
2227       if (TREE_CODE (f1) == METHOD_TYPE && DECL_STATIC_FUNCTION_P (olddecl))
2228         revert_static_member_fn (&newdecl, &f1, &p1);
2229       else if (TREE_CODE (f2) == METHOD_TYPE
2230                && DECL_STATIC_FUNCTION_P (newdecl))
2231         revert_static_member_fn (&olddecl, &f2, &p2);
2232
2233       /* Here we must take care of the case where new default
2234          parameters are specified.  Also, warn if an old
2235          declaration becomes ambiguous because default
2236          parameters may cause the two to be ambiguous.  */
2237       if (TREE_CODE (f1) != TREE_CODE (f2))
2238         {
2239           if (TREE_CODE (f1) == OFFSET_TYPE)
2240             cp_compiler_error ("`%D' redeclared as member function", newdecl);
2241           else
2242             cp_compiler_error ("`%D' redeclared as non-member function", newdecl);
2243           return 0;
2244         }
2245
2246       if (comptypes (TREE_TYPE (f1), TREE_TYPE (f2), 1))
2247         {
2248           if (! strict_prototypes_lang_c && DECL_LANGUAGE (olddecl) == lang_c
2249               && p2 == NULL_TREE)
2250             {
2251               types_match = self_promoting_args_p (p1);
2252               if (p1 == void_list_node)
2253                 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2254             }
2255           else if (!strict_prototypes_lang_c && DECL_LANGUAGE (olddecl)==lang_c
2256                    && DECL_LANGUAGE (newdecl) == lang_c && p1 == NULL_TREE)
2257             {
2258               types_match = self_promoting_args_p (p2);
2259               TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2260             }
2261           else
2262             types_match = compparms (p1, p2, 3);
2263         }
2264       else
2265         types_match = 0;
2266     }
2267   else if (TREE_CODE (newdecl) == TEMPLATE_DECL
2268            && TREE_CODE (olddecl) == TEMPLATE_DECL)
2269     {
2270         tree newargs = DECL_TEMPLATE_PARMS (newdecl);
2271         tree oldargs = DECL_TEMPLATE_PARMS (olddecl);
2272         int i, len = TREE_VEC_LENGTH (newargs);
2273
2274         if (TREE_VEC_LENGTH (oldargs) != len)
2275           return 0;
2276         
2277         for (i = 0; i < len; i++)
2278           {
2279             tree newarg = TREE_VALUE (TREE_VEC_ELT (newargs, i));
2280             tree oldarg = TREE_VALUE (TREE_VEC_ELT (oldargs, i));
2281             if (TREE_CODE (newarg) != TREE_CODE (oldarg))
2282               return 0;
2283             else if (TREE_CODE (newarg) == TYPE_DECL)
2284               /* continue */;
2285             else if (! comptypes (TREE_TYPE (newarg), TREE_TYPE (oldarg), 1))
2286               return 0;
2287           }
2288
2289         if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2290           types_match = 1;
2291         else
2292           types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
2293                                      DECL_TEMPLATE_RESULT (newdecl));
2294     }
2295   else
2296     {
2297       if (TREE_TYPE (newdecl) == error_mark_node)
2298         types_match = TREE_TYPE (olddecl) == error_mark_node;
2299       else if (TREE_TYPE (olddecl) == NULL_TREE)
2300         types_match = TREE_TYPE (newdecl) == NULL_TREE;
2301       else if (TREE_TYPE (newdecl) == NULL_TREE)
2302         types_match = 0;
2303       /* Qualifiers must match, and they may be present on either, the type
2304          or the decl.  */
2305       else if ((TREE_READONLY (newdecl)
2306                 || TYPE_READONLY (TREE_TYPE (newdecl)))
2307                == (TREE_READONLY (olddecl)
2308                    || TYPE_READONLY (TREE_TYPE (olddecl)))
2309                && (TREE_THIS_VOLATILE (newdecl)
2310                     || TYPE_VOLATILE (TREE_TYPE (newdecl)))
2311                    == (TREE_THIS_VOLATILE (olddecl)
2312                        || TYPE_VOLATILE (TREE_TYPE (olddecl))))
2313         types_match = comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (newdecl)),
2314                                  TYPE_MAIN_VARIANT (TREE_TYPE (olddecl)), 1);
2315       else
2316         types_match = 0;
2317     }
2318
2319   return types_match;
2320 }
2321
2322 /* If NEWDECL is `static' and an `extern' was seen previously,
2323    warn about it.  (OLDDECL may be NULL_TREE; NAME contains
2324    information about previous usage as an `extern'.)
2325
2326    Note that this does not apply to the C++ case of declaring
2327    a variable `extern const' and then later `const'.
2328
2329    Don't complain about built-in functions, since they are beyond
2330    the user's control.  */
2331
2332 static void
2333 warn_extern_redeclared_static (newdecl, olddecl)
2334      tree newdecl, olddecl;
2335 {
2336   tree name;
2337
2338   static char *explicit_extern_static_warning
2339     = "`%D' was declared `extern' and later `static'";
2340   static char *implicit_extern_static_warning
2341     = "`%D' was declared implicitly `extern' and later `static'";
2342
2343   if (TREE_CODE (newdecl) == TYPE_DECL)
2344     return;
2345
2346   name = DECL_ASSEMBLER_NAME (newdecl);
2347   if (TREE_PUBLIC (name) && DECL_THIS_STATIC (newdecl))
2348     {
2349       /* It's okay to redeclare an ANSI built-in function as static,
2350          or to declare a non-ANSI built-in function as anything.  */
2351       if (! (TREE_CODE (newdecl) == FUNCTION_DECL
2352              && olddecl != NULL_TREE
2353              && TREE_CODE (olddecl) == FUNCTION_DECL
2354              && (DECL_BUILT_IN (olddecl)
2355                  || DECL_BUILT_IN_NONANSI (olddecl))))
2356         {
2357           cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
2358                       ? implicit_extern_static_warning
2359                       : explicit_extern_static_warning, newdecl);
2360           if (olddecl != NULL_TREE)
2361             cp_pedwarn_at ("previous declaration of `%D'", olddecl);
2362         }
2363     }
2364 }
2365
2366 /* Handle when a new declaration NEWDECL has the same name as an old
2367    one OLDDECL in the same binding contour.  Prints an error message
2368    if appropriate.
2369
2370    If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
2371    Otherwise, return 0.  */
2372
2373 int
2374 duplicate_decls (newdecl, olddecl)
2375      tree newdecl, olddecl;
2376 {
2377   extern struct obstack permanent_obstack;
2378   unsigned olddecl_uid = DECL_UID (olddecl);
2379   int olddecl_friend = 0, types_match = 0;
2380   int new_defines_function;
2381
2382   if (newdecl == olddecl)
2383     return 1;
2384
2385   if (TREE_CODE_CLASS (TREE_CODE (olddecl)) == 'd')
2386     DECL_MACHINE_ATTRIBUTES (newdecl) = DECL_MACHINE_ATTRIBUTES (olddecl);
2387
2388   types_match = decls_match (newdecl, olddecl);
2389
2390   if (TREE_CODE (olddecl) != TREE_LIST)
2391     olddecl_friend = DECL_LANG_SPECIFIC (olddecl) && DECL_FRIEND_P (olddecl);
2392
2393   /* If either the type of the new decl or the type of the old decl is an
2394      error_mark_node, then that implies that we have already issued an
2395      error (earlier) for some bogus type specification, and in that case,
2396      it is rather pointless to harass the user with yet more error message
2397      about the same declaration, so well just pretent the types match here.  */
2398   if (TREE_TYPE (newdecl) == error_mark_node
2399       || TREE_TYPE (olddecl) == error_mark_node)
2400     types_match = 1;
2401
2402   if (TREE_CODE (olddecl) == FUNCTION_DECL
2403       && DECL_ARTIFICIAL (olddecl)
2404       && (DECL_BUILT_IN (olddecl) || DECL_BUILT_IN_NONANSI (olddecl)))
2405     {
2406       /* If you declare a built-in or predefined function name as static,
2407          the old definition is overridden, but optionally warn this was a
2408          bad choice of name.  Ditto for overloads.  */
2409       if (! DECL_PUBLIC (newdecl)
2410           || (TREE_CODE (newdecl) == FUNCTION_DECL
2411               && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl)))
2412         {
2413           if (warn_shadow)
2414             cp_warning ("shadowing %s function `%#D'",
2415                         DECL_BUILT_IN (olddecl) ? "built-in" : "library",
2416                         olddecl);
2417           /* Discard the old built-in function.  */
2418           return 0;
2419         }
2420       else if (! types_match)
2421         {
2422           if (TREE_CODE (newdecl) != FUNCTION_DECL)
2423             {
2424               /* If the built-in is not ansi, then programs can override
2425                  it even globally without an error.  */
2426               if (! DECL_BUILT_IN (olddecl))
2427                 cp_warning ("library function `%#D' redeclared as non-function `%#D'",
2428                             olddecl, newdecl);
2429               else
2430                 {
2431                   cp_error ("declaration of `%#D'", newdecl);
2432                   cp_error ("conflicts with built-in declaration `%#D'",
2433                             olddecl);
2434                 }
2435               return 0;
2436             }
2437
2438           cp_warning ("declaration of `%#D'", newdecl);
2439           cp_warning ("conflicts with built-in declaration `%#D'",
2440                       olddecl);
2441         }
2442     }
2443   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
2444     {
2445       if ((TREE_CODE (newdecl) == FUNCTION_DECL
2446            && DECL_FUNCTION_TEMPLATE_P (olddecl))
2447           || (TREE_CODE (olddecl) == FUNCTION_DECL
2448               && DECL_FUNCTION_TEMPLATE_P (newdecl)))
2449         return 0;
2450       
2451       cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
2452       if (TREE_CODE (olddecl) == TREE_LIST)
2453         olddecl = TREE_VALUE (olddecl);
2454       cp_error_at ("previous declaration of `%#D'", olddecl);
2455
2456       /* New decl is completely inconsistent with the old one =>
2457          tell caller to replace the old one.  */
2458
2459       return 0;
2460     }
2461   else if (!types_match)
2462     {
2463       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2464         {
2465           /* The name of a class template may not be declared to refer to
2466              any other template, class, function, object, namespace, value,
2467              or type in the same scope.  */
2468           if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
2469               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2470             {
2471               cp_error ("declaration of template `%#D'", newdecl);
2472               cp_error_at ("conflicts with previous declaration `%#D'",
2473                            olddecl);
2474             }
2475           else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
2476                    && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
2477                    && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
2478                                  TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))), 3))
2479             {
2480               cp_error ("new declaration `%#D'", newdecl);
2481               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
2482             }
2483           return 0;
2484         }
2485       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2486         {
2487           if (DECL_LANGUAGE (newdecl) == lang_c
2488               && DECL_LANGUAGE (olddecl) == lang_c)
2489             {
2490               cp_error ("declaration of C function `%#D' conflicts with",
2491                         newdecl);
2492               cp_error_at ("previous declaration `%#D' here", olddecl);
2493             }
2494           else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
2495                               TYPE_ARG_TYPES (TREE_TYPE (olddecl)), 3))
2496             {
2497               cp_error ("new declaration `%#D'", newdecl);
2498               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
2499             }
2500           else
2501             return 0;
2502         }
2503
2504       /* Already complained about this, so don't do so again.  */
2505       else if (current_class_type == NULL_TREE
2506           || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
2507         {
2508           cp_error ("conflicting types for `%#D'", newdecl);
2509           cp_error_at ("previous declaration as `%#D'", olddecl);
2510         }
2511     }
2512   else
2513     {
2514       char *errmsg = redeclaration_error_message (newdecl, olddecl);
2515       if (errmsg)
2516         {
2517           cp_error (errmsg, newdecl);
2518           if (DECL_NAME (olddecl) != NULL_TREE)
2519             cp_error_at ((DECL_INITIAL (olddecl)
2520                           && current_binding_level == global_binding_level)
2521                          ? "`%#D' previously defined here"
2522                          : "`%#D' previously declared here", olddecl);
2523         }
2524       else if (TREE_CODE (olddecl) == FUNCTION_DECL
2525                && DECL_INITIAL (olddecl) != NULL_TREE
2526                && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
2527                && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
2528         {
2529           /* Prototype decl follows defn w/o prototype.  */
2530           cp_warning_at ("prototype for `%#D'", newdecl);
2531           cp_warning_at ("follows non-prototype definition here", olddecl);
2532         }
2533       else if (TREE_CODE (olddecl) == FUNCTION_DECL
2534                && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
2535         {
2536           /* extern "C" int foo ();
2537              int foo () { bar (); }
2538              is OK.  */
2539           if (current_lang_stack == current_lang_base)
2540             DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
2541           else
2542             {
2543               cp_error_at ("previous declaration of `%#D' with %L linkage",
2544                            olddecl, DECL_LANGUAGE (olddecl));
2545               cp_error ("conflicts with new declaration with %L linkage",
2546                         DECL_LANGUAGE (newdecl));
2547             }
2548         }
2549
2550       if (TREE_CODE (olddecl) == FUNCTION_DECL
2551           && ! DECL_USE_TEMPLATE (olddecl))
2552         {
2553           tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
2554           tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
2555           int i = 1;
2556
2557           if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
2558             t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
2559         
2560           for (; t1 && t1 != void_list_node;
2561                t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
2562             if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
2563               {
2564                 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
2565                                            TREE_PURPOSE (t2)))
2566                   {
2567                     if (pedantic)
2568                       {
2569                         cp_pedwarn ("default argument given for parameter %d of `%#D'",
2570                                     i, newdecl);
2571                         cp_pedwarn_at ("after previous specification in `%#D'",
2572                                        olddecl);
2573                       }
2574                   }
2575                 else
2576                   {
2577                     cp_error ("default argument given for parameter %d of `%#D'",
2578                               i, newdecl);
2579                     cp_error_at ("conflicts with previous specification in `%#D'",
2580                                  olddecl);
2581                   }
2582               }
2583
2584           if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
2585               && TREE_ADDRESSABLE (olddecl) && warn_inline)
2586             {
2587               cp_warning ("`%#D' was used before it was declared inline",
2588                           newdecl);
2589               cp_warning_at ("previous non-inline declaration here",
2590                              olddecl);
2591             }
2592         }
2593       /* These bits are logically part of the type for non-functions.  */
2594       else if (TREE_READONLY (newdecl) != TREE_READONLY (olddecl)
2595                || TREE_THIS_VOLATILE (newdecl) != TREE_THIS_VOLATILE (olddecl))
2596         {
2597           cp_pedwarn ("type qualifiers for `%#D'", newdecl);
2598           cp_pedwarn_at ("conflict with previous decl `%#D'", olddecl);
2599         }
2600     }
2601
2602   /* If new decl is `static' and an `extern' was seen previously,
2603      warn about it.  */
2604   warn_extern_redeclared_static (newdecl, olddecl);
2605
2606   /* We have committed to returning 1 at this point.  */
2607   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2608     {
2609       /* Now that functions must hold information normally held
2610          by field decls, there is extra work to do so that
2611          declaration information does not get destroyed during
2612          definition.  */
2613       if (DECL_VINDEX (olddecl))
2614         DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
2615       if (DECL_CONTEXT (olddecl))
2616         DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
2617       if (DECL_CLASS_CONTEXT (olddecl))
2618         DECL_CLASS_CONTEXT (newdecl) = DECL_CLASS_CONTEXT (olddecl);
2619       if (DECL_CHAIN (newdecl) == NULL_TREE)
2620         DECL_CHAIN (newdecl) = DECL_CHAIN (olddecl);
2621       if (DECL_PENDING_INLINE_INFO (newdecl) == (struct pending_inline *)0)
2622         DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
2623       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
2624       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
2625       DECL_ABSTRACT_VIRTUAL_P (newdecl) |= DECL_ABSTRACT_VIRTUAL_P (olddecl);
2626     }
2627
2628   /* Deal with C++: must preserve virtual function table size.  */
2629   if (TREE_CODE (olddecl) == TYPE_DECL)
2630     {
2631       register tree newtype = TREE_TYPE (newdecl);
2632       register tree oldtype = TREE_TYPE (olddecl);
2633
2634       if (newtype != error_mark_node && oldtype != error_mark_node
2635           && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
2636         {
2637           CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
2638           CLASSTYPE_FRIEND_CLASSES (newtype)
2639             = CLASSTYPE_FRIEND_CLASSES (oldtype);
2640         }
2641     }
2642
2643   /* Special handling ensues if new decl is a function definition.  */
2644   new_defines_function = (TREE_CODE (newdecl) == FUNCTION_DECL
2645                           && DECL_INITIAL (newdecl) != NULL_TREE);
2646
2647   /* Optionally warn about more than one declaration for the same name,
2648      but don't warn about a function declaration followed by a definition.  */
2649   if (warn_redundant_decls
2650       && ! DECL_ARTIFICIAL (olddecl)
2651       && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
2652       /* Don't warn about extern decl followed by (tentative) definition.  */
2653       && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl)))
2654     {
2655       cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
2656       cp_warning_at ("previous declaration of `%D'", olddecl);
2657     }
2658
2659   /* Copy all the DECL_... slots specified in the new decl
2660      except for any that we copy here from the old type.  */
2661
2662   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2663     {
2664       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2665       DECL_TEMPLATE_RESULT (olddecl) = DECL_TEMPLATE_RESULT (newdecl);
2666       DECL_TEMPLATE_PARMS (olddecl) = DECL_TEMPLATE_PARMS (newdecl);
2667       return 1;
2668     }
2669
2670   if (types_match)
2671     {
2672       /* Automatically handles default parameters.  */
2673       tree oldtype = TREE_TYPE (olddecl);
2674       tree newtype;
2675
2676       /* Make sure we put the new type in the same obstack as the old one.  */
2677       if (oldtype)
2678         push_obstacks (TYPE_OBSTACK (oldtype), TYPE_OBSTACK (oldtype));
2679       else
2680         {
2681           push_obstacks_nochange ();
2682           end_temporary_allocation ();
2683         }
2684
2685       /* Merge the data types specified in the two decls.  */
2686       newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
2687
2688       if (TREE_CODE (newdecl) == VAR_DECL)
2689         DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
2690       /* Do this after calling `common_type' so that default
2691          parameters don't confuse us.  */
2692       else if (TREE_CODE (newdecl) == FUNCTION_DECL
2693           && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
2694               != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
2695         {
2696           TREE_TYPE (newdecl) = build_exception_variant (newtype,
2697                                                          TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
2698           TREE_TYPE (olddecl) = build_exception_variant (newtype,
2699                                                          TYPE_RAISES_EXCEPTIONS (oldtype));
2700
2701           if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
2702               && ! compexcepttypes (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2703             {
2704               cp_pedwarn ("declaration of `%D' throws different exceptions",
2705                         newdecl);
2706               cp_pedwarn_at ("previous declaration here", olddecl);
2707             }
2708         }
2709       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
2710
2711       /* Lay the type out, unless already done.  */
2712       if (oldtype != TREE_TYPE (newdecl)
2713           && TREE_TYPE (newdecl) != error_mark_node
2714           && !(processing_template_decl && uses_template_parms (newdecl)))
2715         layout_type (TREE_TYPE (newdecl));
2716
2717       if ((TREE_CODE (newdecl) == VAR_DECL
2718            || TREE_CODE (newdecl) == PARM_DECL
2719            || TREE_CODE (newdecl) == RESULT_DECL
2720            || TREE_CODE (newdecl) == FIELD_DECL
2721            || TREE_CODE (newdecl) == TYPE_DECL)
2722           && !(processing_template_decl && uses_template_parms (newdecl)))
2723         layout_decl (newdecl, 0);
2724
2725       /* Merge the type qualifiers.  */
2726       if (TREE_READONLY (newdecl))
2727         TREE_READONLY (olddecl) = 1;
2728       if (TREE_THIS_VOLATILE (newdecl))
2729         TREE_THIS_VOLATILE (olddecl) = 1;
2730
2731       /* Merge the initialization information.  */
2732       if (DECL_INITIAL (newdecl) == NULL_TREE
2733           && DECL_INITIAL (olddecl) != NULL_TREE)
2734         {
2735           DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2736           DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
2737           DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
2738         }
2739
2740       /* Merge the section attribute.
2741          We want to issue an error if the sections conflict but that must be
2742          done later in decl_attributes since we are called before attributes
2743          are assigned.  */
2744       if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
2745         DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
2746
2747       /* Keep the old rtl since we can safely use it, unless it's the
2748          call to abort() used for abstract virtuals.  */
2749       if ((DECL_LANG_SPECIFIC (olddecl)
2750            && !DECL_ABSTRACT_VIRTUAL_P (olddecl))
2751           || DECL_RTL (olddecl) != DECL_RTL (abort_fndecl))
2752         DECL_RTL (newdecl) = DECL_RTL (olddecl);
2753
2754       pop_obstacks ();
2755     }
2756   /* If cannot merge, then use the new type and qualifiers,
2757      and don't preserve the old rtl.  */
2758   else
2759     {
2760       /* Clean out any memory we had of the old declaration.  */
2761       tree oldstatic = value_member (olddecl, static_aggregates);
2762       if (oldstatic)
2763         TREE_VALUE (oldstatic) = error_mark_node;
2764
2765       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2766       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2767       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2768       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
2769     }
2770
2771   /* Merge the storage class information.  */
2772   DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
2773   DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
2774   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2775   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
2776   if (! DECL_EXTERNAL (olddecl))
2777     DECL_EXTERNAL (newdecl) = 0;
2778
2779   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2780     DECL_C_STATIC (newdecl) |= DECL_C_STATIC (olddecl);
2781
2782   if (DECL_LANG_SPECIFIC (newdecl))
2783     {
2784       DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2785       DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
2786     }
2787
2788   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2789     {
2790       DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
2791
2792       /* If either decl says `inline', this fn is inline, unless its
2793          definition was passed already.  */
2794       if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
2795         DECL_INLINE (olddecl) = 1;
2796       DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
2797
2798       if (! types_match)
2799         {
2800           DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
2801           DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
2802           DECL_RTL (olddecl) = DECL_RTL (newdecl);
2803         }
2804       if (! types_match || new_defines_function)
2805         {
2806           /* These need to be copied so that the names are available.  */
2807           DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2808           DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2809         }
2810       if (new_defines_function)
2811         /* If defining a function declared with other language
2812            linkage, use the previously declared language linkage.  */
2813         DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
2814       else
2815         {
2816           /* If redeclaring a builtin function, and not a definition,
2817              it stays built in.  */
2818           if (DECL_BUILT_IN (olddecl))
2819             {
2820               DECL_BUILT_IN (newdecl) = 1;
2821               DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2822               /* If we're keeping the built-in definition, keep the rtl,
2823                  regardless of declaration matches.  */
2824               DECL_RTL (newdecl) = DECL_RTL (olddecl);
2825             }
2826           else
2827             DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
2828
2829           DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2830           if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
2831             /* Previously saved insns go together with
2832                the function's previous definition.  */
2833             DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2834           /* Don't clear out the arguments if we're redefining a function.  */
2835           if (DECL_ARGUMENTS (olddecl))
2836             DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2837         }
2838       if (DECL_LANG_SPECIFIC (olddecl))
2839         DECL_MAIN_VARIANT (newdecl) = DECL_MAIN_VARIANT (olddecl);
2840     }
2841
2842   if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2843     {
2844       NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2845     }
2846
2847   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2848     {
2849       DECL_TEMPLATE_INSTANTIATIONS (newdecl)
2850         = DECL_TEMPLATE_INSTANTIATIONS (olddecl);
2851       if (DECL_CHAIN (newdecl) == NULL_TREE)
2852         DECL_CHAIN (newdecl) = DECL_CHAIN (olddecl);
2853     }
2854
2855   /* Now preserve various other info from the definition.  */
2856   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2857   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2858   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2859   DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
2860
2861   /* Don't really know how much of the language-specific
2862      values we should copy from old to new.  */
2863   if (DECL_LANG_SPECIFIC (olddecl))
2864     {
2865       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2866       DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
2867       DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2868       if (DECL_TEMPLATE_INFO (newdecl) == NULL_TREE)
2869         {
2870           DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2871           DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2872         }
2873     }
2874
2875   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2876     {
2877       int function_size;
2878       struct lang_decl *ol = DECL_LANG_SPECIFIC (olddecl);
2879       struct lang_decl *nl = DECL_LANG_SPECIFIC (newdecl);
2880
2881       function_size = sizeof (struct tree_decl);
2882
2883       bcopy ((char *) newdecl + sizeof (struct tree_common),
2884              (char *) olddecl + sizeof (struct tree_common),
2885              function_size - sizeof (struct tree_common));
2886
2887       /* Can we safely free the storage used by newdecl?  */
2888
2889 #define ROUND(x) ((x + obstack_alignment_mask (&permanent_obstack)) \
2890                   & ~ obstack_alignment_mask (&permanent_obstack))
2891
2892       if ((char *)newdecl + ROUND (function_size)
2893           + ROUND (sizeof (struct lang_decl))
2894           == obstack_next_free (&permanent_obstack))
2895         {
2896           DECL_MAIN_VARIANT (newdecl) = olddecl;
2897           DECL_LANG_SPECIFIC (olddecl) = ol;
2898           bcopy ((char *)nl, (char *)ol, sizeof (struct lang_decl));
2899
2900           obstack_free (&permanent_obstack, newdecl);
2901         }
2902       else if (LANG_DECL_PERMANENT (ol) && ol != nl)
2903         {
2904           if (DECL_MAIN_VARIANT (olddecl) == olddecl)
2905             {
2906               /* Save these lang_decls that would otherwise be lost.  */
2907               extern tree free_lang_decl_chain;
2908               tree free_lang_decl = (tree) ol;
2909
2910               if (DECL_LANG_SPECIFIC (olddecl) == ol)
2911                 abort ();
2912
2913               TREE_CHAIN (free_lang_decl) = free_lang_decl_chain;
2914               free_lang_decl_chain = free_lang_decl;
2915             }
2916           else
2917             {
2918               /* Storage leak.  */;
2919             }
2920         }
2921     }
2922   else
2923     {
2924       bcopy ((char *) newdecl + sizeof (struct tree_common),
2925              (char *) olddecl + sizeof (struct tree_common),
2926              sizeof (struct tree_decl) - sizeof (struct tree_common)
2927              + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
2928     }
2929
2930   DECL_UID (olddecl) = olddecl_uid;
2931   if (olddecl_friend)
2932     DECL_FRIEND_P (olddecl) = 1;
2933
2934   return 1;
2935 }
2936
2937 /* Record a decl-node X as belonging to the current lexical scope.
2938    Check for errors (such as an incompatible declaration for the same
2939    name already seen in the same scope).
2940
2941    Returns either X or an old decl for the same name.
2942    If an old decl is returned, it may have been smashed
2943    to agree with what X says.  */
2944
2945 tree
2946 pushdecl (x)
2947      tree x;
2948 {
2949   register tree t;
2950   register tree name = DECL_ASSEMBLER_NAME (x);
2951   register struct binding_level *b = current_binding_level;
2952
2953   if (x != current_function_decl
2954       /* Don't change DECL_CONTEXT of virtual methods.  */
2955       && (TREE_CODE (x) != FUNCTION_DECL || !DECL_VIRTUAL_P (x))
2956       && ! DECL_CONTEXT (x))
2957     DECL_CONTEXT (x) = current_function_decl;
2958   /* A local declaration for a function doesn't constitute nesting.  */
2959   if (TREE_CODE (x) == FUNCTION_DECL && DECL_INITIAL (x) == 0)
2960     DECL_CONTEXT (x) = 0;
2961
2962   /* Type are looked up using the DECL_NAME, as that is what the rest of the
2963      compiler wants to use.  */
2964   if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
2965       || TREE_CODE (x) == NAMESPACE_DECL)
2966     name = DECL_NAME (x);
2967
2968   if (name)
2969     {
2970 #if 0
2971       /* Not needed...see below.  */
2972       char *file;
2973       int line;
2974 #endif
2975
2976       t = lookup_name_current_level (name);
2977       if (t == error_mark_node)
2978         {
2979           /* error_mark_node is 0 for a while during initialization!  */
2980           t = NULL_TREE;
2981           cp_error_at ("`%#D' used prior to declaration", x);
2982         }
2983
2984       else if (t != NULL_TREE)
2985         {
2986 #if 0
2987           /* This is turned off until I have time to do it right (bpk).  */
2988           /* With the code below that uses it...  */
2989           file = DECL_SOURCE_FILE (t);
2990           line = DECL_SOURCE_LINE (t);
2991 #endif
2992           if (TREE_CODE (t) == PARM_DECL)
2993             {
2994               if (DECL_CONTEXT (t) == NULL_TREE)
2995                 fatal ("parse errors have confused me too much");
2996
2997               /* Check for duplicate params.  */
2998               if (duplicate_decls (x, t))
2999                 return t;
3000             }
3001           else if (((TREE_CODE (x) == FUNCTION_DECL && DECL_LANGUAGE (x) == lang_c)
3002                     || DECL_FUNCTION_TEMPLATE_P (x))
3003                    && is_overloaded_fn (t))
3004             /* don't do anything just yet */;
3005           else if (t == wchar_decl_node)
3006             {
3007               if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
3008                 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
3009
3010               /* Throw away the redeclaration.  */
3011               return t;
3012             }
3013           else if (TREE_CODE (t) != TREE_CODE (x))
3014             {
3015               if ((TREE_CODE (t) == TYPE_DECL && DECL_ARTIFICIAL (t)
3016                    && TREE_CODE (x) != TYPE_DECL
3017                    && ! (TREE_CODE (x) == TEMPLATE_DECL
3018                          && TREE_CODE (DECL_TEMPLATE_RESULT (x)) == TYPE_DECL))
3019                   || (TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
3020                       && TREE_CODE (t) != TYPE_DECL
3021                       && ! (TREE_CODE (t) == TEMPLATE_DECL
3022                             && (TREE_CODE (DECL_TEMPLATE_RESULT (t))
3023                                 == TYPE_DECL))))
3024                 {
3025                   /* We do nothing special here, because C++ does such nasty
3026                      things with TYPE_DECLs.  Instead, just let the TYPE_DECL
3027                      get shadowed, and know that if we need to find a TYPE_DECL
3028                      for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3029                      slot of the identifier.  */
3030                   ;
3031                 }
3032               else if (duplicate_decls (x, t))
3033                 return t;
3034             }
3035           else if (duplicate_decls (x, t))
3036             {
3037 #if 0
3038               /* This is turned off until I have time to do it right (bpk).  */
3039
3040               /* Also warn if they did a prototype with `static' on it, but
3041                  then later left the `static' off.  */
3042               if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
3043                 {
3044                   if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3045                     return t;
3046
3047                   if (extra_warnings)
3048                     {
3049                       cp_warning ("`static' missing from declaration of `%D'",
3050                                   t);
3051                       warning_with_file_and_line (file, line,
3052                                                   "previous declaration of `%s'",
3053                                                   decl_as_string (t, 0));
3054                     }
3055
3056                   /* Now fix things so it'll do what they expect.  */
3057                   if (current_function_decl)
3058                     TREE_PUBLIC (current_function_decl) = 0;
3059                 }
3060               /* Due to interference in memory reclamation (X may be
3061                  obstack-deallocated at this point), we must guard against
3062                  one really special case.  [jason: This should be handled
3063                  by start_function]  */
3064               if (current_function_decl == x)
3065                 current_function_decl = t;
3066 #endif
3067               if (TREE_CODE (t) == TYPE_DECL)
3068                 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
3069               else if (TREE_CODE (t) == FUNCTION_DECL)
3070                 check_default_args (t);
3071
3072               return t;
3073             }
3074         }
3075
3076       if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_FUNCTION_MEMBER_P (x))
3077         {
3078           t = push_overloaded_decl (x, 1);
3079           if (t != x || DECL_LANGUAGE (x) == lang_c)
3080             return t;
3081         }
3082       else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_CONTEXT (x) == NULL_TREE)
3083         return push_overloaded_decl (x, 0);
3084
3085       /* If declaring a type as a typedef, and the type has no known
3086          typedef name, install this TYPE_DECL as its typedef name.  */
3087       if (TREE_CODE (x) == TYPE_DECL)
3088         {
3089           tree type = TREE_TYPE (x);
3090           tree name = (type != error_mark_node) ? TYPE_NAME (type) : x;
3091
3092           if (name == NULL_TREE || TREE_CODE (name) != TYPE_DECL)
3093             {
3094               /* If these are different names, and we're at the global
3095                  binding level, make two equivalent definitions.  */
3096               name = x;
3097               if (global_bindings_p ())
3098                 TYPE_NAME (type) = x;
3099             }
3100           my_friendly_assert (TREE_CODE (name) == TYPE_DECL, 140);
3101
3102           if (type != error_mark_node
3103               && TYPE_NAME (type)
3104               && TYPE_IDENTIFIER (type))
3105             set_identifier_type_value_with_scope (DECL_NAME (x), type, b);
3106         }
3107
3108       /* Multiple external decls of the same identifier ought to match.
3109
3110          We get warnings about inline functions where they are defined.
3111          We get warnings about other functions from push_overloaded_decl.
3112          
3113          Avoid duplicate warnings where they are used.  */
3114       if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
3115         {
3116           tree decl;
3117
3118           if (IDENTIFIER_GLOBAL_VALUE (name) != NULL_TREE
3119               && (DECL_EXTERNAL (IDENTIFIER_GLOBAL_VALUE (name))
3120                   || TREE_PUBLIC (IDENTIFIER_GLOBAL_VALUE (name))))
3121             decl = IDENTIFIER_GLOBAL_VALUE (name);
3122           else
3123             decl = NULL_TREE;
3124
3125           if (decl
3126               /* If different sort of thing, we already gave an error.  */
3127               && TREE_CODE (decl) == TREE_CODE (x)
3128               && ! comptypes (TREE_TYPE (x), TREE_TYPE (decl), 1))
3129             {
3130               cp_pedwarn ("type mismatch with previous external decl", x);
3131               cp_pedwarn_at ("previous external decl of `%#D'", decl);
3132             }
3133         }
3134
3135       /* This name is new in its binding level.
3136          Install the new declaration and return it.  */
3137       if (b == global_binding_level)
3138         {
3139           /* Install a global value.  */
3140
3141           /* If the first global decl has external linkage,
3142              warn if we later see static one.  */
3143           if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && DECL_PUBLIC (x))
3144             TREE_PUBLIC (name) = 1;
3145
3146           /* Don't install an artificial TYPE_DECL if we already have
3147              another _DECL with that name.  */
3148           if (TREE_CODE (x) != TYPE_DECL
3149               || t == NULL_TREE
3150               || ! DECL_ARTIFICIAL (x))
3151             IDENTIFIER_GLOBAL_VALUE (name) = x;
3152
3153           /* Don't forget if the function was used via an implicit decl.  */
3154           if (IDENTIFIER_IMPLICIT_DECL (name)
3155               && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
3156             TREE_USED (x) = 1;
3157
3158           /* Don't forget if its address was taken in that way.  */
3159           if (IDENTIFIER_IMPLICIT_DECL (name)
3160               && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
3161             TREE_ADDRESSABLE (x) = 1;
3162
3163           /* Warn about mismatches against previous implicit decl.  */
3164           if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
3165               /* If this real decl matches the implicit, don't complain.  */
3166               && ! (TREE_CODE (x) == FUNCTION_DECL
3167                     && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
3168             cp_warning
3169               ("`%D' was previously implicitly declared to return `int'", x);
3170
3171           /* If new decl is `static' and an `extern' was seen previously,
3172              warn about it.  */
3173           if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
3174             warn_extern_redeclared_static (x, t);
3175         }
3176       else
3177         {
3178           /* Here to install a non-global value.  */
3179           tree oldlocal = IDENTIFIER_LOCAL_VALUE (name);
3180           tree oldglobal = IDENTIFIER_GLOBAL_VALUE (name);
3181
3182           /* Don't install an artificial TYPE_DECL if we already have
3183              another _DECL with that name.  */
3184           if (TREE_CODE (x) != TYPE_DECL
3185               || t == NULL_TREE
3186               || ! DECL_ARTIFICIAL (x))
3187             {
3188               b->shadowed = tree_cons (name, oldlocal, b->shadowed);
3189               IDENTIFIER_LOCAL_VALUE (name) = x;
3190             }
3191
3192           /* If this is a TYPE_DECL, push it into the type value slot.  */
3193           if (TREE_CODE (x) == TYPE_DECL)
3194             set_identifier_type_value_with_scope (name, TREE_TYPE (x), b);
3195
3196           /* Clear out any TYPE_DECL shadowed by a namespace so that
3197              we won't think this is a type.  The C struct hack doesn't
3198              go through namespaces.  */
3199           if (TREE_CODE (x) == NAMESPACE_DECL)
3200             set_identifier_type_value_with_scope (name, NULL_TREE, b);
3201
3202           /* If this is an extern function declaration, see if we
3203              have a global definition or declaration for the function.  */
3204           if (oldlocal == NULL_TREE
3205               && DECL_EXTERNAL (x)
3206               && oldglobal != NULL_TREE
3207               && TREE_CODE (x) == FUNCTION_DECL
3208               && TREE_CODE (oldglobal) == FUNCTION_DECL)
3209             {
3210               /* We have one.  Their types must agree.  */
3211               if (decls_match (x, oldglobal))
3212                 /* OK */;
3213               else
3214                 {
3215                   cp_warning ("extern declaration of `%#D' doesn't match", x);
3216                   cp_warning_at ("global declaration `%#D'", oldglobal);
3217                 }
3218             }
3219           /* If we have a local external declaration,
3220              and no file-scope declaration has yet been seen,
3221              then if we later have a file-scope decl it must not be static.  */
3222           if (oldlocal == NULL_TREE
3223               && oldglobal == NULL_TREE
3224               && DECL_EXTERNAL (x)
3225               && TREE_PUBLIC (x))
3226             {
3227               TREE_PUBLIC (name) = 1;
3228             }
3229
3230           if (DECL_FROM_INLINE (x))
3231             /* Inline decls shadow nothing.  */;
3232
3233           /* Warn if shadowing an argument at the top level of the body.  */
3234           else if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
3235               && TREE_CODE (oldlocal) == PARM_DECL
3236               && TREE_CODE (x) != PARM_DECL)
3237             {
3238               /* Go to where the parms should be and see if we
3239                  find them there.  */
3240               struct binding_level *b = current_binding_level->level_chain;
3241
3242               if (cleanup_label)
3243                 b = b->level_chain;
3244
3245               /* ARM $8.3 */
3246               if (b->parm_flag == 1)
3247                 cp_error ("declaration of `%#D' shadows a parameter", name);
3248             }
3249           else if (warn_shadow && oldlocal != NULL_TREE && b->is_for_scope
3250                    && !DECL_DEAD_FOR_LOCAL (oldlocal))
3251             {
3252               warning ("variable `%s' shadows local",
3253                        IDENTIFIER_POINTER (name));
3254               cp_warning_at ("  this is the shadowed declaration", oldlocal);
3255             }              
3256           /* Maybe warn if shadowing something else.  */
3257           else if (warn_shadow && !DECL_EXTERNAL (x)
3258                    /* No shadow warnings for internally generated vars.  */
3259                    && ! DECL_ARTIFICIAL (x)
3260                    /* No shadow warnings for vars made for inlining.  */
3261                    && ! DECL_FROM_INLINE (x))
3262             {
3263               char *warnstring = NULL;
3264
3265               if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
3266                 warnstring = "declaration of `%s' shadows a parameter";
3267               else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
3268                        && current_class_ptr
3269                        && !TREE_STATIC (name))
3270                 warnstring = "declaration of `%s' shadows a member of `this'";
3271               else if (oldlocal != NULL_TREE)
3272                 warnstring = "declaration of `%s' shadows previous local";
3273               else if (oldglobal != NULL_TREE)
3274                 warnstring = "declaration of `%s' shadows global declaration";
3275
3276               if (warnstring)
3277                 warning (warnstring, IDENTIFIER_POINTER (name));
3278             }
3279         }
3280
3281       if (TREE_CODE (x) == FUNCTION_DECL)
3282         check_default_args (x);
3283
3284       /* Keep count of variables in this level with incomplete type.  */
3285       if (TREE_CODE (x) == VAR_DECL
3286           && TREE_TYPE (x) != error_mark_node
3287           && ((TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
3288                && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
3289               /* RTTI TD entries are created while defining the type_info.  */
3290               || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
3291                   && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
3292         b->incomplete = tree_cons (NULL_TREE, x, b->incomplete);
3293     }
3294
3295   /* Put decls on list in reverse order.
3296      We will reverse them later if necessary.  */
3297   TREE_CHAIN (x) = b->names;
3298   b->names = x;
3299   if (! (b != global_binding_level || TREE_PERMANENT (x)))
3300     my_friendly_abort (124);
3301
3302   return x;
3303 }
3304
3305 /* Same as pushdecl, but define X in binding-level LEVEL.  We rely on the
3306    caller to set DECL_CONTEXT properly.  */
3307
3308 static tree
3309 pushdecl_with_scope (x, level)
3310      tree x;
3311      struct binding_level *level;
3312 {
3313   register struct binding_level *b = current_binding_level;
3314   tree function_decl = current_function_decl;
3315
3316   current_function_decl = NULL_TREE;
3317   current_binding_level = level;
3318   x = pushdecl (x);
3319   current_binding_level = b;
3320   current_function_decl = function_decl;
3321   return x;
3322 }
3323
3324 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
3325    if appropriate.  */
3326
3327 tree
3328 pushdecl_top_level (x)
3329      tree x;
3330 {
3331   register struct binding_level *b = inner_binding_level;
3332   register tree t = pushdecl_with_scope (x, global_binding_level);
3333
3334   /* Now, the type_shadowed stack may screw us.  Munge it so it does
3335      what we want.  */
3336   if (TREE_CODE (x) == TYPE_DECL)
3337     {
3338       tree name = DECL_NAME (x);
3339       tree newval;
3340       tree *ptr = (tree *)0;
3341       for (; b != global_binding_level; b = b->level_chain)
3342         {
3343           tree shadowed = b->type_shadowed;
3344           for (; shadowed; shadowed = TREE_CHAIN (shadowed))
3345             if (TREE_PURPOSE (shadowed) == name)
3346               {
3347                 ptr = &TREE_VALUE (shadowed);
3348                 /* Can't break out of the loop here because sometimes
3349                    a binding level will have duplicate bindings for
3350                    PT names.  It's gross, but I haven't time to fix it.  */
3351               }
3352         }
3353       newval = TREE_TYPE (x);
3354       if (ptr == (tree *)0)
3355         {
3356           /* @@ This shouldn't be needed.  My test case "zstring.cc" trips
3357              up here if this is changed to an assertion.  --KR  */
3358           SET_IDENTIFIER_TYPE_VALUE (name, newval);
3359         }
3360       else
3361         {
3362           *ptr = newval;
3363         }
3364     }
3365   return t;
3366 }
3367
3368 /* Like push_overloaded_decl, only it places X in GLOBAL_BINDING_LEVEL,
3369    if appropriate.  */
3370
3371 static void
3372 push_overloaded_decl_top_level (x, forget)
3373      tree x;
3374      int forget;
3375 {
3376   struct binding_level *b = current_binding_level;
3377
3378   current_binding_level = global_binding_level;
3379   push_overloaded_decl (x, forget);
3380   current_binding_level = b;
3381 }
3382
3383 /* Make the declaration of X appear in CLASS scope.  */
3384
3385 tree
3386 pushdecl_class_level (x)
3387      tree x;
3388 {
3389   /* Don't use DECL_ASSEMBLER_NAME here!  Everything that looks in class
3390      scope looks for the pre-mangled name.  */
3391   register tree name = DECL_NAME (x);
3392
3393   if (name)
3394     {
3395       if (TYPE_BEING_DEFINED (current_class_type))
3396         {
3397           /* Check for inconsistent use of this name in the class body.
3398              Types, enums, and static vars are checked here; other
3399              members are checked in finish_struct.  */
3400           tree icv = IDENTIFIER_CLASS_VALUE (name);
3401
3402           if (icv && icv != x
3403               /* Don't complain about inherited names.  */
3404               && id_in_current_class (name)
3405               /* Or shadowed tags.  */
3406               && !(TREE_CODE (icv) == TYPE_DECL
3407                    && DECL_CONTEXT (icv) == current_class_type))
3408             {
3409               cp_error ("declaration of identifier `%D' as `%#D'", name, x);
3410               cp_error_at ("conflicts with previous use in class as `%#D'",
3411                            icv);
3412             }
3413         }
3414
3415       push_class_level_binding (name, x);
3416       if (TREE_CODE (x) == TYPE_DECL)
3417         {
3418           set_identifier_type_value (name, TREE_TYPE (x));
3419         }
3420     }
3421   return x;
3422 }
3423
3424 #if 0
3425 /* This function is used to push the mangled decls for nested types into
3426    the appropriate scope.  Previously pushdecl_top_level was used, but that
3427    is incorrect for members of local classes.  */
3428
3429 void
3430 pushdecl_nonclass_level (x)
3431      tree x;
3432 {
3433   struct binding_level *b = current_binding_level;
3434
3435   my_friendly_assert (b->parm_flag != 2, 180);
3436
3437 #if 0
3438   /* Get out of template binding levels */
3439   while (b->pseudo_global)
3440     b = b->level_chain;
3441 #endif
3442
3443   pushdecl_with_scope (x, b);
3444 }
3445 #endif
3446
3447 /* Make the declaration(s) of X appear in CLASS scope
3448    under the name NAME.  */
3449
3450 void
3451 push_class_level_binding (name, x)
3452      tree name;
3453      tree x;
3454 {
3455   if (TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
3456       && purpose_member (name, class_binding_level->class_shadowed))
3457     return;
3458
3459   maybe_push_cache_obstack ();
3460   class_binding_level->class_shadowed
3461       = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
3462                    class_binding_level->class_shadowed);
3463   pop_obstacks ();
3464   IDENTIFIER_CLASS_VALUE (name) = x;
3465   obstack_ptr_grow (&decl_obstack, x);
3466 }
3467
3468 /* Tell caller how to interpret a TREE_LIST which contains
3469    chains of FUNCTION_DECLS.  */
3470
3471 int
3472 overloaded_globals_p (list)
3473      tree list;
3474 {
3475   my_friendly_assert (TREE_CODE (list) == TREE_LIST, 142);
3476
3477   /* Don't commit caller to seeing them as globals.  */
3478   if (TREE_NONLOCAL_FLAG (list))
3479     return -1;
3480   /* Do commit caller to not seeing them as globals.  */
3481   if (TREE_CODE (TREE_VALUE (list)) == TREE_LIST)
3482     return 0;
3483   /* Do commit caller to seeing them as globals.  */
3484   return 1;
3485 }
3486
3487 /* DECL is a FUNCTION_DECL which may have other definitions already in
3488    place.  We get around this by making the value of the identifier point
3489    to a list of all the things that want to be referenced by that name.  It
3490    is then up to the users of that name to decide what to do with that
3491    list.
3492
3493    DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its DECL_RESULT
3494    slot.  It is dealt with the same way.
3495
3496    The value returned may be a previous declaration if we guessed wrong
3497    about what language DECL should belong to (C or C++).  Otherwise,
3498    it's always DECL (and never something that's not a _DECL).  */
3499
3500 static tree
3501 push_overloaded_decl (decl, forgettable)
3502      tree decl;
3503      int forgettable;
3504 {
3505   tree orig_name = DECL_NAME (decl);
3506   tree old;
3507   int doing_global = (global_bindings_p () || ! forgettable);
3508
3509   if (doing_global)
3510     {
3511       old = IDENTIFIER_GLOBAL_VALUE (orig_name);
3512       if (old && TREE_CODE (old) == FUNCTION_DECL
3513           && DECL_ARTIFICIAL (old)
3514           && (DECL_BUILT_IN (old) || DECL_BUILT_IN_NONANSI (old)))
3515         {
3516           if (duplicate_decls (decl, old))
3517             return old;
3518           old = NULL_TREE;
3519         }
3520     }
3521   else
3522     {
3523       old = IDENTIFIER_LOCAL_VALUE (orig_name);
3524
3525       if (! purpose_member (orig_name, current_binding_level->shadowed))
3526         {
3527           current_binding_level->shadowed
3528             = tree_cons (orig_name, old, current_binding_level->shadowed);
3529           old = NULL_TREE;
3530         }
3531     }
3532
3533   if (old)
3534     {
3535       if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
3536         {
3537           tree t = TREE_TYPE (old);
3538           if (IS_AGGR_TYPE (t) && warn_shadow
3539               && (! DECL_IN_SYSTEM_HEADER (decl)
3540                   || ! DECL_IN_SYSTEM_HEADER (old)))
3541             cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
3542           old = NULL_TREE;
3543         }
3544       else if (is_overloaded_fn (old))
3545         {
3546           tree tmp;
3547           
3548           for (tmp = get_first_fn (old); tmp; tmp = DECL_CHAIN (tmp))
3549             if (decl == tmp || duplicate_decls (decl, tmp))
3550               return tmp;
3551         }
3552       else
3553         {
3554           cp_error_at ("previous non-function declaration `%#D'", old);
3555           cp_error ("conflicts with function declaration `%#D'", decl);
3556           return decl;
3557         }
3558     }
3559
3560   if (old || TREE_CODE (decl) == TEMPLATE_DECL)
3561     {
3562       if (old && is_overloaded_fn (old))
3563         DECL_CHAIN (decl) = get_first_fn (old);
3564       else
3565         DECL_CHAIN (decl) = NULL_TREE;
3566       old = tree_cons (orig_name, decl, NULL_TREE);
3567       TREE_TYPE (old) = unknown_type_node;
3568     }
3569   else
3570     /* orig_name is not ambiguous.  */
3571     old = decl;
3572
3573   if (doing_global)
3574     IDENTIFIER_GLOBAL_VALUE (orig_name) = old;
3575   else
3576     IDENTIFIER_LOCAL_VALUE (orig_name) = old;
3577
3578   return decl;
3579 }
3580 \f
3581 /* Generate an implicit declaration for identifier FUNCTIONID
3582    as a function of type int ().  Print a warning if appropriate.  */
3583
3584 tree
3585 implicitly_declare (functionid)
3586      tree functionid;
3587 {
3588   register tree decl;
3589   int temp = allocation_temporary_p ();
3590
3591   push_obstacks_nochange ();
3592
3593   /* Save the decl permanently so we can warn if definition follows.
3594      In ANSI C, warn_implicit is usually false, so the saves little space.
3595      But in C++, it's usually true, hence the extra code.  */
3596   if (temp && (! warn_implicit || toplevel_bindings_p ()))
3597     end_temporary_allocation ();
3598
3599   /* We used to reuse an old implicit decl here,
3600      but this loses with inline functions because it can clobber
3601      the saved decl chains.  */
3602   decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
3603
3604   DECL_EXTERNAL (decl) = 1;
3605   TREE_PUBLIC (decl) = 1;
3606
3607   /* ANSI standard says implicit declarations are in the innermost block.
3608      So we record the decl in the standard fashion.  */
3609   pushdecl (decl);
3610   rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
3611
3612   if (warn_implicit
3613       /* Only one warning per identifier.  */
3614       && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
3615     {
3616       cp_pedwarn ("implicit declaration of function `%#D'", decl);
3617     }
3618
3619   SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
3620
3621   pop_obstacks ();
3622
3623   return decl;
3624 }
3625
3626 /* Return zero if the declaration NEWDECL is valid
3627    when the declaration OLDDECL (assumed to be for the same name)
3628    has already been seen.
3629    Otherwise return an error message format string with a %s
3630    where the identifier should go.  */
3631
3632 static char *
3633 redeclaration_error_message (newdecl, olddecl)
3634      tree newdecl, olddecl;
3635 {
3636   if (TREE_CODE (newdecl) == TYPE_DECL)
3637     {
3638       /* Because C++ can put things into name space for free,
3639          constructs like "typedef struct foo { ... } foo"
3640          would look like an erroneous redeclaration.  */
3641       if (comptypes (TREE_TYPE (newdecl), TREE_TYPE (olddecl), 0))
3642         return 0;
3643       else
3644         return "redefinition of `%#D'";
3645     }
3646   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
3647     {
3648       /* If this is a pure function, its olddecl will actually be
3649          the original initialization to `0' (which we force to call
3650          abort()).  Don't complain about redefinition in this case.  */
3651       if (DECL_LANG_SPECIFIC (olddecl) && DECL_ABSTRACT_VIRTUAL_P (olddecl))
3652         return 0;
3653
3654       /* We'll complain about linkage mismatches in
3655          warn_extern_redeclared_static.  */
3656
3657       /* defining the same name twice is no good.  */
3658       if (DECL_INITIAL (olddecl) != NULL_TREE
3659           && DECL_INITIAL (newdecl) != NULL_TREE)
3660         {
3661           if (DECL_NAME (olddecl) == NULL_TREE)
3662             return "`%#D' not declared in class";
3663           else
3664             return "redefinition of `%#D'";
3665         }
3666       return 0;
3667     }
3668   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3669     {
3670       if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3671            && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
3672            && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
3673           || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
3674               && TYPE_SIZE (TREE_TYPE (newdecl))
3675               && TYPE_SIZE (TREE_TYPE (olddecl))))
3676         return "redefinition of `%#D'";
3677       return 0;
3678     }
3679   else if (toplevel_bindings_p ())
3680     {
3681       /* Objects declared at top level:  */
3682       /* If at least one is a reference, it's ok.  */
3683       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
3684         return 0;
3685       /* Reject two definitions.  */
3686       return "redefinition of `%#D'";
3687     }
3688   else
3689     {
3690       /* Objects declared with block scope:  */
3691       /* Reject two definitions, and reject a definition
3692          together with an external reference.  */
3693       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
3694         return "redeclaration of `%#D'";
3695       return 0;
3696     }
3697 }
3698 \f
3699 /* Get the LABEL_DECL corresponding to identifier ID as a label.
3700    Create one if none exists so far for the current function.
3701    This function is called for both label definitions and label references.  */
3702
3703 tree
3704 lookup_label (id)
3705      tree id;
3706 {
3707   register tree decl = IDENTIFIER_LABEL_VALUE (id);
3708
3709   if (current_function_decl == NULL_TREE)
3710     {
3711       error ("label `%s' referenced outside of any function",
3712              IDENTIFIER_POINTER (id));
3713       return NULL_TREE;
3714     }
3715
3716   if ((decl == NULL_TREE
3717       || DECL_SOURCE_LINE (decl) == 0)
3718       && (named_label_uses == NULL
3719           || named_label_uses->names_in_scope != current_binding_level->names
3720           || named_label_uses->label_decl != decl))
3721     {
3722       struct named_label_list *new_ent;
3723       new_ent
3724         = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
3725       new_ent->label_decl = decl;
3726       new_ent->names_in_scope = current_binding_level->names;
3727       new_ent->binding_level = current_binding_level;
3728       new_ent->lineno_o_goto = lineno;
3729       new_ent->filename_o_goto = input_filename;
3730       new_ent->next = named_label_uses;
3731       named_label_uses = new_ent;
3732     }
3733
3734   /* Use a label already defined or ref'd with this name.  */
3735   if (decl != NULL_TREE)
3736     {
3737       /* But not if it is inherited and wasn't declared to be inheritable.  */
3738       if (DECL_CONTEXT (decl) != current_function_decl
3739           && ! C_DECLARED_LABEL_FLAG (decl))
3740         return shadow_label (id);
3741       return decl;
3742     }
3743
3744   decl = build_decl (LABEL_DECL, id, void_type_node);
3745
3746   /* Make sure every label has an rtx.  */
3747   label_rtx (decl);
3748
3749   /* A label not explicitly declared must be local to where it's ref'd.  */
3750   DECL_CONTEXT (decl) = current_function_decl;
3751
3752   DECL_MODE (decl) = VOIDmode;
3753
3754   /* Say where one reference is to the label,
3755      for the sake of the error if it is not defined.  */
3756   DECL_SOURCE_LINE (decl) = lineno;
3757   DECL_SOURCE_FILE (decl) = input_filename;
3758
3759   SET_IDENTIFIER_LABEL_VALUE (id, decl);
3760
3761   named_labels = tree_cons (NULL_TREE, decl, named_labels);
3762   named_label_uses->label_decl = decl;
3763
3764   return decl;
3765 }
3766
3767 /* Make a label named NAME in the current function,
3768    shadowing silently any that may be inherited from containing functions
3769    or containing scopes.
3770
3771    Note that valid use, if the label being shadowed
3772    comes from another scope in the same function,
3773    requires calling declare_nonlocal_label right away.  */
3774
3775 tree
3776 shadow_label (name)
3777      tree name;
3778 {
3779   register tree decl = IDENTIFIER_LABEL_VALUE (name);
3780
3781   if (decl != NULL_TREE)
3782     {
3783       shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
3784       SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE);
3785       SET_IDENTIFIER_LABEL_VALUE (decl, NULL_TREE);
3786     }
3787
3788   return lookup_label (name);
3789 }
3790
3791 /* Define a label, specifying the location in the source file.
3792    Return the LABEL_DECL node for the label, if the definition is valid.
3793    Otherwise return 0.  */
3794
3795 tree
3796 define_label (filename, line, name)
3797      char *filename;
3798      int line;
3799      tree name;
3800 {
3801   tree decl;
3802
3803   if (minimal_parse_mode)
3804     {
3805       push_obstacks (&permanent_obstack, &permanent_obstack);
3806       decl = build_decl (LABEL_DECL, name, void_type_node);
3807       pop_obstacks ();
3808       DECL_SOURCE_LINE (decl) = line;
3809       DECL_SOURCE_FILE (decl) = filename;
3810       add_tree (decl);
3811       return decl;
3812     }
3813
3814   decl = lookup_label (name);
3815
3816   /* After labels, make any new cleanups go into their
3817      own new (temporary) binding contour.  */
3818   current_binding_level->more_cleanups_ok = 0;
3819
3820   /* If label with this name is known from an outer context, shadow it.  */
3821   if (decl != NULL_TREE && DECL_CONTEXT (decl) != current_function_decl)
3822     {
3823       shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
3824       SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE);
3825       decl = lookup_label (name);
3826     }
3827
3828   if (name == get_identifier ("wchar_t"))
3829     cp_pedwarn ("label named wchar_t");
3830
3831   if (DECL_INITIAL (decl) != NULL_TREE)
3832     {
3833       cp_error ("duplicate label `%D'", decl);
3834       return 0;
3835     }
3836   else
3837     {
3838       struct named_label_list *uses, *prev;
3839       int identified = 0;
3840
3841       /* Mark label as having been defined.  */
3842       DECL_INITIAL (decl) = error_mark_node;
3843       /* Say where in the source.  */
3844       DECL_SOURCE_FILE (decl) = filename;
3845       DECL_SOURCE_LINE (decl) = line;
3846
3847       prev = NULL;
3848       uses = named_label_uses;
3849       while (uses != NULL)
3850         if (uses->label_decl == decl)
3851           {
3852             struct binding_level *b = current_binding_level;
3853             while (b)
3854               {
3855                 tree new_decls = b->names;
3856                 tree old_decls = (b == uses->binding_level)
3857                                   ? uses->names_in_scope : NULL_TREE;
3858                 while (new_decls != old_decls)
3859                   {
3860                     if (TREE_CODE (new_decls) == VAR_DECL
3861                         /* Don't complain about crossing initialization
3862                            of internal entities.  They can't be accessed,
3863                            and they should be cleaned up
3864                            by the time we get to the label.  */
3865                         && ! DECL_ARTIFICIAL (new_decls)
3866                         && ((DECL_INITIAL (new_decls) != NULL_TREE
3867                              && DECL_INITIAL (new_decls) != error_mark_node)
3868                             || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
3869                       {
3870                         if (! identified) 
3871                           {
3872                             cp_error ("jump to label `%D'", decl);
3873                             error_with_file_and_line (uses->filename_o_goto,
3874                                                       uses->lineno_o_goto,
3875                                                       "  from here");
3876                             identified = 1;
3877                         }
3878                         cp_error_at ("  crosses initialization of `%#D'",
3879                                      new_decls);
3880                       }
3881                     new_decls = TREE_CHAIN (new_decls);
3882                   }
3883                 if (b == uses->binding_level)
3884                   break;
3885                 b = b->level_chain;
3886               }
3887
3888             if (prev != NULL)
3889               prev->next = uses->next;
3890             else
3891               named_label_uses = uses->next;
3892
3893             uses = uses->next;
3894           }
3895         else
3896           {
3897             prev = uses;
3898             uses = uses->next;
3899           }
3900       current_function_return_value = NULL_TREE;
3901       return decl;
3902     }
3903 }
3904
3905 struct cp_switch
3906 {
3907   struct binding_level *level;
3908   struct cp_switch *next;
3909 };
3910
3911 static struct cp_switch *switch_stack;
3912
3913 void
3914 push_switch ()
3915 {
3916   struct cp_switch *p
3917     = (struct cp_switch *) oballoc (sizeof (struct cp_switch));
3918   p->level = current_binding_level;
3919   p->next = switch_stack;
3920   switch_stack = p;
3921 }
3922
3923 void
3924 pop_switch ()
3925 {
3926   switch_stack = switch_stack->next;
3927 }
3928
3929 /* Same, but for CASE labels.  If DECL is NULL_TREE, it's the default.  */
3930 /* XXX Note decl is never actually used. (bpk) */
3931
3932 void
3933 define_case_label (decl)
3934      tree decl;
3935 {
3936   tree cleanup = last_cleanup_this_contour ();
3937   struct binding_level *b = current_binding_level;
3938   int identified = 0;
3939
3940   if (cleanup)
3941     {
3942       static int explained = 0;
3943       cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
3944       warning ("where case label appears here");
3945       if (!explained)
3946         {
3947           warning ("(enclose actions of previous case statements requiring");
3948           warning ("destructors in their own binding contours.)");
3949           explained = 1;
3950         }
3951     }
3952
3953   for (; b && b != switch_stack->level; b = b->level_chain)
3954     {
3955       tree new_decls = b->names;
3956       for (; new_decls; new_decls = TREE_CHAIN (new_decls))
3957         {
3958           if (TREE_CODE (new_decls) == VAR_DECL
3959               /* Don't complain about crossing initialization
3960                  of internal entities.  They can't be accessed,
3961                  and they should be cleaned up
3962                  by the time we get to the label.  */
3963               && ! DECL_ARTIFICIAL (new_decls)
3964               && ((DECL_INITIAL (new_decls) != NULL_TREE
3965                    && DECL_INITIAL (new_decls) != error_mark_node)
3966                   || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
3967             {
3968               if (! identified)
3969                 error ("jump to case label");
3970               identified = 1;
3971               cp_error_at ("  crosses initialization of `%#D'",
3972                            new_decls);
3973             }
3974         }
3975     }
3976
3977   /* After labels, make any new cleanups go into their
3978      own new (temporary) binding contour.  */
3979
3980   current_binding_level->more_cleanups_ok = 0;
3981   current_function_return_value = NULL_TREE;
3982 }
3983 \f
3984 /* Return the list of declarations of the current level.
3985    Note that this list is in reverse order unless/until
3986    you nreverse it; and when you do nreverse it, you must
3987    store the result back using `storedecls' or you will lose.  */
3988
3989 tree
3990 getdecls ()
3991 {
3992   return current_binding_level->names;
3993 }
3994
3995 /* Return the list of type-tags (for structs, etc) of the current level.  */
3996
3997 tree
3998 gettags ()
3999 {
4000   return current_binding_level->tags;
4001 }
4002
4003 /* Store the list of declarations of the current level.
4004    This is done for the parameter declarations of a function being defined,
4005    after they are modified in the light of any missing parameters.  */
4006
4007 static void
4008 storedecls (decls)
4009      tree decls;
4010 {
4011   current_binding_level->names = decls;
4012 }
4013
4014 /* Similarly, store the list of tags of the current level.  */
4015
4016 static void
4017 storetags (tags)
4018      tree tags;
4019 {
4020   current_binding_level->tags = tags;
4021 }
4022 \f
4023 /* Given NAME, an IDENTIFIER_NODE,
4024    return the structure (or union or enum) definition for that name.
4025    Searches binding levels from BINDING_LEVEL up to the global level.
4026    If THISLEVEL_ONLY is nonzero, searches only the specified context
4027    (but skips any tag-transparent contexts to find one that is
4028    meaningful for tags).
4029    FORM says which kind of type the caller wants;
4030    it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
4031    If the wrong kind of type is found, and it's not a template, an error is
4032    reported.  */
4033
4034 static tree
4035 lookup_tag (form, name, binding_level, thislevel_only)
4036      enum tree_code form;
4037      tree name;
4038      struct binding_level *binding_level;
4039      int thislevel_only;
4040 {
4041   register struct binding_level *level;
4042
4043   for (level = binding_level; level; level = level->level_chain)
4044     {
4045       register tree tail;
4046       if (ANON_AGGRNAME_P (name))
4047         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4048           {
4049             /* There's no need for error checking here, because
4050                anon names are unique throughout the compilation.  */
4051             if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
4052               return TREE_VALUE (tail);
4053           }
4054       else
4055         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4056           {
4057             if (TREE_PURPOSE (tail) == name)
4058               {
4059                 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
4060                 /* Should tighten this up; it'll probably permit
4061                    UNION_TYPE and a struct template, for example.  */
4062                 if (code != form
4063                     && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
4064                   {
4065                     /* Definition isn't the kind we were looking for.  */
4066                     cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
4067                               form);
4068                     return NULL_TREE;
4069                   }
4070                 return TREE_VALUE (tail);
4071               }
4072           }
4073       if (thislevel_only && ! level->tag_transparent)
4074         {
4075           if (level->pseudo_global)
4076             {
4077               tree t = IDENTIFIER_GLOBAL_VALUE (name);
4078               if (t && TREE_CODE (t) == TEMPLATE_DECL
4079                   && TREE_CODE (DECL_TEMPLATE_RESULT (t)) == TYPE_DECL)
4080                 return TREE_TYPE (t);
4081             }
4082           return NULL_TREE;
4083         }
4084       if (current_class_type && level->level_chain == global_binding_level)
4085         {
4086           /* Try looking in this class's tags before heading into
4087              global binding level.  */
4088           tree context = current_class_type;
4089           while (context)
4090             {
4091               switch (TREE_CODE_CLASS (TREE_CODE (context)))
4092                 {
4093                 tree these_tags;
4094                 case 't':
4095                     these_tags = CLASSTYPE_TAGS (context);
4096                     if (ANON_AGGRNAME_P (name))
4097                       while (these_tags)
4098                         {
4099                           if (TYPE_IDENTIFIER (TREE_VALUE (these_tags))
4100                               == name)
4101                             return TREE_VALUE (tail);
4102                           these_tags = TREE_CHAIN (these_tags);
4103                         }
4104                     else
4105                       while (these_tags)
4106                         {
4107                           if (TREE_PURPOSE (these_tags) == name)
4108                             {
4109                               if (TREE_CODE (TREE_VALUE (these_tags)) != form)
4110                                 {
4111                                   cp_error ("`%#D' redeclared as %C in class scope",
4112                                             TREE_VALUE (tail), form);
4113                                   return NULL_TREE;
4114                                 }
4115                               return TREE_VALUE (tail);
4116                             }
4117                           these_tags = TREE_CHAIN (these_tags);
4118                         }
4119                     /* If this type is not yet complete, then don't
4120                        look at its context.  */
4121                     if (TYPE_SIZE (context) == NULL_TREE)
4122                       goto no_context;
4123                     /* Go to next enclosing type, if any.  */
4124                     context = DECL_CONTEXT (TYPE_MAIN_DECL (context));
4125                     break;
4126                 case 'd':
4127                     context = DECL_CONTEXT (context);
4128                     break;
4129                 default:
4130                     my_friendly_abort (10);
4131                 }
4132               continue;
4133               no_context:
4134               break;
4135             }
4136         }
4137     }
4138   return NULL_TREE;
4139 }
4140
4141 #if 0
4142 void
4143 set_current_level_tags_transparency (tags_transparent)
4144      int tags_transparent;
4145 {
4146   current_binding_level->tag_transparent = tags_transparent;
4147 }
4148 #endif
4149
4150 /* Given a type, find the tag that was defined for it and return the tag name.
4151    Otherwise return 0.  However, the value can never be 0
4152    in the cases in which this is used.
4153
4154    C++: If NAME is non-zero, this is the new name to install.  This is
4155    done when replacing anonymous tags with real tag names.  */
4156
4157 static tree
4158 lookup_tag_reverse (type, name)
4159      tree type;
4160      tree name;
4161 {
4162   register struct binding_level *level;
4163
4164   for (level = current_binding_level; level; level = level->level_chain)
4165     {
4166       register tree tail;
4167       for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4168         {
4169           if (TREE_VALUE (tail) == type)
4170             {
4171               if (name)
4172                 TREE_PURPOSE (tail) = name;
4173               return TREE_PURPOSE (tail);
4174             }
4175         }
4176     }
4177   return NULL_TREE;
4178 }
4179 \f
4180 /* Lookup TYPE in CONTEXT (a chain of nested types or a FUNCTION_DECL).
4181    Return the type value, or NULL_TREE if not found.  */
4182
4183 static tree
4184 lookup_nested_type (type, context)
4185      tree type;
4186      tree context;
4187 {
4188   if (context == NULL_TREE)
4189     return NULL_TREE;
4190   while (context)
4191     {
4192       switch (TREE_CODE (context))
4193         {
4194         case TYPE_DECL:
4195           {
4196             tree ctype = TREE_TYPE (context);
4197             tree match = value_member (type, CLASSTYPE_TAGS (ctype));
4198             if (match)
4199               return TREE_VALUE (match);
4200             context = DECL_CONTEXT (context);
4201
4202             /* When we have a nested class whose member functions have
4203                local types (e.g., a set of enums), we'll arrive here
4204                with the DECL_CONTEXT as the actual RECORD_TYPE node for
4205                the enclosing class.  Instead, we want to make sure we
4206                come back in here with the TYPE_DECL, not the RECORD_TYPE.  */
4207             if (context && TREE_CODE (context) == RECORD_TYPE)
4208               context = TREE_CHAIN (context);
4209           }
4210           break;
4211         case FUNCTION_DECL:
4212           if (TYPE_NAME (type) && TYPE_IDENTIFIER (type))
4213             return lookup_name (TYPE_IDENTIFIER (type), 1);
4214           return NULL_TREE;
4215         default:
4216           my_friendly_abort (12);
4217         }
4218     }
4219   return NULL_TREE;
4220 }
4221
4222 /* Look up NAME in the NAMESPACE.  */
4223
4224 tree
4225 lookup_namespace_name (namespace, name)
4226      tree namespace, name;
4227 {
4228   struct binding_level *b = (struct binding_level *)NAMESPACE_LEVEL (namespace);
4229   tree x = NULL_TREE;
4230
4231 #if 1
4232   /* This searches just one level.  */
4233   if (b)
4234     {
4235       for (x = b->names; x; x = TREE_CHAIN (x))
4236         if (DECL_NAME (x) == name || DECL_ASSEMBLER_NAME (x) == name)
4237           break;
4238     }
4239 #else
4240   /* This searches all levels.  */
4241   for (; b && !x; b = b->level_chain)
4242     {
4243       for (x = b->names; x; x = TREE_CHAIN (x))
4244         if (DECL_NAME (x) == name || DECL_ASSEMBLER_NAME (x) == name)
4245           break;
4246     }
4247 #endif
4248   return x;
4249 }
4250
4251 tree
4252 make_typename_type (context, name)
4253      tree context, name;
4254 {
4255   tree t, d;
4256
4257   if (TREE_CODE (name) == TYPE_DECL)
4258     name = DECL_NAME (name);
4259   else if (TREE_CODE (name) != IDENTIFIER_NODE)
4260     my_friendly_abort (2000);
4261
4262   if (! processing_template_decl
4263       || ! uses_template_parms (context)
4264       || context == current_class_type)
4265     {
4266       t = lookup_field (context, name, 0, 1);
4267       if (t == NULL_TREE)
4268         {
4269           cp_error ("no type named `%#T' in `%#T'", name, context);
4270           return error_mark_node;
4271         }
4272       return TREE_TYPE (t);
4273     }
4274
4275   if (processing_template_decl)
4276     push_obstacks (&permanent_obstack, &permanent_obstack);
4277   t = make_lang_type (TYPENAME_TYPE);
4278   d = build_decl (TYPE_DECL, name, t);
4279   if (processing_template_decl)
4280     pop_obstacks ();
4281
4282   TYPE_CONTEXT (t) = context;
4283   TYPE_NAME (TREE_TYPE (d)) = d;
4284   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
4285   DECL_CONTEXT (d) = context;
4286   CLASSTYPE_GOT_SEMICOLON (t) = 1;
4287
4288   return t;
4289 }
4290
4291 /* Look up NAME in the current binding level and its superiors in the
4292    namespace of variables, functions and typedefs.  Return a ..._DECL
4293    node of some kind representing its definition if there is only one
4294    such declaration, or return a TREE_LIST with all the overloaded
4295    definitions if there are many, or return 0 if it is undefined.
4296
4297    If PREFER_TYPE is > 0, we prefer TYPE_DECLs.
4298    If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
4299    Otherwise we prefer non-TYPE_DECLs.  */
4300
4301 static tree
4302 lookup_name_real (name, prefer_type, nonclass)
4303      tree name;
4304      int prefer_type, nonclass;
4305 {
4306   register tree val;
4307   int yylex = 0;
4308   tree from_obj = NULL_TREE;
4309   tree locval, classval;
4310
4311   if (prefer_type == -2)
4312     {
4313       extern int looking_for_typename;
4314       tree type = NULL_TREE;
4315
4316       yylex = 1;
4317       prefer_type = looking_for_typename;
4318
4319       if (got_scope)
4320         type = got_scope;
4321       else if (got_object != error_mark_node)
4322         type = got_object;
4323       
4324       if (type)
4325         {
4326           if (type == error_mark_node)
4327             return error_mark_node;
4328           if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
4329             type = TREE_TYPE (type);
4330
4331           type = complete_type (type);
4332
4333           if (type == void_type_node)
4334             val = IDENTIFIER_GLOBAL_VALUE (name);
4335           else if (TREE_CODE (type) == NAMESPACE_DECL)
4336             {
4337               val = lookup_namespace_name (type, name);
4338             }
4339           else if (! IS_AGGR_TYPE (type)
4340                    || TREE_CODE (type) == TEMPLATE_TYPE_PARM
4341                    || TREE_CODE (type) == TYPENAME_TYPE)
4342             /* Someone else will give an error about this if needed.  */
4343             val = NULL_TREE;
4344           else if (TYPE_BEING_DEFINED (type))
4345             {
4346               val = IDENTIFIER_CLASS_VALUE (name);
4347               if (val && DECL_CONTEXT (val) != type)
4348                 {
4349                   struct binding_level *b = class_binding_level;
4350                   for (val = NULL_TREE; b; b = b->level_chain)
4351                     {
4352                       tree t = purpose_member (name, b->class_shadowed);
4353                       if (t && TREE_VALUE (t)
4354                           && DECL_CONTEXT (TREE_VALUE (t)) == type)
4355                         {
4356                           val = TREE_VALUE (t);
4357                           break;
4358                         }
4359                     }
4360                 }
4361               if (val == NULL_TREE)
4362                 val = lookup_field (type, name, 0, 1);
4363             }
4364           else if (type == current_class_type)
4365             val = IDENTIFIER_CLASS_VALUE (name);
4366           else
4367             val = lookup_field (type, name, 0, prefer_type);
4368         }
4369       else
4370         val = NULL_TREE;
4371
4372 #if 1
4373       if (got_scope && processing_template_decl
4374           && got_scope != current_class_type
4375           && uses_template_parms (got_scope)
4376           && val && TREE_CODE (val) == TYPE_DECL
4377           && ! DECL_ARTIFICIAL (val))
4378         {
4379           tree t = make_typename_type (got_scope, DECL_NAME (val));
4380           TREE_TYPE (t) = TREE_TYPE (val);
4381           val = TYPE_MAIN_DECL (t);
4382         }
4383 #endif
4384
4385       if (got_scope)
4386         goto done;
4387       else if (got_object && val)
4388         from_obj = val;
4389     }
4390
4391   locval = classval = NULL_TREE;
4392
4393   if (current_binding_level != global_binding_level
4394       && IDENTIFIER_LOCAL_VALUE (name))
4395     locval = IDENTIFIER_LOCAL_VALUE (name);
4396
4397   /* In C++ class fields are between local and global scope,
4398      just before the global scope.  */
4399   if (current_class_type && ! nonclass)
4400     {
4401       classval = IDENTIFIER_CLASS_VALUE (name);
4402       if (classval == NULL_TREE && TYPE_BEING_DEFINED (current_class_type))
4403         /* Try to find values from base classes if we are presently
4404            defining a type.  We are presently only interested in
4405            TYPE_DECLs.  */
4406         classval = lookup_field (current_class_type, name, 0, 1);
4407
4408       /* yylex() calls this with -2, since we should never start digging for
4409          the nested name at the point where we haven't even, for example,
4410          created the COMPONENT_REF or anything like that.  */
4411       if (classval == NULL_TREE)
4412         classval = lookup_nested_field (name, ! yylex);
4413     }
4414
4415   if (locval && classval)
4416     {
4417       if (current_scope () == current_function_decl
4418           && ! hack_decl_function_context (current_function_decl))
4419         /* Not in a nested function.  */
4420         val = locval;
4421       else
4422         {
4423           /* This is incredibly horrible.  The whole concept of
4424              IDENTIFIER_LOCAL_VALUE / IDENTIFIER_CLASS_VALUE /
4425              IDENTIFIER_GLOBAL_VALUE needs to be scrapped for local
4426              classes.  */
4427           tree lctx = hack_decl_function_context (locval);
4428           tree cctx = hack_decl_function_context (classval);
4429
4430           if (lctx == current_scope ())
4431             val = locval;
4432           else if (lctx == cctx)
4433             val = classval;
4434           else
4435             /* I don't know which is right; let's just guess for now.  */
4436             val = locval;
4437         }
4438     }
4439   else if (locval)
4440     val = locval;
4441   else if (classval)
4442     val = classval;
4443   else
4444     val = IDENTIFIER_GLOBAL_VALUE (name);
4445
4446  done:
4447   if (val)
4448     {
4449       /* This should only warn about types used in qualified-ids.  */
4450       if (from_obj && from_obj != val)
4451         {
4452           if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
4453               && TREE_CODE (val) == TYPE_DECL
4454               && TREE_TYPE (from_obj) != TREE_TYPE (val))
4455             {
4456               cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
4457                           name, got_object, TREE_TYPE (from_obj));
4458               cp_pedwarn ("  does not match lookup in the current scope (`%#T')",
4459                           TREE_TYPE (val));
4460             }
4461
4462           val = from_obj;
4463         }
4464
4465       if ((TREE_CODE (val) == TEMPLATE_DECL && looking_for_template)
4466           || TREE_CODE (val) == TYPE_DECL || prefer_type <= 0)
4467         ;
4468       else if (IDENTIFIER_HAS_TYPE_VALUE (name))
4469         val = TYPE_MAIN_DECL (IDENTIFIER_TYPE_VALUE (name));
4470       else if (TREE_TYPE (val) == error_mark_node)
4471         val = error_mark_node;
4472     }
4473   else if (from_obj)
4474     val = from_obj;
4475
4476   return val;
4477 }
4478
4479 tree
4480 lookup_name_nonclass (name)
4481      tree name;
4482 {
4483   return lookup_name_real (name, 0, 1);
4484 }
4485
4486 tree
4487 lookup_name (name, prefer_type)
4488      tree name;
4489      int prefer_type;
4490 {
4491   return lookup_name_real (name, prefer_type, 0);
4492 }
4493
4494 /* Similar to `lookup_name' but look only at current binding level.  */
4495
4496 tree
4497 lookup_name_current_level (name)
4498      tree name;
4499 {
4500   register tree t = NULL_TREE;
4501
4502   if (current_binding_level == global_binding_level)
4503     {
4504       t = IDENTIFIER_GLOBAL_VALUE (name);
4505
4506       /* extern "C" function() */
4507       if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
4508         t = TREE_VALUE (t);
4509     }
4510   else if (IDENTIFIER_LOCAL_VALUE (name) != NULL_TREE)
4511     {
4512       struct binding_level *b = current_binding_level;
4513       while (1)
4514         {
4515           for (t = b->names; t; t = TREE_CHAIN (t))
4516             if (DECL_NAME (t) == name || DECL_ASSEMBLER_NAME (t) == name)
4517               goto out;
4518           if (b->keep == 2)
4519             b = b->level_chain;
4520           else
4521             break;
4522         }
4523     out:
4524       ;
4525     }
4526
4527   return t;
4528 }
4529 \f
4530 /* Arrange for the user to get a source line number, even when the
4531    compiler is going down in flames, so that she at least has a
4532    chance of working around problems in the compiler.  We used to
4533    call error(), but that let the segmentation fault continue
4534    through; now, it's much more passive by asking them to send the
4535    maintainers mail about the problem.  */
4536
4537 static void
4538 signal_catch (sig)
4539      int sig;
4540 {
4541   signal (SIGSEGV, SIG_DFL);
4542 #ifdef SIGIOT
4543   signal (SIGIOT, SIG_DFL);
4544 #endif
4545 #ifdef SIGILL
4546   signal (SIGILL, SIG_DFL);
4547 #endif
4548 #ifdef SIGABRT
4549   signal (SIGABRT, SIG_DFL);
4550 #endif
4551 #ifdef SIGBUS
4552   signal (SIGBUS, SIG_DFL);
4553 #endif
4554   my_friendly_abort (0);
4555 }
4556
4557 #if 0
4558 /* Unused -- brendan 970107 */
4559 /* Array for holding types considered "built-in".  These types
4560    are output in the module in which `main' is defined.  */
4561 static tree *builtin_type_tdescs_arr;
4562 static int builtin_type_tdescs_len, builtin_type_tdescs_max;
4563 #endif
4564
4565 /* Push the declarations of builtin types into the namespace.
4566    RID_INDEX, if < RID_MAX is the index of the builtin type
4567    in the array RID_POINTERS.  NAME is the name used when looking
4568    up the builtin type.  TYPE is the _TYPE node for the builtin type.  */
4569
4570 static void
4571 record_builtin_type (rid_index, name, type)
4572      enum rid rid_index;
4573      char *name;
4574      tree type;
4575 {
4576   tree rname = NULL_TREE, tname = NULL_TREE;
4577   tree tdecl;
4578
4579   if ((int) rid_index < (int) RID_MAX)
4580     rname = ridpointers[(int) rid_index];
4581   if (name)
4582     tname = get_identifier (name);
4583
4584   TYPE_BUILT_IN (type) = 1;
4585   
4586   if (tname)
4587     {
4588       tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
4589       set_identifier_type_value (tname, NULL_TREE);
4590       if ((int) rid_index < (int) RID_MAX)
4591         IDENTIFIER_GLOBAL_VALUE (tname) = tdecl;
4592     }
4593   if (rname != NULL_TREE)
4594     {
4595       if (tname != NULL_TREE)
4596         {
4597           set_identifier_type_value (rname, NULL_TREE);
4598           IDENTIFIER_GLOBAL_VALUE (rname) = tdecl;
4599         }
4600       else
4601         {
4602           tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
4603           set_identifier_type_value (rname, NULL_TREE);
4604         }
4605     }
4606 }
4607
4608 /* Push overloaded decl, in global scope, with one argument so it
4609    can be used as a callback from define_function.  */
4610
4611 static void
4612 push_overloaded_decl_1 (x)
4613      tree x;
4614 {
4615   push_overloaded_decl (x, 0);
4616 }
4617
4618 #ifdef __GNUC__
4619 __inline
4620 #endif
4621 tree
4622 auto_function (name, type, code)
4623      tree name, type;
4624      enum built_in_function code;
4625 {
4626   return define_function
4627     (IDENTIFIER_POINTER (name), type, code, (void (*)())push_overloaded_decl_1,
4628      IDENTIFIER_POINTER (build_decl_overload (name, TYPE_ARG_TYPES (type),
4629                                               0)));
4630 }
4631
4632 /* Create the predefined scalar types of C,
4633    and some nodes representing standard constants (0, 1, (void *)0).
4634    Initialize the global binding level.
4635    Make definitions for built-in primitive functions.  */
4636
4637 void
4638 init_decl_processing ()
4639 {
4640   tree decl;
4641   register tree endlink, int_endlink, double_endlink, unsigned_endlink;
4642   tree fields[20];
4643   /* Data type of memcpy.  */
4644   tree memcpy_ftype, strlen_ftype;
4645   int wchar_type_size;
4646   tree temp;
4647   tree array_domain_type;
4648   extern int flag_strict_prototype;
4649   tree vb_off_identifier;
4650   /* Function type `char *(char *, char *)' and similar ones */
4651   tree string_ftype_ptr_ptr, int_ftype_string_string;
4652   tree sizetype_endlink;
4653   tree ptr_ftype, ptr_ftype_unsigned, ptr_ftype_sizetype;
4654   tree void_ftype, void_ftype_int, void_ftype_ptr;
4655
4656   /* Have to make these distinct before we try using them.  */
4657   lang_name_cplusplus = get_identifier ("C++");
4658   lang_name_c = get_identifier ("C");
4659
4660   if (flag_strict_prototype == 2)
4661     {
4662       if (pedantic)
4663         strict_prototypes_lang_c = strict_prototypes_lang_cplusplus;
4664     }
4665   else
4666     strict_prototypes_lang_c = flag_strict_prototype;
4667
4668   /* Initially, C.  */
4669   current_lang_name = lang_name_c;
4670
4671   current_function_decl = NULL_TREE;
4672   named_labels = NULL_TREE;
4673   named_label_uses = NULL;
4674   current_binding_level = NULL_BINDING_LEVEL;
4675   free_binding_level = NULL_BINDING_LEVEL;
4676
4677 #ifndef __CYGWIN32__
4678   /* Because most segmentation signals can be traced back into user
4679      code, catch them and at least give the user a chance of working
4680      around compiler bugs.  */
4681   signal (SIGSEGV, signal_catch);
4682
4683   /* We will also catch aborts in the back-end through signal_catch and
4684      give the user a chance to see where the error might be, and to defeat
4685      aborts in the back-end when there have been errors previously in their
4686      code.  */
4687 #ifdef SIGIOT
4688   signal (SIGIOT, signal_catch);
4689 #endif
4690 #ifdef SIGILL
4691   signal (SIGILL, signal_catch);
4692 #endif
4693 #ifdef SIGABRT
4694   signal (SIGABRT, signal_catch);
4695 #endif
4696 #ifdef SIGBUS
4697   signal (SIGBUS, signal_catch);
4698 #endif
4699 #else /* ndef __CYGWIN32__ */
4700   /* Cygwin32 cannot handle catching signals other than
4701      SIGABRT yet.  We hope this will cease to be the case soon. */
4702 #ifdef SIGABRT
4703   signal (SIGABRT, signal_catch);
4704 #endif
4705 #endif /* ndef __CYGWIN32__ */
4706
4707   gcc_obstack_init (&decl_obstack);
4708
4709   /* Must lay these out before anything else gets laid out.  */
4710   error_mark_node = make_node (ERROR_MARK);
4711   TREE_PERMANENT (error_mark_node) = 1;
4712   TREE_TYPE (error_mark_node) = error_mark_node;
4713   error_mark_list = build_tree_list (error_mark_node, error_mark_node);
4714   TREE_TYPE (error_mark_list) = error_mark_node;
4715
4716   /* Make the binding_level structure for global names.  */
4717   pushlevel (0);
4718   global_binding_level = current_binding_level;
4719
4720   this_identifier = get_identifier (THIS_NAME);
4721   in_charge_identifier = get_identifier (IN_CHARGE_NAME);
4722   ctor_identifier = get_identifier (CTOR_NAME);
4723   dtor_identifier = get_identifier (DTOR_NAME);
4724   pfn_identifier = get_identifier (VTABLE_PFN_NAME);
4725   index_identifier = get_identifier (VTABLE_INDEX_NAME);
4726   delta_identifier = get_identifier (VTABLE_DELTA_NAME);
4727   delta2_identifier = get_identifier (VTABLE_DELTA2_NAME);
4728   pfn_or_delta2_identifier = get_identifier ("__pfn_or_delta2");
4729   if (flag_handle_signatures)
4730     {
4731       tag_identifier = get_identifier (SIGTABLE_TAG_NAME);
4732       vb_off_identifier = get_identifier (SIGTABLE_VB_OFF_NAME);
4733       vt_off_identifier = get_identifier (SIGTABLE_VT_OFF_NAME);
4734     }
4735
4736   /* Define `int' and `char' first so that dbx will output them first.  */
4737
4738   integer_type_node = make_signed_type (INT_TYPE_SIZE);
4739   record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
4740
4741   /* Define `char', which is like either `signed char' or `unsigned char'
4742      but not the same as either.  */
4743
4744   char_type_node
4745     = (flag_signed_char
4746        ? make_signed_type (CHAR_TYPE_SIZE)
4747        : make_unsigned_type (CHAR_TYPE_SIZE));
4748   record_builtin_type (RID_CHAR, "char", char_type_node);
4749
4750   long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
4751   record_builtin_type (RID_LONG, "long int", long_integer_type_node);
4752
4753   unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
4754   record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
4755
4756   long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
4757   record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
4758   record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
4759
4760   long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
4761   record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
4762
4763   long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
4764   record_builtin_type (RID_MAX, "long long unsigned int",
4765                        long_long_unsigned_type_node);
4766   record_builtin_type (RID_MAX, "long long unsigned",
4767                        long_long_unsigned_type_node);
4768
4769   short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
4770   record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
4771   short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
4772   record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
4773   record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
4774
4775   /* `unsigned long' is the standard type for sizeof.
4776      Note that stddef.h uses `unsigned long',
4777      and this must agree, even of long and int are the same size.  */
4778   sizetype
4779     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE)));
4780
4781   ptrdiff_type_node
4782     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
4783
4784   TREE_TYPE (TYPE_SIZE (integer_type_node)) = sizetype;
4785   TREE_TYPE (TYPE_SIZE (char_type_node)) = sizetype;
4786   TREE_TYPE (TYPE_SIZE (unsigned_type_node)) = sizetype;
4787   TREE_TYPE (TYPE_SIZE (long_unsigned_type_node)) = sizetype;
4788   TREE_TYPE (TYPE_SIZE (long_integer_type_node)) = sizetype;
4789   TREE_TYPE (TYPE_SIZE (long_long_integer_type_node)) = sizetype;
4790   TREE_TYPE (TYPE_SIZE (long_long_unsigned_type_node)) = sizetype;
4791   TREE_TYPE (TYPE_SIZE (short_integer_type_node)) = sizetype;
4792   TREE_TYPE (TYPE_SIZE (short_unsigned_type_node)) = sizetype;
4793
4794   /* Define both `signed char' and `unsigned char'.  */
4795   signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
4796   record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
4797   unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
4798   record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
4799
4800   /* These are types that type_for_size and type_for_mode use.  */
4801   intQI_type_node = make_signed_type (GET_MODE_BITSIZE (QImode));
4802   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
4803   intHI_type_node = make_signed_type (GET_MODE_BITSIZE (HImode));
4804   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
4805   intSI_type_node = make_signed_type (GET_MODE_BITSIZE (SImode));
4806   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
4807   intDI_type_node = make_signed_type (GET_MODE_BITSIZE (DImode));
4808   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
4809   unsigned_intQI_type_node = make_unsigned_type (GET_MODE_BITSIZE (QImode));
4810   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
4811   unsigned_intHI_type_node = make_unsigned_type (GET_MODE_BITSIZE (HImode));
4812   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
4813   unsigned_intSI_type_node = make_unsigned_type (GET_MODE_BITSIZE (SImode));
4814   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
4815   unsigned_intDI_type_node = make_unsigned_type (GET_MODE_BITSIZE (DImode));
4816   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
4817
4818   float_type_node = make_node (REAL_TYPE);
4819   TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
4820   record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
4821   layout_type (float_type_node);
4822
4823   double_type_node = make_node (REAL_TYPE);
4824   if (flag_short_double)
4825     TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
4826   else
4827     TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
4828   record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
4829   layout_type (double_type_node);
4830
4831   long_double_type_node = make_node (REAL_TYPE);
4832   TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
4833   record_builtin_type (RID_MAX, "long double", long_double_type_node);
4834   layout_type (long_double_type_node);
4835
4836   complex_integer_type_node = make_node (COMPLEX_TYPE);
4837   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
4838                         complex_integer_type_node));
4839   TREE_TYPE (complex_integer_type_node) = integer_type_node;
4840   layout_type (complex_integer_type_node);
4841
4842   complex_float_type_node = make_node (COMPLEX_TYPE);
4843   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
4844                         complex_float_type_node));
4845   TREE_TYPE (complex_float_type_node) = float_type_node;
4846   layout_type (complex_float_type_node);
4847
4848   complex_double_type_node = make_node (COMPLEX_TYPE);
4849   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
4850                         complex_double_type_node));
4851   TREE_TYPE (complex_double_type_node) = double_type_node;
4852   layout_type (complex_double_type_node);
4853
4854   complex_long_double_type_node = make_node (COMPLEX_TYPE);
4855   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
4856                         complex_long_double_type_node));
4857   TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
4858   layout_type (complex_long_double_type_node);
4859
4860   integer_zero_node = build_int_2 (0, 0);
4861   TREE_TYPE (integer_zero_node) = integer_type_node;
4862   integer_one_node = build_int_2 (1, 0);
4863   TREE_TYPE (integer_one_node) = integer_type_node;
4864   integer_two_node = build_int_2 (2, 0);
4865   TREE_TYPE (integer_two_node) = integer_type_node;
4866   integer_three_node = build_int_2 (3, 0);
4867   TREE_TYPE (integer_three_node) = integer_type_node;
4868
4869   boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
4870   TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
4871   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
4872   boolean_false_node = build_int_2 (0, 0);
4873   TREE_TYPE (boolean_false_node) = boolean_type_node;
4874   boolean_true_node = build_int_2 (1, 0);
4875   TREE_TYPE (boolean_true_node) = boolean_type_node;
4876
4877   /* These are needed by stor-layout.c.  */
4878   size_zero_node = size_int (0);
4879   size_one_node = size_int (1);
4880
4881   signed_size_zero_node = build_int_2 (0, 0);
4882   TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
4883
4884   void_type_node = make_node (VOID_TYPE);
4885   record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
4886   layout_type (void_type_node); /* Uses integer_zero_node.  */
4887   void_list_node = build_tree_list (NULL_TREE, void_type_node);
4888   TREE_PARMLIST (void_list_node) = 1;
4889
4890   null_pointer_node = build_int_2 (0, 0);
4891   TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
4892   layout_type (TREE_TYPE (null_pointer_node));
4893      
4894   if (flag_ansi)
4895     TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
4896   else
4897     TREE_TYPE (null_node) = build_pointer_type (void_type_node);
4898
4899   /* Used for expressions that do nothing, but are not errors.  */
4900   void_zero_node = build_int_2 (0, 0);
4901   TREE_TYPE (void_zero_node) = void_type_node;
4902
4903   string_type_node = build_pointer_type (char_type_node);
4904   const_string_type_node
4905     = build_pointer_type (build_type_variant (char_type_node, 1, 0));
4906 #if 0
4907   record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
4908 #endif
4909
4910   /* Make a type to be the domain of a few array types
4911      whose domains don't really matter.
4912      200 is small enough that it always fits in size_t
4913      and large enough that it can hold most function names for the
4914      initializations of __FUNCTION__ and __PRETTY_FUNCTION__.  */
4915   array_domain_type = build_index_type (build_int_2 (200, 0));
4916
4917   /* make a type for arrays of characters.
4918      With luck nothing will ever really depend on the length of this
4919      array type.  */
4920   char_array_type_node
4921     = build_array_type (char_type_node, array_domain_type);
4922   /* Likewise for arrays of ints.  */
4923   int_array_type_node
4924     = build_array_type (integer_type_node, array_domain_type);
4925
4926   /* This is just some anonymous class type.  Nobody should ever
4927      need to look inside this envelope.  */
4928   class_star_type_node = build_pointer_type (make_lang_type (RECORD_TYPE));
4929
4930   default_function_type
4931     = build_function_type (integer_type_node, NULL_TREE);
4932
4933   ptr_type_node = build_pointer_type (void_type_node);
4934   const_ptr_type_node
4935     = build_pointer_type (build_type_variant (void_type_node, 1, 0));
4936 #if 0
4937   record_builtin_type (RID_MAX, NULL_PTR, ptr_type_node);
4938 #endif
4939   endlink = void_list_node;
4940   int_endlink = tree_cons (NULL_TREE, integer_type_node, endlink);
4941   double_endlink = tree_cons (NULL_TREE, double_type_node, endlink);
4942   unsigned_endlink = tree_cons (NULL_TREE, unsigned_type_node, endlink);
4943
4944   ptr_ftype = build_function_type (ptr_type_node, NULL_TREE);
4945   ptr_ftype_unsigned = build_function_type (ptr_type_node, unsigned_endlink);
4946   sizetype_endlink = tree_cons (NULL_TREE, sizetype, endlink);
4947   /* We realloc here because sizetype could be int or unsigned.  S'ok.  */
4948   ptr_ftype_sizetype = build_function_type (ptr_type_node, sizetype_endlink);
4949
4950   void_ftype = build_function_type (void_type_node, endlink);
4951   void_ftype_int = build_function_type (void_type_node, int_endlink);
4952   void_ftype_ptr
4953     = build_function_type (void_type_node,
4954                            tree_cons (NULL_TREE, ptr_type_node, endlink));
4955   void_ftype_ptr
4956     = build_exception_variant (void_ftype_ptr,
4957                                tree_cons (NULL_TREE, NULL_TREE, NULL_TREE));
4958
4959   float_ftype_float
4960     = build_function_type (float_type_node,
4961                            tree_cons (NULL_TREE, float_type_node, endlink));
4962
4963   double_ftype_double
4964     = build_function_type (double_type_node, double_endlink);
4965
4966   ldouble_ftype_ldouble
4967     = build_function_type (long_double_type_node,
4968                            tree_cons (NULL_TREE, long_double_type_node,
4969                                       endlink));
4970
4971   double_ftype_double_double
4972     = build_function_type (double_type_node,
4973                            tree_cons (NULL_TREE, double_type_node,
4974                                       double_endlink));
4975
4976   int_ftype_int
4977     = build_function_type (integer_type_node, int_endlink);
4978
4979   long_ftype_long
4980     = build_function_type (long_integer_type_node,
4981                            tree_cons (NULL_TREE, long_integer_type_node,
4982                                       endlink));
4983
4984   int_ftype_cptr_cptr_sizet
4985     = build_function_type (integer_type_node,
4986                            tree_cons (NULL_TREE, const_ptr_type_node,
4987                                       tree_cons (NULL_TREE, const_ptr_type_node,
4988                                                  tree_cons (NULL_TREE,
4989                                                             sizetype,
4990                                                             endlink))));
4991
4992   string_ftype_ptr_ptr          /* strcpy prototype */
4993     = build_function_type (string_type_node,
4994                            tree_cons (NULL_TREE, string_type_node,
4995                                       tree_cons (NULL_TREE,
4996                                                  const_string_type_node,
4997                                                  endlink)));
4998
4999   int_ftype_string_string       /* strcmp prototype */
5000     = build_function_type (integer_type_node,
5001                            tree_cons (NULL_TREE, const_string_type_node,
5002                                       tree_cons (NULL_TREE,
5003                                                  const_string_type_node,
5004                                                  endlink)));
5005
5006   strlen_ftype          /* strlen prototype */
5007     = build_function_type (sizetype,
5008                            tree_cons (NULL_TREE, const_string_type_node,
5009                                       endlink));
5010
5011   memcpy_ftype  /* memcpy prototype */
5012     = build_function_type (ptr_type_node,
5013                            tree_cons (NULL_TREE, ptr_type_node,
5014                                       tree_cons (NULL_TREE, const_ptr_type_node,
5015                                                  sizetype_endlink)));
5016
5017   if (flag_huge_objects)
5018     delta_type_node = long_integer_type_node;
5019   else
5020     delta_type_node = short_integer_type_node;
5021
5022   builtin_function ("__builtin_constant_p", int_ftype_int,
5023                     BUILT_IN_CONSTANT_P, NULL_PTR);
5024
5025   builtin_return_address_fndecl
5026     = builtin_function ("__builtin_return_address", ptr_ftype_unsigned,
5027                         BUILT_IN_RETURN_ADDRESS, NULL_PTR);
5028
5029   builtin_function ("__builtin_frame_address", ptr_ftype_unsigned,
5030                     BUILT_IN_FRAME_ADDRESS, NULL_PTR);
5031
5032   builtin_function ("__builtin_alloca", ptr_ftype_sizetype,
5033                     BUILT_IN_ALLOCA, "alloca");
5034   builtin_function ("__builtin_ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
5035   /* Define alloca, ffs as builtins.
5036      Declare _exit just to mark it as volatile.  */
5037   if (! flag_no_builtin && !flag_no_nonansi_builtin)
5038     {
5039       temp = builtin_function ("alloca", ptr_ftype_sizetype,
5040                                BUILT_IN_ALLOCA, NULL_PTR);
5041       /* Suppress error if redefined as a non-function.  */
5042       DECL_BUILT_IN_NONANSI (temp) = 1;
5043       temp = builtin_function ("ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
5044       /* Suppress error if redefined as a non-function.  */
5045       DECL_BUILT_IN_NONANSI (temp) = 1;
5046       temp = builtin_function ("_exit", void_ftype_int,
5047                                NOT_BUILT_IN, NULL_PTR);
5048       TREE_THIS_VOLATILE (temp) = 1;
5049       TREE_SIDE_EFFECTS (temp) = 1;
5050       /* Suppress error if redefined as a non-function.  */
5051       DECL_BUILT_IN_NONANSI (temp) = 1;
5052     }
5053
5054   builtin_function ("__builtin_abs", int_ftype_int, BUILT_IN_ABS, NULL_PTR);
5055   builtin_function ("__builtin_fabsf", float_ftype_float, BUILT_IN_FABS,
5056                     NULL_PTR);
5057   builtin_function ("__builtin_fabs", double_ftype_double, BUILT_IN_FABS,
5058                     NULL_PTR);
5059   builtin_function ("__builtin_fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
5060                     NULL_PTR);
5061   builtin_function ("__builtin_labs", long_ftype_long,
5062                     BUILT_IN_LABS, NULL_PTR);
5063   builtin_function ("__builtin_saveregs", ptr_ftype,
5064                     BUILT_IN_SAVEREGS, NULL_PTR);
5065   builtin_function ("__builtin_classify_type", default_function_type,
5066                     BUILT_IN_CLASSIFY_TYPE, NULL_PTR);
5067   builtin_function ("__builtin_next_arg", ptr_ftype,
5068                     BUILT_IN_NEXT_ARG, NULL_PTR);
5069   builtin_function ("__builtin_args_info", int_ftype_int,
5070                     BUILT_IN_ARGS_INFO, NULL_PTR);
5071   builtin_function ("__builtin_setjmp",
5072                     build_function_type (integer_type_node,
5073                                          tree_cons (NULL_TREE, ptr_type_node,
5074                                                     endlink)),
5075                     BUILT_IN_SETJMP, NULL_PTR);
5076   builtin_function ("__builtin_longjmp",
5077                     build_function_type (integer_type_node,
5078                                          tree_cons (NULL_TREE, ptr_type_node,
5079                                                     tree_cons (NULL_TREE,
5080                                                                integer_type_node,
5081                                                                endlink))),
5082                     BUILT_IN_LONGJMP, NULL_PTR);
5083
5084   /* Untyped call and return.  */
5085   builtin_function ("__builtin_apply_args", ptr_ftype,
5086                     BUILT_IN_APPLY_ARGS, NULL_PTR);
5087
5088   temp = tree_cons (NULL_TREE,
5089                     build_pointer_type (build_function_type (void_type_node,
5090                                                              NULL_TREE)),
5091                     ptr_ftype_sizetype);
5092   builtin_function ("__builtin_apply",
5093                     build_function_type (ptr_type_node, temp),
5094                     BUILT_IN_APPLY, NULL_PTR);
5095   builtin_function ("__builtin_return", void_ftype_ptr,
5096                     BUILT_IN_RETURN, NULL_PTR);
5097
5098   /* Currently under experimentation.  */
5099   builtin_function ("__builtin_memcpy", memcpy_ftype,
5100                     BUILT_IN_MEMCPY, "memcpy");
5101   builtin_function ("__builtin_memcmp", int_ftype_cptr_cptr_sizet,
5102                     BUILT_IN_MEMCMP, "memcmp");
5103   builtin_function ("__builtin_strcmp", int_ftype_string_string,
5104                     BUILT_IN_STRCMP, "strcmp");
5105   builtin_function ("__builtin_strcpy", string_ftype_ptr_ptr,
5106                     BUILT_IN_STRCPY, "strcpy");
5107   builtin_function ("__builtin_strlen", strlen_ftype,
5108                     BUILT_IN_STRLEN, "strlen");
5109   builtin_function ("__builtin_sqrtf", float_ftype_float, 
5110                     BUILT_IN_FSQRT, "sqrtf");
5111   builtin_function ("__builtin_fsqrt", double_ftype_double,
5112                     BUILT_IN_FSQRT, NULL_PTR);
5113   builtin_function ("__builtin_sqrtl", ldouble_ftype_ldouble, 
5114                     BUILT_IN_FSQRT, "sqrtl");
5115   builtin_function ("__builtin_sinf", float_ftype_float, 
5116                     BUILT_IN_SIN, "sinf");
5117   builtin_function ("__builtin_sin", double_ftype_double, 
5118                     BUILT_IN_SIN, "sin");
5119   builtin_function ("__builtin_sinl", ldouble_ftype_ldouble, 
5120                     BUILT_IN_SIN, "sinl");
5121   builtin_function ("__builtin_cosf", float_ftype_float, 
5122                     BUILT_IN_COS, "cosf");
5123   builtin_function ("__builtin_cos", double_ftype_double, 
5124                     BUILT_IN_COS, "cos");
5125   builtin_function ("__builtin_cosl", ldouble_ftype_ldouble, 
5126                     BUILT_IN_COS, "cosl");
5127
5128   if (!flag_no_builtin)
5129     {
5130 #if 0 /* These do not work well with libg++.  */
5131       builtin_function ("abs", int_ftype_int, BUILT_IN_ABS, NULL_PTR);
5132       builtin_function ("fabs", double_ftype_double, BUILT_IN_FABS, NULL_PTR);
5133       builtin_function ("labs", long_ftype_long, BUILT_IN_LABS, NULL_PTR);
5134 #endif
5135       builtin_function ("fabsf", float_ftype_float, BUILT_IN_FABS, NULL_PTR);
5136       builtin_function ("fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
5137                         NULL_PTR);
5138       builtin_function ("memcpy", memcpy_ftype, BUILT_IN_MEMCPY, NULL_PTR);
5139       builtin_function ("memcmp", int_ftype_cptr_cptr_sizet, BUILT_IN_MEMCMP,
5140                         NULL_PTR);
5141       builtin_function ("strcmp", int_ftype_string_string, BUILT_IN_STRCMP,
5142                         NULL_PTR);
5143       builtin_function ("strcpy", string_ftype_ptr_ptr, BUILT_IN_STRCPY,
5144                         NULL_PTR);
5145       builtin_function ("strlen", strlen_ftype, BUILT_IN_STRLEN, NULL_PTR);
5146       builtin_function ("sqrtf", float_ftype_float, BUILT_IN_FSQRT, NULL_PTR);
5147       builtin_function ("sqrt", double_ftype_double, BUILT_IN_FSQRT, NULL_PTR);
5148       builtin_function ("sqrtl", ldouble_ftype_ldouble, BUILT_IN_FSQRT,
5149                         NULL_PTR);
5150       builtin_function ("sinf", float_ftype_float, BUILT_IN_SIN, NULL_PTR);
5151       builtin_function ("sin", double_ftype_double, BUILT_IN_SIN, NULL_PTR);
5152       builtin_function ("sinl", ldouble_ftype_ldouble, BUILT_IN_SIN, NULL_PTR);
5153       builtin_function ("cosf", float_ftype_float, BUILT_IN_COS, NULL_PTR);
5154       builtin_function ("cos", double_ftype_double, BUILT_IN_COS, NULL_PTR);
5155       builtin_function ("cosl", ldouble_ftype_ldouble, BUILT_IN_COS, NULL_PTR);
5156
5157       /* Declare these functions volatile
5158          to avoid spurious "control drops through" warnings.  */
5159       temp = builtin_function ("abort", void_ftype,
5160                                NOT_BUILT_IN, NULL_PTR);
5161       TREE_THIS_VOLATILE (temp) = 1;
5162       TREE_SIDE_EFFECTS (temp) = 1;
5163       /* Well, these are actually ANSI, but we can't set DECL_BUILT_IN on
5164          them...  */
5165       DECL_BUILT_IN_NONANSI (temp) = 1;
5166       temp = builtin_function ("exit", void_ftype_int,
5167                                NOT_BUILT_IN, NULL_PTR);
5168       TREE_THIS_VOLATILE (temp) = 1;
5169       TREE_SIDE_EFFECTS (temp) = 1;
5170       DECL_BUILT_IN_NONANSI (temp) = 1;
5171     }
5172
5173 #if 0
5174   /* Support for these has not been written in either expand_builtin
5175      or build_function_call.  */
5176   builtin_function ("__builtin_div", default_ftype, BUILT_IN_DIV, NULL_PTR);
5177   builtin_function ("__builtin_ldiv", default_ftype, BUILT_IN_LDIV, NULL_PTR);
5178   builtin_function ("__builtin_ffloor", double_ftype_double, BUILT_IN_FFLOOR,
5179                     NULL_PTR);
5180   builtin_function ("__builtin_fceil", double_ftype_double, BUILT_IN_FCEIL,
5181                     NULL_PTR);
5182   builtin_function ("__builtin_fmod", double_ftype_double_double,
5183                     BUILT_IN_FMOD, NULL_PTR);
5184   builtin_function ("__builtin_frem", double_ftype_double_double,
5185                     BUILT_IN_FREM, NULL_PTR);
5186   builtin_function ("__builtin_memset", ptr_ftype_ptr_int_int,
5187                     BUILT_IN_MEMSET, NULL_PTR);
5188   builtin_function ("__builtin_getexp", double_ftype_double, BUILT_IN_GETEXP,
5189                     NULL_PTR);
5190   builtin_function ("__builtin_getman", double_ftype_double, BUILT_IN_GETMAN,
5191                     NULL_PTR);
5192 #endif
5193
5194   /* C++ extensions */
5195
5196   unknown_type_node = make_node (UNKNOWN_TYPE);
5197   decl = pushdecl (build_decl (TYPE_DECL, get_identifier ("unknown type"),
5198                         unknown_type_node));
5199   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
5200   DECL_IGNORED_P (decl) = 1;
5201   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5202   TYPE_SIZE (unknown_type_node) = TYPE_SIZE (void_type_node);
5203   TYPE_ALIGN (unknown_type_node) = 1;
5204   TYPE_MODE (unknown_type_node) = TYPE_MODE (void_type_node);
5205   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
5206   TREE_TYPE (unknown_type_node) = unknown_type_node;
5207   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same result.  */
5208   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
5209   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
5210
5211   /* This is for handling opaque types in signatures.  */
5212   opaque_type_node = copy_node (ptr_type_node);
5213   TYPE_MAIN_VARIANT (opaque_type_node) = opaque_type_node;
5214   record_builtin_type (RID_MAX, 0, opaque_type_node);
5215
5216   /* This is special for C++ so functions can be overloaded.  */
5217   wchar_type_node
5218     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (WCHAR_TYPE)));
5219   wchar_type_size = TYPE_PRECISION (wchar_type_node);
5220   signed_wchar_type_node = make_signed_type (wchar_type_size);
5221   unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
5222   wchar_type_node
5223     = TREE_UNSIGNED (wchar_type_node)
5224       ? unsigned_wchar_type_node
5225       : signed_wchar_type_node;
5226   record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
5227
5228   /* Artificial declaration of wchar_t -- can be bashed */
5229   wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
5230                                 wchar_type_node);
5231   pushdecl (wchar_decl_node);
5232
5233   /* This is for wide string constants.  */
5234   wchar_array_type_node
5235     = build_array_type (wchar_type_node, array_domain_type);
5236
5237   if (flag_vtable_thunks)
5238     {
5239       /* Make sure we get a unique function type, so we can give
5240          its pointer type a name.  (This wins for gdb.) */
5241       tree vfunc_type = make_node (FUNCTION_TYPE);
5242       TREE_TYPE (vfunc_type) = integer_type_node;
5243       TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
5244       layout_type (vfunc_type);
5245
5246       vtable_entry_type = build_pointer_type (vfunc_type);
5247     }
5248   else
5249     {
5250       vtable_entry_type = make_lang_type (RECORD_TYPE);
5251       fields[0] = build_lang_field_decl (FIELD_DECL, delta_identifier,
5252                                          delta_type_node);
5253       fields[1] = build_lang_field_decl (FIELD_DECL, index_identifier,
5254                                          delta_type_node);
5255       fields[2] = build_lang_field_decl (FIELD_DECL, pfn_identifier,
5256                                          ptr_type_node);
5257       finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
5258                            double_type_node);
5259
5260       /* Make this part of an invisible union.  */
5261       fields[3] = copy_node (fields[2]);
5262       TREE_TYPE (fields[3]) = delta_type_node;
5263       DECL_NAME (fields[3]) = delta2_identifier;
5264       DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
5265       DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
5266       TREE_UNSIGNED (fields[3]) = 0;
5267       TREE_CHAIN (fields[2]) = fields[3];
5268       vtable_entry_type = build_type_variant (vtable_entry_type, 1, 0);
5269     }
5270   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
5271
5272   vtbl_type_node
5273     = build_array_type (vtable_entry_type, NULL_TREE);
5274   layout_type (vtbl_type_node);
5275   vtbl_type_node = cp_build_type_variant (vtbl_type_node, 1, 0);
5276   record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
5277
5278   /* Simplify life by making a "sigtable_entry_type".  Give its
5279      fields names so that the debugger can use them.  */
5280
5281   if (flag_handle_signatures)
5282     {
5283       sigtable_entry_type = make_lang_type (RECORD_TYPE);
5284       fields[0] = build_lang_field_decl (FIELD_DECL, tag_identifier,
5285                                          delta_type_node);
5286       fields[1] = build_lang_field_decl (FIELD_DECL, vb_off_identifier,
5287                                          delta_type_node);
5288       fields[2] = build_lang_field_decl (FIELD_DECL, delta_identifier,
5289                                          delta_type_node);
5290       fields[3] = build_lang_field_decl (FIELD_DECL, index_identifier,
5291                                          delta_type_node);
5292       fields[4] = build_lang_field_decl (FIELD_DECL, pfn_identifier,
5293                                          ptr_type_node);
5294
5295       /* Set the alignment to the max of the alignment of ptr_type_node and
5296          delta_type_node.  Double alignment wastes a word on the Sparc.  */
5297       finish_builtin_type (sigtable_entry_type, SIGTABLE_PTR_TYPE, fields, 4,
5298                            (TYPE_ALIGN (ptr_type_node) > TYPE_ALIGN (delta_type_node))
5299                            ? ptr_type_node
5300                            : delta_type_node);
5301
5302       /* Make this part of an invisible union.  */
5303       fields[5] = copy_node (fields[4]);
5304       TREE_TYPE (fields[5]) = delta_type_node;
5305       DECL_NAME (fields[5]) = vt_off_identifier;
5306       DECL_MODE (fields[5]) = TYPE_MODE (delta_type_node);
5307       DECL_SIZE (fields[5]) = TYPE_SIZE (delta_type_node);
5308       TREE_UNSIGNED (fields[5]) = 0;
5309       TREE_CHAIN (fields[4]) = fields[5];
5310
5311       sigtable_entry_type = build_type_variant (sigtable_entry_type, 1, 0);
5312       record_builtin_type (RID_MAX, SIGTABLE_PTR_TYPE, sigtable_entry_type);
5313     }
5314
5315   std_node = build_decl (NAMESPACE_DECL, get_identifier ("std"),
5316                          void_type_node);
5317   pushdecl (std_node);
5318
5319 #if 0
5320   if (flag_rtti)
5321     {
5322       /* Must build __t_desc type.  Currently, type descriptors look like this:
5323
5324          struct __t_desc
5325          {
5326            const char *name;
5327            int size;
5328            int bits;
5329            struct __t_desc *points_to;
5330            int ivars_count, meths_count;
5331            struct __i_desc *ivars[];
5332            struct __m_desc *meths[];
5333            struct __t_desc *parents[];
5334            struct __t_desc *vbases[];
5335            int offsets[];
5336          };
5337
5338          ...as per Linton's paper.  */
5339
5340       __t_desc_type_node = make_lang_type (RECORD_TYPE);
5341       __i_desc_type_node = make_lang_type (RECORD_TYPE);
5342       __m_desc_type_node = make_lang_type (RECORD_TYPE);
5343       __t_desc_array_type
5344         = build_array_type (build_pointer_type (__t_desc_type_node),
5345                             NULL_TREE);
5346       __i_desc_array_type
5347         = build_array_type (build_pointer_type (__i_desc_type_node),
5348                             NULL_TREE);
5349       __m_desc_array_type
5350         = build_array_type (build_pointer_type (__m_desc_type_node),
5351                             NULL_TREE);
5352
5353       fields[0] = build_lang_field_decl (FIELD_DECL, get_identifier ("name"),
5354                                          string_type_node);
5355       fields[1] = build_lang_field_decl (FIELD_DECL, get_identifier ("size"),
5356                                          unsigned_type_node);
5357       fields[2] = build_lang_field_decl (FIELD_DECL, get_identifier ("bits"),
5358                                          unsigned_type_node);
5359       fields[3] = build_lang_field_decl (FIELD_DECL,
5360                                          get_identifier ("points_to"),
5361                                          build_pointer_type (__t_desc_type_node));
5362       fields[4] = build_lang_field_decl (FIELD_DECL,
5363                                          get_identifier ("ivars_count"),
5364                                          integer_type_node);
5365       fields[5] = build_lang_field_decl (FIELD_DECL,
5366                                          get_identifier ("meths_count"),
5367                                          integer_type_node);
5368       fields[6] = build_lang_field_decl (FIELD_DECL, get_identifier ("ivars"),
5369                                          build_pointer_type (__i_desc_array_type));
5370       fields[7] = build_lang_field_decl (FIELD_DECL, get_identifier ("meths"),
5371                                          build_pointer_type (__m_desc_array_type));
5372       fields[8] = build_lang_field_decl (FIELD_DECL, get_identifier ("parents"),
5373                                          build_pointer_type (__t_desc_array_type));
5374       fields[9] = build_lang_field_decl (FIELD_DECL, get_identifier ("vbases"),
5375                                          build_pointer_type (__t_desc_array_type));
5376       fields[10] = build_lang_field_decl (FIELD_DECL, get_identifier ("offsets"),
5377                                          build_pointer_type (integer_type_node));
5378       finish_builtin_type (__t_desc_type_node, "__t_desc", fields, 10, integer_type_node);
5379
5380       /* ivar descriptors look like this:
5381
5382          struct __i_desc
5383          {
5384            const char *name;
5385            int offset;
5386            struct __t_desc *type;
5387          };
5388       */
5389
5390       fields[0] = build_lang_field_decl (FIELD_DECL, get_identifier ("name"),
5391                                          string_type_node);
5392       fields[1] = build_lang_field_decl (FIELD_DECL, get_identifier ("offset"),
5393                                          integer_type_node);
5394       fields[2] = build_lang_field_decl (FIELD_DECL, get_identifier ("type"),
5395                                          build_pointer_type (__t_desc_type_node));
5396       finish_builtin_type (__i_desc_type_node, "__i_desc", fields, 2,
5397                            integer_type_node);
5398
5399       /* method descriptors look like this:
5400
5401          struct __m_desc
5402          {
5403            const char *name;
5404            int vindex;
5405            struct __t_desc *vcontext;
5406            struct __t_desc *return_type;
5407            void (*address)();
5408            short parm_count;
5409            short required_parms;
5410            struct __t_desc *parm_types[];
5411          };
5412       */
5413
5414       fields[0] = build_lang_field_decl (FIELD_DECL, get_identifier ("name"),
5415                                          string_type_node);
5416       fields[1] = build_lang_field_decl (FIELD_DECL, get_identifier ("vindex"),
5417                                          integer_type_node);
5418       fields[2] = build_lang_field_decl (FIELD_DECL, get_identifier ("vcontext"),
5419                                          build_pointer_type (__t_desc_type_node));
5420       fields[3] = build_lang_field_decl (FIELD_DECL, get_identifier ("return_type"),
5421                                          build_pointer_type (__t_desc_type_node));
5422       fields[4] = build_lang_field_decl (FIELD_DECL, get_identifier ("address"),
5423                                          build_pointer_type (default_function_type));
5424       fields[5] = build_lang_field_decl (FIELD_DECL, get_identifier ("parm_count"),
5425                                          short_integer_type_node);
5426       fields[6] = build_lang_field_decl (FIELD_DECL, get_identifier ("required_parms"),
5427                                          short_integer_type_node);
5428       fields[7] = build_lang_field_decl (FIELD_DECL, get_identifier ("parm_types"),
5429                                          build_pointer_type (build_array_type (build_pointer_type (__t_desc_type_node), NULL_TREE)));
5430       finish_builtin_type (__m_desc_type_node, "__m_desc", fields, 7,
5431                            integer_type_node);
5432     }
5433 #endif /*flag_rtti*/
5434
5435   /* Now, C++.  */
5436   current_lang_name = lang_name_cplusplus;
5437
5438   auto_function (ansi_opname[(int) NEW_EXPR], ptr_ftype_sizetype,
5439                  NOT_BUILT_IN);
5440   auto_function (ansi_opname[(int) VEC_NEW_EXPR], ptr_ftype_sizetype,
5441                  NOT_BUILT_IN);
5442   auto_function (ansi_opname[(int) DELETE_EXPR], void_ftype_ptr,
5443                  NOT_BUILT_IN);
5444   auto_function (ansi_opname[(int) VEC_DELETE_EXPR], void_ftype_ptr,
5445                  NOT_BUILT_IN);
5446
5447   abort_fndecl
5448     = define_function ("__pure_virtual", void_ftype,
5449                        NOT_BUILT_IN, 0, 0);
5450
5451   /* Perform other language dependent initializations.  */
5452   init_class_processing ();
5453   init_init_processing ();
5454   init_search_processing ();
5455   init_rtti_processing ();
5456
5457   if (flag_exceptions)
5458     init_exception_processing ();
5459   if (flag_no_inline)
5460     {
5461       flag_inline_functions = 0;
5462     }
5463
5464   if (! supports_one_only ())
5465     flag_weak = 0;
5466
5467   /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__.  */
5468   declare_function_name ();
5469
5470   /* Prepare to check format strings against argument lists.  */
5471   init_function_format_info ();
5472 }
5473
5474 /* initialize type descriptor type node of various rtti type.  */
5475
5476 int
5477 init_type_desc()
5478 {
5479   tree tdecl;
5480
5481   tdecl = lookup_name (get_identifier ("type_info"), 0);
5482   if (tdecl == NULL_TREE)
5483     return 0;
5484   __t_desc_type_node = TREE_TYPE (tdecl);
5485 #if 0
5486   __tp_desc_type_node = build_pointer_type (__t_desc_type_node);
5487 #endif
5488
5489 #if 0
5490   tdecl = lookup_name (get_identifier ("__baselist_type_info"), 0);
5491   if (tdecl == NULL_TREE)
5492     return 0;
5493   __baselist_desc_type_node = TREE_TYPE (tdecl);
5494 #endif
5495
5496   tdecl = lookup_name (get_identifier ("__builtin_type_info"), 0);
5497   if (tdecl == NULL_TREE)
5498     return 0;
5499   __bltn_desc_type_node = TREE_TYPE (tdecl);
5500
5501   tdecl = lookup_name (get_identifier ("__user_type_info"), 0);
5502   if (tdecl == NULL_TREE)
5503     return 0;
5504   __user_desc_type_node = TREE_TYPE (tdecl);
5505
5506   tdecl = lookup_name (get_identifier ("__class_type_info"), 0);
5507   if (tdecl == NULL_TREE)
5508     return 0;
5509   __class_desc_type_node = TREE_TYPE (tdecl);
5510
5511   tdecl = lookup_field (__class_desc_type_node, 
5512         get_identifier ("access_mode"), 0, 0);
5513   if (tdecl == NULL_TREE)
5514     return 0;
5515   __access_mode_type_node = TREE_TYPE (tdecl);
5516
5517   tdecl = lookup_name (get_identifier ("__attr_type_info"), 0);
5518   if (tdecl == NULL_TREE)
5519     return 0;
5520   __attr_desc_type_node = TREE_TYPE (tdecl);
5521
5522   tdecl = lookup_name (get_identifier ("__pointer_type_info"), 0);
5523   if (tdecl == NULL_TREE)
5524     return 0;
5525   __ptr_desc_type_node = TREE_TYPE (tdecl);
5526
5527   tdecl = lookup_name (get_identifier ("__func_type_info"), 0);
5528   if (tdecl == NULL_TREE)
5529     return 0;
5530   __func_desc_type_node = TREE_TYPE (tdecl);
5531
5532   tdecl = lookup_name (get_identifier ("__ptmf_type_info"), 0);
5533   if (tdecl == NULL_TREE)
5534     return 0;
5535   __ptmf_desc_type_node = TREE_TYPE (tdecl);
5536
5537   tdecl = lookup_name (get_identifier ("__ptmd_type_info"), 0);
5538   if (tdecl == NULL_TREE)
5539     return 0;
5540   __ptmd_desc_type_node = TREE_TYPE (tdecl);
5541
5542   return 1;
5543 }
5544 /* Make a definition for a builtin function named NAME and whose data type
5545    is TYPE.  TYPE should be a function type with argument types.
5546    FUNCTION_CODE tells later passes how to compile calls to this function.
5547    See tree.h for its possible values.
5548
5549    If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
5550    the name to be called if we can't opencode the function.  */
5551
5552 tree
5553 define_function (name, type, function_code, pfn, library_name)
5554      char *name;
5555      tree type;
5556      enum built_in_function function_code;
5557      void (*pfn)();
5558      char *library_name;
5559 {
5560   tree decl = build_lang_decl (FUNCTION_DECL, get_identifier (name), type);
5561   DECL_EXTERNAL (decl) = 1;
5562   TREE_PUBLIC (decl) = 1;
5563   DECL_ARTIFICIAL (decl) = 1;
5564
5565   /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
5566      we cannot change DECL_ASSEMBLER_NAME until we have installed this
5567      function in the namespace.  */
5568   if (pfn) (*pfn) (decl);
5569   if (library_name)
5570     DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
5571   make_function_rtl (decl);
5572   if (function_code != NOT_BUILT_IN)
5573     {
5574       DECL_BUILT_IN (decl) = 1;
5575       DECL_FUNCTION_CODE (decl) = function_code;
5576     }
5577   return decl;
5578 }
5579 \f
5580 /* Called when a declaration is seen that contains no names to declare.
5581    If its type is a reference to a structure, union or enum inherited
5582    from a containing scope, shadow that tag name for the current scope
5583    with a forward reference.
5584    If its type defines a new named structure or union
5585    or defines an enum, it is valid but we need not do anything here.
5586    Otherwise, it is an error.
5587
5588    C++: may have to grok the declspecs to learn about static,
5589    complain for anonymous unions.  */
5590
5591 void
5592 shadow_tag (declspecs)
5593      tree declspecs;
5594 {
5595   int found_tag = 0;
5596   tree ob_modifier = NULL_TREE;
5597   register tree link;
5598   register enum tree_code code, ok_code = ERROR_MARK;
5599   register tree t = NULL_TREE;
5600
5601   for (link = declspecs; link; link = TREE_CHAIN (link))
5602     {
5603       register tree value = TREE_VALUE (link);
5604
5605       code = TREE_CODE (value);
5606       if (IS_AGGR_TYPE_CODE (code) || code == ENUMERAL_TYPE)
5607         {
5608           my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
5609
5610           if (IS_AGGR_TYPE (value) && CLASSTYPE_USE_TEMPLATE (value))
5611             {
5612               if (CLASSTYPE_IMPLICIT_INSTANTIATION (value)
5613                   && TYPE_SIZE (value) == NULL_TREE)
5614                 {
5615                   SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (value);
5616                   if (processing_template_decl)
5617                     push_template_decl (TYPE_MAIN_DECL (value));
5618                 }
5619               else if (CLASSTYPE_TEMPLATE_INSTANTIATION (value))
5620                 cp_error ("specialization after instantiation of `%T'", value);
5621             }
5622
5623           t = value;
5624           ok_code = code;
5625           found_tag++;
5626         }
5627       else if (value == ridpointers[(int) RID_STATIC]
5628                || value == ridpointers[(int) RID_EXTERN]
5629                || value == ridpointers[(int) RID_AUTO]
5630                || value == ridpointers[(int) RID_REGISTER]
5631                || value == ridpointers[(int) RID_INLINE]
5632                || value == ridpointers[(int) RID_VIRTUAL]
5633                || value == ridpointers[(int) RID_EXPLICIT])
5634         ob_modifier = value;
5635     }
5636
5637   /* This is where the variables in an anonymous union are
5638      declared.  An anonymous union declaration looks like:
5639      union { ... } ;
5640      because there is no declarator after the union, the parser
5641      sends that declaration here.  */
5642   if (ok_code == UNION_TYPE
5643       && t != NULL_TREE
5644       && ((TREE_CODE (TYPE_NAME (t)) == IDENTIFIER_NODE
5645            && ANON_AGGRNAME_P (TYPE_NAME (t)))
5646           || (TREE_CODE (TYPE_NAME (t)) == TYPE_DECL
5647               && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))))
5648     {
5649       /* See also grok_x_components.  */
5650       tree *q;
5651
5652       /* Wipe out memory of synthesized methods */
5653       TYPE_HAS_CONSTRUCTOR (t) = 0;
5654       TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
5655       TYPE_HAS_INIT_REF (t) = 0;
5656       TYPE_HAS_CONST_INIT_REF (t) = 0;
5657       TYPE_HAS_ASSIGN_REF (t) = 0;
5658       TYPE_HAS_ASSIGNMENT (t) = 0;
5659       TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
5660
5661       q = &TYPE_METHODS (t);
5662       while (*q)
5663         {
5664           if (DECL_ARTIFICIAL (*q))
5665             *q = TREE_CHAIN (*q);
5666           else
5667             q = &TREE_CHAIN (*q);
5668         }
5669
5670       /* ANSI C++ June 5 1992 WP 9.5.3.  Anonymous unions may not have
5671          function members.  */
5672       if (TYPE_METHODS (t))
5673         error ("an anonymous union cannot have function members");
5674
5675       if (TYPE_FIELDS (t))
5676         {
5677           tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
5678                                       NULL_TREE);
5679           finish_anon_union (decl);
5680         }
5681     }
5682   else
5683     {
5684       /* Anonymous unions are objects, that's why we only check for
5685          inappropriate specifiers in this branch.  */
5686
5687       if (ob_modifier)
5688         {
5689           if (ob_modifier == ridpointers[(int) RID_INLINE]
5690               || ob_modifier == ridpointers[(int) RID_VIRTUAL])
5691             cp_error ("`%D' can only be specified for functions", ob_modifier);
5692           else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
5693             cp_error ("`%D' can only be specified for constructors",
5694                       ob_modifier);
5695           else
5696             cp_error ("`%D' can only be specified for objects and functions",
5697                       ob_modifier);
5698         }
5699
5700       if (found_tag == 0)
5701         pedwarn ("abstract declarator used as declaration");
5702       else if (found_tag > 1)
5703         pedwarn ("multiple types in one declaration");
5704     }
5705 }
5706 \f
5707 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
5708
5709 tree
5710 groktypename (typename)
5711      tree typename;
5712 {
5713   if (TREE_CODE (typename) != TREE_LIST)
5714     return typename;
5715   return grokdeclarator (TREE_VALUE (typename),
5716                          TREE_PURPOSE (typename),
5717                          TYPENAME, 0, NULL_TREE);
5718 }
5719
5720 /* Decode a declarator in an ordinary declaration or data definition.
5721    This is called as soon as the type information and variable name
5722    have been parsed, before parsing the initializer if any.
5723    Here we create the ..._DECL node, fill in its type,
5724    and put it on the list of decls for the current context.
5725    The ..._DECL node is returned as the value.
5726
5727    Exception: for arrays where the length is not specified,
5728    the type is left null, to be filled in by `cp_finish_decl'.
5729
5730    Function definitions do not come here; they go to start_function
5731    instead.  However, external and forward declarations of functions
5732    do go through here.  Structure field declarations are done by
5733    grokfield and not through here.  */
5734
5735 /* Set this to zero to debug not using the temporary obstack
5736    to parse initializers.  */
5737 int debug_temp_inits = 1;
5738
5739 tree
5740 start_decl (declarator, declspecs, initialized)
5741      tree declarator, declspecs;
5742      int initialized;
5743 {
5744   register tree decl;
5745   register tree type, tem;
5746   tree context;
5747   extern int have_extern_spec;
5748   extern int used_extern_spec;
5749
5750 #if 0
5751   /* See code below that used this.  */
5752   int init_written = initialized;
5753 #endif
5754
5755   /* This should only be done once on the top most decl.  */
5756   if (have_extern_spec && !used_extern_spec)
5757     {
5758       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
5759                                   declspecs);
5760       used_extern_spec = 1;
5761     }
5762
5763   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
5764                          NULL_TREE);
5765   if (decl == NULL_TREE || decl == void_type_node)
5766     return NULL_TREE;
5767
5768   type = TREE_TYPE (decl);
5769
5770   /* Don't lose if destructors must be executed at file-level.  */
5771   if (! processing_template_decl && TREE_STATIC (decl)
5772       && TYPE_NEEDS_DESTRUCTOR (complete_type (type))
5773       && !TREE_PERMANENT (decl))
5774     {
5775       push_obstacks (&permanent_obstack, &permanent_obstack);
5776       decl = copy_node (decl);
5777       if (TREE_CODE (type) == ARRAY_TYPE)
5778         {
5779           tree itype = TYPE_DOMAIN (type);
5780           if (itype && ! TREE_PERMANENT (itype))
5781             {
5782               itype = build_index_type (copy_to_permanent (TYPE_MAX_VALUE (itype)));
5783               type = build_cplus_array_type (TREE_TYPE (type), itype);
5784               TREE_TYPE (decl) = type;
5785             }
5786         }
5787       pop_obstacks ();
5788     }
5789
5790   context
5791     = (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
5792       ? DECL_CLASS_CONTEXT (decl)
5793       : DECL_CONTEXT (decl);
5794
5795   if (initialized)
5796     /* Is it valid for this decl to have an initializer at all?
5797        If not, set INITIALIZED to zero, which will indirectly
5798        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
5799     switch (TREE_CODE (decl))
5800       {
5801       case TYPE_DECL:
5802         /* typedef foo = bar  means give foo the same type as bar.
5803            We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
5804            Any other case of an initialization in a TYPE_DECL is an error.  */
5805         if (pedantic || list_length (declspecs) > 1)
5806           {
5807             cp_error ("typedef `%D' is initialized", decl);
5808             initialized = 0;
5809           }
5810         break;
5811
5812       case FUNCTION_DECL:
5813         cp_error ("function `%#D' is initialized like a variable", decl);
5814         initialized = 0;
5815         break;
5816
5817       default:
5818         if (! processing_template_decl)
5819           {
5820             if (type != error_mark_node)
5821               {
5822                 if (TYPE_SIZE (type) != NULL_TREE
5823                     && ! TREE_CONSTANT (TYPE_SIZE (type)))
5824                   {
5825                     cp_error
5826                       ("variable-sized object `%D' may not be initialized",
5827                        decl);
5828                     initialized = 0;
5829                   }
5830
5831                 if (TREE_CODE (type) == ARRAY_TYPE
5832                     && TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
5833                   {
5834                     cp_error
5835                       ("elements of array `%#D' have incomplete type", decl);
5836                     initialized = 0;
5837                   }
5838               }
5839           }
5840       }
5841
5842   if (initialized)
5843     {
5844       if (! toplevel_bindings_p ()
5845           && DECL_EXTERNAL (decl))
5846         cp_warning ("declaration of `%#D' has `extern' and is initialized",
5847                     decl);
5848       DECL_EXTERNAL (decl) = 0;
5849       if (toplevel_bindings_p ())
5850         TREE_STATIC (decl) = 1;
5851
5852       /* Tell `pushdecl' this is an initialized decl
5853          even though we don't yet have the initializer expression.
5854          Also tell `cp_finish_decl' it may store the real initializer.  */
5855       DECL_INITIAL (decl) = error_mark_node;
5856     }
5857
5858   if (context && TYPE_SIZE (complete_type (context)) != NULL_TREE)
5859     {
5860       if (TREE_CODE (decl) == VAR_DECL)
5861         {
5862           tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
5863           if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
5864             cp_error ("`%#D' is not a static member of `%#T'", decl, context);
5865           else
5866             {
5867               if (DECL_CONTEXT (field) != context)
5868                 cp_pedwarn ("ANSI C++ does not permit `%T::%D' to be defined as `%T::%D'", DECL_CONTEXT (field), DECL_NAME (decl), context, DECL_NAME (decl));
5869               if (duplicate_decls (decl, field))
5870                 decl = field;
5871             }
5872         }
5873       else
5874         {
5875           tree field = check_classfn (context, decl);
5876           if (field && duplicate_decls (decl, field))
5877             decl = field;
5878         }
5879
5880       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
5881       if (DECL_LANG_SPECIFIC (decl))
5882         DECL_IN_AGGR_P (decl) = 0;
5883       if (DECL_USE_TEMPLATE (decl) || CLASSTYPE_USE_TEMPLATE (context))
5884         SET_DECL_TEMPLATE_SPECIALIZATION (decl);
5885
5886       /* Stupid stupid stupid stupid  (jason 7/21/95) */
5887       if (pedantic && DECL_EXTERNAL (decl)
5888           && ! DECL_TEMPLATE_SPECIALIZATION (decl))
5889         cp_pedwarn ("declaration of `%#D' outside of class is not definition",
5890                     decl);
5891
5892       pushclass (context, 2);
5893     }
5894
5895   /* Add this decl to the current binding level, but not if it
5896      comes from another scope, e.g. a static member variable.
5897      TEM may equal DECL or it may be a previous decl of the same name.  */
5898   
5899   if ((TREE_CODE (decl) != PARM_DECL && DECL_CONTEXT (decl) != NULL_TREE)
5900       || (TREE_CODE (decl) == TEMPLATE_DECL && !global_bindings_p ())
5901       || TREE_CODE (type) == LANG_TYPE)
5902     tem = decl;
5903   else
5904     tem = pushdecl (decl);
5905
5906   if (processing_template_decl)
5907     {
5908       if (! current_function_decl)
5909         push_template_decl (tem);
5910       else if (minimal_parse_mode)
5911         DECL_VINDEX (decl)
5912             = build_min_nt (DECL_STMT, copy_to_permanent (declarator),
5913                             copy_to_permanent (declspecs),
5914                             NULL_TREE);
5915     }
5916
5917
5918 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
5919   /* Tell the back-end to use or not use .common as appropriate.  If we say
5920      -fconserve-space, we want this to save .data space, at the expense of
5921      wrong semantics.  If we say -fno-conserve-space, we want this to
5922      produce errors about redefs; to do this we force variables into the
5923      data segment.  */
5924   DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
5925 #endif
5926
5927   if (! processing_template_decl)
5928     start_decl_1 (tem);
5929
5930   /* Corresponding pop_obstacks is done in `cp_finish_decl'.  */
5931   push_obstacks_nochange ();
5932
5933 #if 0
5934   /* We have no way of knowing whether the initializer will need to be
5935      evaluated at run-time or not until we've parsed it, so let's just put
5936      it in the permanent obstack.  (jason) */
5937   if (init_written
5938       && ! (TREE_CODE (tem) == PARM_DECL
5939             || (TREE_READONLY (tem)
5940                 && (TREE_CODE (tem) == VAR_DECL
5941                     || TREE_CODE (tem) == FIELD_DECL))))
5942     {
5943       /* When parsing and digesting the initializer,
5944          use temporary storage.  Do this even if we will ignore the value.  */
5945       if (toplevel_bindings_p () && debug_temp_inits)
5946         {
5947           if (processing_template_decl
5948               || TYPE_NEEDS_CONSTRUCTING (type)
5949               || TREE_CODE (type) == REFERENCE_TYPE)
5950             /* In this case, the initializer must lay down in permanent
5951                storage, since it will be saved until `finish_file' is run.   */
5952             ;
5953           else
5954             temporary_allocation ();
5955         }
5956     }
5957 #endif
5958
5959   return tem;
5960 }
5961
5962 void
5963 start_decl_1 (decl)
5964      tree decl;
5965 {
5966   tree type = TREE_TYPE (decl);
5967   int initialized = (DECL_INITIAL (decl) != NULL_TREE);
5968
5969   /* If this type of object needs a cleanup, and control may
5970      jump past it, make a new binding level so that it is cleaned
5971      up only when it is initialized first.  */
5972   if (TYPE_NEEDS_DESTRUCTOR (type)
5973       && current_binding_level->more_cleanups_ok == 0)
5974     pushlevel_temporary (1);
5975
5976   if (initialized)
5977     /* Is it valid for this decl to have an initializer at all?
5978        If not, set INITIALIZED to zero, which will indirectly
5979        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
5980     {
5981       /* Don't allow initializations for incomplete types except for
5982          arrays which might be completed by the initialization.  */
5983       if (type == error_mark_node)
5984         ;                       /* Don't complain again.  */
5985       else if (TYPE_SIZE (complete_type (type)) != NULL_TREE)
5986         ;                       /* A complete type is ok.  */
5987       else if (TREE_CODE (type) != ARRAY_TYPE)
5988         {
5989           cp_error ("variable `%#D' has initializer but incomplete type",
5990                     decl);
5991           initialized = 0;
5992         }
5993       else if (TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
5994         {
5995           if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
5996             cp_error ("elements of array `%#D' have incomplete type", decl);
5997           /* else we already gave an error in start_decl.  */
5998           initialized = 0;
5999         }
6000     }
6001
6002   if (!initialized
6003       && TREE_CODE (decl) != TYPE_DECL
6004       && TREE_CODE (decl) != TEMPLATE_DECL
6005       && IS_AGGR_TYPE (type) && ! DECL_EXTERNAL (decl))
6006     {
6007       if ((! processing_template_decl || ! uses_template_parms (type))
6008           && TYPE_SIZE (complete_type (type)) == NULL_TREE)
6009         {
6010           cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
6011                  decl);
6012           /* Change the type so that assemble_variable will give
6013              DECL an rtl we can live with: (mem (const_int 0)).  */
6014           TREE_TYPE (decl) = error_mark_node;
6015           type = error_mark_node;
6016         }
6017       else
6018         {
6019           /* If any base type in the hierarchy of TYPE needs a constructor,
6020              then we set initialized to 1.  This way any nodes which are
6021              created for the purposes of initializing this aggregate
6022              will live as long as it does.  This is necessary for global
6023              aggregates which do not have their initializers processed until
6024              the end of the file.  */
6025           initialized = TYPE_NEEDS_CONSTRUCTING (type);
6026         }
6027     }
6028
6029 #if 0
6030   /* We don't do this yet for GNU C++.  */
6031   /* For a local variable, define the RTL now.  */
6032   if (! toplevel_bindings_p ()
6033       /* But not if this is a duplicate decl
6034          and we preserved the rtl from the previous one
6035          (which may or may not happen).  */
6036       && DECL_RTL (tem) == NULL_RTX)
6037     {
6038       if (TYPE_SIZE (TREE_TYPE (tem)) != NULL_TREE)
6039         expand_decl (tem);
6040       else if (TREE_CODE (TREE_TYPE (tem)) == ARRAY_TYPE
6041                && DECL_INITIAL (tem) != NULL_TREE)
6042         expand_decl (tem);
6043     }
6044 #endif
6045
6046   if (! initialized)
6047     DECL_INITIAL (decl) = NULL_TREE;
6048 }
6049
6050 /* Handle initialization of references.
6051    These three arguments from from `cp_finish_decl', and have the
6052    same meaning here that they do there.
6053
6054    Quotes on semantics can be found in ARM 8.4.3.  */
6055
6056 static void
6057 grok_reference_init (decl, type, init, cleanupp)
6058      tree decl, type, init;
6059      tree *cleanupp;
6060 {
6061   tree tmp;
6062
6063   if (init == NULL_TREE)
6064     {
6065       if ((DECL_LANG_SPECIFIC (decl) == 0
6066            || DECL_IN_AGGR_P (decl) == 0)
6067           && ! DECL_THIS_EXTERN (decl))
6068         {
6069           cp_error ("`%D' declared as reference but not initialized", decl);
6070           if (TREE_CODE (decl) == VAR_DECL)
6071             SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
6072         }
6073       return;
6074     }
6075
6076   if (init == error_mark_node)
6077     return;
6078
6079   if (TREE_CODE (type) == REFERENCE_TYPE
6080       && TREE_CODE (init) == CONSTRUCTOR)
6081     {
6082       cp_error ("ANSI C++ forbids use of initializer list to initialize reference `%D'", decl);
6083       return;
6084     }
6085
6086   if (TREE_TYPE (init) && TREE_CODE (TREE_TYPE (init)) == UNKNOWN_TYPE)
6087     /* decay_conversion is probably wrong for references to functions.  */
6088     init = decay_conversion (instantiate_type (TREE_TYPE (type), init, 1));
6089
6090   if (TREE_CODE (init) == TREE_LIST)
6091     init = build_compound_expr (init);
6092
6093   if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
6094     init = convert_from_reference (init);
6095
6096   if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
6097       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
6098     {
6099       /* Note: default conversion is only called in very special cases.  */
6100       init = default_conversion (init);
6101     }
6102
6103   tmp = convert_to_reference
6104     (type, init, CONV_IMPLICIT,
6105      LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
6106
6107   if (tmp == error_mark_node)
6108     goto fail;
6109   else if (tmp != NULL_TREE)
6110     {
6111       init = tmp;
6112       DECL_INITIAL (decl) = save_expr (init);
6113     }
6114   else
6115     {
6116       cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
6117       goto fail;
6118     }
6119
6120   /* ?? Can this be optimized in some cases to
6121      hand back the DECL_INITIAL slot??  */
6122   if (TYPE_SIZE (TREE_TYPE (type)))
6123     {
6124       init = convert_from_reference (decl);
6125       if (TREE_PERMANENT (decl))
6126         init = copy_to_permanent (init);
6127       SET_DECL_REFERENCE_SLOT (decl, init);
6128     }
6129
6130   if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
6131     {
6132       expand_static_init (decl, DECL_INITIAL (decl));
6133       DECL_INITIAL (decl) = NULL_TREE;
6134     }
6135   return;
6136
6137  fail:
6138   if (TREE_CODE (decl) == VAR_DECL)
6139     SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
6140   return;
6141 }
6142
6143 /* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
6144    mucking with forces it does not comprehend (i.e. initialization with a
6145    constructor).  If we are at global scope and won't go into COMMON, fill
6146    it in with a dummy CONSTRUCTOR to force the variable into .data;
6147    otherwise we can use error_mark_node.  */
6148
6149 static tree
6150 obscure_complex_init (decl, init)
6151      tree decl, init;
6152 {
6153   if (! flag_no_inline && TREE_STATIC (decl))
6154     {
6155       if (extract_init (decl, init))
6156         return NULL_TREE;
6157     }
6158
6159 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
6160   if (toplevel_bindings_p () && ! DECL_COMMON (decl))
6161     DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
6162                                  NULL_TREE);
6163   else
6164 #endif
6165     DECL_INITIAL (decl) = error_mark_node;
6166
6167   return init;
6168 }
6169
6170 /* Finish processing of a declaration;
6171    install its line number and initial value.
6172    If the length of an array type is not known before,
6173    it must be determined now, from the initial value, or it is an error.
6174
6175    Call `pop_obstacks' iff NEED_POP is nonzero.
6176
6177    For C++, `cp_finish_decl' must be fairly evasive:  it must keep initializers
6178    for aggregates that have constructors alive on the permanent obstack,
6179    so that the global initializing functions can be written at the end.
6180
6181    INIT0 holds the value of an initializer that should be allowed to escape
6182    the normal rules.
6183
6184    FLAGS is LOOKUP_ONLYCONVERTING is the = init syntax was used, else 0
6185    if the (init) syntax was used.
6186
6187    For functions that take default parameters, DECL points to its
6188    "maximal" instantiation.  `cp_finish_decl' must then also declared its
6189    subsequently lower and lower forms of instantiation, checking for
6190    ambiguity as it goes.  This can be sped up later.  */
6191
6192 void
6193 cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
6194      tree decl, init;
6195      tree asmspec_tree;
6196      int need_pop;
6197      int flags;
6198 {
6199   register tree type;
6200   tree cleanup = NULL_TREE, ttype;
6201   int was_incomplete;
6202   int temporary = allocation_temporary_p ();
6203   char *asmspec = NULL;
6204   int was_readonly = 0;
6205
6206   /* If this is 0, then we did not change obstacks.  */
6207   if (! decl)
6208     {
6209       if (init)
6210         error ("assignment (not initialization) in declaration");
6211       return;
6212     }
6213
6214   /* If a name was specified, get the string.  */
6215   if (asmspec_tree)
6216       asmspec = TREE_STRING_POINTER (asmspec_tree);
6217
6218   /* If the type of the thing we are declaring either has
6219      a constructor, or has a virtual function table pointer,
6220      AND its initialization was accepted by `start_decl',
6221      then we stayed on the permanent obstack through the
6222      declaration, otherwise, changed obstacks as GCC would.  */
6223
6224   type = TREE_TYPE (decl);
6225
6226   if (type == error_mark_node)
6227     {
6228       if (toplevel_bindings_p () && temporary)
6229         end_temporary_allocation ();
6230
6231       return;
6232     }
6233
6234   if (processing_template_decl)
6235     {
6236       if (init && DECL_INITIAL (decl))
6237         DECL_INITIAL (decl) = init;
6238       if (minimal_parse_mode && ! DECL_ARTIFICIAL (decl))
6239         {
6240           tree stmt = DECL_VINDEX (decl);
6241           DECL_VINDEX (decl) = NULL_TREE;
6242           TREE_OPERAND (stmt, 2) = copy_to_permanent (init);
6243           add_tree (stmt);
6244         }
6245
6246       goto finish_end0;
6247     }
6248   /* Take care of TYPE_DECLs up front.  */
6249   if (TREE_CODE (decl) == TYPE_DECL)
6250     {
6251       if (init && DECL_INITIAL (decl))
6252         {
6253           /* typedef foo = bar; store the type of bar as the type of foo.  */
6254           TREE_TYPE (decl) = type = TREE_TYPE (init);
6255           DECL_INITIAL (decl) = init = NULL_TREE;
6256         }
6257       if (type != error_mark_node
6258           && IS_AGGR_TYPE (type) && DECL_NAME (decl))
6259         {
6260           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6261             cp_warning ("shadowing previous type declaration of `%#D'", decl);
6262           set_identifier_type_value (DECL_NAME (decl), type);
6263           CLASSTYPE_GOT_SEMICOLON (type) = 1;
6264         }
6265       GNU_xref_decl (current_function_decl, decl);
6266
6267       /* If we have installed this as the canonical typedef for this
6268          type, and that type has not been defined yet, delay emitting
6269          the debug informaion for it, as we will emit it later.  */
6270       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6271           && TYPE_SIZE (TREE_TYPE (decl)) == NULL_TREE)
6272         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6273
6274       rest_of_decl_compilation (decl, NULL_PTR,
6275                                 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
6276       goto finish_end;
6277     }
6278   if (TREE_CODE (decl) != FUNCTION_DECL)
6279     {
6280       ttype = target_type (type);
6281     }
6282
6283   if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
6284       && TYPE_NEEDS_CONSTRUCTING (type))
6285     {
6286
6287       /* Currently, GNU C++ puts constants in text space, making them
6288          impossible to initialize.  In the future, one would hope for
6289          an operating system which understood the difference between
6290          initialization and the running of a program.  */
6291       was_readonly = 1;
6292       TREE_READONLY (decl) = 0;
6293     }
6294
6295   if (TREE_CODE (decl) == FIELD_DECL)
6296     {
6297       if (init && init != error_mark_node)
6298         my_friendly_assert (TREE_PERMANENT (init), 147);
6299
6300       if (asmspec)
6301         {
6302           /* This must override the asm specifier which was placed
6303              by grokclassfn.  Lay this out fresh.  */
6304           DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
6305           DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
6306           make_decl_rtl (decl, asmspec, 0);
6307         }
6308     }
6309   /* If `start_decl' didn't like having an initialization, ignore it now.  */
6310   else if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
6311     init = NULL_TREE;
6312   else if (DECL_EXTERNAL (decl))
6313     ;
6314   else if (TREE_CODE (type) == REFERENCE_TYPE
6315            || (TYPE_LANG_SPECIFIC (type) && IS_SIGNATURE_REFERENCE (type)))
6316     {
6317       if (TREE_STATIC (decl))
6318         make_decl_rtl (decl, NULL_PTR,
6319                        toplevel_bindings_p ()
6320                        || pseudo_global_level_p ());
6321       grok_reference_init (decl, type, init, &cleanup);
6322       init = NULL_TREE;
6323     }
6324
6325   GNU_xref_decl (current_function_decl, decl);
6326
6327   if (TREE_CODE (decl) == FIELD_DECL)
6328     ;
6329   else if (TREE_CODE (decl) == CONST_DECL)
6330     {
6331       my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
6332
6333       DECL_INITIAL (decl) = init;
6334
6335       /* This will keep us from needing to worry about our obstacks.  */
6336       my_friendly_assert (init != NULL_TREE, 149);
6337       init = NULL_TREE;
6338     }
6339   else if (init)
6340     {
6341       if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
6342         {
6343           if (TREE_CODE (type) == ARRAY_TYPE)
6344             init = digest_init (type, init, (tree *) 0);
6345           else if (TREE_CODE (init) == CONSTRUCTOR)
6346             {
6347               if (TYPE_NON_AGGREGATE_CLASS (type))
6348                 {
6349                   cp_error ("`%D' must be initialized by constructor, not by `{...}'",
6350                             decl);
6351                   init = error_mark_node;
6352                 }
6353               else
6354                 goto dont_use_constructor;
6355             }
6356         }
6357       else
6358         {
6359         dont_use_constructor:
6360           if (TREE_CODE (init) != TREE_VEC)
6361             init = store_init_value (decl, init);
6362         }
6363
6364       if (init)
6365         /* We must hide the initializer so that expand_decl
6366            won't try to do something it does not understand.  */
6367         init = obscure_complex_init (decl, init);
6368     }
6369   else if (DECL_EXTERNAL (decl))
6370     ;
6371   else if (TREE_CODE_CLASS (TREE_CODE (type)) == 't'
6372            && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
6373     {
6374       tree ctype = type;
6375       while (TREE_CODE (ctype) == ARRAY_TYPE)
6376         ctype = TREE_TYPE (ctype);
6377       if (! TYPE_NEEDS_CONSTRUCTING (ctype))
6378         {
6379           if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (ctype))
6380             cp_error ("structure `%D' with uninitialized const members", decl);
6381           if (CLASSTYPE_REF_FIELDS_NEED_INIT (ctype))
6382             cp_error ("structure `%D' with uninitialized reference members",
6383                       decl);
6384         }
6385
6386       if (TREE_CODE (decl) == VAR_DECL
6387           && !DECL_INITIAL (decl)
6388           && !TYPE_NEEDS_CONSTRUCTING (type)
6389           && (TYPE_READONLY (type) || TREE_READONLY (decl)))
6390         cp_error ("uninitialized const `%D'", decl);
6391
6392       if (TYPE_SIZE (type) != NULL_TREE
6393           && TYPE_NEEDS_CONSTRUCTING (type))
6394         init = obscure_complex_init (decl, NULL_TREE);
6395     }
6396   else if (TREE_CODE (decl) == VAR_DECL
6397            && TREE_CODE (type) != REFERENCE_TYPE
6398            && (TYPE_READONLY (type) || TREE_READONLY (decl)))
6399     {
6400       /* ``Unless explicitly declared extern, a const object does not have
6401          external linkage and must be initialized. ($8.4; $12.1)'' ARM 7.1.6
6402          However, if it's `const int foo = 1; const int foo;', don't complain
6403          about the second decl, since it does have an initializer before.
6404          We deliberately don't complain about arrays, because they're
6405          supposed to be initialized by a constructor.  */
6406       if (! DECL_INITIAL (decl)
6407           && TREE_CODE (type) != ARRAY_TYPE
6408           && (!pedantic || !current_class_type))
6409         cp_error ("uninitialized const `%#D'", decl);
6410     }
6411
6412   /* For top-level declaration, the initial value was read in
6413      the temporary obstack.  MAXINDEX, rtl, etc. to be made below
6414      must go in the permanent obstack; but don't discard the
6415      temporary data yet.  */
6416
6417   if (toplevel_bindings_p () && temporary)
6418     end_temporary_allocation ();
6419
6420   /* Deduce size of array from initialization, if not already known.  */
6421
6422   if (TREE_CODE (type) == ARRAY_TYPE
6423       && TYPE_DOMAIN (type) == NULL_TREE
6424       && TREE_CODE (decl) != TYPE_DECL)
6425     {
6426       int do_default
6427         = (TREE_STATIC (decl)
6428            /* Even if pedantic, an external linkage array
6429               may have incomplete type at first.  */
6430            ? pedantic && ! DECL_EXTERNAL (decl)
6431            : !DECL_EXTERNAL (decl));
6432       tree initializer = init ? init : DECL_INITIAL (decl);
6433       int failure = complete_array_type (type, initializer, do_default);
6434
6435       if (failure == 1)
6436         cp_error ("initializer fails to determine size of `%D'", decl);
6437
6438       if (failure == 2)
6439         {
6440           if (do_default)
6441             cp_error ("array size missing in `%D'", decl);
6442           /* If a `static' var's size isn't known, make it extern as
6443              well as static, so it does not get allocated.  If it's not
6444              `static', then don't mark it extern; finish_incomplete_decl
6445              will give it a default size and it will get allocated.  */
6446           else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
6447             DECL_EXTERNAL (decl) = 1;
6448         }
6449
6450       if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
6451           && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
6452                               integer_zero_node))
6453         cp_error ("zero-size array `%D'", decl);
6454
6455       layout_decl (decl, 0);
6456     }
6457
6458   if (TREE_CODE (decl) == VAR_DECL)
6459     {
6460       if (DECL_SIZE (decl) == NULL_TREE
6461           && TYPE_SIZE (complete_type (TREE_TYPE (decl))) != NULL_TREE)
6462         layout_decl (decl, 0);
6463
6464       if (TREE_STATIC (decl) && DECL_SIZE (decl) == NULL_TREE)
6465         {
6466           /* A static variable with an incomplete type:
6467              that is an error if it is initialized.
6468              Otherwise, let it through, but if it is not `extern'
6469              then it may cause an error message later.  */
6470           if (DECL_INITIAL (decl) != NULL_TREE)
6471             cp_error ("storage size of `%D' isn't known", decl);
6472           init = NULL_TREE;
6473         }
6474       else if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
6475         {
6476           /* An automatic variable with an incomplete type: that is an error.
6477              Don't talk about array types here, since we took care of that
6478              message in grokdeclarator.  */
6479           cp_error ("storage size of `%D' isn't known", decl);
6480           TREE_TYPE (decl) = error_mark_node;
6481         }
6482       else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
6483         /* Let debugger know it should output info for this type.  */
6484         note_debug_info_needed (ttype);
6485
6486       if (TREE_STATIC (decl) && DECL_CONTEXT (decl)
6487           && TREE_CODE_CLASS (TREE_CODE (DECL_CONTEXT (decl))) == 't')
6488         note_debug_info_needed (DECL_CONTEXT (decl));
6489
6490       if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
6491           && DECL_SIZE (decl) != NULL_TREE
6492           && ! TREE_CONSTANT (DECL_SIZE (decl)))
6493         {
6494           if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
6495             constant_expression_warning (DECL_SIZE (decl));
6496           else
6497             cp_error ("storage size of `%D' isn't constant", decl);
6498         }
6499
6500       if (! DECL_EXTERNAL (decl) && TYPE_NEEDS_DESTRUCTOR (type)
6501           /* Cleanups for static variables are handled by `finish_file'.  */
6502           && ! TREE_STATIC (decl))
6503         {
6504           int yes = suspend_momentary ();
6505           cleanup = maybe_build_cleanup (decl);
6506           resume_momentary (yes);
6507         }
6508     }
6509   /* PARM_DECLs get cleanups, too.  */
6510   else if (TREE_CODE (decl) == PARM_DECL && TYPE_NEEDS_DESTRUCTOR (type))
6511     {
6512       if (temporary)
6513         end_temporary_allocation ();
6514       cleanup = maybe_build_cleanup (decl);
6515       if (temporary)
6516         resume_temporary_allocation ();
6517     }
6518
6519   /* Output the assembler code and/or RTL code for variables and functions,
6520      unless the type is an undefined structure or union.
6521      If not, it will get done when the type is completed.  */
6522
6523   was_incomplete = (DECL_SIZE (decl) == NULL_TREE);
6524
6525   if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
6526       || TREE_CODE (decl) == RESULT_DECL)
6527     {
6528       /* ??? FIXME: What about nested classes?  */
6529       int toplev = toplevel_bindings_p () || pseudo_global_level_p ();
6530       int was_temp
6531         = (TREE_STATIC (decl) && TYPE_NEEDS_DESTRUCTOR (type)
6532            && allocation_temporary_p ());
6533
6534       if (was_temp)
6535         end_temporary_allocation ();
6536
6537       /* Extern inline function static data has external linkage.  */
6538       if (TREE_CODE (decl) == VAR_DECL
6539           && TREE_STATIC (decl)
6540           && current_function_decl
6541           && DECL_CONTEXT (decl) == current_function_decl
6542           && DECL_THIS_INLINE (current_function_decl)
6543           && DECL_PUBLIC (current_function_decl))
6544         {
6545           /* We can only do this if we can use common or weak, and we
6546              can't if it has been initialized and we don't support weak.  */
6547           if (DECL_INITIAL (decl) == NULL_TREE
6548               || DECL_INITIAL (decl) == error_mark_node)
6549             {
6550               TREE_PUBLIC (decl) = 1;
6551               DECL_COMMON (decl) = 1;
6552             }
6553           else if (flag_weak)
6554             make_decl_one_only (decl);
6555
6556           if (TREE_PUBLIC (decl))
6557             DECL_ASSEMBLER_NAME (decl)
6558               = build_static_name (current_function_decl, DECL_NAME (decl));
6559           else if (! DECL_ARTIFICIAL (decl))
6560             cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
6561         }
6562
6563       if (TREE_CODE (decl) == VAR_DECL && DECL_VIRTUAL_P (decl))
6564         make_decl_rtl (decl, NULL_PTR, toplev);
6565       else if (TREE_CODE (decl) == VAR_DECL
6566                && TREE_READONLY (decl)
6567                && DECL_INITIAL (decl) != NULL_TREE
6568                && DECL_INITIAL (decl) != error_mark_node
6569                && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
6570         {
6571           DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
6572
6573           if (asmspec)
6574             DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
6575
6576           if (! toplev
6577               && TREE_STATIC (decl)
6578               && ! TREE_SIDE_EFFECTS (decl)
6579               && ! TREE_PUBLIC (decl)
6580               && ! DECL_EXTERNAL (decl)
6581               && ! TYPE_NEEDS_DESTRUCTOR (type)
6582               && DECL_MODE (decl) != BLKmode)
6583             {
6584               /* If this variable is really a constant, then fill its DECL_RTL
6585                  slot with something which won't take up storage.
6586                  If something later should take its address, we can always give
6587                  it legitimate RTL at that time.  */
6588               DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
6589               store_expr (DECL_INITIAL (decl), DECL_RTL (decl), 0);
6590               TREE_ASM_WRITTEN (decl) = 1;
6591             }
6592           else if (toplev && ! TREE_PUBLIC (decl))
6593             {
6594               /* If this is a static const, change its apparent linkage
6595                  if it belongs to a #pragma interface.  */
6596               if (!interface_unknown)
6597                 {
6598                   TREE_PUBLIC (decl) = 1;
6599                   DECL_EXTERNAL (decl) = interface_only;
6600                 }
6601               make_decl_rtl (decl, asmspec, toplev);
6602             }
6603           else
6604             rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
6605         }
6606       else if (TREE_CODE (decl) == VAR_DECL
6607                && DECL_LANG_SPECIFIC (decl)
6608                && DECL_IN_AGGR_P (decl))
6609         {
6610           if (TREE_STATIC (decl))
6611             {
6612               if (init == NULL_TREE
6613 #ifdef DEFAULT_STATIC_DEFS
6614                   /* If this code is dead, then users must
6615                      explicitly declare static member variables
6616                      outside the class def'n as well.  */
6617                   && TYPE_NEEDS_CONSTRUCTING (type)
6618 #endif
6619                   )
6620                 {
6621                   DECL_EXTERNAL (decl) = 1;
6622                   make_decl_rtl (decl, asmspec, 1);
6623                 }
6624               else
6625                 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
6626             }
6627           else
6628             /* Just a constant field.  Should not need any rtl.  */
6629             goto finish_end0;
6630         }
6631       else
6632         rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
6633
6634       if (was_temp)
6635         resume_temporary_allocation ();
6636
6637       if (type != error_mark_node
6638           && TYPE_LANG_SPECIFIC (type)
6639           && CLASSTYPE_ABSTRACT_VIRTUALS (type))
6640         abstract_virtuals_error (decl, type);
6641       else if ((TREE_CODE (type) == FUNCTION_TYPE
6642                 || TREE_CODE (type) == METHOD_TYPE)
6643                && TYPE_LANG_SPECIFIC (TREE_TYPE (type))
6644                && CLASSTYPE_ABSTRACT_VIRTUALS (TREE_TYPE (type)))
6645         abstract_virtuals_error (decl, TREE_TYPE (type));
6646
6647       if (TYPE_LANG_SPECIFIC (type) && IS_SIGNATURE (type))
6648         signature_error (decl, type);
6649       else if ((TREE_CODE (type) == FUNCTION_TYPE
6650                 || TREE_CODE (type) == METHOD_TYPE)
6651                && TYPE_LANG_SPECIFIC (TREE_TYPE (type))
6652                && IS_SIGNATURE (TREE_TYPE (type)))
6653         signature_error (decl, TREE_TYPE (type));
6654
6655       if (TREE_CODE (decl) == FUNCTION_DECL)
6656         ;
6657       else if (DECL_EXTERNAL (decl)
6658                && ! (DECL_LANG_SPECIFIC (decl)
6659                      && DECL_NOT_REALLY_EXTERN (decl)))
6660         {
6661           if (init)
6662             DECL_INITIAL (decl) = init;
6663         }
6664       else if (TREE_STATIC (decl) && type != error_mark_node)
6665         {
6666           /* Cleanups for static variables are handled by `finish_file'.  */
6667           if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
6668               || TYPE_NEEDS_DESTRUCTOR (type))
6669             expand_static_init (decl, init);
6670         }
6671       else if (! toplev)
6672         {
6673           /* This is a declared decl which must live until the
6674              end of the binding contour.  It may need a cleanup.  */
6675
6676           /* Recompute the RTL of a local array now
6677              if it used to be an incomplete type.  */
6678           if (was_incomplete && ! TREE_STATIC (decl))
6679             {
6680               /* If we used it already as memory, it must stay in memory.  */
6681               TREE_ADDRESSABLE (decl) = TREE_USED (decl);
6682               /* If it's still incomplete now, no init will save it.  */
6683               if (DECL_SIZE (decl) == NULL_TREE)
6684                 DECL_INITIAL (decl) = NULL_TREE;
6685               expand_decl (decl);
6686             }
6687           else if (! TREE_ASM_WRITTEN (decl)
6688                    && (TYPE_SIZE (type) != NULL_TREE
6689                        || TREE_CODE (type) == ARRAY_TYPE))
6690             {
6691               /* Do this here, because we did not expand this decl's
6692                  rtl in start_decl.  */
6693               if (DECL_RTL (decl) == NULL_RTX)
6694                 expand_decl (decl);
6695               else if (cleanup)
6696                 {
6697                   /* XXX: Why don't we use decl here?  */
6698                   /* Ans: Because it was already expanded? */
6699                   if (! expand_decl_cleanup (NULL_TREE, cleanup))
6700                     cp_error ("parser lost in parsing declaration of `%D'",
6701                               decl);
6702                   /* Cleanup used up here.  */
6703                   cleanup = NULL_TREE;
6704                 }
6705             }
6706
6707           if (current_binding_level->is_for_scope)
6708             {
6709               struct binding_level *outer = current_binding_level->level_chain;
6710
6711               /* Check to see if the same name is already bound at
6712                  the outer level, either because it was directly declared,
6713                  or because a dead for-decl got preserved.  In either case,
6714                  the code would not have been valid under the ARM
6715                  scope rules, so clear is_for_scope for the
6716                  current_binding_level.
6717
6718                  Otherwise, we need to preserve the temp slot for decl
6719                  to last into the outer binding level.  */
6720
6721               int handling_dead_for_vars = 0;
6722               tree link = outer->names;
6723               for (; ; link = TREE_CHAIN (link))
6724                 {
6725                   if (link == NULL && handling_dead_for_vars == 0)
6726                     {
6727                       link = outer->dead_vars_from_for;
6728                       handling_dead_for_vars = 1;
6729                     }
6730                   if (link == NULL)
6731                     {
6732                       if (DECL_IN_MEMORY_P (decl))
6733                         preserve_temp_slots (DECL_RTL (decl));
6734                       break;
6735                     }
6736                   if (DECL_NAME (link) == DECL_NAME (decl))
6737                     {
6738                       if (handling_dead_for_vars)
6739                         {
6740                           tree shadowing
6741                             = purpose_member (DECL_NAME (decl),
6742                                               current_binding_level->shadowed);
6743                           if (shadowing && TREE_VALUE (shadowing) == link)
6744                             TREE_VALUE (shadowing)
6745                               = DECL_SHADOWED_FOR_VAR (link);
6746                         }
6747                       current_binding_level->is_for_scope = 0;
6748                       break;
6749                     }
6750                 }
6751             }
6752
6753           expand_start_target_temps ();
6754
6755           if (DECL_SIZE (decl) && type != error_mark_node)
6756             {
6757               /* Compute and store the initial value.  */
6758               expand_decl_init (decl);
6759
6760               if (init || TYPE_NEEDS_CONSTRUCTING (type))
6761                 {
6762                   emit_line_note (DECL_SOURCE_FILE (decl),
6763                                   DECL_SOURCE_LINE (decl));
6764                   expand_aggr_init (decl, init, 0, flags);
6765                 }
6766
6767               /* Set this to 0 so we can tell whether an aggregate which
6768                  was initialized was ever used.  Don't do this if it has a
6769                  destructor, so we don't complain about the 'resource
6770                  allocation is initialization' idiom.  */
6771               if (TYPE_NEEDS_CONSTRUCTING (type)
6772                   && cleanup == NULL_TREE
6773                   && DECL_NAME (decl))
6774                 TREE_USED (decl) = 0;
6775             }
6776
6777           /* Cleanup any temporaries needed for the initial value.  */
6778           expand_end_target_temps ();
6779
6780           if (DECL_SIZE (decl) && type != error_mark_node)
6781             {
6782               /* Store the cleanup, if there was one.  */
6783               if (cleanup)
6784                 {
6785                   if (! expand_decl_cleanup (decl, cleanup))
6786                     cp_error ("parser lost in parsing declaration of `%D'",
6787                               decl);
6788                 }
6789             }
6790         }
6791     finish_end0:
6792
6793       /* Undo call to `pushclass' that was done in `start_decl'
6794          due to initialization of qualified member variable.
6795          I.e., Foo::x = 10;  */
6796       {
6797         tree context = DECL_REAL_CONTEXT (decl);
6798         if (context
6799             && TREE_CODE_CLASS (TREE_CODE (context)) == 't'
6800             && (TREE_CODE (decl) == VAR_DECL
6801                 /* We also have a pushclass done that we need to undo here
6802                    if we're at top level and declare a method.  */
6803                 || TREE_CODE (decl) == FUNCTION_DECL)
6804             /* If size hasn't been set, we're still defining it,
6805                and therefore inside the class body; don't pop
6806                the binding level..  */
6807             && TYPE_SIZE (context) != NULL_TREE
6808             && context == current_class_type)
6809           popclass (1);
6810       }
6811     }
6812
6813  finish_end:
6814
6815   /* If requested, warn about definitions of large data objects.  */
6816
6817   if (warn_larger_than
6818       && ! processing_template_decl
6819       && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
6820       && !DECL_EXTERNAL (decl))
6821     {
6822       register tree decl_size = DECL_SIZE (decl);
6823
6824       if (decl_size && TREE_CODE (decl_size) == INTEGER_CST)
6825         {
6826           unsigned units = TREE_INT_CST_LOW (decl_size) / BITS_PER_UNIT;
6827
6828           if (units > larger_than_size)
6829             warning_with_decl (decl, "size of `%s' is %u bytes", units);
6830         }
6831     }
6832
6833   if (need_pop)
6834     {
6835       /* Resume permanent allocation, if not within a function.  */
6836       /* The corresponding push_obstacks_nochange is in start_decl,
6837          start_method, groktypename, and in grokfield.  */
6838       pop_obstacks ();
6839     }
6840
6841   if (was_readonly)
6842     TREE_READONLY (decl) = 1;
6843 }
6844
6845 /* This is here for a midend callback from c-common.c */
6846
6847 void
6848 finish_decl (decl, init, asmspec_tree)
6849      tree decl, init;
6850      tree asmspec_tree;
6851 {
6852   cp_finish_decl (decl, init, asmspec_tree, 1, 0);
6853 }
6854
6855 void
6856 expand_static_init (decl, init)
6857      tree decl;
6858      tree init;
6859 {
6860   tree oldstatic = value_member (decl, static_aggregates);
6861
6862   if (oldstatic)
6863     {
6864       if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
6865         cp_error ("multiple initializations given for `%D'", decl);
6866     }
6867   else if (! toplevel_bindings_p () && ! pseudo_global_level_p ())
6868     {
6869       /* Emit code to perform this initialization but once.  */
6870       tree temp;
6871
6872       /* Remember this information until end of file.  */
6873       push_obstacks (&permanent_obstack, &permanent_obstack);
6874
6875       /* Emit code to perform this initialization but once.  */
6876       temp = get_temp_name (integer_type_node, 1);
6877       rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
6878       expand_start_cond (build_binary_op (EQ_EXPR, temp,
6879                                           integer_zero_node, 1), 0);
6880       expand_start_target_temps ();
6881
6882       expand_assignment (temp, integer_one_node, 0, 0);
6883       if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
6884           || (init && TREE_CODE (init) == TREE_LIST))
6885         {
6886           expand_aggr_init (decl, init, 0, 0);
6887           do_pending_stack_adjust ();
6888         }
6889       else if (init)
6890         expand_assignment (decl, init, 0, 0);
6891
6892       /* Cleanup any temporaries needed for the initial value.  */
6893       expand_end_target_temps ();
6894
6895       if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
6896         {
6897           tree cleanup, fcall;
6898           static tree Atexit = 0;
6899           if (Atexit == 0)
6900             {
6901               tree atexit_fndecl, PFV, pfvlist;
6902               /* Remember this information until end of file.  */
6903               push_obstacks (&permanent_obstack, &permanent_obstack);
6904               PFV = build_pointer_type (build_function_type
6905                                         (void_type_node, void_list_node));
6906
6907               pfvlist = tree_cons (NULL_TREE, PFV, void_list_node);
6908
6909               push_lang_context (lang_name_c);
6910               atexit_fndecl
6911                 = builtin_function ("atexit",
6912                                     build_function_type (void_type_node,
6913                                                          pfvlist),
6914                                     NOT_BUILT_IN, NULL_PTR);
6915               assemble_external (atexit_fndecl);
6916               Atexit = default_conversion (atexit_fndecl);
6917               pop_lang_context ();
6918               pop_obstacks ();
6919             }
6920               
6921           cleanup = start_anon_func ();
6922           expand_expr_stmt (build_cleanup (decl));
6923           end_anon_func ();
6924           mark_addressable (cleanup);
6925           cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
6926           fcall = build_function_call (Atexit, tree_cons (NULL_TREE, cleanup, NULL_TREE));
6927           expand_expr_stmt (fcall);
6928         }
6929
6930       expand_end_cond ();
6931       if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
6932         {
6933           static_aggregates = perm_tree_cons (temp, decl, static_aggregates);
6934           TREE_STATIC (static_aggregates) = 1;
6935         }
6936
6937       /* Resume old (possibly temporary) allocation.  */
6938       pop_obstacks ();
6939     }
6940   else
6941     {
6942       /* This code takes into account memory allocation
6943          policy of `start_decl'.  Namely, if TYPE_NEEDS_CONSTRUCTING
6944          does not hold for this object, then we must make permanent
6945          the storage currently in the temporary obstack.  */
6946       if (! TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
6947         preserve_initializer ();
6948       static_aggregates = perm_tree_cons (init, decl, static_aggregates);
6949     }
6950 }
6951 \f
6952 /* Make TYPE a complete type based on INITIAL_VALUE.
6953    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6954    2 if there was no information (in which case assume 1 if DO_DEFAULT).  */
6955
6956 int
6957 complete_array_type (type, initial_value, do_default)
6958      tree type, initial_value;
6959      int do_default;
6960 {
6961   register tree maxindex = NULL_TREE;
6962   int value = 0;
6963
6964   if (initial_value)
6965     {
6966       /* Note MAXINDEX  is really the maximum index,
6967          one less than the size.  */
6968       if (TREE_CODE (initial_value) == STRING_CST)
6969         {
6970           int eltsize
6971             = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
6972           maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
6973                                    / eltsize) - 1, 0);
6974         }
6975       else if (TREE_CODE (initial_value) == CONSTRUCTOR)
6976         {
6977           tree elts = CONSTRUCTOR_ELTS (initial_value);
6978           maxindex = size_binop (MINUS_EXPR, integer_zero_node, size_one_node);
6979           for (; elts; elts = TREE_CHAIN (elts))
6980             {
6981               if (TREE_PURPOSE (elts))
6982                 maxindex = TREE_PURPOSE (elts);
6983               else
6984                 maxindex = size_binop (PLUS_EXPR, maxindex, size_one_node);
6985             }
6986           maxindex = copy_node (maxindex);
6987         }
6988       else
6989         {
6990           /* Make an error message unless that happened already.  */
6991           if (initial_value != error_mark_node)
6992             value = 1;
6993
6994           /* Prevent further error messages.  */
6995           maxindex = build_int_2 (0, 0);
6996         }
6997     }
6998
6999   if (!maxindex)
7000     {
7001       if (do_default)
7002         maxindex = build_int_2 (0, 0);
7003       value = 2;
7004     }
7005
7006   if (maxindex)
7007     {
7008       tree itype;
7009
7010       TYPE_DOMAIN (type) = build_index_type (maxindex);
7011       if (! TREE_TYPE (maxindex))
7012         TREE_TYPE (maxindex) = TYPE_DOMAIN (type);
7013       if (initial_value)
7014         itype = TREE_TYPE (initial_value);
7015       else
7016         itype = NULL;
7017       if (itype && !TYPE_DOMAIN (itype))
7018         TYPE_DOMAIN (itype) = TYPE_DOMAIN (type);
7019       /* The type of the main variant should never be used for arrays
7020          of different sizes.  It should only ever be completed with the
7021          size of the array.  */
7022       if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
7023         TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = TYPE_DOMAIN (type);
7024     }
7025
7026   /* Lay out the type now that we can get the real answer.  */
7027
7028   layout_type (type);
7029
7030   return value;
7031 }
7032 \f
7033 /* Return zero if something is declared to be a member of type
7034    CTYPE when in the context of CUR_TYPE.  STRING is the error
7035    message to print in that case.  Otherwise, quietly return 1.  */
7036
7037 static int
7038 member_function_or_else (ctype, cur_type, string)
7039      tree ctype, cur_type;
7040      char *string;
7041 {
7042   if (ctype && ctype != cur_type)
7043     {
7044       error (string, TYPE_NAME_STRING (ctype));
7045       return 0;
7046     }
7047   return 1;
7048 }
7049 \f
7050 /* Subroutine of `grokdeclarator'.  */
7051
7052 /* Generate errors possibly applicable for a given set of specifiers.
7053    This is for ARM $7.1.2.  */
7054
7055 static void
7056 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
7057      tree object;
7058      char *type;
7059      int virtualp, quals, friendp, raises, inlinep;
7060 {
7061   if (virtualp)
7062     cp_error ("`%D' declared as a `virtual' %s", object, type);
7063   if (inlinep)
7064     cp_error ("`%D' declared as an `inline' %s", object, type);
7065   if (quals)
7066     cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
7067               object, type);
7068   if (friendp)
7069     cp_error_at ("invalid friend declaration", object);
7070   if (raises)
7071     cp_error_at ("invalid exception specifications", object);
7072 }
7073
7074 /* CTYPE is class type, or null if non-class.
7075    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
7076    or METHOD_TYPE.
7077    DECLARATOR is the function's name.
7078    VIRTUALP is truthvalue of whether the function is virtual or not.
7079    FLAGS are to be passed through to `grokclassfn'.
7080    QUALS are qualifiers indicating whether the function is `const'
7081    or `volatile'.
7082    RAISES is a list of exceptions that this function can raise.
7083    CHECK is 1 if we must find this method in CTYPE, 0 if we should
7084    not look, and -1 if we should not call `grokclassfn' at all.  */
7085
7086 static tree
7087 grokfndecl (ctype, type, declarator, virtualp, flags, quals,
7088             raises, attrlist, check, publicp, inlinep, funcdef_flag)
7089      tree ctype, type;
7090      tree declarator;
7091      int virtualp;
7092      enum overload_flags flags;
7093      tree quals, raises, attrlist;
7094      int check, publicp, inlinep, funcdef_flag;
7095 {
7096   tree cname, decl;
7097   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
7098   tree t;
7099
7100   if (ctype)
7101     cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
7102       ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
7103   else
7104     cname = NULL_TREE;
7105
7106   if (raises)
7107     {
7108       type = build_exception_variant (type, raises);
7109     }
7110
7111   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
7112   /* propagate volatile out from type to decl */
7113   if (TYPE_VOLATILE (type))
7114       TREE_THIS_VOLATILE (decl) = 1;
7115
7116   /* Should probably propagate const out from type to decl I bet (mrs).  */
7117   if (staticp)
7118     {
7119       DECL_STATIC_FUNCTION_P (decl) = 1;
7120       DECL_CONTEXT (decl) = ctype;
7121     }
7122
7123   if (ctype)
7124     DECL_CLASS_CONTEXT (decl) = ctype;
7125
7126   /* All function decls start out public; we'll fix their linkage later (at
7127      definition or EOF) if appropriate.  */
7128   TREE_PUBLIC (decl) = 1;
7129
7130   if (ctype == NULL_TREE && ! strcmp (IDENTIFIER_POINTER (declarator), "main"))
7131     {
7132       if (inlinep)
7133         error ("cannot declare `main' to be inline");
7134       else if (! publicp)
7135         error ("cannot declare `main' to be static");
7136       inlinep = 0;
7137       publicp = 1;
7138     }
7139           
7140   if (! publicp)
7141     DECL_C_STATIC (decl) = 1;
7142
7143   if (inlinep)
7144     DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
7145
7146   DECL_EXTERNAL (decl) = 1;
7147   if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
7148     {
7149       cp_error ("%smember function `%D' cannot have `%T' method qualifier",
7150                 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
7151       quals = NULL_TREE;
7152     }
7153
7154   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
7155     grok_op_properties (decl, virtualp, check < 0);
7156
7157   if (ctype && hack_decl_function_context (decl))
7158       DECL_NO_STATIC_CHAIN (decl) = 1;
7159
7160   for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
7161     if (TREE_PURPOSE (t)
7162         && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
7163       {
7164         add_defarg_fn (decl);
7165         break;
7166       }
7167
7168   /* Caller will do the rest of this.  */
7169   if (check < 0)
7170     return decl;
7171
7172   if (check && funcdef_flag)
7173     DECL_INITIAL (decl) = error_mark_node;
7174
7175   if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
7176     {
7177       tree tmp;
7178       /* Just handle constructors here.  We could do this
7179          inside the following if stmt, but I think
7180          that the code is more legible by breaking this
7181          case out.  See comments below for what each of
7182          the following calls is supposed to do.  */
7183       DECL_CONSTRUCTOR_P (decl) = 1;
7184
7185       grokclassfn (ctype, declarator, decl, flags, quals);
7186       if (check)
7187         {
7188           tmp = check_classfn (ctype, decl);
7189           if (tmp && DECL_ARTIFICIAL (tmp))
7190             cp_error ("definition of implicitly-declared `%D'", tmp);
7191           if (tmp && duplicate_decls (decl, tmp))
7192             return tmp;
7193         }
7194       if (! grok_ctor_properties (ctype, decl))
7195         return NULL_TREE;
7196
7197       if (check == 0 && ! current_function_decl)
7198         {
7199           tmp = IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (decl));
7200           if (tmp == NULL_TREE)
7201             IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (decl)) = decl;
7202           else if (TREE_CODE (tmp) != TREE_CODE (decl))
7203             cp_error ("inconsistent declarations for `%D'", decl);
7204           else
7205             {
7206               duplicate_decls (decl, tmp);
7207               decl = tmp;
7208               /* avoid creating circularities.  */
7209               DECL_CHAIN (decl) = NULL_TREE;
7210             }
7211           make_decl_rtl (decl, NULL_PTR, 1);
7212         }
7213     }
7214   else
7215     {
7216       tree tmp;
7217
7218       /* Function gets the ugly name, field gets the nice one.
7219          This call may change the type of the function (because
7220          of default parameters)!  */
7221       if (ctype != NULL_TREE)
7222         grokclassfn (ctype, cname, decl, flags, quals);
7223
7224       if (ctype != NULL_TREE && check)
7225         {
7226           tmp = check_classfn (ctype, decl);
7227           if (tmp && DECL_STATIC_FUNCTION_P (tmp)
7228               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
7229             {
7230               /* Remove the `this' parm added by grokclassfn.
7231                  XXX Isn't this done in start_function, too?  */
7232               revert_static_member_fn (&decl, NULL, NULL);
7233               last_function_parms = TREE_CHAIN (last_function_parms);
7234             }
7235           if (tmp && DECL_ARTIFICIAL (tmp))
7236             cp_error ("definition of implicitly-declared `%D'", tmp);
7237           if (tmp)
7238             {
7239               if (!duplicate_decls (decl, tmp))
7240                 my_friendly_abort (892);
7241               return tmp;
7242             }
7243         }
7244
7245       if (ctype == NULL_TREE || check)
7246         return decl;
7247
7248       /* Now install the declaration of this function so that others may
7249          find it (esp. its DECL_FRIENDLIST).  Don't do this for local class
7250          methods, though.  */
7251       if (! current_function_decl)
7252         {
7253           /* FIXME: this should only need to look at
7254              IDENTIFIER_GLOBAL_VALUE.  */
7255           tmp = lookup_name (DECL_ASSEMBLER_NAME (decl), 0);
7256           if (tmp == NULL_TREE)
7257             IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (decl)) = decl;
7258           else if (TREE_CODE (tmp) != TREE_CODE (decl))
7259             cp_error ("inconsistent declarations for `%D'", decl);
7260           else
7261             {
7262               duplicate_decls (decl, tmp);
7263               decl = tmp;
7264               /* avoid creating circularities.  */
7265               DECL_CHAIN (decl) = NULL_TREE;
7266             }
7267
7268           if (attrlist)
7269             cplus_decl_attributes (decl, TREE_PURPOSE (attrlist),
7270                                    TREE_VALUE (attrlist));
7271           make_decl_rtl (decl, NULL_PTR, 1);
7272         }
7273       if (virtualp)
7274         {
7275           DECL_VIRTUAL_P (decl) = 1;
7276           if (DECL_VINDEX (decl) == NULL_TREE)
7277             DECL_VINDEX (decl) = error_mark_node;
7278           IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
7279         }
7280     }
7281   return decl;
7282 }
7283
7284 static tree
7285 grokvardecl (type, declarator, specbits_in, initialized, constp)
7286      tree type;
7287      tree declarator;
7288      RID_BIT_TYPE *specbits_in;
7289      int initialized;
7290      int constp;
7291 {
7292   tree decl;
7293   RID_BIT_TYPE specbits;
7294
7295   specbits = *specbits_in;
7296
7297   if (TREE_CODE (type) == OFFSET_TYPE)
7298     {
7299       /* If you declare a static member so that it
7300          can be initialized, the code will reach here.  */
7301       tree basetype = TYPE_OFFSET_BASETYPE (type);
7302       type = TREE_TYPE (type);
7303       decl = build_lang_field_decl (VAR_DECL, declarator, type);
7304       DECL_CONTEXT (decl) = basetype;
7305       DECL_CLASS_CONTEXT (decl) = basetype;
7306       DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
7307     }
7308   else
7309     decl = build_decl (VAR_DECL, declarator, complete_type (type));
7310
7311   DECL_ASSEMBLER_NAME (decl) = current_namespace_id (DECL_ASSEMBLER_NAME (decl));
7312
7313   if (RIDBIT_SETP (RID_EXTERN, specbits))
7314     {
7315       DECL_THIS_EXTERN (decl) = 1;
7316       DECL_EXTERNAL (decl) = !initialized;
7317     }
7318
7319   /* In class context, static means one per class,
7320      public access, and static storage.  */
7321   if (DECL_FIELD_CONTEXT (decl) != NULL_TREE
7322       && IS_AGGR_TYPE (DECL_FIELD_CONTEXT (decl)))
7323     {
7324       TREE_PUBLIC (decl) = 1;
7325       TREE_STATIC (decl) = 1;
7326       DECL_EXTERNAL (decl) = 0;
7327     }
7328   /* At top level, either `static' or no s.c. makes a definition
7329      (perhaps tentative), and absence of `static' makes it public.  */
7330   else if (toplevel_bindings_p ())
7331     {
7332       TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
7333                             && (DECL_THIS_EXTERN (decl) || ! constp));
7334       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
7335     }
7336   /* Not at top level, only `static' makes a static definition.  */
7337   else
7338     {
7339       TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
7340       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
7341     }
7342   return decl;
7343 }
7344
7345 /* Create a canonical pointer to member function type.  */
7346
7347 tree
7348 build_ptrmemfunc_type (type)
7349      tree type;
7350 {
7351   tree fields[4];
7352   tree t;
7353   tree u;
7354
7355   /* If a canonical type already exists for this type, use it.  We use
7356      this method instead of type_hash_canon, because it only does a
7357      simple equality check on the list of field members.  */
7358
7359   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
7360     return t;
7361
7362   push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
7363
7364   u = make_lang_type (UNION_TYPE);
7365   IS_AGGR_TYPE (u) = 0;
7366   fields[0] = build_lang_field_decl (FIELD_DECL, pfn_identifier, type);
7367   fields[1] = build_lang_field_decl (FIELD_DECL, delta2_identifier,
7368                                      delta_type_node);
7369   finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
7370   TYPE_NAME (u) = NULL_TREE;
7371
7372   t = make_lang_type (RECORD_TYPE);
7373
7374   /* Let the front-end know this is a pointer to member function.  */
7375   TYPE_PTRMEMFUNC_FLAG (t) = 1;
7376   /* and not really an aggregate.  */
7377   IS_AGGR_TYPE (t) = 0;
7378
7379   fields[0] = build_lang_field_decl (FIELD_DECL, delta_identifier,
7380                                      delta_type_node);
7381   fields[1] = build_lang_field_decl (FIELD_DECL, index_identifier,
7382                                      delta_type_node);
7383   fields[2] = build_lang_field_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
7384   finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
7385
7386   pop_obstacks ();
7387
7388   /* Zap out the name so that the back-end will give us the debugging
7389      information for this anonymous RECORD_TYPE.  */
7390   TYPE_NAME (t) = NULL_TREE;
7391
7392   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
7393
7394   /* Seems to be wanted.  */
7395   CLASSTYPE_GOT_SEMICOLON (t) = 1;
7396   return t;
7397 }
7398
7399 /* Given declspecs and a declarator,
7400    determine the name and type of the object declared
7401    and construct a ..._DECL node for it.
7402    (In one case we can return a ..._TYPE node instead.
7403     For invalid input we sometimes return 0.)
7404
7405    DECLSPECS is a chain of tree_list nodes whose value fields
7406     are the storage classes and type specifiers.
7407
7408    DECL_CONTEXT says which syntactic context this declaration is in:
7409      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
7410      FUNCDEF for a function definition.  Like NORMAL but a few different
7411       error messages in each case.  Return value may be zero meaning
7412       this definition is too screwy to try to parse.
7413      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
7414       handle member functions (which have FIELD context).
7415       Return value may be zero meaning this definition is too screwy to
7416       try to parse.
7417      PARM for a parameter declaration (either within a function prototype
7418       or before a function body).  Make a PARM_DECL, or return void_type_node.
7419      CATCHPARM for a parameter declaration before a catch clause.
7420      TYPENAME if for a typename (in a cast or sizeof).
7421       Don't make a DECL node; just return the ..._TYPE node.
7422      FIELD for a struct or union field; make a FIELD_DECL.
7423      BITFIELD for a field with specified width.
7424    INITIALIZED is 1 if the decl has an initializer.
7425
7426    In the TYPENAME case, DECLARATOR is really an absolute declarator.
7427    It may also be so in the PARM case, for a prototype where the
7428    argument type is specified but not the name.
7429
7430    This function is where the complicated C meanings of `static'
7431    and `extern' are interpreted.
7432
7433    For C++, if there is any monkey business to do, the function which
7434    calls this one must do it, i.e., prepending instance variables,
7435    renaming overloaded function names, etc.
7436
7437    Note that for this C++, it is an error to define a method within a class
7438    which does not belong to that class.
7439
7440    Except in the case where SCOPE_REFs are implicitly known (such as
7441    methods within a class being redundantly qualified),
7442    declarations which involve SCOPE_REFs are returned as SCOPE_REFs
7443    (class_name::decl_name).  The caller must also deal with this.
7444
7445    If a constructor or destructor is seen, and the context is FIELD,
7446    then the type gains the attribute TREE_HAS_x.  If such a declaration
7447    is erroneous, NULL_TREE is returned.
7448
7449    QUALS is used only for FUNCDEF and MEMFUNCDEF cases.  For a member
7450    function, these are the qualifiers to give to the `this' pointer.
7451
7452    May return void_type_node if the declarator turned out to be a friend.
7453    See grokfield for details.  */
7454
7455 enum return_types { return_normal, return_ctor, return_dtor, return_conversion };
7456
7457 tree
7458 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
7459      tree declspecs;
7460      tree declarator;
7461      enum decl_context decl_context;
7462      int initialized;
7463      tree attrlist;
7464 {
7465   RID_BIT_TYPE specbits;
7466   int nclasses = 0;
7467   tree spec;
7468   tree type = NULL_TREE;
7469   int longlong = 0;
7470   int constp;
7471   int volatilep;
7472   int virtualp, explicitp, friendp, inlinep, staticp;
7473   int explicit_int = 0;
7474   int explicit_char = 0;
7475   int defaulted_int = 0;
7476   int opaque_typedef = 0;
7477   tree typedef_decl = NULL_TREE;
7478   char *name;
7479   tree typedef_type = NULL_TREE;
7480   int funcdef_flag = 0;
7481   enum tree_code innermost_code = ERROR_MARK;
7482   int bitfield = 0;
7483 #if 0
7484   /* See the code below that used this.  */
7485   tree decl_machine_attr = NULL_TREE;
7486 #endif
7487   /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
7488      All FIELD_DECLs we build here have `init' put into their DECL_INITIAL.  */
7489   tree init = NULL_TREE;
7490
7491   /* Keep track of what sort of function is being processed
7492      so that we can warn about default return values, or explicit
7493      return values which do not match prescribed defaults.  */
7494   enum return_types return_type = return_normal;
7495
7496   tree dname = NULL_TREE;
7497   tree ctype = current_class_type;
7498   tree ctor_return_type = NULL_TREE;
7499   enum overload_flags flags = NO_SPECIAL;
7500   tree quals = NULL_TREE;
7501   tree raises = NULL_TREE;
7502
7503   RIDBIT_RESET_ALL (specbits);
7504   if (decl_context == FUNCDEF)
7505     funcdef_flag = 1, decl_context = NORMAL;
7506   else if (decl_context == MEMFUNCDEF)
7507     funcdef_flag = -1, decl_context = FIELD;
7508   else if (decl_context == BITFIELD)
7509     bitfield = 1, decl_context = FIELD;
7510
7511   /* Look inside a declarator for the name being declared
7512      and get it as a string, for an error message.  */
7513   {
7514     tree *next = &declarator;
7515     register tree decl;
7516     name = NULL;
7517
7518     while (next && *next)
7519       {
7520         decl = *next;
7521         switch (TREE_CODE (decl))
7522           {
7523           case COND_EXPR:
7524             ctype = NULL_TREE;
7525             next = &TREE_OPERAND (decl, 0);
7526             break;
7527
7528           case BIT_NOT_EXPR:    /* for C++ destructors!  */
7529             {
7530               tree name = TREE_OPERAND (decl, 0);
7531               tree rename = NULL_TREE;
7532
7533               my_friendly_assert (flags == NO_SPECIAL, 152);
7534               flags = DTOR_FLAG;
7535               return_type = return_dtor;
7536               if (TREE_CODE (name) == TYPE_DECL)
7537                 TREE_OPERAND (decl, 0) = name = constructor_name (name);
7538               my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
7539               if (ctype == NULL_TREE)
7540                 {
7541                   if (current_class_type == NULL_TREE)
7542                     {
7543                       error ("destructors must be member functions");
7544                       flags = NO_SPECIAL;
7545                     }
7546                   else
7547                     {
7548                       tree t = constructor_name (current_class_name);
7549                       if (t != name)
7550                         rename = t;
7551                     }
7552                 }
7553               else
7554                 {
7555                   tree t = constructor_name (ctype);
7556                   if (t != name)
7557                     rename = t;
7558                 }
7559
7560               if (rename)
7561                 {
7562                   cp_error ("destructor `%T' must match class name `%T'",
7563                             name, rename);
7564                   TREE_OPERAND (decl, 0) = rename;
7565                 }
7566               next = &name;
7567             }
7568             break;
7569
7570           case ADDR_EXPR:       /* C++ reference declaration */
7571             /* fall through */
7572           case ARRAY_REF:
7573           case INDIRECT_REF:
7574             ctype = NULL_TREE;
7575             innermost_code = TREE_CODE (decl);
7576             next = &TREE_OPERAND (decl, 0);
7577             break;
7578
7579           case CALL_EXPR:
7580             if (parmlist_is_exprlist (TREE_OPERAND (decl, 1)))
7581               {
7582                 /* This is actually a variable declaration using constructor
7583                    syntax.  We need to call start_decl and cp_finish_decl so we
7584                    can get the variable initialized...  */
7585
7586                 *next = TREE_OPERAND (decl, 0);
7587                 init = TREE_OPERAND (decl, 1);
7588
7589                 decl = start_decl (declarator, declspecs, 1);
7590                 finish_decl (decl, init, NULL_TREE);
7591                 return 0;
7592               }
7593             innermost_code = TREE_CODE (decl);
7594             if (decl_context == FIELD && ctype == NULL_TREE)
7595               ctype = current_class_type;
7596             if (ctype
7597                 && TREE_OPERAND (decl, 0)
7598                 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
7599                     && ((DECL_NAME (TREE_OPERAND (decl, 0))
7600                          == constructor_name_full (ctype))
7601                         || (DECL_NAME (TREE_OPERAND (decl, 0))
7602                             == constructor_name (ctype)))))
7603               TREE_OPERAND (decl, 0) = constructor_name (ctype);
7604             next = &TREE_OPERAND (decl, 0);
7605             decl = *next;
7606             if (ctype != NULL_TREE
7607                 && decl != NULL_TREE && flags != DTOR_FLAG
7608                 && decl == constructor_name (ctype))
7609               {
7610                 return_type = return_ctor;
7611                 ctor_return_type = ctype;
7612               }
7613             ctype = NULL_TREE;
7614             break;
7615
7616           case IDENTIFIER_NODE:
7617             dname = decl;
7618             next = 0;
7619
7620             if (is_rid (dname))
7621               {
7622                 cp_error ("declarator-id missing; using reserved word `%D'",
7623                           dname);
7624                 name = IDENTIFIER_POINTER (dname);
7625               }
7626             if (! IDENTIFIER_OPNAME_P (dname)
7627                 /* Linux headers use '__op'.  Arrgh.  */
7628                 || IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname))
7629               name = IDENTIFIER_POINTER (dname);
7630             else
7631               {
7632                 if (IDENTIFIER_TYPENAME_P (dname))
7633                   {
7634                     my_friendly_assert (flags == NO_SPECIAL, 154);
7635                     flags = TYPENAME_FLAG;
7636                     ctor_return_type = TREE_TYPE (dname);
7637                     return_type = return_conversion;
7638                   }
7639                 name = operator_name_string (dname);
7640               }
7641             break;
7642
7643             /* C++ extension */
7644           case SCOPE_REF:
7645             {
7646               /* Perform error checking, and decide on a ctype.  */
7647               tree cname = TREE_OPERAND (decl, 0);
7648               if (cname == NULL_TREE)
7649                 ctype = NULL_TREE;
7650               else if (! is_aggr_type (cname, 1))
7651                 TREE_OPERAND (decl, 0) = NULL_TREE;
7652               /* Must test TREE_OPERAND (decl, 1), in case user gives
7653                  us `typedef (class::memfunc)(int); memfunc *memfuncptr;'  */
7654               else if (TREE_OPERAND (decl, 1)
7655                        && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
7656                 ctype = cname;
7657               else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM)
7658                 {
7659                   cp_error ("`%T::%D' is not a valid declarator", cname,
7660                             TREE_OPERAND (decl, 1));
7661                   cp_error ("  perhaps you want `typename %T::%D' to make it a type",
7662                             cname, TREE_OPERAND (decl, 1));
7663                   return void_type_node;
7664                 }
7665               else if (ctype == NULL_TREE)
7666                 ctype = cname;
7667               else if (TREE_COMPLEXITY (decl) == current_class_depth)
7668                 TREE_OPERAND (decl, 0) = ctype;
7669               else
7670                 {
7671                   if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
7672                     {
7673                       cp_error ("type `%T' is not derived from type `%T'",
7674                                 cname, ctype);
7675                       TREE_OPERAND (decl, 0) = NULL_TREE;
7676                     }
7677                   else
7678                     ctype = cname;
7679                 }
7680
7681               if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
7682                   && ((DECL_NAME (TREE_OPERAND (decl, 1))
7683                        == constructor_name_full (ctype))
7684                       || (DECL_NAME (TREE_OPERAND (decl, 1))
7685                           == constructor_name (ctype))))
7686                 TREE_OPERAND (decl, 1) = constructor_name (ctype);
7687               next = &TREE_OPERAND (decl, 1);
7688               decl = *next;
7689               if (ctype)
7690                 {
7691                   if (TREE_CODE (decl) == IDENTIFIER_NODE
7692                       && constructor_name (ctype) == decl)
7693                     {
7694                       return_type = return_ctor;
7695                       ctor_return_type = ctype;
7696                     }
7697                   else if (TREE_CODE (decl) == BIT_NOT_EXPR
7698                            && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
7699                            && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
7700                                || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
7701                     {
7702                       return_type = return_dtor;
7703                       ctor_return_type = ctype;
7704                       flags = DTOR_FLAG;
7705                       TREE_OPERAND (decl, 0) = constructor_name (ctype);
7706                       next = &TREE_OPERAND (decl, 0);
7707                     }
7708                 }
7709             }
7710             break;
7711
7712           case ERROR_MARK:
7713             next = 0;
7714             break;
7715
7716           case TYPE_DECL:
7717             /* Parse error puts this typespec where
7718                a declarator should go.  */
7719             cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
7720             if (TREE_TYPE (decl) == current_class_type)
7721               cp_error ("  perhaps you want `%T' for a constructor",
7722                         current_class_name);
7723             dname = DECL_NAME (decl);
7724             name = IDENTIFIER_POINTER (dname);
7725
7726             /* Avoid giving two errors for this.  */
7727             IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
7728
7729             declspecs = temp_tree_cons (NULL_TREE, integer_type_node,
7730                                         declspecs);
7731             *next = dname;
7732             next = 0;
7733             break;
7734
7735           default:
7736             cp_compiler_error ("`%D' as declarator", decl);
7737             return 0; /* We used to do a 155 abort here.  */
7738           }
7739       }
7740     if (name == NULL)
7741       name = "type name";
7742   }
7743
7744   /* A function definition's declarator must have the form of
7745      a function declarator.  */
7746
7747   if (funcdef_flag && innermost_code != CALL_EXPR)
7748     return 0;
7749
7750   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
7751       && innermost_code != CALL_EXPR
7752       && ! (ctype && declspecs == NULL_TREE))
7753     {
7754       cp_error ("declaration of `%D' as non-function", dname);
7755       return void_type_node;
7756     }
7757
7758   /* Anything declared one level down from the top level
7759      must be one of the parameters of a function
7760      (because the body is at least two levels down).  */
7761
7762   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
7763      by not allowing C++ class definitions to specify their parameters
7764      with xdecls (must be spec.d in the parmlist).
7765
7766      Since we now wait to push a class scope until we are sure that
7767      we are in a legitimate method context, we must set oldcname
7768      explicitly (since current_class_name is not yet alive).
7769
7770      We also want to avoid calling this a PARM if it is in a namespace.  */
7771
7772   if (decl_context == NORMAL && ! namespace_bindings_p ()
7773       && ! pseudo_global_level_p ())
7774     {
7775       struct binding_level *b = current_binding_level;
7776       current_binding_level = b->level_chain;
7777       if (current_binding_level != 0 && toplevel_bindings_p ())
7778         decl_context = PARM;
7779       current_binding_level = b;
7780     }
7781
7782   /* Look through the decl specs and record which ones appear.
7783      Some typespecs are defined as built-in typenames.
7784      Others, the ones that are modifiers of other types,
7785      are represented by bits in SPECBITS: set the bits for
7786      the modifiers that appear.  Storage class keywords are also in SPECBITS.
7787
7788      If there is a typedef name or a type, store the type in TYPE.
7789      This includes builtin typedefs such as `int'.
7790
7791      Set EXPLICIT_INT if the type is `int' or `char' and did not
7792      come from a user typedef.
7793
7794      Set LONGLONG if `long' is mentioned twice.
7795
7796      For C++, constructors and destructors have their own fast treatment.  */
7797
7798   for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
7799     {
7800       register int i;
7801       register tree id;
7802
7803       /* Certain parse errors slip through.  For example,
7804          `int class;' is not caught by the parser. Try
7805          weakly to recover here.  */
7806       if (TREE_CODE (spec) != TREE_LIST)
7807         return 0;
7808
7809       id = TREE_VALUE (spec);
7810
7811       if (TREE_CODE (id) == IDENTIFIER_NODE)
7812         {
7813           if (id == ridpointers[(int) RID_INT]
7814               || id == ridpointers[(int) RID_CHAR]
7815               || id == ridpointers[(int) RID_BOOL]
7816               || id == ridpointers[(int) RID_WCHAR])
7817             {
7818               if (type)
7819                 {
7820                   if (id == ridpointers[(int) RID_BOOL])
7821                     error ("`bool' is now a keyword");
7822                   else
7823                     cp_error ("extraneous `%T' ignored", id);
7824                 }
7825               else
7826                 {
7827                   if (id == ridpointers[(int) RID_INT])
7828                     explicit_int = 1;
7829                   else if (id == ridpointers[(int) RID_CHAR])
7830                     explicit_char = 1;
7831                   type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
7832                 }
7833               goto found;
7834             }
7835           /* C++ aggregate types.  */
7836           if (IDENTIFIER_HAS_TYPE_VALUE (id))
7837             {
7838               if (type)
7839                 cp_error ("multiple declarations `%T' and `%T'", type, id);
7840               else
7841                 type = IDENTIFIER_TYPE_VALUE (id);
7842               goto found;
7843             }
7844
7845           for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
7846             {
7847               if (ridpointers[i] == id)
7848                 {
7849                   if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
7850                     {
7851                       if (pedantic && ! in_system_header)
7852                         pedwarn ("ANSI C++ does not support `long long'");
7853                       if (longlong)
7854                         error ("`long long long' is too long for GCC");
7855                       else
7856                         longlong = 1;
7857                     }
7858                   else if (RIDBIT_SETP (i, specbits))
7859                     pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
7860                   RIDBIT_SET (i, specbits);
7861                   goto found;
7862                 }
7863             }
7864         }
7865       /* C++ aggregate types.  */
7866       else if (TREE_CODE (id) == TYPE_DECL)
7867         {
7868           if (type)
7869             cp_error ("multiple declarations `%T' and `%T'", type,
7870                       TREE_TYPE (id));
7871           else
7872             {
7873               type = TREE_TYPE (id);
7874               TREE_VALUE (spec) = type;
7875             }
7876           goto found;
7877         }
7878       if (type)
7879         error ("two or more data types in declaration of `%s'", name);
7880       else if (TREE_CODE (id) == IDENTIFIER_NODE)
7881         {
7882           register tree t = lookup_name (id, 1);
7883           if (!t || TREE_CODE (t) != TYPE_DECL)
7884             error ("`%s' fails to be a typedef or built in type",
7885                    IDENTIFIER_POINTER (id));
7886           else
7887             {
7888               type = TREE_TYPE (t);
7889 #if 0
7890               /* See the code below that used this.  */
7891               decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
7892 #endif
7893               typedef_decl = t;
7894             }
7895         }
7896       else if (id != error_mark_node)
7897         /* Can't change CLASS nodes into RECORD nodes here!  */
7898         type = id;
7899
7900     found: ;
7901     }
7902
7903   typedef_type = type;
7904
7905   /* No type at all: default to `int', and set DEFAULTED_INT
7906      because it was not a user-defined typedef.
7907      Except when we have a `typedef' inside a signature, in
7908      which case the type defaults to `unknown type' and is
7909      instantiated when assigning to a signature pointer or ref.  */
7910
7911   if (type == NULL_TREE
7912       && (RIDBIT_SETP (RID_SIGNED, specbits)
7913           || RIDBIT_SETP (RID_UNSIGNED, specbits)
7914           || RIDBIT_SETP (RID_LONG, specbits)
7915           || RIDBIT_SETP (RID_SHORT, specbits)))
7916     {
7917       /* These imply 'int'.  */
7918       type = integer_type_node;
7919       defaulted_int = 1;
7920     }
7921
7922   if (type == NULL_TREE)
7923     {
7924       explicit_int = -1;
7925       if (return_type == return_dtor)
7926         type = void_type_node;
7927       else if (return_type == return_ctor)
7928         type = build_pointer_type (ctor_return_type);
7929       else if (return_type == return_conversion)
7930         type = ctor_return_type;
7931       else if (current_class_type
7932                && IS_SIGNATURE (current_class_type)
7933                && RIDBIT_SETP (RID_TYPEDEF, specbits)
7934                && (decl_context == FIELD || decl_context == NORMAL))
7935         {
7936           explicit_int = 0;
7937           opaque_typedef = 1;
7938           type = copy_node (opaque_type_node);
7939         }
7940       else
7941         {
7942           if (funcdef_flag)
7943             {
7944               if (warn_return_type
7945                   && return_type == return_normal)
7946                 /* Save warning until we know what is really going on.  */
7947                 warn_about_return_type = 1;
7948             }
7949           else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
7950             pedwarn ("ANSI C++ forbids typedef which does not specify a type");
7951           else if (declspecs == NULL_TREE
7952                    && (innermost_code != CALL_EXPR || pedantic))
7953             cp_pedwarn ("ANSI C++ forbids declaration `%D' with no type or storage class",
7954                         dname);
7955           type = integer_type_node;
7956         }
7957     }
7958   else if (return_type == return_dtor)
7959     {
7960       error ("return type specification for destructor invalid");
7961       type = void_type_node;
7962     }
7963   else if (return_type == return_ctor)
7964     {
7965       error ("return type specification for constructor invalid");
7966       type = build_pointer_type (ctor_return_type);
7967     }
7968   else if (return_type == return_conversion)
7969     {
7970       if (comptypes (type, ctor_return_type, 1) == 0)
7971         cp_error ("operator `%T' declared to return `%T'",
7972                   ctor_return_type, type);
7973       else
7974         cp_pedwarn ("return type specified for `operator %T'",
7975                     ctor_return_type);
7976
7977       type = ctor_return_type;
7978     }
7979
7980   ctype = NULL_TREE;
7981
7982   /* Now process the modifiers that were specified
7983      and check for invalid combinations.  */
7984
7985   /* Long double is a special combination.  */
7986
7987   if (RIDBIT_SETP (RID_LONG, specbits)
7988       && TYPE_MAIN_VARIANT (type) == double_type_node)
7989     {
7990       RIDBIT_RESET (RID_LONG, specbits);
7991       type = build_type_variant (long_double_type_node, TYPE_READONLY (type),
7992                                  TYPE_VOLATILE (type));
7993     }
7994
7995   /* Check all other uses of type modifiers.  */
7996
7997   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
7998       || RIDBIT_SETP (RID_SIGNED, specbits)
7999       || RIDBIT_SETP (RID_LONG, specbits)
8000       || RIDBIT_SETP (RID_SHORT, specbits))
8001     {
8002       int ok = 0;
8003
8004       if (TREE_CODE (type) == REAL_TYPE)
8005         error ("short, signed or unsigned invalid for `%s'", name);
8006       else if (TREE_CODE (type) != INTEGER_TYPE)
8007         error ("long, short, signed or unsigned invalid for `%s'", name);
8008       else if (RIDBIT_SETP (RID_LONG, specbits)
8009                && RIDBIT_SETP (RID_SHORT, specbits))
8010         error ("long and short specified together for `%s'", name);
8011       else if ((RIDBIT_SETP (RID_LONG, specbits)
8012                 || RIDBIT_SETP (RID_SHORT, specbits))
8013                && explicit_char)
8014         error ("long or short specified with char for `%s'", name);
8015       else if ((RIDBIT_SETP (RID_LONG, specbits)
8016                 || RIDBIT_SETP (RID_SHORT, specbits))
8017                && TREE_CODE (type) == REAL_TYPE)
8018         error ("long or short specified with floating type for `%s'", name);
8019       else if (RIDBIT_SETP (RID_SIGNED, specbits)
8020                && RIDBIT_SETP (RID_UNSIGNED, specbits))
8021         error ("signed and unsigned given together for `%s'", name);
8022       else
8023         {
8024           ok = 1;
8025           if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
8026             {
8027               pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
8028                        name);
8029               if (flag_pedantic_errors)
8030                 ok = 0;
8031             }
8032         }
8033
8034       /* Discard the type modifiers if they are invalid.  */
8035       if (! ok)
8036         {
8037           RIDBIT_RESET (RID_UNSIGNED, specbits);
8038           RIDBIT_RESET (RID_SIGNED, specbits);
8039           RIDBIT_RESET (RID_LONG, specbits);
8040           RIDBIT_RESET (RID_SHORT, specbits);
8041           longlong = 0;
8042         }
8043     }
8044
8045   if (RIDBIT_SETP (RID_COMPLEX, specbits)
8046       && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
8047     {
8048       error ("complex invalid for `%s'", name);
8049       RIDBIT_RESET (RID_COMPLEX, specbits);
8050     }
8051
8052   /* Decide whether an integer type is signed or not.
8053      Optionally treat bitfields as signed by default.  */
8054   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
8055       || (bitfield && ! flag_signed_bitfields
8056           && (explicit_int || defaulted_int || explicit_char
8057               /* A typedef for plain `int' without `signed'
8058                  can be controlled just like plain `int'.  */
8059               || ! (typedef_decl != NULL_TREE
8060                     && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
8061           && TREE_CODE (type) != ENUMERAL_TYPE
8062           && RIDBIT_NOTSETP (RID_SIGNED, specbits)))
8063     {
8064       if (longlong)
8065         type = long_long_unsigned_type_node;
8066       else if (RIDBIT_SETP (RID_LONG, specbits))
8067         type = long_unsigned_type_node;
8068       else if (RIDBIT_SETP (RID_SHORT, specbits))
8069         type = short_unsigned_type_node;
8070       else if (type == char_type_node)
8071         type = unsigned_char_type_node;
8072       else if (typedef_decl)
8073         type = unsigned_type (type);
8074       else
8075         type = unsigned_type_node;
8076     }
8077   else if (RIDBIT_SETP (RID_SIGNED, specbits)
8078            && type == char_type_node)
8079     type = signed_char_type_node;
8080   else if (longlong)
8081     type = long_long_integer_type_node;
8082   else if (RIDBIT_SETP (RID_LONG, specbits))
8083     type = long_integer_type_node;
8084   else if (RIDBIT_SETP (RID_SHORT, specbits))
8085     type = short_integer_type_node;
8086
8087   if (RIDBIT_SETP (RID_COMPLEX, specbits))
8088     {
8089       /* If we just have "complex", it is equivalent to
8090          "complex double", but if any modifiers at all are specified it is
8091          the complex form of TYPE.  E.g, "complex short" is
8092          "complex short int".  */
8093
8094       if (defaulted_int && ! longlong
8095           && ! (RIDBIT_SETP (RID_LONG, specbits)
8096                 || RIDBIT_SETP (RID_SHORT, specbits)
8097                 || RIDBIT_SETP (RID_SIGNED, specbits)
8098                 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
8099         type = complex_double_type_node;
8100       else if (type == integer_type_node)
8101         type = complex_integer_type_node;
8102       else if (type == float_type_node)
8103         type = complex_float_type_node;
8104       else if (type == double_type_node)
8105         type = complex_double_type_node;
8106       else if (type == long_double_type_node)
8107         type = complex_long_double_type_node;
8108       else
8109         type = build_complex_type (type);
8110     }
8111
8112   /* Set CONSTP if this declaration is `const', whether by
8113      explicit specification or via a typedef.
8114      Likewise for VOLATILEP.  */
8115
8116   constp = !! RIDBIT_SETP (RID_CONST, specbits) + TYPE_READONLY (type);
8117   volatilep = !! RIDBIT_SETP (RID_VOLATILE, specbits) + TYPE_VOLATILE (type);
8118   staticp = 0;
8119   inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
8120   virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
8121   RIDBIT_RESET (RID_VIRTUAL, specbits);
8122   explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
8123   RIDBIT_RESET (RID_EXPLICIT, specbits);
8124
8125   if (RIDBIT_SETP (RID_STATIC, specbits))
8126     staticp = 1 + (decl_context == FIELD);
8127
8128   if (virtualp && staticp == 2)
8129     {
8130       cp_error ("member `%D' cannot be declared both virtual and static",
8131                 dname);
8132       staticp = 0;
8133     }
8134   friendp = RIDBIT_SETP (RID_FRIEND, specbits);
8135   RIDBIT_RESET (RID_FRIEND, specbits);
8136
8137   if (RIDBIT_SETP (RID_MUTABLE, specbits))
8138     {
8139       if (decl_context == PARM)
8140         {
8141           error ("non-member `%s' cannot be declared `mutable'", name);
8142           RIDBIT_RESET (RID_MUTABLE, specbits);
8143         }
8144       else if (friendp || decl_context == TYPENAME)
8145         {
8146           error ("non-object member `%s' cannot be declared `mutable'", name);
8147           RIDBIT_RESET (RID_MUTABLE, specbits);
8148         }
8149     }
8150
8151   /* Warn if two storage classes are given. Default to `auto'.  */
8152
8153   if (RIDBIT_ANY_SET (specbits))
8154     {
8155       if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
8156       if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
8157       if (decl_context == PARM && nclasses > 0)
8158         error ("storage class specifiers invalid in parameter declarations");
8159       if (RIDBIT_SETP (RID_TYPEDEF, specbits))
8160         {
8161           if (decl_context == PARM)
8162             error ("typedef declaration invalid in parameter declaration");
8163           nclasses++;
8164         }
8165       if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
8166       if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
8167     }
8168
8169   /* Give error if `virtual' is used outside of class declaration.  */
8170   if (virtualp
8171       && (current_class_name == NULL_TREE || decl_context != FIELD))
8172     {
8173       error ("virtual outside class declaration");
8174       virtualp = 0;
8175     }
8176   if (current_class_name == NULL_TREE && RIDBIT_SETP (RID_MUTABLE, specbits))
8177     {
8178       error ("only members can be declared mutable");
8179       RIDBIT_RESET (RID_MUTABLE, specbits);
8180     }
8181
8182   /* Static anonymous unions are dealt with here.  */
8183   if (staticp && decl_context == TYPENAME
8184       && TREE_CODE (declspecs) == TREE_LIST
8185       && TREE_CODE (TREE_VALUE (declspecs)) == UNION_TYPE
8186       && ANON_AGGRNAME_P (TYPE_IDENTIFIER (TREE_VALUE (declspecs))))
8187     decl_context = FIELD;
8188
8189   /* Give error if `const,' `volatile,' `inline,' `friend,' or `virtual'
8190      is used in a signature member function declaration.  */
8191   if (decl_context == FIELD
8192       && IS_SIGNATURE (current_class_type)
8193       && RIDBIT_NOTSETP (RID_TYPEDEF, specbits))
8194     {
8195       if (constp)
8196         {
8197           error ("`const' specified for signature member function `%s'", name);
8198           constp = 0;
8199         }
8200       if (volatilep)
8201         {
8202           error ("`volatile' specified for signature member function `%s'",
8203                  name);
8204           volatilep = 0;
8205         }
8206       if (inlinep)
8207         {
8208           error ("`inline' specified for signature member function `%s'", name);
8209           /* Later, we'll make signature member functions inline.  */
8210           inlinep = 0;
8211         }
8212       if (friendp)
8213         {
8214           error ("`friend' declaration in signature definition");
8215           friendp = 0;
8216         }
8217       if (virtualp)
8218         {
8219           error ("`virtual' specified for signature member function `%s'",
8220                  name);
8221           /* Later, we'll make signature member functions virtual.  */
8222           virtualp = 0;
8223         }
8224     }
8225
8226   /* Warn about storage classes that are invalid for certain
8227      kinds of declarations (parameters, typenames, etc.).  */
8228
8229   if (nclasses > 1)
8230     error ("multiple storage classes in declaration of `%s'", name);
8231   else if (decl_context != NORMAL && nclasses > 0)
8232     {
8233       if ((decl_context == PARM || decl_context == CATCHPARM)
8234           && (RIDBIT_SETP (RID_REGISTER, specbits)
8235               || RIDBIT_SETP (RID_AUTO, specbits)))
8236         ;
8237       else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
8238         ;
8239       else if (decl_context == FIELD
8240                && ! IS_SIGNATURE (current_class_type)
8241                /* C++ allows static class elements  */
8242                && RIDBIT_SETP (RID_STATIC, specbits))
8243         /* C++ also allows inlines and signed and unsigned elements,
8244            but in those cases we don't come in here.  */
8245         ;
8246       else
8247         {
8248           if (decl_context == FIELD)
8249             {
8250               tree tmp = NULL_TREE;
8251               register int op = 0;
8252
8253               if (declarator)
8254                 {
8255                   /* Avoid trying to get an operand off an identifier node.  */ 
8256                   if (TREE_CODE (declarator) == IDENTIFIER_NODE)
8257                     tmp = declarator;
8258                   else
8259                     tmp = TREE_OPERAND (declarator, 0);
8260                   op = IDENTIFIER_OPNAME_P (tmp);
8261                 }
8262               error ("storage class specified for %s `%s'",
8263                      IS_SIGNATURE (current_class_type)
8264                      ? (op
8265                         ? "signature member operator"
8266                         : "signature member function")
8267                      : (op ? "member operator" : "field"),
8268                      op ? operator_name_string (tmp) : name);
8269             }
8270           else
8271             error (((decl_context == PARM || decl_context == CATCHPARM)
8272                     ? "storage class specified for parameter `%s'"
8273                     : "storage class specified for typename"), name);
8274           RIDBIT_RESET (RID_REGISTER, specbits);
8275           RIDBIT_RESET (RID_AUTO, specbits);
8276           RIDBIT_RESET (RID_EXTERN, specbits);
8277
8278           if (decl_context == FIELD && IS_SIGNATURE (current_class_type))
8279             {
8280               RIDBIT_RESET (RID_STATIC, specbits);
8281               staticp = 0;
8282             }
8283         }
8284     }
8285   else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
8286     {
8287       if (toplevel_bindings_p ())
8288         {
8289           /* It's common practice (and completely valid) to have a const
8290              be initialized and declared extern.  */
8291           if (! constp)
8292             warning ("`%s' initialized and declared `extern'", name);
8293         }
8294       else
8295         error ("`%s' has both `extern' and initializer", name);
8296     }
8297   else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
8298            && ! toplevel_bindings_p ())
8299     error ("nested function `%s' declared `extern'", name);
8300   else if (toplevel_bindings_p ())
8301     {
8302       if (RIDBIT_SETP (RID_AUTO, specbits))
8303         error ("top-level declaration of `%s' specifies `auto'", name);
8304     }
8305
8306   if (nclasses > 0 && friendp)
8307     error ("storage class specifiers invalid in friend function declarations");
8308
8309   /* Now figure out the structure of the declarator proper.
8310      Descend through it, creating more complex types, until we reach
8311      the declared identifier (or NULL_TREE, in an absolute declarator).  */
8312
8313   while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE)
8314     {
8315       /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
8316          an INDIRECT_REF (for *...),
8317          a CALL_EXPR (for ...(...)),
8318          an identifier (for the name being declared)
8319          or a null pointer (for the place in an absolute declarator
8320          where the name was omitted).
8321          For the last two cases, we have just exited the loop.
8322
8323          For C++ it could also be
8324          a SCOPE_REF (for class :: ...).  In this case, we have converted
8325          sensible names to types, and those are the values we use to
8326          qualify the member name.
8327          an ADDR_EXPR (for &...),
8328          a BIT_NOT_EXPR (for destructors)
8329
8330          At this point, TYPE is the type of elements of an array,
8331          or for a function to return, or for a pointer to point to.
8332          After this sequence of ifs, TYPE is the type of the
8333          array or function or pointer, and DECLARATOR has had its
8334          outermost layer removed.  */
8335
8336       if (type == error_mark_node)
8337         {
8338           if (TREE_CODE (declarator) == SCOPE_REF)
8339             declarator = TREE_OPERAND (declarator, 1);
8340           else
8341             declarator = TREE_OPERAND (declarator, 0);
8342           continue;
8343         }
8344       if (quals != NULL_TREE
8345           && (declarator == NULL_TREE
8346               || TREE_CODE (declarator) != SCOPE_REF))
8347         {
8348           if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
8349             ctype = TYPE_METHOD_BASETYPE (type);
8350           if (ctype != NULL_TREE)
8351             {
8352               tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
8353               ctype = grok_method_quals (ctype, dummy, quals);
8354               type = TREE_TYPE (dummy);
8355               quals = NULL_TREE;
8356             }
8357         }
8358       switch (TREE_CODE (declarator))
8359         {
8360         case ARRAY_REF:
8361           {
8362             register tree itype = NULL_TREE;
8363             register tree size = TREE_OPERAND (declarator, 1);
8364             /* The index is a signed object `sizetype' bits wide.  */
8365             tree index_type = signed_type (sizetype);
8366
8367             declarator = TREE_OPERAND (declarator, 0);
8368
8369             /* Check for some types that there cannot be arrays of.  */
8370
8371             if (TYPE_MAIN_VARIANT (type) == void_type_node)
8372               {
8373                 cp_error ("declaration of `%D' as array of voids", dname);
8374                 type = error_mark_node;
8375               }
8376
8377             if (TREE_CODE (type) == FUNCTION_TYPE)
8378               {
8379                 cp_error ("declaration of `%D' as array of functions", dname);
8380                 type = error_mark_node;
8381               }
8382
8383             /* ARM $8.4.3: Since you can't have a pointer to a reference,
8384                you can't have arrays of references.  If we allowed them,
8385                then we'd be saying x[i] is valid for an array x, but
8386                then you'd have to ask: what does `*(x + i)' mean?  */
8387             if (TREE_CODE (type) == REFERENCE_TYPE)
8388               {
8389                 if (decl_context == TYPENAME)
8390                   cp_error ("cannot make arrays of references");
8391                 else
8392                   cp_error ("declaration of `%D' as array of references",
8393                             dname);
8394                 type = error_mark_node;
8395               }
8396
8397             if (TREE_CODE (type) == OFFSET_TYPE)
8398               {
8399                   cp_error ("declaration of `%D' as array of data members",
8400                             dname);
8401                 type = error_mark_node;
8402               }
8403
8404             if (TREE_CODE (type) == METHOD_TYPE)
8405               {
8406                 cp_error ("declaration of `%D' as array of function members",
8407                           dname);
8408                 type = error_mark_node;
8409               }
8410
8411             if (size == error_mark_node)
8412               type = error_mark_node;
8413
8414             if (type == error_mark_node)
8415               continue;
8416
8417             if (size)
8418               {
8419                 /* Must suspend_momentary here because the index
8420                    type may need to live until the end of the function.
8421                    For example, it is used in the declaration of a
8422                    variable which requires destructing at the end of
8423                    the function; then build_vec_delete will need this
8424                    value.  */
8425                 int yes = suspend_momentary ();
8426                 /* might be a cast */
8427                 if (TREE_CODE (size) == NOP_EXPR
8428                     && TREE_TYPE (size) == TREE_TYPE (TREE_OPERAND (size, 0)))
8429                   size = TREE_OPERAND (size, 0);
8430
8431                 /* If this involves a template parameter, it'll be
8432                    constant, but we don't know what the value is yet.  */
8433                 if (processing_template_decl)
8434                   {
8435                     itype = make_node (INTEGER_TYPE);
8436                     TYPE_MIN_VALUE (itype) = size_zero_node;
8437                     TYPE_MAX_VALUE (itype) = build_min
8438                       (MINUS_EXPR, sizetype, size, integer_one_node);
8439                     goto dont_grok_size;
8440                   }
8441
8442                 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
8443                     && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE)
8444                   {
8445                     cp_error ("size of array `%D' has non-integer type",
8446                               dname);
8447                     size = integer_one_node;
8448                   }
8449                 if (TREE_READONLY_DECL_P (size))
8450                   size = decl_constant_value (size);
8451                 if (pedantic && integer_zerop (size))
8452                   cp_pedwarn ("ANSI C++ forbids zero-size array `%D'", dname);
8453                 if (TREE_CONSTANT (size))
8454                   {
8455                     int old_flag_pedantic_errors = flag_pedantic_errors;
8456                     int old_pedantic = pedantic;
8457                     pedantic = flag_pedantic_errors = 1;
8458                     /* Always give overflow errors on array subscripts.  */
8459                     constant_expression_warning (size);
8460                     pedantic = old_pedantic;
8461                     flag_pedantic_errors = old_flag_pedantic_errors;
8462                     if (INT_CST_LT (size, integer_zero_node))
8463                       {
8464                         cp_error ("size of array `%D' is negative", dname);
8465                         size = integer_one_node;
8466                       }
8467                   }
8468                 else
8469                   {
8470                     if (pedantic)
8471                       {
8472                         if (dname)
8473                           cp_pedwarn ("ANSI C++ forbids variable-size array `%D'",
8474                                       dname);
8475                         else
8476                           cp_pedwarn ("ANSI C++ forbids variable-size array");
8477                       }
8478                   }
8479
8480                 itype
8481                   = fold (build_binary_op (MINUS_EXPR,
8482                                            cp_convert (index_type, size),
8483                                            cp_convert (index_type,
8484                                                        integer_one_node), 1));
8485                 if (! TREE_CONSTANT (itype))
8486                   itype = variable_size (itype);
8487                 else if (TREE_OVERFLOW (itype))
8488                   {
8489                     error ("overflow in array dimension");
8490                     TREE_OVERFLOW (itype) = 0;
8491                   }
8492
8493                 /* If we're a parm, we need to have a permanent type so
8494                    mangling checks for re-use will work right.  If both the
8495                    element and index types are permanent, the array type
8496                    will be, too.  */
8497                 if (decl_context == PARM
8498                     && allocation_temporary_p () && TREE_PERMANENT (type))
8499                   {
8500                     push_obstacks (&permanent_obstack, &permanent_obstack);
8501                     itype = build_index_type (itype);
8502                     pop_obstacks ();
8503                   }
8504                 else
8505                   itype = build_index_type (itype);
8506
8507               dont_grok_size:
8508                 resume_momentary (yes);
8509               }
8510
8511           /* Build the array type itself, then merge any constancy or
8512              volatility into the target type.  We must do it in this order
8513              to ensure that the TYPE_MAIN_VARIANT field of the array type
8514              is set correctly.  */
8515
8516             type = build_cplus_array_type (type, itype);
8517             if (constp || volatilep)
8518               type = cp_build_type_variant (type, constp, volatilep);
8519
8520             ctype = NULL_TREE;
8521           }
8522           break;
8523
8524         case CALL_EXPR:
8525           {
8526             tree arg_types;
8527             int funcdecl_p;
8528             tree inner_parms = TREE_OPERAND (declarator, 1);
8529             tree inner_decl = TREE_OPERAND (declarator, 0);
8530
8531             /* Declaring a function type.
8532                Make sure we have a valid type for the function to return.  */
8533 #if 0
8534             /* Is this an error?  Should they be merged into TYPE here?  */
8535             if (pedantic && (constp || volatilep))
8536               pedwarn ("function declared to return const or volatile result");
8537 #else
8538             /* Merge any constancy or volatility into the function return
8539                type.  */
8540
8541             if (constp || volatilep)
8542               {
8543                 type = cp_build_type_variant (type, constp, volatilep);
8544                 if (IS_AGGR_TYPE (type))
8545                   build_pointer_type (type);
8546                 constp = 0;
8547                 volatilep = 0;
8548               }
8549 #endif
8550
8551             /* Warn about some types functions can't return.  */
8552
8553             if (TREE_CODE (type) == FUNCTION_TYPE)
8554               {
8555                 error ("`%s' declared as function returning a function", name);
8556                 type = integer_type_node;
8557               }
8558             if (TREE_CODE (type) == ARRAY_TYPE)
8559               {
8560                 error ("`%s' declared as function returning an array", name);
8561                 type = integer_type_node;
8562               }
8563
8564             if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
8565               inner_decl = TREE_OPERAND (inner_decl, 1);
8566
8567             /* Pick up type qualifiers which should be applied to `this'.  */
8568             quals = TREE_OPERAND (declarator, 2);
8569
8570             /* Pick up the exception specifications.  */
8571             raises = TREE_TYPE (declarator);
8572
8573             /* Say it's a definition only for the CALL_EXPR
8574                closest to the identifier.  */
8575             funcdecl_p
8576               = inner_decl && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
8577                                || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
8578
8579             if (ctype == NULL_TREE
8580                 && decl_context == FIELD
8581                 && funcdecl_p
8582                 && (friendp == 0 || dname == current_class_name))
8583               ctype = current_class_type;
8584
8585             if (ctype && return_type == return_conversion)
8586               TYPE_HAS_CONVERSION (ctype) = 1;
8587             if (ctype && constructor_name (ctype) == dname)
8588               {
8589                 /* We are within a class's scope. If our declarator name
8590                    is the same as the class name, and we are defining
8591                    a function, then it is a constructor/destructor, and
8592                    therefore returns a void type.  */
8593
8594                 if (flags == DTOR_FLAG)
8595                   {
8596                     /* ANSI C++ June 5 1992 WP 12.4.1.  A destructor may
8597                        not be declared const or volatile.  A destructor
8598                        may not be static.  */
8599                     if (staticp == 2)
8600                       error ("destructor cannot be static member function");
8601                     if (quals)
8602                       {
8603                         error ("destructors cannot be declared `const' or `volatile'");
8604                         return void_type_node;
8605                       }
8606                     if (decl_context == FIELD)
8607                       {
8608                         if (! member_function_or_else (ctype, current_class_type,
8609                                                        "destructor for alien class `%s' cannot be a member"))
8610                           return void_type_node;
8611                       }
8612                   }
8613                 else            /* it's a constructor.  */
8614                   {
8615                     if (explicitp == 1)
8616                       explicitp = 2;
8617                     /* ANSI C++ June 5 1992 WP 12.1.2.  A constructor may
8618                        not be declared const or volatile.  A constructor may
8619                        not be virtual.  A constructor may not be static.  */
8620                     if (staticp == 2)
8621                       error ("constructor cannot be static member function");
8622                     if (virtualp)
8623                       {
8624                         pedwarn ("constructors cannot be declared virtual");
8625                         virtualp = 0;
8626                       }
8627                     if (quals)
8628                       {
8629                         error ("constructors cannot be declared `const' or `volatile'");
8630                         return void_type_node;
8631                       }
8632                     {
8633                       RID_BIT_TYPE tmp_bits;
8634                       bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
8635                       RIDBIT_RESET (RID_INLINE, tmp_bits);
8636                       RIDBIT_RESET (RID_STATIC, tmp_bits);
8637                       if (RIDBIT_ANY_SET (tmp_bits))
8638                         error ("return value type specifier for constructor ignored");
8639                     }
8640                     type = build_pointer_type (ctype);
8641                     if (decl_context == FIELD
8642                         && IS_SIGNATURE (current_class_type))
8643                       {
8644                         error ("constructor not allowed in signature");
8645                         return void_type_node;
8646                       }                   
8647                     else if (decl_context == FIELD)
8648                       {
8649                         if (! member_function_or_else (ctype, current_class_type,
8650                                                        "constructor for alien class `%s' cannot be member"))
8651                           return void_type_node;
8652                         TYPE_HAS_CONSTRUCTOR (ctype) = 1;
8653                         if (return_type != return_ctor)
8654                           return NULL_TREE;
8655                       }
8656                   }
8657                 if (decl_context == FIELD)
8658                   staticp = 0;
8659               }
8660             else if (friendp)
8661               {
8662                 if (initialized)
8663                   error ("can't initialize friend function `%s'", name);
8664                 if (virtualp)
8665                   {
8666                     /* Cannot be both friend and virtual.  */
8667                     error ("virtual functions cannot be friends");
8668                     RIDBIT_RESET (RID_FRIEND, specbits);
8669                     friendp = 0;
8670                   }
8671                 if (decl_context == NORMAL)
8672                   error ("friend declaration not in class definition");
8673                 if (current_function_decl && funcdef_flag)
8674                   cp_error ("can't define friend function `%s' in a local class definition",
8675                             name);
8676               }
8677
8678             /* Construct the function type and go to the next
8679                inner layer of declarator.  */
8680
8681             declarator = TREE_OPERAND (declarator, 0);
8682
8683             /* FIXME: This is where default args should be fully
8684                processed.  */
8685
8686             arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
8687
8688             if (declarator)
8689               {
8690                 /* Get past destructors, etc.
8691                    We know we have one because FLAGS will be non-zero.
8692
8693                    Complain about improper parameter lists here.  */
8694                 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
8695                   {
8696                     declarator = TREE_OPERAND (declarator, 0);
8697
8698                     if (strict_prototype == 0 && arg_types == NULL_TREE)
8699                       arg_types = void_list_node;
8700                     else if (arg_types == NULL_TREE
8701                              || arg_types != void_list_node)
8702                       {
8703                         error ("destructors cannot be specified with parameters");
8704                         arg_types = void_list_node;
8705                       }
8706                   }
8707               }
8708
8709             /* ANSI says that `const int foo ();'
8710                does not make the function foo const.  */
8711             type = build_function_type (type, arg_types);
8712
8713             {
8714               tree t;
8715               for (t = arg_types; t; t = TREE_CHAIN (t))
8716                 if (TREE_PURPOSE (t)
8717                     && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8718                   {
8719                     add_defarg_fn (type);
8720                     break;
8721                   }
8722             }
8723           }
8724           break;
8725
8726         case ADDR_EXPR:
8727         case INDIRECT_REF:
8728           /* Filter out pointers-to-references and references-to-references.
8729              We can get these if a TYPE_DECL is used.  */
8730
8731           if (TREE_CODE (type) == REFERENCE_TYPE)
8732             {
8733               error ("cannot declare %s to references",
8734                      TREE_CODE (declarator) == ADDR_EXPR
8735                      ? "references" : "pointers");
8736               declarator = TREE_OPERAND (declarator, 0);
8737               continue;
8738             }
8739
8740           if (TREE_CODE (type) == OFFSET_TYPE
8741               && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
8742                   || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
8743             {
8744               cp_error ("cannot declare pointer to `%#T' member",
8745                         TREE_TYPE (type));
8746               type = TREE_TYPE (type);
8747             }
8748
8749           /* Merge any constancy or volatility into the target type
8750              for the pointer.  */
8751
8752           if (constp || volatilep)
8753             {
8754               /* A const or volatile signature pointer/reference is
8755                  pointing to a const or volatile object, i.e., the
8756                  `optr' is const or volatile, respectively, not the
8757                  signature pointer/reference itself.  */
8758               if (! IS_SIGNATURE (type))
8759                 {
8760                   type = cp_build_type_variant (type, constp, volatilep);
8761                   if (IS_AGGR_TYPE (type))
8762                     build_pointer_type (type);
8763                   constp = 0;
8764                   volatilep = 0;
8765                 }
8766             }
8767
8768           if (IS_SIGNATURE (type))
8769             {
8770               if (TREE_CODE (declarator) == ADDR_EXPR)
8771                 {
8772                   if (CLASSTYPE_METHOD_VEC (type) == NULL_TREE
8773                       && TYPE_SIZE (type))
8774                     cp_warning ("empty signature `%T' used in signature reference declaration",
8775                                 type);
8776 #if 0
8777                   type = build_signature_reference_type (type,
8778                                                          constp, volatilep);
8779 #else
8780                   sorry ("signature reference");
8781                   return NULL_TREE;
8782 #endif
8783                 }
8784               else
8785                 {
8786                   if (CLASSTYPE_METHOD_VEC (type) == NULL_TREE
8787                       && TYPE_SIZE (type))
8788                     cp_warning ("empty signature `%T' used in signature pointer declaration",
8789                                 type);
8790                   type = build_signature_pointer_type (type,
8791                                                        constp, volatilep);
8792                 }
8793               constp = 0;
8794               volatilep = 0;
8795             }
8796           else if (TREE_CODE (declarator) == ADDR_EXPR)
8797             {
8798               if (TREE_CODE (type) == FUNCTION_TYPE)
8799                 {
8800                   error ("cannot declare references to functions; use pointer to function instead");
8801                   type = build_pointer_type (type);
8802                 }
8803               else
8804                 {
8805                   if (TYPE_MAIN_VARIANT (type) == void_type_node)
8806                     error ("invalid type: `void &'");
8807                   else
8808                     type = build_reference_type (type);
8809                 }
8810             }
8811           else if (TREE_CODE (type) == METHOD_TYPE)
8812             {
8813               type = build_ptrmemfunc_type (build_pointer_type (type));
8814             }
8815           else
8816             type = build_pointer_type (type);
8817
8818           /* Process a list of type modifier keywords (such as
8819              const or volatile) that were given inside the `*' or `&'.  */
8820
8821           if (TREE_TYPE (declarator))
8822             {
8823               register tree typemodlist;
8824               int erred = 0;
8825               for (typemodlist = TREE_TYPE (declarator); typemodlist;
8826                    typemodlist = TREE_CHAIN (typemodlist))
8827                 {
8828                   if (TREE_VALUE (typemodlist) == ridpointers[(int) RID_CONST])
8829                     constp++;
8830                   else if (TREE_VALUE (typemodlist) == ridpointers[(int) RID_VOLATILE])
8831                     volatilep++;
8832                   else if (!erred)
8833                     {
8834                       erred = 1;
8835                       error ("invalid type modifier within %s declarator",
8836                              TREE_CODE (declarator) == ADDR_EXPR
8837                              ? "reference" : "pointer");
8838                     }
8839                 }
8840               if (constp > 1)
8841                 pedwarn ("duplicate `const'");
8842               if (volatilep > 1)
8843                 pedwarn ("duplicate `volatile'");
8844               if (TREE_CODE (declarator) == ADDR_EXPR
8845                   && (constp || volatilep))
8846                 {
8847                   if (constp)
8848                     pedwarn ("discarding `const' applied to a reference");
8849                   if (volatilep)
8850                     pedwarn ("discarding `volatile' applied to a reference");
8851                   constp = volatilep = 0;
8852                 }
8853             }
8854           declarator = TREE_OPERAND (declarator, 0);
8855           ctype = NULL_TREE;
8856           break;
8857
8858         case SCOPE_REF:
8859           {
8860             /* We have converted type names to NULL_TREE if the
8861                name was bogus, or to a _TYPE node, if not.
8862
8863                The variable CTYPE holds the type we will ultimately
8864                resolve to.  The code here just needs to build
8865                up appropriate member types.  */
8866             tree sname = TREE_OPERAND (declarator, 1);
8867             /* Destructors can have their visibilities changed as well.  */
8868             if (TREE_CODE (sname) == BIT_NOT_EXPR)
8869               sname = TREE_OPERAND (sname, 0);
8870
8871             if (TREE_COMPLEXITY (declarator) == 0)
8872               /* This needs to be here, in case we are called
8873                  multiple times.  */ ;
8874             else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
8875               /* don't fall out into global scope. Hides real bug? --eichin */ ;
8876             else if (! IS_AGGR_TYPE_CODE
8877                      (TREE_CODE (TREE_OPERAND (declarator, 0))))
8878               ;
8879             else if (TREE_COMPLEXITY (declarator) == current_class_depth)
8880               {
8881                 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
8882                    that refer to ctype.  They couldn't be resolved earlier
8883                    because we hadn't pushed into the class yet.
8884                    Example: resolve 'B<T>::type' in
8885                    'B<typename B<T>::type> B<T>::f () { }'.  */
8886                 if (current_template_parms
8887                     && uses_template_parms (type)
8888                     && uses_template_parms (current_class_type))
8889                   {
8890                     tree args = current_template_args ();
8891                     type = tsubst (type, &TREE_VEC_ELT (args, 0),
8892                                    TREE_VEC_LENGTH (args), NULL_TREE);
8893                   }
8894
8895                 /* This pop_nested_class corresponds to the
8896                    push_nested_class used to push into class scope for
8897                    parsing the argument list of a function decl, in
8898                    qualified_id.  */
8899                 pop_nested_class (1);
8900                 TREE_COMPLEXITY (declarator) = current_class_depth;
8901               }
8902             else
8903               my_friendly_abort (16);
8904
8905             if (TREE_OPERAND (declarator, 0) == NULL_TREE)
8906               {
8907                 /* We had a reference to a global decl, or
8908                    perhaps we were given a non-aggregate typedef,
8909                    in which case we cleared this out, and should just
8910                    keep going as though it wasn't there.  */
8911                 declarator = sname;
8912                 continue;
8913               }
8914             ctype = TREE_OPERAND (declarator, 0);
8915
8916             if (sname == NULL_TREE)
8917               goto done_scoping;
8918
8919             if (TREE_CODE (sname) == IDENTIFIER_NODE)
8920               {
8921                 /* This is the `standard' use of the scoping operator:
8922                    basetype :: member .  */
8923
8924                 if (ctype == current_class_type)
8925                   {
8926                     /* class A {
8927                          void A::f ();
8928                        };
8929
8930                        Is this ill-formed?  */
8931
8932                     if (pedantic)
8933                       cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
8934                                   ctype, name);
8935                   }
8936                 else if (TREE_CODE (type) == FUNCTION_TYPE)
8937                   {
8938                     if (current_class_type == NULL_TREE
8939                         || friendp)
8940                       type = build_cplus_method_type (build_type_variant (ctype, constp, volatilep),
8941                                                       TREE_TYPE (type), TYPE_ARG_TYPES (type));
8942                     else
8943                       {
8944                         cp_error ("cannot declare member function `%T::%s' within `%T'",
8945                                   ctype, name, current_class_type);
8946                         return void_type_node;
8947                       }
8948                   }
8949                 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
8950                          || TYPE_SIZE (complete_type (ctype)) != NULL_TREE)
8951                   {
8952                     /* have to move this code elsewhere in this function.
8953                        this code is used for i.e., typedef int A::M; M *pm;
8954
8955                        It is?  How? jason 10/2/94 */
8956
8957                     if (current_class_type)
8958                       {
8959                         cp_error ("cannot declare member `%T::%s' within `%T'",
8960                                   ctype, name, current_class_type);
8961                         return void_type_node;
8962                       }
8963                     type = build_offset_type (ctype, type);
8964                   }
8965                 else if (uses_template_parms (ctype))
8966                   {
8967                     if (TREE_CODE (type) == FUNCTION_TYPE)
8968                       type
8969                         = build_cplus_method_type (build_type_variant (ctype,
8970                                                                        constp,
8971                                                                        volatilep),
8972                                                    TREE_TYPE (type),
8973                                                    TYPE_ARG_TYPES (type));
8974                   }
8975                 else
8976                   {
8977                     cp_error ("structure `%T' not yet defined", ctype);
8978                     return error_mark_node;
8979                   }
8980
8981                 declarator = sname;
8982               }
8983             else if (TREE_CODE (sname) == SCOPE_REF)
8984               my_friendly_abort (17);
8985             else
8986               {
8987               done_scoping:
8988                 declarator = TREE_OPERAND (declarator, 1);
8989                 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
8990                   /* In this case, we will deal with it later.  */
8991                   ;
8992                 else
8993                   {
8994                     if (TREE_CODE (type) == FUNCTION_TYPE)
8995                       type = build_cplus_method_type (build_type_variant (ctype, constp, volatilep), TREE_TYPE (type), TYPE_ARG_TYPES (type));
8996                     else
8997                       type = build_offset_type (ctype, type);
8998                   }
8999               }
9000           }
9001           break;
9002
9003         case BIT_NOT_EXPR:
9004           declarator = TREE_OPERAND (declarator, 0);
9005           break;
9006
9007         case RECORD_TYPE:
9008         case UNION_TYPE:
9009         case ENUMERAL_TYPE:
9010           declarator = NULL_TREE;
9011           break;
9012
9013         case ERROR_MARK:
9014           declarator = NULL_TREE;
9015           break;
9016
9017         default:
9018           my_friendly_abort (158);
9019         }
9020     }
9021
9022   if (explicitp == 1)
9023     {
9024       error ("only constructors can be declared `explicit'");
9025       explicitp = 0;
9026     }
9027
9028   /* Now TYPE has the actual type.  */
9029
9030   /* If this is declaring a typedef name, return a TYPE_DECL.  */
9031
9032   if (RIDBIT_SETP (RID_MUTABLE, specbits))
9033     {
9034       if (constp)
9035         {
9036           error ("const `%s' cannot be declared `mutable'", name);
9037           RIDBIT_RESET (RID_MUTABLE, specbits);
9038         }
9039       else if (staticp)
9040         {
9041           error ("static `%s' cannot be declared `mutable'", name);
9042           RIDBIT_RESET (RID_MUTABLE, specbits);
9043         }
9044     }
9045
9046   if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
9047     {
9048       tree decl;
9049
9050       /* Note that the grammar rejects storage classes
9051          in typenames, fields or parameters.  */
9052       if (constp || volatilep)
9053         type = cp_build_type_variant (type, constp, volatilep);
9054
9055       if (decl_context == FIELD)
9056         {
9057           if (declarator == current_class_name)
9058             cp_pedwarn ("ANSI C++ forbids nested type `%D' with same name as enclosing class",
9059                         declarator);
9060           decl = build_lang_decl (TYPE_DECL, declarator, type);
9061           if (IS_SIGNATURE (current_class_type) && opaque_typedef)
9062             SIGNATURE_HAS_OPAQUE_TYPEDECLS (current_class_type) = 1;
9063         }
9064       else
9065         decl = build_decl (TYPE_DECL, declarator, type);
9066
9067       /* If the user declares "struct {...} foo" then `foo' will have
9068          an anonymous name.  Fill that name in now.  Nothing can
9069          refer to it, so nothing needs know about the name change.
9070          The TYPE_NAME field was filled in by build_struct_xref.  */
9071       if (type != error_mark_node
9072           && TYPE_NAME (type)
9073           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
9074           && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type)))
9075         {
9076           /* replace the anonymous name with the real name everywhere.  */
9077           lookup_tag_reverse (type, declarator);
9078           TYPE_NAME (type) = decl;
9079
9080           if (TYPE_LANG_SPECIFIC (type))
9081             TYPE_WAS_ANONYMOUS (type) = 1;
9082
9083           DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
9084           DECL_ASSEMBLER_NAME (decl)
9085             = get_identifier (build_overload_name (type, 1, 1));
9086         }
9087
9088       if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
9089         {
9090           cp_error_at ("typedef name may not be class-qualified", decl);
9091           return NULL_TREE;
9092         }
9093       else if (quals)
9094         {
9095           if (ctype == NULL_TREE)
9096             {
9097               if (TREE_CODE (type) != METHOD_TYPE)
9098                 cp_error_at ("invalid type qualifier for non-method type", decl);
9099               else
9100                 ctype = TYPE_METHOD_BASETYPE (type);
9101             }
9102           if (ctype != NULL_TREE)
9103             grok_method_quals (ctype, decl, quals);
9104         }
9105
9106       if (RIDBIT_SETP (RID_SIGNED, specbits)
9107           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
9108         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
9109
9110       if (RIDBIT_SETP (RID_MUTABLE, specbits))
9111         {
9112           error ("non-object member `%s' cannot be declared mutable", name);
9113         }
9114
9115       bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
9116                       inlinep, friendp, raises != NULL_TREE);
9117
9118       if (initialized)
9119         error ("typedef declaration includes an initializer");
9120
9121       return decl;
9122     }
9123
9124   /* Detect the case of an array type of unspecified size
9125      which came, as such, direct from a typedef name.
9126      We must copy the type, so that each identifier gets
9127      a distinct type, so that each identifier's size can be
9128      controlled separately by its own initializer.  */
9129
9130   if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
9131       && TYPE_DOMAIN (type) == NULL_TREE)
9132     {
9133       type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
9134     }
9135
9136   /* If this is a type name (such as, in a cast or sizeof),
9137      compute the type and return it now.  */
9138
9139   if (decl_context == TYPENAME)
9140     {
9141       /* Note that the grammar rejects storage classes
9142          in typenames, fields or parameters.  */
9143       if (constp || volatilep)
9144         if (IS_SIGNATURE (type))
9145           error ("`const' or `volatile' specified with signature type");
9146         else  
9147           type = cp_build_type_variant (type, constp, volatilep);
9148
9149       /* Special case: "friend class foo" looks like a TYPENAME context.  */
9150       if (friendp)
9151         {
9152           if (volatilep)
9153             {
9154               cp_error ("`volatile' specified for friend class declaration");
9155               volatilep = 0;
9156             }
9157           if (inlinep)
9158             {
9159               cp_error ("`inline' specified for friend class declaration");
9160               inlinep = 0;
9161             }
9162
9163           /* Only try to do this stuff if we didn't already give up.  */
9164           if (type != integer_type_node)
9165             {
9166               /* A friendly class?  */
9167               if (current_class_type)
9168                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
9169               else
9170                 error ("trying to make class `%s' a friend of global scope",
9171                        TYPE_NAME_STRING (type));
9172               type = void_type_node;
9173             }
9174         }
9175       else if (quals)
9176         {
9177           tree dummy = build_decl (TYPE_DECL, declarator, type);
9178           if (ctype == NULL_TREE)
9179             {
9180               my_friendly_assert (TREE_CODE (type) == METHOD_TYPE, 159);
9181               ctype = TYPE_METHOD_BASETYPE (type);
9182             }
9183           grok_method_quals (ctype, dummy, quals);
9184           type = TREE_TYPE (dummy);
9185         }
9186
9187       return type;
9188     }
9189   else if (declarator == NULL_TREE && decl_context != PARM
9190            && decl_context != CATCHPARM
9191            && TREE_CODE (type) != UNION_TYPE
9192            && ! bitfield)
9193     {
9194       cp_error ("abstract declarator `%T' used as declaration", type);
9195       declarator = make_anon_name ();
9196     }
9197
9198   /* `void' at top level (not within pointer)
9199      is allowed only in typedefs or type names.
9200      We don't complain about parms either, but that is because
9201      a better error message can be made later.  */
9202
9203   if (TYPE_MAIN_VARIANT (type) == void_type_node && decl_context != PARM)
9204     {
9205       if (! declarator)
9206         error ("unnamed variable or field declared void");
9207       else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
9208         {
9209           if (IDENTIFIER_OPNAME_P (declarator))
9210             my_friendly_abort (356);
9211           else
9212             error ("variable or field `%s' declared void", name);
9213         }
9214       else
9215         error ("variable or field declared void");
9216       type = integer_type_node;
9217     }
9218
9219   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
9220      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
9221
9222   {
9223     register tree decl;
9224
9225     if (decl_context == PARM)
9226       {
9227         if (ctype)
9228           error ("cannot use `::' in parameter declaration");
9229
9230         /* A parameter declared as an array of T is really a pointer to T.
9231            One declared as a function is really a pointer to a function.
9232            One declared as a member is really a pointer to member.  */
9233
9234         if (TREE_CODE (type) == ARRAY_TYPE)
9235           {
9236             /* Transfer const-ness of array into that of type pointed to.  */
9237             type = build_pointer_type
9238               (cp_build_type_variant (TREE_TYPE (type), constp, volatilep));
9239             volatilep = constp = 0;
9240           }
9241         else if (TREE_CODE (type) == FUNCTION_TYPE)
9242           type = build_pointer_type (type);
9243         else if (TREE_CODE (type) == OFFSET_TYPE)
9244           type = build_pointer_type (type);
9245         else if (type == void_type_node && declarator)
9246           {
9247             error ("declaration of `%s' as void", name);
9248             return NULL_TREE;
9249           }
9250
9251         decl = build_decl (PARM_DECL, declarator, complete_type (type));
9252
9253         bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
9254                         inlinep, friendp, raises != NULL_TREE);
9255         if (current_class_type
9256             && IS_SIGNATURE (current_class_type))
9257           {
9258             if (inlinep)
9259               error ("parameter of signature member function declared `inline'");
9260             if (RIDBIT_SETP (RID_AUTO, specbits))
9261               error ("parameter of signature member function declared `auto'");
9262             if (RIDBIT_SETP (RID_REGISTER, specbits))
9263               error ("parameter of signature member function declared `register'");
9264           }
9265
9266         /* Compute the type actually passed in the parmlist,
9267            for the case where there is no prototype.
9268            (For example, shorts and chars are passed as ints.)
9269            When there is a prototype, this is overridden later.  */
9270
9271         DECL_ARG_TYPE (decl) = type_promotes_to (type);
9272       }
9273     else if (decl_context == FIELD)
9274       {
9275         if (type == error_mark_node)
9276           {
9277             /* Happens when declaring arrays of sizes which
9278                are error_mark_node, for example.  */
9279             decl = NULL_TREE;
9280           }
9281         else if (TREE_CODE (type) == FUNCTION_TYPE)
9282           {
9283             int publicp = 0;
9284
9285             /* We catch the others as conflicts with the builtin
9286                typedefs.  */
9287             if (friendp && declarator == ridpointers[(int) RID_SIGNED])
9288               {
9289                 cp_error ("function `%D' cannot be declared friend",
9290                           declarator);
9291                 friendp = 0;
9292               }
9293
9294             if (friendp == 0)
9295               {
9296                 if (ctype == NULL_TREE)
9297                   ctype = current_class_type;
9298
9299                 if (ctype == NULL_TREE)
9300                   {
9301                     cp_error ("can't make `%D' into a method -- not in a class",
9302                               declarator);
9303                     return void_type_node;
9304                   }
9305
9306                 /* ``A union may [ ... ] not [ have ] virtual functions.''
9307                    ARM 9.5 */
9308                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
9309                   {
9310                     cp_error ("function `%D' declared virtual inside a union",
9311                               declarator);
9312                     return void_type_node;
9313                   }
9314
9315                 if (declarator == ansi_opname[(int) NEW_EXPR]
9316                     || declarator == ansi_opname[(int) VEC_NEW_EXPR]
9317                     || declarator == ansi_opname[(int) DELETE_EXPR]
9318                     || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
9319                   {
9320                     if (virtualp)
9321                       {
9322                         cp_error ("`%D' cannot be declared virtual, since it is always static",
9323                                   declarator);
9324                         virtualp = 0;
9325                       }
9326                   }
9327                 else if (staticp < 2)
9328                   type = build_cplus_method_type (build_type_variant (ctype, constp, volatilep),
9329                                                   TREE_TYPE (type), TYPE_ARG_TYPES (type));
9330               }
9331
9332             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
9333             publicp = (! friendp || ! staticp);
9334             decl = grokfndecl (ctype, type, declarator,
9335                                virtualp, flags, quals, raises, attrlist,
9336                                friendp ? -1 : 0, publicp, inlinep,
9337                                funcdef_flag);
9338             if (decl == NULL_TREE)
9339               return NULL_TREE;
9340 #if 0
9341             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
9342             /* The decl and setting of decl_machine_attr is also turned off.  */
9343             decl = build_decl_attribute_variant (decl, decl_machine_attr);
9344 #endif
9345
9346             if (explicitp == 2)
9347               DECL_NONCONVERTING_P (decl) = 1;
9348           }
9349         else if (TREE_CODE (type) == METHOD_TYPE)
9350           {
9351             /* We only get here for friend declarations of
9352                members of other classes.  */
9353             /* All method decls are public, so tell grokfndecl to set
9354                TREE_PUBLIC, also.  */
9355             decl = grokfndecl (ctype, type, declarator,
9356                                virtualp, flags, quals, raises, attrlist,
9357                                friendp ? -1 : 0, 1, 0, funcdef_flag);
9358             if (decl == NULL_TREE)
9359               return NULL_TREE;
9360           }
9361         else if (!staticp && ! processing_template_decl
9362                  && TYPE_SIZE (complete_type (type)) == NULL_TREE
9363                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
9364           {
9365             if (declarator)
9366               cp_error ("field `%D' has incomplete type", declarator);
9367             else
9368               cp_error ("name `%T' has incomplete type", type);
9369
9370             /* If we're instantiating a template, tell them which
9371                instantiation made the field's type be incomplete.  */
9372             if (current_class_type
9373                 && TYPE_NAME (current_class_type)
9374                 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
9375                 && declspecs && TREE_VALUE (declspecs)
9376                 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
9377               cp_error ("  in instantiation of template `%T'",
9378                         current_class_type);
9379
9380             type = error_mark_node;
9381             decl = NULL_TREE;
9382           }
9383         else
9384           {
9385             if (friendp)
9386               {
9387                 error ("`%s' is neither function nor method; cannot be declared friend",
9388                        IDENTIFIER_POINTER (declarator));
9389                 friendp = 0;
9390               }
9391             decl = NULL_TREE;
9392           }
9393
9394         if (friendp)
9395           {
9396             /* Friends are treated specially.  */
9397             if (ctype == current_class_type)
9398               warning ("member functions are implicitly friends of their class");
9399             else
9400               {
9401                 tree t = NULL_TREE;
9402                 if (decl && DECL_NAME (decl))
9403                   t = do_friend (ctype, declarator, decl,
9404                                  last_function_parms, flags, quals,
9405                                  funcdef_flag);
9406                 if (t && funcdef_flag)
9407                   return t;
9408                 
9409                 return void_type_node;
9410               }
9411           }
9412
9413         /* Structure field.  It may not be a function, except for C++ */
9414
9415         if (decl == NULL_TREE)
9416           {
9417             if (initialized)
9418               {
9419                 /* Motion 10 at San Diego: If a static const integral data
9420                    member is initialized with an integral constant
9421                    expression, the initializer may appear either in the
9422                    declaration (within the class), or in the definition,
9423                    but not both.  If it appears in the class, the member is
9424                    a member constant.  The file-scope definition is always
9425                    required.  */
9426                 if (staticp)
9427                   {
9428                     if (pedantic)
9429                       {
9430                         if (! constp)
9431                           cp_pedwarn ("ANSI C++ forbids in-class initialization of non-const static member `%D'",
9432                                       declarator);
9433
9434                         else if (! INTEGRAL_TYPE_P (type))
9435                           cp_pedwarn ("ANSI C++ forbids member constant `%D' of non-integral type `%T'", declarator, type);
9436                       }
9437                   }
9438
9439                 /* Note that initialization of const members is prohibited
9440                    by the draft ANSI standard, though it appears to be in
9441                    common practice.  12.6.2: The argument list is used to
9442                    initialize the named nonstatic member....  This (or an
9443                    initializer list) is the only way to initialize
9444                    nonstatic const and reference members.  */
9445                 else if (pedantic || ! constp)
9446                   cp_pedwarn ("ANSI C++ forbids initialization of %s `%D'",
9447                               constp ? "const member" : "member", declarator);
9448               }
9449
9450             if (staticp || (constp && initialized))
9451               {
9452                 /* ANSI C++ Apr '95 wp 9.2 */
9453                 if (staticp && declarator == current_class_name)
9454                   cp_pedwarn ("ANSI C++ forbids static member `%D' with same name as enclosing class",
9455                               declarator);
9456
9457                 /* C++ allows static class members.
9458                    All other work for this is done by grokfield.
9459                    This VAR_DECL is built by build_lang_field_decl.
9460                    All other VAR_DECLs are built by build_decl.  */
9461                 decl = build_lang_field_decl (VAR_DECL, declarator, type);
9462                 TREE_STATIC (decl) = 1;
9463                 /* In class context, 'static' means public access.  */
9464                 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = !!staticp;
9465               }
9466             else
9467               {
9468                 decl = build_lang_field_decl (FIELD_DECL, declarator, type);
9469                 if (RIDBIT_SETP (RID_MUTABLE, specbits))
9470                   {
9471                     DECL_MUTABLE_P (decl) = 1;
9472                     RIDBIT_RESET (RID_MUTABLE, specbits);
9473                   }
9474               }
9475
9476             bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
9477                             inlinep, friendp, raises != NULL_TREE);
9478           }
9479       }
9480     else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
9481       {
9482         tree original_name = declarator;
9483         int publicp = 0;
9484
9485         if (! declarator)
9486           return NULL_TREE;
9487
9488         if (RIDBIT_SETP (RID_AUTO, specbits))
9489           error ("storage class `auto' invalid for function `%s'", name);
9490         else if (RIDBIT_SETP (RID_REGISTER, specbits))
9491           error ("storage class `register' invalid for function `%s'", name);
9492
9493         /* Function declaration not at top level.
9494            Storage classes other than `extern' are not allowed
9495            and `extern' makes no difference.  */
9496         if (! toplevel_bindings_p ()
9497             && (RIDBIT_SETP (RID_STATIC, specbits)
9498                 || RIDBIT_SETP (RID_INLINE, specbits))
9499             && pedantic)
9500           {
9501             if (RIDBIT_SETP (RID_STATIC, specbits))
9502               pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
9503             else
9504               pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
9505           }
9506         
9507         if (ctype == NULL_TREE)
9508           {
9509             if (virtualp)
9510               {
9511                 error ("virtual non-class function `%s'", name);
9512                 virtualp = 0;
9513               }
9514
9515             if (current_lang_name == lang_name_cplusplus
9516                 && ! processing_template_decl
9517                 && ! (IDENTIFIER_LENGTH (original_name) == 4
9518                       && IDENTIFIER_POINTER (original_name)[0] == 'm'
9519                       && strcmp (IDENTIFIER_POINTER (original_name), "main") == 0)
9520                 && ! (IDENTIFIER_LENGTH (original_name) > 10
9521                       && IDENTIFIER_POINTER (original_name)[0] == '_'
9522                       && IDENTIFIER_POINTER (original_name)[1] == '_'
9523                       && strncmp (IDENTIFIER_POINTER (original_name)+2, "builtin_", 8) == 0))
9524               /* Plain overloading: will not be grok'd by grokclassfn.  */
9525               declarator = build_decl_overload (dname, TYPE_ARG_TYPES (type), 0);
9526           }
9527         else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
9528           type = build_cplus_method_type (build_type_variant (ctype, constp, volatilep),
9529                                           TREE_TYPE (type), TYPE_ARG_TYPES (type));
9530
9531         /* Record presence of `static'.  */
9532         publicp = (ctype != NULL_TREE
9533                    || RIDBIT_SETP (RID_EXTERN, specbits)
9534                    || !RIDBIT_SETP (RID_STATIC, specbits));
9535
9536         decl = grokfndecl (ctype, type, original_name,
9537                            virtualp, flags, quals, raises, attrlist,
9538                            friendp ? 2 : 1,
9539                            publicp, inlinep, funcdef_flag);
9540         if (decl == NULL_TREE)
9541           return NULL_TREE;
9542
9543         if (ctype == NULL_TREE && DECL_LANGUAGE (decl) != lang_c)
9544           DECL_ASSEMBLER_NAME (decl) = current_namespace_id (declarator);
9545
9546         if (staticp == 1)
9547           {
9548             int illegal_static = 0;
9549
9550             /* Don't allow a static member function in a class, and forbid
9551                declaring main to be static.  */
9552             if (TREE_CODE (type) == METHOD_TYPE)
9553               {
9554                 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
9555                 illegal_static = 1;
9556               }
9557             else if (current_function_decl)
9558               {
9559                 /* FIXME need arm citation */
9560                 error ("cannot declare static function inside another function");
9561                 illegal_static = 1;
9562               }
9563
9564             if (illegal_static)
9565               {
9566                 staticp = 0;
9567                 RIDBIT_RESET (RID_STATIC, specbits);
9568               }
9569           }
9570       }
9571     else
9572       {
9573         /* It's a variable.  */
9574
9575         if (decl_context == CATCHPARM)
9576           {
9577             if (ctype)
9578               {
9579                 ctype = NULL_TREE;
9580                 error ("cannot use `::' in parameter declaration");
9581               }
9582
9583             /* A parameter declared as an array of T is really a pointer to T.
9584                One declared as a function is really a pointer to a function.
9585                One declared as a member is really a pointer to member.  */
9586
9587             if (TREE_CODE (type) == ARRAY_TYPE)
9588               {
9589                 /* Transfer const-ness of array into that of type
9590                    pointed to.  */
9591                 type = build_pointer_type
9592                   (cp_build_type_variant (TREE_TYPE (type), constp, volatilep));
9593                 volatilep = constp = 0;
9594               }
9595             else if (TREE_CODE (type) == FUNCTION_TYPE)
9596               type = build_pointer_type (type);
9597             else if (TREE_CODE (type) == OFFSET_TYPE)
9598               type = build_pointer_type (type);
9599           }
9600
9601         /* An uninitialized decl with `extern' is a reference.  */
9602         decl = grokvardecl (type, declarator, &specbits, initialized, constp);
9603         bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
9604                         inlinep, friendp, raises != NULL_TREE);
9605
9606         if (ctype)
9607           {
9608             DECL_CONTEXT (decl) = ctype;
9609             if (staticp == 1)
9610               {
9611                 cp_pedwarn ("static member `%D' re-declared as static", decl);
9612                 staticp = 0;
9613                 RIDBIT_RESET (RID_STATIC, specbits);
9614               }
9615             if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
9616               {
9617                 cp_error ("static member `%D' declared `register'", decl);
9618                 RIDBIT_RESET (RID_REGISTER, specbits);
9619               }
9620             if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
9621               {
9622                 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
9623                             decl);
9624                 RIDBIT_RESET (RID_EXTERN, specbits);
9625               }
9626           }
9627       }
9628
9629     if (RIDBIT_SETP (RID_MUTABLE, specbits))
9630       {
9631         error ("`%s' cannot be declared mutable", name);
9632       }
9633
9634     /* Record `register' declaration for warnings on &
9635        and in case doing stupid register allocation.  */
9636
9637     if (RIDBIT_SETP (RID_REGISTER, specbits))
9638       DECL_REGISTER (decl) = 1;
9639
9640     if (RIDBIT_SETP (RID_EXTERN, specbits))
9641       DECL_THIS_EXTERN (decl) = 1;
9642
9643     if (RIDBIT_SETP (RID_STATIC, specbits))
9644       DECL_THIS_STATIC (decl) = 1;
9645
9646     /* Record constancy and volatility.  */
9647
9648     if (constp)
9649       TREE_READONLY (decl) = TREE_CODE (type) != REFERENCE_TYPE;
9650     if (volatilep)
9651       {
9652         TREE_SIDE_EFFECTS (decl) = 1;
9653         TREE_THIS_VOLATILE (decl) = 1;
9654       }
9655
9656     return decl;
9657   }
9658 }
9659 \f
9660 /* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
9661    An empty exprlist is a parmlist.  An exprlist which
9662    contains only identifiers at the global level
9663    is a parmlist.  Otherwise, it is an exprlist.  */
9664
9665 int
9666 parmlist_is_exprlist (exprs)
9667      tree exprs;
9668 {
9669   if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
9670     return 0;
9671
9672   if (toplevel_bindings_p ())
9673     {
9674       /* At the global level, if these are all identifiers,
9675          then it is a parmlist.  */
9676       while (exprs)
9677         {
9678           if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
9679             return 1;
9680           exprs = TREE_CHAIN (exprs);
9681         }
9682       return 0;
9683     }
9684   return 1;
9685 }
9686
9687 /* Subroutine of `grokparms'.  In a fcn definition, arg types must
9688    be complete.
9689
9690    C++: also subroutine of `start_function'.  */
9691
9692 static void
9693 require_complete_types_for_parms (parms)
9694      tree parms;
9695 {
9696   if (processing_template_decl)
9697     return;
9698
9699   while (parms)
9700     {
9701       tree type = TREE_TYPE (parms);
9702       if (TYPE_SIZE (complete_type (type)) == NULL_TREE)
9703         {
9704           if (DECL_NAME (parms))
9705             error ("parameter `%s' has incomplete type",
9706                    IDENTIFIER_POINTER (DECL_NAME (parms)));
9707           else
9708             error ("parameter has incomplete type");
9709           TREE_TYPE (parms) = error_mark_node;
9710         }
9711 #if 0
9712       /* If the arg types are incomplete in a declaration,
9713          they must include undefined tags.
9714          These tags can never be defined in the scope of the declaration,
9715          so the types can never be completed,
9716          and no call can be compiled successfully.  */
9717       /* This is not the right behavior for C++, but not having
9718          it is also probably wrong.  */
9719       else
9720         {
9721           /* Now warn if is a pointer to an incomplete type.  */
9722           while (TREE_CODE (type) == POINTER_TYPE
9723                  || TREE_CODE (type) == REFERENCE_TYPE)
9724             type = TREE_TYPE (type);
9725           type = TYPE_MAIN_VARIANT (type);
9726           if (TYPE_SIZE (type) == NULL_TREE)
9727             {
9728               if (DECL_NAME (parm) != NULL_TREE)
9729                 warning ("parameter `%s' points to incomplete type",
9730                          IDENTIFIER_POINTER (DECL_NAME (parm)));
9731               else
9732                 warning ("parameter points to incomplete type");
9733             }
9734         }
9735 #endif
9736       parms = TREE_CHAIN (parms);
9737     }
9738 }
9739
9740 /* Decode the list of parameter types for a function type.
9741    Given the list of things declared inside the parens,
9742    return a list of types.
9743
9744    The list we receive can have three kinds of elements:
9745    an IDENTIFIER_NODE for names given without types,
9746    a TREE_LIST node for arguments given as typespecs or names with typespecs,
9747    or void_type_node, to mark the end of an argument list
9748    when additional arguments are not permitted (... was not used).
9749
9750    FUNCDEF_FLAG is nonzero for a function definition, 0 for
9751    a mere declaration.  A nonempty identifier-list gets an error message
9752    when FUNCDEF_FLAG is zero.
9753    If FUNCDEF_FLAG is 1, then parameter types must be complete.
9754    If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
9755
9756    If all elements of the input list contain types,
9757    we return a list of the types.
9758    If all elements contain no type (except perhaps a void_type_node
9759    at the end), we return a null list.
9760    If some have types and some do not, it is an error, and we
9761    return a null list.
9762
9763    Also set last_function_parms to either
9764    a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
9765    A list of names is converted to a chain of PARM_DECLs
9766    by store_parm_decls so that ultimately it is always a chain of decls.
9767
9768    Note that in C++, parameters can take default values.  These default
9769    values are in the TREE_PURPOSE field of the TREE_LIST.  It is
9770    an error to specify default values which are followed by parameters
9771    that have no default values, or an ELLIPSES.  For simplicities sake,
9772    only parameters which are specified with their types can take on
9773    default values.  */
9774
9775 static tree
9776 grokparms (first_parm, funcdef_flag)
9777      tree first_parm;
9778      int funcdef_flag;
9779 {
9780   tree result = NULL_TREE;
9781   tree decls = NULL_TREE;
9782
9783   if (first_parm != NULL_TREE
9784       && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
9785     {
9786       if (! funcdef_flag)
9787         pedwarn ("parameter names (without types) in function declaration");
9788       last_function_parms = first_parm;
9789       return NULL_TREE;
9790     }
9791   else if (first_parm != NULL_TREE
9792            && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
9793            && TREE_VALUE (first_parm) != void_type_node)
9794     my_friendly_abort (145);
9795   else
9796     {
9797       /* Types were specified.  This is a list of declarators
9798          each represented as a TREE_LIST node.  */
9799       register tree parm, chain;
9800       int any_init = 0, any_error = 0;
9801
9802       if (first_parm != NULL_TREE)
9803         {
9804           tree last_result = NULL_TREE;
9805           tree last_decl = NULL_TREE;
9806
9807           for (parm = first_parm; parm != NULL_TREE; parm = chain)
9808             {
9809               tree type, list_node = parm;
9810               register tree decl = TREE_VALUE (parm);
9811               tree init = TREE_PURPOSE (parm);
9812
9813               chain = TREE_CHAIN (parm);
9814               /* @@ weak defense against parse errors.  */
9815               if (decl != void_type_node && TREE_CODE (decl) != TREE_LIST)
9816                 {
9817                   /* Give various messages as the need arises.  */
9818                   if (TREE_CODE (decl) == STRING_CST)
9819                     cp_error ("invalid string constant `%E'", decl);
9820                   else if (TREE_CODE (decl) == INTEGER_CST)
9821                     error ("invalid integer constant in parameter list, did you forget to give parameter name?");
9822                   continue;
9823                 }
9824
9825               if (decl != void_type_node)
9826                 {
9827                   decl = grokdeclarator (TREE_VALUE (decl),
9828                                          TREE_PURPOSE (decl),
9829                                          PARM, init != NULL_TREE,
9830                                          NULL_TREE);
9831                   if (! decl)
9832                     continue;
9833                   type = TREE_TYPE (decl);
9834                   if (TYPE_MAIN_VARIANT (type) == void_type_node)
9835                     decl = void_type_node;
9836                   else if (TREE_CODE (type) == METHOD_TYPE)
9837                     {
9838                       if (DECL_NAME (decl))
9839                         /* Cannot use the decl here because
9840                            we don't have DECL_CONTEXT set up yet.  */
9841                         cp_error ("parameter `%D' invalidly declared method type",
9842                                   DECL_NAME (decl));
9843                       else
9844                         error ("parameter invalidly declared method type");
9845                       type = build_pointer_type (type);
9846                       TREE_TYPE (decl) = type;
9847                     }
9848                   else if (TREE_CODE (type) == OFFSET_TYPE)
9849                     {
9850                       if (DECL_NAME (decl))
9851                         cp_error ("parameter `%D' invalidly declared offset type",
9852                                   DECL_NAME (decl));
9853                       else
9854                         error ("parameter invalidly declared offset type");
9855                       type = build_pointer_type (type);
9856                       TREE_TYPE (decl) = type;
9857                     }
9858                   else if (TREE_CODE (type) == RECORD_TYPE
9859                            && TYPE_LANG_SPECIFIC (type)
9860                            && CLASSTYPE_ABSTRACT_VIRTUALS (type))
9861                     {
9862                       abstract_virtuals_error (decl, type);
9863                       any_error = 1;  /* seems like a good idea */
9864                     }
9865                   else if (TREE_CODE (type) == RECORD_TYPE
9866                            && TYPE_LANG_SPECIFIC (type)
9867                            && IS_SIGNATURE (type))
9868                     {
9869                       signature_error (decl, type);
9870                       any_error = 1;  /* seems like a good idea */
9871                     }
9872                 }
9873
9874               if (decl == void_type_node)
9875                 {
9876                   if (result == NULL_TREE)
9877                     {
9878                       result = void_list_node;
9879                       last_result = result;
9880                     }
9881                   else
9882                     {
9883                       TREE_CHAIN (last_result) = void_list_node;
9884                       last_result = void_list_node;
9885                     }
9886                   if (chain
9887                       && (chain != void_list_node || TREE_CHAIN (chain)))
9888                     error ("`void' in parameter list must be entire list");
9889                   break;
9890                 }
9891
9892               /* Since there is a prototype, args are passed in their own types.  */
9893               DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
9894 #ifdef PROMOTE_PROTOTYPES
9895               if ((TREE_CODE (type) == INTEGER_TYPE
9896                    || TREE_CODE (type) == ENUMERAL_TYPE)
9897                   && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
9898                 DECL_ARG_TYPE (decl) = integer_type_node;
9899 #endif
9900               if (!any_error)
9901                 {
9902                   if (init)
9903                     {
9904                       any_init++;
9905                       if (TREE_CODE (init) == SAVE_EXPR)
9906                         PARM_DECL_EXPR (init) = 1;
9907                       else if (processing_template_decl)
9908                         ;
9909                       /* Unparsed default arg from in-class decl.  */
9910                       else if (TREE_CODE (init) == DEFAULT_ARG)
9911                         ;
9912                       else if (TREE_CODE (init) == VAR_DECL
9913                                || TREE_CODE (init) == PARM_DECL)
9914                         {
9915                           if (IDENTIFIER_LOCAL_VALUE (DECL_NAME (init)))
9916                             {
9917                               /* ``Local variables may not be used in default
9918                                  argument expressions.'' dpANSI C++ 8.2.6 */
9919                               /* If extern int i; within a function is not
9920                                  considered a local variable, then this code is
9921                                  wrong.  */
9922                               cp_error ("local variable `%D' may not be used as a default argument", init);
9923                               any_error = 1;
9924                             }
9925                           else if (TREE_READONLY_DECL_P (init))
9926                             init = decl_constant_value (init);
9927                         }
9928                       else
9929                         init = require_instantiated_type (type, init, integer_zero_node);
9930                       if (! processing_template_decl
9931                           && TREE_CODE (init) != DEFAULT_ARG
9932                           && ! can_convert_arg (type, TREE_TYPE (init), init))
9933                         cp_pedwarn ("invalid type `%T' for default argument to `%#D'",
9934                                     TREE_TYPE (init), decl);
9935                     }
9936                 }
9937               else
9938                 init = NULL_TREE;
9939
9940               if (decls == NULL_TREE)
9941                 {
9942                   decls = decl;
9943                   last_decl = decls;
9944                 }
9945               else
9946                 {
9947                   TREE_CHAIN (last_decl) = decl;
9948                   last_decl = decl;
9949                 }
9950               if (TREE_PERMANENT (list_node))
9951                 {
9952                   TREE_PURPOSE (list_node) = init;
9953                   TREE_VALUE (list_node) = type;
9954                   TREE_CHAIN (list_node) = NULL_TREE;
9955                 }
9956               else
9957                 list_node = saveable_tree_cons (init, type, NULL_TREE);
9958               if (result == NULL_TREE)
9959                 {
9960                   result = list_node;
9961                   last_result = result;
9962                 }
9963               else
9964                 {
9965                   TREE_CHAIN (last_result) = list_node;
9966                   last_result = list_node;
9967                 }
9968             }
9969           if (last_result)
9970             TREE_CHAIN (last_result) = NULL_TREE;
9971           /* If there are no parameters, and the function does not end
9972              with `...', then last_decl will be NULL_TREE.  */
9973           if (last_decl != NULL_TREE)
9974             TREE_CHAIN (last_decl) = NULL_TREE;
9975         }
9976     }
9977
9978   last_function_parms = decls;
9979
9980   /* In a fcn definition, arg types must be complete.  */
9981   if (funcdef_flag > 0)
9982     require_complete_types_for_parms (last_function_parms);
9983
9984   return result;
9985 }
9986
9987 /* Called from the parser to update an element of TYPE_ARG_TYPES for some
9988    FUNCTION_TYPE with the newly parsed version of its default argument, which
9989    was previously digested as text.  See snarf_defarg et al in lex.c.  */
9990
9991 void
9992 replace_defarg (arg, init)
9993      tree arg, init;
9994 {
9995   if (! processing_template_decl
9996       && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
9997     cp_pedwarn ("invalid type `%T' for default argument to `%T'",
9998                 TREE_TYPE (init), TREE_VALUE (arg));
9999   TREE_PURPOSE (arg) = init;
10000 }
10001 \f
10002 int
10003 copy_args_p (d)
10004      tree d;
10005 {
10006   tree t = FUNCTION_ARG_CHAIN (d);
10007   if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
10008       && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
10009           == DECL_CLASS_CONTEXT (d))
10010       && (TREE_CHAIN (t) == NULL_TREE
10011           || TREE_CHAIN (t) == void_list_node
10012           || TREE_PURPOSE (TREE_CHAIN (t))))
10013     return 1;
10014   return 0;
10015 }
10016
10017 /* These memoizing functions keep track of special properties which
10018    a class may have.  `grok_ctor_properties' notices whether a class
10019    has a constructor of the form X(X&), and also complains
10020    if the class has a constructor of the form X(X).
10021    `grok_op_properties' takes notice of the various forms of
10022    operator= which are defined, as well as what sorts of type conversion
10023    may apply.  Both functions take a FUNCTION_DECL as an argument.  */
10024
10025 int
10026 grok_ctor_properties (ctype, decl)
10027      tree ctype, decl;
10028 {
10029   tree parmtypes = FUNCTION_ARG_CHAIN (decl);
10030   tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
10031
10032   /* When a type has virtual baseclasses, a magical first int argument is
10033      added to any ctor so we can tell if the class has been initialized
10034      yet.  This could screw things up in this function, so we deliberately
10035      ignore the leading int if we're in that situation.  */
10036   if (parmtypes
10037       && TREE_VALUE (parmtypes) == integer_type_node
10038       && TYPE_USES_VIRTUAL_BASECLASSES (ctype))
10039     {
10040       parmtypes = TREE_CHAIN (parmtypes);
10041       parmtype = TREE_VALUE (parmtypes);
10042     }
10043
10044   if (TREE_CODE (parmtype) == REFERENCE_TYPE
10045       && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype)
10046     {
10047       if (TREE_CHAIN (parmtypes) == NULL_TREE
10048           || TREE_CHAIN (parmtypes) == void_list_node
10049           || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
10050         {
10051           TYPE_HAS_INIT_REF (ctype) = 1;
10052           if (TYPE_READONLY (TREE_TYPE (parmtype)))
10053             TYPE_HAS_CONST_INIT_REF (ctype) = 1;
10054         }
10055       else
10056         TYPE_GETS_INIT_AGGR (ctype) = 1;
10057     }
10058   else if (TYPE_MAIN_VARIANT (parmtype) == ctype)
10059     {
10060       if (TREE_CHAIN (parmtypes) != NULL_TREE
10061           && TREE_CHAIN (parmtypes) == void_list_node)
10062         {
10063           cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
10064                     ctype, ctype);
10065           SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
10066
10067           return 0;
10068         }
10069       else
10070         TYPE_GETS_INIT_AGGR (ctype) = 1;
10071     }
10072   else if (TREE_CODE (parmtype) == VOID_TYPE
10073            || TREE_PURPOSE (parmtypes) != NULL_TREE)
10074     TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
10075
10076   return 1;
10077 }
10078
10079 /* An operator with this name can be either unary or binary.  */
10080
10081 static int
10082 ambi_op_p (name)
10083      tree name;
10084 {
10085   return (name == ansi_opname [(int) INDIRECT_REF]
10086           || name == ansi_opname [(int) ADDR_EXPR]
10087           || name == ansi_opname [(int) NEGATE_EXPR]
10088           || name == ansi_opname[(int) POSTINCREMENT_EXPR]
10089           || name == ansi_opname[(int) POSTDECREMENT_EXPR]
10090           || name == ansi_opname [(int) CONVERT_EXPR]);
10091 }
10092
10093 /* An operator with this name can only be unary.  */
10094
10095 static int
10096 unary_op_p (name)
10097      tree name;
10098 {
10099   return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
10100           || name == ansi_opname [(int) BIT_NOT_EXPR]
10101           || name == ansi_opname [(int) COMPONENT_REF]
10102           || OPERATOR_TYPENAME_P (name));
10103 }
10104
10105 /* Do a little sanity-checking on how they declared their operator.  */
10106
10107 void
10108 grok_op_properties (decl, virtualp, friendp)
10109      tree decl;
10110      int virtualp, friendp;
10111 {
10112   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
10113   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
10114   tree name = DECL_NAME (decl);
10115
10116   if (current_class_type == NULL_TREE)
10117     friendp = 1;
10118
10119   if (! friendp)
10120     {
10121       if (name == ansi_opname[(int) MODIFY_EXPR])
10122         TYPE_HAS_ASSIGNMENT (current_class_type) = 1;
10123       else if (name == ansi_opname[(int) CALL_EXPR])
10124         TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
10125       else if (name == ansi_opname[(int) ARRAY_REF])
10126         TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
10127       else if (name == ansi_opname[(int) COMPONENT_REF]
10128                || name == ansi_opname[(int) MEMBER_REF])
10129         TYPE_OVERLOADS_ARROW (current_class_type) = 1;
10130       else if (name == ansi_opname[(int) NEW_EXPR])
10131         TYPE_GETS_NEW (current_class_type) |= 1;
10132       else if (name == ansi_opname[(int) DELETE_EXPR])
10133         TYPE_GETS_DELETE (current_class_type) |= 1;
10134       else if (name == ansi_opname[(int) VEC_NEW_EXPR])
10135         TYPE_GETS_NEW (current_class_type) |= 2;
10136       else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
10137         TYPE_GETS_DELETE (current_class_type) |= 2;
10138     }
10139
10140   if (name == ansi_opname[(int) NEW_EXPR]
10141       || name == ansi_opname[(int) VEC_NEW_EXPR])
10142     {
10143       /* When the compiler encounters the definition of A::operator new, it
10144          doesn't look at the class declaration to find out if it's static.  */
10145       if (methodp)
10146         revert_static_member_fn (&decl, NULL, NULL);
10147      
10148       /* Take care of function decl if we had syntax errors.  */
10149       if (argtypes == NULL_TREE)
10150         TREE_TYPE (decl)
10151           = build_function_type (ptr_type_node,
10152                                  hash_tree_chain (integer_type_node,
10153                                                   void_list_node));
10154       else
10155         TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
10156     }
10157   else if (name == ansi_opname[(int) DELETE_EXPR]
10158            || name == ansi_opname[(int) VEC_DELETE_EXPR])
10159     {
10160       if (methodp)
10161         revert_static_member_fn (&decl, NULL, NULL);
10162      
10163       if (argtypes == NULL_TREE)
10164         TREE_TYPE (decl)
10165           = build_function_type (void_type_node,
10166                                  hash_tree_chain (ptr_type_node,
10167                                                   void_list_node));
10168       else
10169         {
10170           TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
10171
10172           if (! friendp && name == ansi_opname[(int) VEC_DELETE_EXPR]
10173               && (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
10174                   != void_list_node))
10175             TYPE_VEC_DELETE_TAKES_SIZE (current_class_type) = 1;
10176         }
10177     }
10178   else
10179     {
10180       /* An operator function must either be a non-static member function
10181          or have at least one parameter of a class, a reference to a class,
10182          an enumeration, or a reference to an enumeration.  13.4.0.6 */
10183       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
10184         {
10185           if (OPERATOR_TYPENAME_P (name)
10186               || name == ansi_opname[(int) CALL_EXPR]
10187               || name == ansi_opname[(int) MODIFY_EXPR]
10188               || name == ansi_opname[(int) COMPONENT_REF]
10189               || name == ansi_opname[(int) ARRAY_REF])
10190             cp_error ("`%D' must be a nonstatic member function", decl);
10191           else
10192             {
10193               tree p = argtypes;
10194
10195               if (DECL_STATIC_FUNCTION_P (decl))
10196                 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
10197
10198               if (p)
10199                 for (; TREE_VALUE (p) != void_type_node ; p = TREE_CHAIN (p))
10200                   {
10201                     tree arg = TREE_VALUE (p);
10202                     if (TREE_CODE (arg) == REFERENCE_TYPE)
10203                       arg = TREE_TYPE (arg);
10204
10205                     /* This lets bad template code slip through.  */
10206                     if (IS_AGGR_TYPE (arg)
10207                         || TREE_CODE (arg) == ENUMERAL_TYPE
10208                         || TREE_CODE (arg) == TEMPLATE_TYPE_PARM)
10209                       goto foundaggr;
10210                   }
10211               cp_error
10212                 ("`%D' must have an argument of class or enumerated type",
10213                  decl);
10214             foundaggr:
10215               ;
10216             }
10217         }
10218       
10219       if (name == ansi_opname[(int) CALL_EXPR]
10220           || name == ansi_opname[(int) METHOD_CALL_EXPR])
10221         return;                 /* no restrictions on args */
10222
10223       if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
10224         {
10225           tree t = TREE_TYPE (name);
10226           if (TREE_CODE (t) == VOID_TYPE)
10227             pedwarn ("void is not a valid type conversion operator");
10228           else if (! friendp)
10229             {
10230               int ref = (TREE_CODE (t) == REFERENCE_TYPE);
10231               char *what = 0;
10232               if (ref)
10233                 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
10234
10235               if (t == current_class_type)
10236                 what = "the same type";
10237               /* Don't force t to be complete here.  */
10238               else if (IS_AGGR_TYPE (t)
10239                        && TYPE_SIZE (t)
10240                        && DERIVED_FROM_P (t, current_class_type))
10241                 what = "a base class";
10242
10243               if (what)
10244                 warning ("conversion to %s%s will never use a type conversion operator",
10245                          ref ? "a reference to " : "", what);
10246             }
10247         }
10248
10249       if (name == ansi_opname[(int) MODIFY_EXPR])
10250         {
10251           tree parmtype;
10252
10253           if (list_length (argtypes) != 3 && methodp)
10254             {
10255               cp_error ("`%D' must take exactly one argument", decl);
10256               return;
10257             }
10258           parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
10259
10260           if (copy_assignment_arg_p (parmtype, virtualp)
10261               && ! friendp)
10262             {
10263               TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
10264               if (TREE_CODE (parmtype) != REFERENCE_TYPE
10265                   || TYPE_READONLY (TREE_TYPE (parmtype)))
10266                 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
10267             }
10268         }
10269       else if (name == ansi_opname[(int) COND_EXPR])
10270         {
10271           /* 13.4.0.3 */
10272           pedwarn ("ANSI C++ prohibits overloading operator ?:");
10273           if (list_length (argtypes) != 4)
10274             cp_error ("`%D' must take exactly three arguments", decl);
10275         }         
10276       else if (ambi_op_p (name))
10277         {
10278           if (list_length (argtypes) == 2)
10279             /* prefix */;
10280           else if (list_length (argtypes) == 3)
10281             {
10282               if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
10283                    || name == ansi_opname[(int) POSTDECREMENT_EXPR])
10284                   && ! processing_template_decl
10285                   && TREE_VALUE (TREE_CHAIN (argtypes)) != integer_type_node)
10286                 {
10287                   if (methodp)
10288                     cp_error ("postfix `%D' must take `int' as its argument",
10289                               decl);
10290                   else
10291                     cp_error
10292                       ("postfix `%D' must take `int' as its second argument",
10293                        decl);
10294                 }
10295             }
10296           else
10297             {
10298               if (methodp)
10299                 cp_error ("`%D' must take either zero or one argument", decl);
10300               else
10301                 cp_error ("`%D' must take either one or two arguments", decl);
10302             }
10303
10304           /* More Effective C++ rule 6.  */
10305           if (warn_ecpp
10306               && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
10307                   || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
10308             {
10309               tree arg = TREE_VALUE (argtypes);
10310               tree ret = TREE_TYPE (TREE_TYPE (decl));
10311               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
10312                 arg = TREE_TYPE (arg);
10313               arg = TYPE_MAIN_VARIANT (arg);
10314               if (list_length (argtypes) == 2)
10315                 {
10316                   if (TREE_CODE (ret) != REFERENCE_TYPE
10317                       || !comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
10318                                      arg, 1))
10319                     cp_warning ("prefix `%D' should return `%T'", decl,
10320                                 build_reference_type (arg));
10321                 }
10322               else
10323                 {
10324                   if (!comptypes (TYPE_MAIN_VARIANT (ret), arg, 1))
10325                     cp_warning ("postfix `%D' should return `%T'", decl, arg);
10326                 }
10327             }
10328         }
10329       else if (unary_op_p (name))
10330         {
10331           if (list_length (argtypes) != 2)
10332             {
10333               if (methodp)
10334                 cp_error ("`%D' must take `void'", decl);
10335               else
10336                 cp_error ("`%D' must take exactly one argument", decl);
10337             }
10338         }
10339       else /* if (binary_op_p (name)) */
10340         {
10341           if (list_length (argtypes) != 3)
10342             {
10343               if (methodp)
10344                 cp_error ("`%D' must take exactly one argument", decl);
10345               else
10346                 cp_error ("`%D' must take exactly two arguments", decl);
10347             }
10348
10349           /* More Effective C++ rule 7.  */
10350           if (warn_ecpp
10351               && (name == ansi_opname [TRUTH_ANDIF_EXPR]
10352                   || name == ansi_opname [TRUTH_ORIF_EXPR]
10353                   || name == ansi_opname [COMPOUND_EXPR]))
10354             cp_warning ("user-defined `%D' always evaluates both arguments",
10355                         decl);
10356         }
10357
10358       /* Effective C++ rule 23.  */
10359       if (warn_ecpp
10360           && list_length (argtypes) == 3
10361           && (name == ansi_opname [PLUS_EXPR]
10362               || name == ansi_opname [MINUS_EXPR]
10363               || name == ansi_opname [TRUNC_DIV_EXPR]
10364               || name == ansi_opname [MULT_EXPR])
10365           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
10366         cp_warning ("`%D' should return by value", decl);
10367
10368       /* 13.4.0.8 */
10369       if (argtypes)
10370         for (; argtypes != void_list_node ; argtypes = TREE_CHAIN (argtypes))
10371           if (TREE_PURPOSE (argtypes))
10372             {
10373               TREE_PURPOSE (argtypes) = NULL_TREE;
10374               if (name == ansi_opname[(int) POSTINCREMENT_EXPR]
10375                   || name == ansi_opname[(int) POSTDECREMENT_EXPR])
10376                 {
10377                   if (pedantic)
10378                     cp_pedwarn ("`%D' cannot have default arguments", decl);
10379                 }
10380               else
10381                 cp_error ("`%D' cannot have default arguments", decl);
10382             }
10383     }
10384 }
10385 \f
10386 /* Get the struct, enum or union (CODE says which) with tag NAME.
10387    Define the tag as a forward-reference if it is not defined.
10388
10389    C++: If a class derivation is given, process it here, and report
10390    an error if multiple derivation declarations are not identical.
10391
10392    If this is a definition, come in through xref_tag and only look in
10393    the current frame for the name (since C++ allows new names in any
10394    scope.)  */
10395
10396 tree
10397 xref_tag (code_type_node, name, binfo, globalize)
10398      tree code_type_node;
10399      tree name, binfo;
10400      int globalize;
10401 {
10402   enum tag_types tag_code;
10403   enum tree_code code;
10404   int temp = 0;
10405   register tree ref, t;
10406   struct binding_level *b = inner_binding_level;
10407   int got_type = 0;
10408
10409   tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
10410   switch (tag_code)
10411     {
10412     case record_type:
10413     case class_type:
10414     case signature_type:
10415       code = RECORD_TYPE;
10416       break;
10417     case union_type:
10418       code = UNION_TYPE;
10419       break;
10420     case enum_type:
10421       code = ENUMERAL_TYPE;
10422       break;
10423     default:
10424       my_friendly_abort (18);
10425     }
10426
10427   /* If a cross reference is requested, look up the type
10428      already defined for this tag and return it.  */
10429   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
10430     {
10431       t = name;
10432       name = TYPE_IDENTIFIER (t);
10433       got_type = 1;
10434     }
10435   else
10436     t = IDENTIFIER_TYPE_VALUE (name);
10437   if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM)
10438     t = NULL_TREE;
10439
10440   if (! globalize)
10441     {
10442       if (pedantic && t && TREE_CODE (t) == TEMPLATE_TYPE_PARM)
10443         {
10444           cp_pedwarn ("redeclaration of template type-parameter `%T'", name);
10445           cp_pedwarn_at ("  previously declared here", t);
10446         }
10447       if (t && TYPE_CONTEXT (t) && got_type)
10448         ref = t;
10449       else
10450         {
10451           /* If we know we are defining this tag, only look it up in
10452              this scope and don't try to find it as a type.  */
10453           ref = lookup_tag (code, name, b, 1);
10454         }
10455     }
10456   else
10457     {
10458       if (t)
10459         ref = t;
10460       else
10461         ref = lookup_tag (code, name, b, 0);
10462
10463       if (! ref)
10464         {
10465           /* Try finding it as a type declaration.  If that wins, use it.  */
10466           ref = lookup_name (name, 1);
10467           if (ref && TREE_CODE (ref) == TYPE_DECL
10468               && TREE_CODE (TREE_TYPE (ref)) == code)
10469             ref = TREE_TYPE (ref);
10470           else
10471             ref = NULL_TREE;
10472         }
10473     }
10474
10475   push_obstacks_nochange ();
10476
10477   if (! ref)
10478     {
10479       /* If no such tag is yet defined, create a forward-reference node
10480          and record it as the "definition".
10481          When a real declaration of this type is found,
10482          the forward-reference will be altered into a real type.  */
10483
10484       /* In C++, since these migrate into the global scope, we must
10485          build them on the permanent obstack.  */
10486
10487       temp = allocation_temporary_p ();
10488       if (temp)
10489         end_temporary_allocation ();
10490
10491       if (code == ENUMERAL_TYPE)
10492         {
10493           cp_error ("use of enum `%#D' without previous declaration", name);
10494
10495           ref = make_node (ENUMERAL_TYPE);
10496
10497           /* Give the type a default layout like unsigned int
10498              to avoid crashing if it does not get defined.  */
10499           TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
10500           TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
10501           TREE_UNSIGNED (ref) = 1;
10502           TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
10503           TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
10504           TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
10505
10506           /* Enable us to recognize when a type is created in class context.
10507              To do nested classes correctly, this should probably be cleared
10508              out when we leave this classes scope.  Currently this in only
10509              done in `start_enum'.  */
10510
10511           pushtag (name, ref, globalize);
10512         }
10513       else
10514         {
10515           struct binding_level *old_b = class_binding_level;
10516
10517           ref = make_lang_type (code);
10518
10519           if (tag_code == signature_type)
10520             {
10521               SET_SIGNATURE (ref);
10522               /* Since a signature type will be turned into the type
10523                  of signature tables, it's not only an interface.  */
10524               CLASSTYPE_INTERFACE_ONLY (ref) = 0;
10525               SET_CLASSTYPE_INTERFACE_KNOWN (ref);
10526               /* A signature doesn't have a vtable.  */
10527               CLASSTYPE_VTABLE_NEEDS_WRITING (ref) = 0;
10528             }
10529
10530 #ifdef NONNESTED_CLASSES
10531           /* Class types don't nest the way enums do.  */
10532           class_binding_level = (struct binding_level *)0;
10533 #endif
10534           pushtag (name, ref, globalize);
10535           class_binding_level = old_b;
10536         }
10537     }
10538   else
10539     {
10540       /* If it no longer looks like a nested type, make sure it's
10541          in global scope.  */
10542       if (b == global_binding_level && !class_binding_level
10543           && IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
10544         IDENTIFIER_GLOBAL_VALUE (name) = TYPE_NAME (ref);
10545     }
10546
10547   if (binfo)
10548     xref_basetypes (code_type_node, name, ref, binfo);
10549
10550  just_return:
10551
10552   /* Until the type is defined, tentatively accept whatever
10553      structure tag the user hands us.  */
10554   if (TYPE_SIZE (ref) == NULL_TREE
10555       && ref != current_class_type
10556       /* Have to check this, in case we have contradictory tag info.  */
10557       && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
10558     {
10559       if (tag_code == class_type)
10560         CLASSTYPE_DECLARED_CLASS (ref) = 1;
10561       else if (tag_code == record_type || tag_code == signature_type)
10562         CLASSTYPE_DECLARED_CLASS (ref) = 0;
10563     }
10564
10565   pop_obstacks ();
10566
10567   return ref;
10568 }
10569
10570 tree
10571 xref_tag_from_type (old, id, globalize)
10572      tree old, id;
10573      int globalize;
10574 {
10575   tree code_type_node;
10576
10577   if (TREE_CODE (old) == RECORD_TYPE)
10578     code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
10579                       ? class_type_node : record_type_node);
10580   else
10581     code_type_node = union_type_node;
10582
10583   if (id == NULL_TREE)
10584     id = TYPE_IDENTIFIER (old);
10585
10586   return xref_tag (code_type_node, id, NULL_TREE, globalize);
10587 }
10588
10589 void
10590 xref_basetypes (code_type_node, name, ref, binfo)
10591      tree code_type_node;
10592      tree name, ref;
10593      tree binfo;
10594 {
10595   /* In the declaration `A : X, Y, ... Z' we mark all the types
10596      (A, X, Y, ..., Z) so we can check for duplicates.  */
10597   tree binfos;
10598   int i, len;
10599   enum tag_types tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
10600
10601   if (tag_code == union_type)
10602     {
10603       cp_error ("derived union `%T' invalid", ref);
10604       return;
10605     }
10606
10607   len = list_length (binfo);
10608   push_obstacks (TYPE_OBSTACK (ref), TYPE_OBSTACK (ref));
10609
10610   SET_CLASSTYPE_MARKED (ref);
10611   BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
10612
10613   for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
10614     {
10615       /* The base of a derived struct is public by default.  */
10616       int via_public
10617         = (TREE_PURPOSE (binfo) == access_public_node
10618            || TREE_PURPOSE (binfo) == access_public_virtual_node
10619            || (tag_code != class_type
10620                && (TREE_PURPOSE (binfo) == access_default_node
10621                    || TREE_PURPOSE (binfo) == access_default_virtual_node)));
10622       int via_protected = TREE_PURPOSE (binfo) == access_protected_node;
10623       int via_virtual
10624         = (TREE_PURPOSE (binfo) == access_private_virtual_node
10625            || TREE_PURPOSE (binfo) == access_public_virtual_node
10626            || TREE_PURPOSE (binfo) == access_default_virtual_node);
10627       tree basetype = TREE_VALUE (binfo);
10628       tree base_binfo;
10629
10630       GNU_xref_hier (IDENTIFIER_POINTER (name),
10631                      IDENTIFIER_POINTER (TREE_VALUE (binfo)),
10632                      via_public, via_virtual, 0);
10633
10634       if (basetype && TREE_CODE (basetype) == TYPE_DECL)
10635         basetype = TREE_TYPE (basetype);
10636       if (!basetype
10637           || (TREE_CODE (basetype) != RECORD_TYPE
10638               && TREE_CODE (basetype) != TYPENAME_TYPE
10639               && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM))
10640         {
10641           cp_error ("base type `%T' fails to be a struct or class type",
10642                     TREE_VALUE (binfo));
10643           continue;
10644         }
10645 #if 1
10646       /* This code replaces similar code in layout_basetypes.  */
10647       else if (TYPE_SIZE (complete_type (basetype)) == NULL_TREE
10648                && ! (current_template_parms && uses_template_parms (basetype)))
10649         {
10650           cp_error ("base class `%T' has incomplete type", basetype);
10651           continue;
10652         }
10653 #endif
10654       else
10655         {
10656           if (CLASSTYPE_MARKED (basetype))
10657             {
10658               if (basetype == ref)
10659                 cp_error ("recursive type `%T' undefined", basetype);
10660               else
10661                 cp_error ("duplicate base type `%T' invalid", basetype);
10662               continue;
10663             }
10664
10665           /* Note that the BINFO records which describe individual
10666              inheritances are *not* shared in the lattice!  They
10667              cannot be shared because a given baseclass may be
10668              inherited with different `accessibility' by different
10669              derived classes.  (Each BINFO record describing an
10670              individual inheritance contains flags which say what
10671              the `accessibility' of that particular inheritance is.)  */
10672   
10673           base_binfo = make_binfo (integer_zero_node, basetype,
10674                                    TYPE_BINFO_VTABLE (basetype),
10675                                    TYPE_BINFO_VIRTUALS (basetype), NULL_TREE);
10676  
10677           TREE_VEC_ELT (binfos, i) = base_binfo;
10678           TREE_VIA_PUBLIC (base_binfo) = via_public;
10679           TREE_VIA_PROTECTED (base_binfo) = via_protected;
10680           TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
10681           BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
10682
10683           SET_CLASSTYPE_MARKED (basetype);
10684
10685           /* We are free to modify these bits because they are meaningless
10686              at top level, and BASETYPE is a top-level type.  */
10687           if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
10688             {
10689               TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
10690               TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
10691             }
10692
10693           TYPE_OVERLOADS_METHOD_CALL_EXPR (ref) |= TYPE_OVERLOADS_METHOD_CALL_EXPR (basetype);
10694           TYPE_GETS_NEW (ref) |= TYPE_GETS_NEW (basetype);
10695           TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
10696           CLASSTYPE_LOCAL_TYPEDECLS (ref) |= CLASSTYPE_LOCAL_TYPEDECLS (basetype);
10697           i += 1;
10698         }
10699     }
10700   if (i)
10701     TREE_VEC_LENGTH (binfos) = i;
10702   else
10703     BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
10704
10705   if (i > 1)
10706     TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
10707   else if (i == 1)
10708     TYPE_USES_MULTIPLE_INHERITANCE (ref)
10709       = TYPE_USES_MULTIPLE_INHERITANCE (BINFO_TYPE (TREE_VEC_ELT (binfos, 0)));
10710   if (TYPE_USES_MULTIPLE_INHERITANCE (ref))
10711     TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
10712
10713   /* Unmark all the types.  */
10714   while (--i >= 0)
10715     CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
10716   CLEAR_CLASSTYPE_MARKED (ref);
10717
10718   pop_obstacks ();
10719 }
10720   
10721 \f
10722 static tree current_local_enum = NULL_TREE;
10723
10724 /* Begin compiling the definition of an enumeration type.
10725    NAME is its name (or null if anonymous).
10726    Returns the type object, as yet incomplete.
10727    Also records info about it so that build_enumerator
10728    may be used to declare the individual values as they are read.  */
10729
10730 tree
10731 start_enum (name)
10732      tree name;
10733 {
10734   register tree enumtype = NULL_TREE;
10735   struct binding_level *b = inner_binding_level;
10736
10737   if (processing_template_decl && current_function_decl)
10738     end_temporary_allocation ();
10739
10740   /* If this is the real definition for a previous forward reference,
10741      fill in the contents in the same object that used to be the
10742      forward reference.  */
10743
10744   if (name != NULL_TREE)
10745     enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
10746
10747   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
10748     cp_error ("multiple definition of `%#T'", enumtype);
10749   else
10750     {
10751       enumtype = make_node (ENUMERAL_TYPE);
10752       pushtag (name, enumtype, 0);
10753     }
10754
10755   if (b->pseudo_global)
10756     cp_error ("template declaration of `%#T'", enumtype);
10757
10758   if (current_class_type)
10759     TREE_ADDRESSABLE (b->tags) = 1;
10760
10761   current_local_enum = NULL_TREE;
10762
10763   /* We don't copy this value because build_enumerator needs to do it.  */
10764   enum_next_value = integer_zero_node;
10765   enum_overflow = 0;
10766
10767   GNU_xref_decl (current_function_decl, enumtype);
10768   return enumtype;
10769 }
10770
10771 /* After processing and defining all the values of an enumeration type,
10772    install their decls in the enumeration type and finish it off.
10773    ENUMTYPE is the type object and VALUES a list of name-value pairs.
10774    Returns ENUMTYPE.  */
10775
10776 tree
10777 finish_enum (enumtype, values)
10778      register tree enumtype, values;
10779 {
10780   register tree minnode, maxnode;
10781   /* Calculate the maximum value of any enumerator in this type.  */
10782
10783   if (values)
10784     {
10785       register tree pair;
10786       register tree value = DECL_INITIAL (TREE_VALUE (values));
10787
10788       if (! processing_template_decl)
10789         {
10790           /* Speed up the main loop by performing some precalculations */
10791           TREE_TYPE (TREE_VALUE (values)) = enumtype;
10792           TREE_TYPE (value) = enumtype;
10793           minnode = maxnode = value;
10794         }
10795       TREE_VALUE (values) = value;
10796       
10797       for (pair = TREE_CHAIN (values); pair; pair = TREE_CHAIN (pair))
10798         {
10799           value = DECL_INITIAL (TREE_VALUE (pair));
10800           if (! processing_template_decl)
10801             {
10802               TREE_TYPE (TREE_VALUE (pair)) = enumtype;
10803               TREE_TYPE (value) = enumtype;
10804               if (tree_int_cst_lt (maxnode, value))
10805                 maxnode = value;
10806               else if (tree_int_cst_lt (value, minnode))
10807                 minnode = value;
10808             }
10809           TREE_VALUE (pair) = value;
10810         }
10811     }
10812   else
10813     maxnode = minnode = integer_zero_node;
10814
10815   TYPE_VALUES (enumtype) = nreverse (values);
10816
10817   if (processing_template_decl)
10818     {
10819       if (current_function_decl)
10820         {
10821           add_tree (build_min (TAG_DEFN, enumtype));
10822           resume_temporary_allocation ();
10823         }
10824       return enumtype;
10825     }
10826
10827   {
10828     int unsignedp = tree_int_cst_sgn (minnode) >= 0;
10829     int lowprec = min_precision (minnode, unsignedp);
10830     int highprec = min_precision (maxnode, unsignedp);
10831     int precision = MAX (lowprec, highprec);
10832
10833     TYPE_SIZE (enumtype) = NULL_TREE;
10834
10835     /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'.  */
10836
10837     TYPE_PRECISION (enumtype) = precision;
10838     if (unsignedp)
10839       fixup_unsigned_type (enumtype);
10840     else
10841       fixup_signed_type (enumtype);
10842
10843     if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
10844       /* Use the width of the narrowest normal C type which is wide enough.  */
10845       TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
10846                                                   (precision, 1));
10847     else
10848       TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
10849
10850     TYPE_SIZE (enumtype) = 0;
10851     layout_type (enumtype);
10852   }
10853
10854   {
10855     register tree tem;
10856     
10857     /* Fix up all variant types of this enum type.  */
10858     for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
10859          tem = TYPE_NEXT_VARIANT (tem))
10860       {
10861         TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
10862         TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
10863         TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
10864         TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
10865         TYPE_MODE (tem) = TYPE_MODE (enumtype);
10866         TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
10867         TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
10868         TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
10869       }
10870   }
10871
10872   /* Finish debugging output for this type.  */
10873   rest_of_type_compilation (enumtype, global_bindings_p ());
10874
10875   return enumtype;
10876 }
10877
10878 /* Build and install a CONST_DECL for one value of the
10879    current enumeration type (one that was begun with start_enum).
10880    Return a tree-list containing the name and its value.
10881    Assignment of sequential values by default is handled here.  */
10882
10883 tree
10884 build_enumerator (name, value)
10885      tree name, value;
10886 {
10887   tree decl, result;
10888
10889   /* Remove no-op casts from the value.  */
10890   if (value)
10891     STRIP_TYPE_NOPS (value);
10892
10893  if (! processing_template_decl)
10894    {
10895      /* Validate and default VALUE.  */
10896      if (value != NULL_TREE)
10897        {
10898          if (TREE_READONLY_DECL_P (value))
10899            value = decl_constant_value (value);
10900
10901          if (TREE_CODE (value) == INTEGER_CST)
10902            {
10903              value = default_conversion (value);
10904              constant_expression_warning (value);
10905            }
10906          else
10907            {
10908              cp_error ("enumerator value for `%D' not integer constant", name);
10909              value = NULL_TREE;
10910            }
10911        }
10912
10913      /* Default based on previous value.  */
10914      if (value == NULL_TREE && ! processing_template_decl)
10915        {
10916          value = enum_next_value;
10917          if (enum_overflow)
10918            cp_error ("overflow in enumeration values at `%D'", name);
10919        }
10920
10921      /* Remove no-op casts from the value.  */
10922      if (value)
10923        STRIP_TYPE_NOPS (value);
10924
10925      /* We have to always copy here; not all INTEGER_CSTs are unshared,
10926         and there's no wedding ring. Look at size_int()...*/
10927      value = copy_node (value);
10928 #if 0
10929      /* To fix MAX_VAL enum consts. (bkoz)  */
10930      TREE_TYPE (value) = integer_type_node;
10931 #endif
10932    }
10933
10934   /* C++ associates enums with global, function, or class declarations.  */
10935
10936   decl = current_scope ();
10937   if (decl && decl == current_class_type)
10938     {
10939       /* This enum declaration is local to the class, so we must put
10940          it in that class's list of decls.  */
10941       decl = build_lang_field_decl (CONST_DECL, name, integer_type_node);
10942       DECL_INITIAL (decl) = value;
10943       TREE_READONLY (decl) = 1;
10944       pushdecl_class_level (decl);
10945       TREE_CHAIN (decl) = current_local_enum;
10946       current_local_enum = decl;
10947     }
10948   else
10949     {
10950       /* It's a global enum, or it's local to a function.  (Note local to
10951          a function could mean local to a class method.  */
10952       decl = build_decl (CONST_DECL, name, integer_type_node);
10953       DECL_INITIAL (decl) = value;
10954       TREE_READONLY (decl) = 1;
10955
10956       pushdecl (decl);
10957       GNU_xref_decl (current_function_decl, decl);
10958     }
10959
10960  if (! processing_template_decl)
10961    {
10962      /* Set basis for default for next value.  */
10963      enum_next_value = build_binary_op_nodefault (PLUS_EXPR, value,
10964                                                   integer_one_node, PLUS_EXPR);
10965      enum_overflow = tree_int_cst_lt (enum_next_value, value);
10966    }
10967
10968   result = saveable_tree_cons (name, decl, NULL_TREE);
10969   return result;
10970 }
10971
10972 tree
10973 grok_enum_decls (type, decl)
10974      tree type, decl;
10975 {
10976   tree d = current_local_enum;
10977   
10978   if (d == NULL_TREE)
10979     return decl;
10980   
10981   while (1)
10982     {
10983       TREE_TYPE (d) = type;
10984       if (TREE_CHAIN (d) == NULL_TREE)
10985         {
10986           TREE_CHAIN (d) = decl;
10987           break;
10988         }
10989       d = TREE_CHAIN (d);
10990     }
10991
10992   decl = current_local_enum;
10993   current_local_enum = NULL_TREE;
10994   
10995   return decl;
10996 }
10997 \f
10998 static int function_depth;
10999
11000 /* Create the FUNCTION_DECL for a function definition.
11001    DECLSPECS and DECLARATOR are the parts of the declaration;
11002    they describe the function's name and the type it returns,
11003    but twisted together in a fashion that parallels the syntax of C.
11004
11005    This function creates a binding context for the function body
11006    as well as setting up the FUNCTION_DECL in current_function_decl.
11007
11008    Returns 1 on success.  If the DECLARATOR is not suitable for a function
11009    (it defines a datum instead), we return 0, which tells
11010    yyparse to report a parse error.
11011
11012    For C++, we must first check whether that datum makes any sense.
11013    For example, "class A local_a(1,2);" means that variable local_a
11014    is an aggregate of type A, which should have a constructor
11015    applied to it with the argument list [1, 2].
11016
11017    @@ There is currently no way to retrieve the storage
11018    @@ allocated to FUNCTION (or all of its parms) if we return
11019    @@ something we had previously.  */
11020
11021 int
11022 start_function (declspecs, declarator, attrs, pre_parsed_p)
11023      tree declspecs, declarator, attrs;
11024      int pre_parsed_p;
11025 {
11026   tree decl1;
11027   tree ctype = NULL_TREE;
11028   tree fntype;
11029   tree restype;
11030   extern int have_extern_spec;
11031   extern int used_extern_spec;
11032   int doing_friend = 0;
11033
11034   /* Sanity check.  */
11035   my_friendly_assert (TREE_VALUE (void_list_node) == void_type_node, 160);
11036   my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
11037
11038   /* Assume, until we see it does.  */
11039   current_function_returns_value = 0;
11040   current_function_returns_null = 0;
11041   warn_about_return_type = 0;
11042   named_labels = 0;
11043   shadowed_labels = 0;
11044   current_function_assigns_this = 0;
11045   current_function_just_assigned_this = 0;
11046   current_function_parms_stored = 0;
11047   original_result_rtx = NULL_RTX;
11048   base_init_expr = NULL_TREE;
11049   current_base_init_list = NULL_TREE;
11050   current_member_init_list = NULL_TREE;
11051   ctor_label = dtor_label = NULL_TREE;
11052   static_labelno = 0;
11053
11054   clear_temp_name ();
11055
11056   /* This should only be done once on the top most decl.  */
11057   if (have_extern_spec && !used_extern_spec)
11058     {
11059       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
11060       used_extern_spec = 1;
11061     }
11062
11063   if (pre_parsed_p)
11064     {
11065       decl1 = declarator;
11066
11067       if (! DECL_ARGUMENTS (decl1)
11068           && !DECL_STATIC_FUNCTION_P (decl1)
11069           && DECL_CONTEXT (decl1)
11070           && TYPE_IDENTIFIER (DECL_CONTEXT (decl1))
11071           && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (DECL_CONTEXT (decl1))))
11072         {
11073           cp_error ("redeclaration of `%#D'", decl1);
11074           if (IDENTIFIER_CLASS_VALUE (DECL_NAME (decl1)))
11075             cp_error_at ("previous declaration here", IDENTIFIER_CLASS_VALUE (DECL_NAME (decl1)));
11076           else if (IDENTIFIER_GLOBAL_VALUE (DECL_NAME (decl1)))
11077             cp_error_at ("previous declaration here", IDENTIFIER_GLOBAL_VALUE (DECL_NAME (decl1)));
11078         }
11079
11080       fntype = TREE_TYPE (decl1);
11081       if (TREE_CODE (fntype) == METHOD_TYPE)
11082         ctype = TYPE_METHOD_BASETYPE (fntype);
11083
11084       /* ANSI C++ June 5 1992 WP 11.4.5.  A friend function defined in a
11085          class is in the (lexical) scope of the class in which it is
11086          defined.  */
11087       if (!ctype && DECL_FRIEND_P (decl1))
11088         {
11089           ctype = DECL_CLASS_CONTEXT (decl1);
11090
11091           /* CTYPE could be null here if we're dealing with a template;
11092              for example, `inline friend float foo()' inside a template
11093              will have no CTYPE set.  */
11094           if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
11095             ctype = NULL_TREE;
11096           else
11097             doing_friend = 1;
11098         }
11099
11100       /* In a fcn definition, arg types must be complete.  */
11101       require_complete_types_for_parms (DECL_ARGUMENTS (decl1));
11102
11103       /* In case some arg types were completed since the declaration was
11104          parsed, fix up the decls.  */
11105       {
11106         tree t = DECL_ARGUMENTS (decl1);
11107         for (; t; t = TREE_CHAIN (t))
11108           layout_decl (t, 0);
11109       }
11110
11111       last_function_parms = DECL_ARGUMENTS (decl1);
11112       last_function_parm_tags = NULL_TREE;
11113     }
11114   else
11115     {
11116       decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
11117       /* If the declarator is not suitable for a function definition,
11118          cause a syntax error.  */
11119       if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
11120
11121       fntype = TREE_TYPE (decl1);
11122
11123       restype = TREE_TYPE (fntype);
11124       if (IS_AGGR_TYPE (restype) && ! TYPE_PTRMEMFUNC_P (restype)
11125           && ! CLASSTYPE_GOT_SEMICOLON (restype))
11126         {
11127           cp_error ("semicolon missing after declaration of `%#T'", restype);
11128           shadow_tag (build_tree_list (NULL_TREE, restype));
11129           CLASSTYPE_GOT_SEMICOLON (restype) = 1;
11130           if (TREE_CODE (fntype) == FUNCTION_TYPE)
11131             fntype = build_function_type (integer_type_node,
11132                                           TYPE_ARG_TYPES (fntype));
11133           else
11134             fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
11135                                               integer_type_node,
11136                                               TYPE_ARG_TYPES (fntype));
11137           TREE_TYPE (decl1) = fntype;
11138         }
11139
11140       if (TREE_CODE (fntype) == METHOD_TYPE)
11141         ctype = TYPE_METHOD_BASETYPE (fntype);
11142       else if (IDENTIFIER_LENGTH (DECL_NAME (decl1)) == 4
11143                && ! strcmp (IDENTIFIER_POINTER (DECL_NAME (decl1)), "main")
11144                && DECL_CONTEXT (decl1) == NULL_TREE)
11145         {
11146           /* If this doesn't return integer_type, complain.  */
11147           if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
11148             {
11149               if (pedantic || warn_return_type)
11150                 pedwarn ("return type for `main' changed to `int'");
11151               TREE_TYPE (decl1) = fntype = default_function_type;
11152             }
11153           warn_about_return_type = 0;
11154         }
11155     }
11156
11157   /* Warn if function was previously implicitly declared
11158      (but not if we warned then).  */
11159   if (! warn_implicit
11160       && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
11161     cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
11162
11163   current_function_decl = decl1;
11164   /* Save the parm names or decls from this function's declarator
11165      where store_parm_decls will find them.  */
11166   current_function_parms = last_function_parms;
11167   current_function_parm_tags = last_function_parm_tags;
11168
11169   announce_function (decl1);
11170
11171   if (! processing_template_decl)
11172     {
11173       if (TYPE_SIZE (complete_type (TREE_TYPE (fntype))) == NULL_TREE)
11174         {
11175           cp_error ("return-type `%#T' is an incomplete type",
11176                     TREE_TYPE (fntype));
11177
11178           /* Make it return void instead, but don't change the
11179              type of the DECL_RESULT, in case we have a named return value.  */
11180           if (ctype)
11181             TREE_TYPE (decl1)
11182               = build_cplus_method_type (build_type_variant (ctype,
11183                                                              TREE_READONLY (decl1),
11184                                                              TREE_SIDE_EFFECTS (decl1)),
11185                                          void_type_node,
11186                                          FUNCTION_ARG_CHAIN (decl1));
11187           else
11188             TREE_TYPE (decl1)
11189               = build_function_type (void_type_node,
11190                                      TYPE_ARG_TYPES (TREE_TYPE (decl1)));
11191           DECL_RESULT (decl1)
11192             = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (TREE_TYPE (fntype)));
11193           TREE_READONLY (DECL_RESULT (decl1)) = TYPE_READONLY (TREE_TYPE (fntype));
11194           TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = TYPE_VOLATILE (TREE_TYPE (fntype));
11195         }
11196
11197       if (TYPE_LANG_SPECIFIC (TREE_TYPE (fntype))
11198           && CLASSTYPE_ABSTRACT_VIRTUALS (TREE_TYPE (fntype)))
11199         abstract_virtuals_error (decl1, TREE_TYPE (fntype));
11200     }
11201
11202   if (warn_about_return_type)
11203     warning ("return-type defaults to `int'");
11204
11205   /* Effective C++ rule 15.  See also c_expand_return.  */
11206   if (warn_ecpp
11207       && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
11208       && TREE_TYPE (fntype) == void_type_node)
11209     cp_warning ("`operator=' should return a reference to `*this'");
11210
11211   /* Make the init_value nonzero so pushdecl knows this is not tentative.
11212      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
11213   DECL_INITIAL (decl1) = error_mark_node;
11214
11215   /* This function exists in static storage.
11216      (This does not mean `static' in the C sense!)  */
11217   TREE_STATIC (decl1) = 1;
11218
11219   /* Record the decl so that the function name is defined.
11220      If we already have a decl for this name, and it is a FUNCTION_DECL,
11221      use the old decl.  */
11222
11223   if (processing_template_decl)
11224     push_template_decl (decl1);
11225   else if (pre_parsed_p == 0)
11226     {
11227       decl1 = pushdecl (decl1);
11228       DECL_MAIN_VARIANT (decl1) = decl1;
11229       fntype = TREE_TYPE (decl1);
11230     }
11231
11232   current_function_decl = decl1;
11233
11234   if (DECL_INTERFACE_KNOWN (decl1))
11235     {
11236       if (DECL_NOT_REALLY_EXTERN (decl1))
11237         DECL_EXTERNAL (decl1) = 0;
11238     }
11239   /* If this function belongs to an interface, it is public.
11240      If it belongs to someone else's interface, it is also external.
11241      It doesn't matter whether it's inline or not.  */
11242   else if (interface_unknown == 0
11243            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
11244                || flag_alt_external_templates))
11245     {
11246       if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
11247           || processing_template_decl)
11248         DECL_EXTERNAL (decl1)
11249           = (interface_only
11250              || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines));
11251       else
11252         {
11253           DECL_EXTERNAL (decl1) = 0;
11254           if (DECL_C_STATIC (decl1))
11255             TREE_PUBLIC (decl1) = 0;
11256         }         
11257       DECL_NOT_REALLY_EXTERN (decl1) = 0;
11258       DECL_INTERFACE_KNOWN (decl1) = 1;
11259     }
11260   else
11261     {
11262       /* This is a definition, not a reference.
11263          So clear DECL_EXTERNAL.  */
11264       DECL_EXTERNAL (decl1) = 0;
11265
11266       if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
11267           && ! DECL_INTERFACE_KNOWN (decl1)
11268           /* Don't try to defer nested functions for now.  */
11269           && ! hack_decl_function_context (decl1))
11270         DECL_DEFER_OUTPUT (decl1) = 1;
11271       else
11272         {
11273           DECL_INTERFACE_KNOWN (decl1) = 1;
11274           if (DECL_C_STATIC (decl1))
11275             TREE_PUBLIC (decl1) = 0;
11276         }
11277     }
11278
11279   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1))
11280     {
11281       if (TREE_CODE (fntype) == METHOD_TYPE)
11282         TREE_TYPE (decl1) = fntype
11283           = build_function_type (TREE_TYPE (fntype),
11284                                  TREE_CHAIN (TYPE_ARG_TYPES (fntype)));
11285       current_function_parms = TREE_CHAIN (current_function_parms);
11286       DECL_ARGUMENTS (decl1) = current_function_parms;
11287       ctype = NULL_TREE;
11288     }
11289   restype = TREE_TYPE (fntype);
11290
11291   if (ctype)
11292     {
11293       push_nested_class (ctype, 1);
11294
11295       /* If we're compiling a friend function, neither of the variables
11296          current_class_ptr nor current_class_type will have values.  */
11297       if (! doing_friend)
11298         {
11299           /* We know that this was set up by `grokclassfn'.
11300              We do not wait until `store_parm_decls', since evil
11301              parse errors may never get us to that point.  Here
11302              we keep the consistency between `current_class_type'
11303              and `current_class_ptr'.  */
11304           tree t = current_function_parms;
11305
11306           my_friendly_assert (t != NULL_TREE
11307                               && TREE_CODE (t) == PARM_DECL, 162);
11308
11309           if (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE)
11310             {
11311               int i = suspend_momentary ();
11312
11313               /* Fool build_indirect_ref.  */
11314               current_class_ptr = NULL_TREE;
11315               current_class_ref = build_indirect_ref (t, NULL_PTR);
11316               current_class_ptr = t;
11317               resume_momentary (i);
11318             }
11319           else
11320             /* We're having a signature pointer here.  */
11321             current_class_ref = current_class_ptr = t;
11322
11323         }
11324     }
11325   else
11326     {
11327       if (DECL_STATIC_FUNCTION_P (decl1))
11328         push_nested_class (DECL_CONTEXT (decl1), 2);
11329       else
11330         push_memoized_context (0, 1);
11331       current_class_ptr = current_class_ref = NULL_TREE;
11332     }
11333
11334   pushlevel (0);
11335   current_binding_level->parm_flag = 1;
11336
11337   GNU_xref_function (decl1, current_function_parms);
11338
11339   if (attrs)
11340     cplus_decl_attributes (decl1, NULL_TREE, attrs);
11341   make_function_rtl (decl1);
11342
11343   /* Promote the value to int before returning it.  */
11344   if (C_PROMOTING_INTEGER_TYPE_P (restype))
11345     restype = type_promotes_to (restype);
11346
11347   /* If this fcn was already referenced via a block-scope `extern' decl
11348      (or an implicit decl), propagate certain information about the usage.  */
11349   if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
11350     TREE_ADDRESSABLE (decl1) = 1;
11351
11352   if (DECL_RESULT (decl1) == NULL_TREE)
11353     {
11354       DECL_RESULT (decl1)
11355         = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
11356       TREE_READONLY (DECL_RESULT (decl1)) = TYPE_READONLY (restype);
11357       TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = TYPE_VOLATILE (restype);
11358     }
11359
11360     /* Allocate further tree nodes temporarily during compilation
11361        of this function only.  Tiemann moved up here from bottom of fn.  */
11362     temporary_allocation ();
11363
11364   if (processing_template_decl)
11365     {
11366       extern tree last_tree;
11367       ++minimal_parse_mode;
11368       last_tree = DECL_SAVED_TREE (decl1)
11369         = build_nt (EXPR_STMT, void_zero_node);
11370     }
11371
11372   ++function_depth;
11373
11374   if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl1))
11375       && DECL_LANGUAGE (decl1) == lang_cplusplus)
11376     {
11377       dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
11378       ctor_label = NULL_TREE;
11379     }
11380   else
11381     {
11382       dtor_label = NULL_TREE;
11383       if (DECL_CONSTRUCTOR_P (decl1))
11384         ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
11385     }
11386
11387   return 1;
11388 }
11389 \f
11390 void
11391 store_after_parms (insns)
11392      rtx insns;
11393 {
11394   rtx x;
11395
11396   for (x = get_insns (); x; x = next_insn (x))
11397     {
11398       if (GET_CODE (x) == NOTE && NOTE_LINE_NUMBER (x) == NOTE_INSN_FUNCTION_BEG)
11399         {
11400           emit_insns_after (insns, x);
11401           return;
11402         }
11403     }
11404 #if 0
11405   /* This doesn't work, because the inline output routine doesn't reset
11406      last_parm_insn correctly for get_first_nonparm_insn () to work.  */
11407
11408   last_parm_insn = get_first_nonparm_insn ();
11409   if (last_parm_insn == NULL_RTX)
11410     emit_insns (insns);
11411   else
11412     emit_insns_before (insns,  last_parm_insn);
11413 #endif
11414 }
11415
11416 void
11417 expand_start_early_try_stmts ()
11418 {
11419   rtx insns;
11420   start_sequence ();
11421   expand_start_try_stmts ();
11422   insns = get_insns ();
11423   end_sequence ();
11424 #if 1
11425   emit_insns_after (insns, get_insns ());
11426 #else
11427   store_after_parms (insns);
11428 #endif
11429 }
11430
11431 /* Store the parameter declarations into the current function declaration.
11432    This is called after parsing the parameter declarations, before
11433    digesting the body of the function.
11434
11435    Also install to binding contour return value identifier, if any.  */
11436
11437 void
11438 store_parm_decls ()
11439 {
11440   register tree fndecl = current_function_decl;
11441   register tree parm;
11442   int parms_have_cleanups = 0;
11443   tree cleanups = NULL_TREE;
11444
11445   /* This is either a chain of PARM_DECLs (when a prototype is used).  */
11446   tree specparms = current_function_parms;
11447
11448   /* This is a list of types declared among parms in a prototype.  */
11449   tree parmtags = current_function_parm_tags;
11450
11451   /* This is a chain of any other decls that came in among the parm
11452      declarations.  If a parm is declared with  enum {foo, bar} x;
11453      then CONST_DECLs for foo and bar are put here.  */
11454   tree nonparms = NULL_TREE;
11455
11456   if (toplevel_bindings_p ())
11457     fatal ("parse errors have confused me too much");
11458
11459   /* Initialize RTL machinery.  */
11460   init_function_start (fndecl, input_filename, lineno);
11461
11462   /* Declare __FUNCTION__ and __PRETTY_FUNCTION__ for this function.  */
11463   declare_function_name ();
11464
11465   /* Create a binding level for the parms.  */
11466   expand_start_bindings (0);
11467
11468   if (specparms != NULL_TREE)
11469     {
11470       /* This case is when the function was defined with an ANSI prototype.
11471          The parms already have decls, so we need not do anything here
11472          except record them as in effect
11473          and complain if any redundant old-style parm decls were written.  */
11474
11475       register tree next;
11476
11477       /* Must clear this because it might contain TYPE_DECLs declared
11478          at class level.  */
11479       storedecls (NULL_TREE);
11480
11481       for (parm = nreverse (specparms); parm; parm = next)
11482         {
11483           next = TREE_CHAIN (parm);
11484           if (TREE_CODE (parm) == PARM_DECL)
11485             {
11486               tree cleanup;
11487               if (DECL_NAME (parm) == NULL_TREE)
11488                 {
11489                   pushdecl (parm);
11490                 }
11491               else if (TYPE_MAIN_VARIANT (TREE_TYPE (parm)) == void_type_node)
11492                 cp_error ("parameter `%D' declared void", parm);
11493               else
11494                 {
11495                   /* Now fill in DECL_REFERENCE_SLOT for any of the parm decls.
11496                      A parameter is assumed not to have any side effects.
11497                      If this should change for any reason, then this
11498                      will have to wrap the bashed reference type in a save_expr.
11499                      
11500                      Also, if the parameter type is declared to be an X
11501                      and there is an X(X&) constructor, we cannot lay it
11502                      into the stack (any more), so we make this parameter
11503                      look like it is really of reference type.  Functions
11504                      which pass parameters to this function will know to
11505                      create a temporary in their frame, and pass a reference
11506                      to that.  */
11507
11508                   if (TREE_CODE (TREE_TYPE (parm)) == REFERENCE_TYPE
11509                       && TYPE_SIZE (TREE_TYPE (TREE_TYPE (parm))))
11510                     SET_DECL_REFERENCE_SLOT (parm, convert_from_reference (parm));
11511
11512                   pushdecl (parm);
11513                 }
11514               if (! processing_template_decl
11515                   && (cleanup = maybe_build_cleanup (parm), cleanup))
11516                 {
11517                   expand_decl (parm);
11518                   parms_have_cleanups = 1;
11519
11520                   /* Keep track of the cleanups.  */
11521                   cleanups = tree_cons (parm, cleanup, cleanups);
11522                 }
11523             }
11524           else
11525             {
11526               /* If we find an enum constant or a type tag,
11527                  put it aside for the moment.  */
11528               TREE_CHAIN (parm) = NULL_TREE;
11529               nonparms = chainon (nonparms, parm);
11530             }
11531         }
11532
11533       /* Get the decls in their original chain order
11534          and record in the function.  This is all and only the
11535          PARM_DECLs that were pushed into scope by the loop above.  */
11536       DECL_ARGUMENTS (fndecl) = getdecls ();
11537
11538       storetags (chainon (parmtags, gettags ()));
11539     }
11540   else
11541     DECL_ARGUMENTS (fndecl) = NULL_TREE;
11542
11543   /* Now store the final chain of decls for the arguments
11544      as the decl-chain of the current lexical scope.
11545      Put the enumerators in as well, at the front so that
11546      DECL_ARGUMENTS is not modified.  */
11547
11548   storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
11549
11550   /* Initialize the RTL code for the function.  */
11551   DECL_SAVED_INSNS (fndecl) = NULL_RTX;
11552   if (! processing_template_decl)
11553     expand_function_start (fndecl, parms_have_cleanups);
11554
11555   current_function_parms_stored = 1;
11556
11557   /* If this function is `main', emit a call to `__main'
11558      to run global initializers, etc.  */
11559   if (DECL_NAME (fndecl)
11560       && IDENTIFIER_LENGTH (DECL_NAME (fndecl)) == 4
11561       && strcmp (IDENTIFIER_POINTER (DECL_NAME (fndecl)), "main") == 0
11562       && DECL_CONTEXT (fndecl) == NULL_TREE)
11563     {
11564       expand_main_function ();
11565     }
11566
11567   /* Now that we have initialized the parms, we can start their
11568      cleanups.  We cannot do this before, since expand_decl_cleanup
11569      should not be called before the parm can be used.  */
11570   if (cleanups
11571       && ! processing_template_decl)      
11572     {
11573       for (cleanups = nreverse (cleanups); cleanups; cleanups = TREE_CHAIN (cleanups))
11574         {
11575           if (! expand_decl_cleanup (TREE_PURPOSE (cleanups), TREE_VALUE (cleanups)))
11576             cp_error ("parser lost in parsing declaration of `%D'",
11577                       TREE_PURPOSE (cleanups));
11578         }
11579     }
11580
11581   /* Create a binding contour which can be used to catch
11582      cleanup-generated temporaries.  Also, if the return value needs or
11583      has initialization, deal with that now.  */
11584   if (parms_have_cleanups)
11585     {
11586       pushlevel (0);
11587       expand_start_bindings (0);
11588     }
11589
11590   last_parm_cleanup_insn = get_last_insn ();
11591
11592   if (! processing_template_decl && flag_exceptions)
11593     {
11594       /* Do the starting of the exception specifications, if we have any.  */
11595       if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
11596         expand_start_eh_spec ();
11597     }
11598
11599   last_dtor_insn = get_last_insn ();
11600 }
11601
11602 /* Bind a name and initialization to the return value of
11603    the current function.  */
11604
11605 void
11606 store_return_init (return_id, init)
11607      tree return_id, init;
11608 {
11609   tree decl = DECL_RESULT (current_function_decl);
11610
11611   if (pedantic)
11612     /* Give this error as many times as there are occurrences,
11613        so that users can use Emacs compilation buffers to find
11614        and fix all such places.  */
11615     pedwarn ("ANSI C++ does not permit named return values");
11616
11617   if (return_id != NULL_TREE)
11618     {
11619       if (DECL_NAME (decl) == NULL_TREE)
11620         {
11621           DECL_NAME (decl) = return_id;
11622           DECL_ASSEMBLER_NAME (decl) = return_id;
11623         }
11624       else
11625         cp_error ("return identifier `%D' already in place", decl);
11626     }
11627
11628   /* Can't let this happen for constructors.  */
11629   if (DECL_CONSTRUCTOR_P (current_function_decl))
11630     {
11631       error ("can't redefine default return value for constructors");
11632       return;
11633     }
11634
11635   /* If we have a named return value, put that in our scope as well.  */
11636   if (DECL_NAME (decl) != NULL_TREE)
11637     {
11638       /* If this named return value comes in a register,
11639          put it in a pseudo-register.  */
11640       if (DECL_REGISTER (decl))
11641         {
11642           original_result_rtx = DECL_RTL (decl);
11643           DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
11644         }
11645
11646       /* Let `cp_finish_decl' know that this initializer is ok.  */
11647       DECL_INITIAL (decl) = init;
11648       pushdecl (decl);
11649
11650       if (minimal_parse_mode)
11651         add_tree (build_min_nt (RETURN_INIT, return_id,
11652                                 copy_to_permanent (init)));
11653       else
11654         cp_finish_decl (decl, init, NULL_TREE, 0, LOOKUP_ONLYCONVERTING);
11655     }
11656 }
11657
11658 \f
11659 /* Finish up a function declaration and compile that function
11660    all the way to assembler language output.  The free the storage
11661    for the function definition.
11662
11663    This is called after parsing the body of the function definition.
11664    LINENO is the current line number.
11665
11666    C++: CALL_POPLEVEL is non-zero if an extra call to poplevel
11667    (and expand_end_bindings) must be made to take care of the binding
11668    contour for the base initializers.  This is only relevant for
11669    constructors.
11670
11671    NESTED is nonzero if we were in the middle of compiling another function
11672    when we started on this one.  */
11673
11674 void
11675 finish_function (lineno, call_poplevel, nested)
11676      int lineno;
11677      int call_poplevel;
11678      int nested;
11679 {
11680   register tree fndecl = current_function_decl;
11681   tree fntype, ctype = NULL_TREE;
11682   rtx last_parm_insn, insns;
11683   /* Label to use if this function is supposed to return a value.  */
11684   tree no_return_label = NULL_TREE;
11685   tree decls = NULL_TREE;
11686
11687   /* When we get some parse errors, we can end up without a
11688      current_function_decl, so cope.  */
11689   if (fndecl == NULL_TREE)
11690     return;
11691
11692   if (! nested && function_depth > 1)
11693     nested = 1;
11694
11695   fntype = TREE_TYPE (fndecl);
11696
11697 /*  TREE_READONLY (fndecl) = 1;
11698     This caused &foo to be of type ptr-to-const-function
11699     which then got a warning when stored in a ptr-to-function variable.  */
11700
11701   /* This happens on strange parse errors.  */
11702   if (! current_function_parms_stored)
11703     {
11704       call_poplevel = 0;
11705       store_parm_decls ();
11706     }
11707
11708   if (processing_template_decl)
11709     {
11710       if (DECL_CONSTRUCTOR_P (fndecl) && call_poplevel)
11711         {
11712           decls = getdecls ();
11713           expand_end_bindings (decls, decls != NULL_TREE, 0);
11714           poplevel (decls != NULL_TREE, 0, 0);
11715         }
11716     }
11717   else
11718     {
11719       if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
11720         {
11721           tree ttype = target_type (fntype);
11722           tree parmdecl;
11723
11724           if (IS_AGGR_TYPE (ttype))
11725             /* Let debugger know it should output info for this type.  */
11726             note_debug_info_needed (ttype);
11727
11728           for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
11729             {
11730               ttype = target_type (TREE_TYPE (parmdecl));
11731               if (IS_AGGR_TYPE (ttype))
11732                 /* Let debugger know it should output info for this type.  */
11733                 note_debug_info_needed (ttype);
11734             }
11735         }
11736
11737       /* Clean house because we will need to reorder insns here.  */
11738       do_pending_stack_adjust ();
11739
11740       if (dtor_label)
11741         {
11742           tree binfo = TYPE_BINFO (current_class_type);
11743           tree cond = integer_one_node;
11744           tree exprstmt;
11745           tree in_charge_node = lookup_name (in_charge_identifier, 0);
11746           tree virtual_size;
11747           int ok_to_optimize_dtor = 0;
11748           int empty_dtor = get_last_insn () == last_dtor_insn;
11749
11750           if (current_function_assigns_this)
11751             cond = build (NE_EXPR, boolean_type_node,
11752                           current_class_ptr, integer_zero_node);
11753           else
11754             {
11755               int n_baseclasses = CLASSTYPE_N_BASECLASSES (current_class_type);
11756
11757               /* If this destructor is empty, then we don't need to check
11758                  whether `this' is NULL in some cases.  */
11759               if ((flag_this_is_variable & 1) == 0)
11760                 ok_to_optimize_dtor = 1;
11761               else if (empty_dtor)
11762                 ok_to_optimize_dtor
11763                   = (n_baseclasses == 0
11764                      || (n_baseclasses == 1
11765                          && TYPE_HAS_DESTRUCTOR (TYPE_BINFO_BASETYPE (current_class_type, 0))));
11766             }
11767
11768           /* These initializations might go inline.  Protect
11769              the binding level of the parms.  */
11770           pushlevel (0);
11771           expand_start_bindings (0);
11772
11773           if (current_function_assigns_this)
11774             {
11775               current_function_assigns_this = 0;
11776               current_function_just_assigned_this = 0;
11777             }
11778
11779           /* Generate the code to call destructor on base class.
11780              If this destructor belongs to a class with virtual
11781              functions, then set the virtual function table
11782              pointer to represent the type of our base class.  */
11783
11784           /* This side-effect makes call to `build_delete' generate the
11785              code we have to have at the end of this destructor.  */
11786           TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
11787
11788           /* These are two cases where we cannot delegate deletion.  */
11789           if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)
11790               || TYPE_GETS_REG_DELETE (current_class_type))
11791             exprstmt = build_delete (current_class_type, current_class_ref, integer_zero_node,
11792                                      LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
11793           else
11794             exprstmt = build_delete (current_class_type, current_class_ref, in_charge_node,
11795                                      LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
11796
11797           /* If we did not assign to this, then `this' is non-zero at
11798              the end of a destructor.  As a special optimization, don't
11799              emit test if this is an empty destructor.  If it does nothing,
11800              it does nothing.  If it calls a base destructor, the base
11801              destructor will perform the test.  */
11802
11803           if (exprstmt != error_mark_node
11804               && (TREE_CODE (exprstmt) != NOP_EXPR
11805                   || TREE_OPERAND (exprstmt, 0) != integer_zero_node
11806                   || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
11807             {
11808               expand_label (dtor_label);
11809               if (cond != integer_one_node)
11810                 expand_start_cond (cond, 0);
11811               if (exprstmt != void_zero_node)
11812                 /* Don't call `expand_expr_stmt' if we're not going to do
11813                    anything, since -Wall will give a diagnostic.  */
11814                 expand_expr_stmt (exprstmt);
11815
11816               /* Run destructor on all virtual baseclasses.  */
11817               if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
11818                 {
11819                   tree vbases = nreverse (copy_list (CLASSTYPE_VBASECLASSES (current_class_type)));
11820                   expand_start_cond (build (BIT_AND_EXPR, integer_type_node,
11821                                             in_charge_node, integer_two_node), 0);
11822                   while (vbases)
11823                     {
11824                       if (TYPE_NEEDS_DESTRUCTOR (BINFO_TYPE (vbases)))
11825                         {
11826                           tree vb = get_vbase
11827                             (BINFO_TYPE (vbases),
11828                              TYPE_BINFO (current_class_type));
11829                           expand_expr_stmt
11830                             (build_scoped_method_call
11831                              (current_class_ref, vb, dtor_identifier,
11832                               build_tree_list (NULL_TREE, integer_zero_node)));
11833                         }
11834                       vbases = TREE_CHAIN (vbases);
11835                     }
11836                   expand_end_cond ();
11837                 }
11838
11839               do_pending_stack_adjust ();
11840               if (cond != integer_one_node)
11841                 expand_end_cond ();
11842             }
11843
11844           TYPE_HAS_DESTRUCTOR (current_class_type) = 1;
11845
11846           virtual_size = c_sizeof (current_class_type);
11847
11848           /* At the end, call delete if that's what's requested.  */
11849           if (TYPE_GETS_REG_DELETE (current_class_type))
11850             /* This NOP_EXPR means we are in a static call context.  */
11851             exprstmt
11852               = build_method_call (build_indirect_ref (build1 (NOP_EXPR,
11853                                                                build_pointer_type (current_class_type),
11854                                                                error_mark_node),
11855                                                        NULL_PTR),
11856                                    ansi_opname[(int) DELETE_EXPR],
11857                                    tree_cons (NULL_TREE, current_class_ptr,
11858                                               build_tree_list (NULL_TREE, virtual_size)),
11859                                    NULL_TREE, LOOKUP_NORMAL);
11860           else if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
11861             exprstmt = build_x_delete (ptr_type_node, current_class_ptr, 0,
11862                                        virtual_size);
11863           else
11864             exprstmt = NULL_TREE;
11865
11866           if (exprstmt)
11867             {
11868               cond = build (BIT_AND_EXPR, integer_type_node,
11869                             in_charge_node, integer_one_node);
11870               expand_start_cond (cond, 0);
11871               expand_expr_stmt (exprstmt);
11872               expand_end_cond ();
11873             }
11874
11875           /* End of destructor.  */
11876           expand_end_bindings (NULL_TREE, getdecls () != NULL_TREE, 0);
11877           poplevel (2, 0, 0);   /* XXX change to 1 */
11878
11879           /* Back to the top of destructor.  */
11880           /* Dont execute destructor code if `this' is NULL.  */
11881
11882           start_sequence ();
11883
11884           /* If the dtor is empty, and we know there is not possible way we
11885              could use any vtable entries, before they are possibly set by
11886              a base class dtor, we don't have to setup the vtables, as we
11887              know that any base class dtoring will set up any vtables it
11888              needs.  We avoid MI, because one base class dtor can do a
11889              virtual dispatch to an overridden function that would need to
11890              have a non-related vtable set up, we cannot avoid setting up
11891              vtables in that case.  We could change this to see if there is
11892              just one vtable.  */
11893           if (! empty_dtor || TYPE_USES_COMPLEX_INHERITANCE (current_class_type))
11894             {
11895               /* Make all virtual function table pointers in non-virtual base
11896                  classes point to CURRENT_CLASS_TYPE's virtual function
11897                  tables.  */
11898               expand_direct_vtbls_init (binfo, binfo, 1, 0, current_class_ptr);
11899
11900               if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
11901                 expand_indirect_vtbls_init (binfo, current_class_ref, current_class_ptr);
11902             }
11903           
11904           if (! ok_to_optimize_dtor)
11905             {
11906               cond = build_binary_op (NE_EXPR,
11907                                       current_class_ptr, integer_zero_node, 1);
11908               expand_start_cond (cond, 0);
11909             }
11910
11911           insns = get_insns ();
11912           end_sequence ();
11913
11914           last_parm_insn = get_first_nonparm_insn ();
11915           if (last_parm_insn == NULL_RTX)
11916             last_parm_insn = get_last_insn ();
11917           else
11918             last_parm_insn = previous_insn (last_parm_insn);
11919
11920           emit_insns_after (insns, last_parm_insn);
11921
11922           if (! ok_to_optimize_dtor)
11923             expand_end_cond ();
11924         }
11925       else if (current_function_assigns_this)
11926         {
11927           /* Does not need to call emit_base_init, because
11928              that is done (if needed) just after assignment to this
11929              is seen.  */
11930
11931           if (DECL_CONSTRUCTOR_P (current_function_decl))
11932             {
11933               end_protect_partials ();
11934               expand_label (ctor_label);
11935               ctor_label = NULL_TREE;
11936
11937               if (call_poplevel)
11938                 {
11939                   decls = getdecls ();
11940                   expand_end_bindings (decls, decls != NULL_TREE, 0);
11941                   poplevel (decls != NULL_TREE, 0, 0);
11942                 }
11943               c_expand_return (current_class_ptr);
11944             }
11945           else if (TYPE_MAIN_VARIANT (TREE_TYPE (
11946                                                  DECL_RESULT (current_function_decl))) != void_type_node
11947                    && return_label != NULL_RTX)
11948             no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
11949
11950           current_function_assigns_this = 0;
11951           current_function_just_assigned_this = 0;
11952           base_init_expr = NULL_TREE;
11953         }
11954       else if (DECL_CONSTRUCTOR_P (fndecl))
11955         {
11956           tree cond, thenclause;
11957           /* Allow constructor for a type to get a new instance of the object
11958              using `build_new'.  */
11959           tree abstract_virtuals = CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type);
11960           CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = NULL_TREE;
11961
11962           DECL_RETURNS_FIRST_ARG (fndecl) = 1;
11963
11964           if (flag_this_is_variable > 0)
11965             {
11966               cond = build_binary_op (EQ_EXPR,
11967                                       current_class_ptr, integer_zero_node, 1);
11968               thenclause = build_modify_expr (current_class_ptr, NOP_EXPR,
11969                                               build_new (NULL_TREE, current_class_type, void_type_node, 0));
11970             }
11971
11972           CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = abstract_virtuals;
11973
11974           start_sequence ();
11975
11976           if (flag_this_is_variable > 0)
11977             {
11978               expand_start_cond (cond, 0);
11979               expand_expr_stmt (thenclause);
11980               expand_end_cond ();
11981             }
11982
11983           /* Emit insns from `emit_base_init' which sets up virtual
11984              function table pointer(s).  */
11985           if (base_init_expr)
11986             {
11987               expand_expr_stmt (base_init_expr);
11988               base_init_expr = NULL_TREE;
11989             }
11990
11991           insns = get_insns ();
11992           end_sequence ();
11993
11994           /* This is where the body of the constructor begins.  */
11995
11996           emit_insns_after (insns, last_parm_cleanup_insn);
11997
11998           end_protect_partials ();
11999
12000           /* This is where the body of the constructor ends.  */
12001           expand_label (ctor_label);
12002           ctor_label = NULL_TREE;
12003
12004           if (call_poplevel)
12005             {
12006               decls = getdecls ();
12007               expand_end_bindings (decls, decls != NULL_TREE, 0);
12008               poplevel (decls != NULL_TREE, 1, 0);
12009             }
12010
12011           c_expand_return (current_class_ptr);
12012
12013           current_function_assigns_this = 0;
12014           current_function_just_assigned_this = 0;
12015         }
12016       else if (IDENTIFIER_LENGTH (DECL_NAME (fndecl)) == 4
12017                && ! strcmp (IDENTIFIER_POINTER (DECL_NAME (fndecl)), "main")
12018                && DECL_CONTEXT (fndecl) == NULL_TREE)
12019         {
12020           /* Make it so that `main' always returns 0 by default.  */
12021 #ifdef VMS
12022           c_expand_return (integer_one_node);
12023 #else
12024           c_expand_return (integer_zero_node);
12025 #endif
12026         }
12027       else if (return_label != NULL_RTX
12028                && current_function_return_value == NULL_TREE
12029                && ! DECL_NAME (DECL_RESULT (current_function_decl)))
12030         no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
12031
12032       if (flag_exceptions)
12033         expand_exception_blocks ();
12034
12035       /* If this function is supposed to return a value, ensure that
12036          we do not fall into the cleanups by mistake.  The end of our
12037          function will look like this:
12038          
12039          user code (may have return stmt somewhere)
12040          goto no_return_label
12041          cleanup_label:
12042          cleanups
12043          goto return_label
12044          no_return_label:
12045          NOTE_INSN_FUNCTION_END
12046          return_label:
12047          things for return
12048          
12049          If the user omits a return stmt in the USER CODE section, we
12050          will have a control path which reaches NOTE_INSN_FUNCTION_END.
12051          Otherwise, we won't.  */
12052       if (no_return_label)
12053         {
12054           DECL_CONTEXT (no_return_label) = fndecl;
12055           DECL_INITIAL (no_return_label) = error_mark_node;
12056           DECL_SOURCE_FILE (no_return_label) = input_filename;
12057           DECL_SOURCE_LINE (no_return_label) = lineno;
12058           expand_goto (no_return_label);
12059         }
12060
12061       if (cleanup_label)
12062         {
12063           /* remove the binding contour which is used
12064              to catch cleanup-generated temporaries.  */
12065           expand_end_bindings (0, 0, 0);
12066           poplevel (0, 0, 0);
12067
12068           /* Emit label at beginning of cleanup code for parameters.  */
12069           emit_label (cleanup_label);
12070         }
12071
12072       /* Get return value into register if that's where it's supposed to be.  */
12073       if (original_result_rtx)
12074         fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
12075
12076       /* Finish building code that will trigger warnings if users forget
12077          to make their functions return values.  */
12078       if (no_return_label || cleanup_label)
12079         emit_jump (return_label);
12080       if (no_return_label)
12081         {
12082           /* We don't need to call `expand_*_return' here because we
12083              don't need any cleanups here--this path of code is only
12084              for error checking purposes.  */
12085           expand_label (no_return_label);
12086         }
12087
12088       /* Generate rtl for function exit.  */
12089       expand_function_end (input_filename, lineno, 1);
12090     }
12091
12092   /* This must come after expand_function_end because cleanups might
12093      have declarations (from inline functions) that need to go into
12094      this function's blocks.  */
12095   if (current_binding_level->parm_flag != 1)
12096     my_friendly_abort (122);
12097   poplevel (1, 0, 1);
12098
12099   /* reset scope for C++: if we were in the scope of a class,
12100      then when we finish this function, we are not longer so.
12101      This cannot be done until we know for sure that no more
12102      class members will ever be referenced in this function
12103      (i.e., calls to destructors).  */
12104   if (current_class_name)
12105     {
12106       ctype = current_class_type;
12107       pop_nested_class (1);
12108     }
12109   else
12110     pop_memoized_context (1);
12111
12112   /* Must mark the RESULT_DECL as being in this function.  */
12113   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
12114
12115   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
12116      to the FUNCTION_DECL node itself.  */
12117   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
12118
12119   if (! processing_template_decl)
12120     {
12121       /* So we can tell if jump_optimize sets it to 1.  */
12122       can_reach_end = 0;
12123
12124       /* Run the optimizers and output the assembler code for this
12125          function.  */
12126
12127       if (DECL_ARTIFICIAL (fndecl))
12128         {
12129           /* Do we really *want* to inline this synthesized method?  */
12130
12131           int save_fif = flag_inline_functions;
12132           flag_inline_functions = 1;
12133
12134           /* Turn off DECL_INLINE for the moment so function_cannot_inline_p
12135              will check our size.  */
12136           DECL_INLINE (fndecl) = 0;
12137
12138           rest_of_compilation (fndecl);
12139           flag_inline_functions = save_fif;
12140         }
12141       else
12142         rest_of_compilation (fndecl);
12143
12144       if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
12145         {
12146           /* Set DECL_EXTERNAL so that assemble_external will be called as
12147              necessary.  We'll clear it again in finish_file.  */
12148           if (! DECL_EXTERNAL (fndecl))
12149             DECL_NOT_REALLY_EXTERN (fndecl) = 1;
12150           DECL_EXTERNAL (fndecl) = 1;
12151           mark_inline_for_output (fndecl);
12152         }
12153
12154       if (ctype && TREE_ASM_WRITTEN (fndecl))
12155         note_debug_info_needed (ctype);
12156
12157       current_function_returns_null |= can_reach_end;
12158
12159       /* Since we don't normally go through c_expand_return for constructors,
12160          this normally gets the wrong value.
12161          Also, named return values have their return codes emitted after
12162          NOTE_INSN_FUNCTION_END, confusing jump.c.  */
12163       if (DECL_CONSTRUCTOR_P (fndecl)
12164           || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
12165         current_function_returns_null = 0;
12166
12167       if (TREE_THIS_VOLATILE (fndecl) && current_function_returns_null)
12168         cp_warning ("`noreturn' function `%D' does return", fndecl);
12169       else if ((warn_return_type || pedantic)
12170                && current_function_returns_null
12171                && TYPE_MAIN_VARIANT (TREE_TYPE (fntype)) != void_type_node)
12172         {
12173           /* If this function returns non-void and control can drop through,
12174              complain.  */
12175           cp_pedwarn ("control reaches end of non-void function `%D'", fndecl);
12176         }
12177       /* With just -W, complain only if function returns both with
12178          and without a value.  */
12179       else if (extra_warnings
12180                && current_function_returns_value && current_function_returns_null)
12181         warning ("this function may return with or without a value");
12182     }
12183
12184   --function_depth;
12185
12186   /* Free all the tree nodes making up this function.  */
12187   /* Switch back to allocating nodes permanently
12188      until we start another function.  */
12189   if (processing_template_decl)
12190     {
12191       --minimal_parse_mode;
12192       DECL_SAVED_TREE (fndecl) = TREE_CHAIN (DECL_SAVED_TREE (fndecl));
12193     }
12194
12195   if (! nested)
12196     permanent_allocation (1);
12197
12198   if (DECL_SAVED_INSNS (fndecl) == NULL_RTX)
12199     {
12200       tree t;
12201
12202       /* Stop pointing to the local nodes about to be freed.  */
12203       /* But DECL_INITIAL must remain nonzero so we know this
12204          was an actual function definition.  */
12205       DECL_INITIAL (fndecl) = error_mark_node;
12206       for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
12207         DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
12208     }
12209
12210   if (DECL_STATIC_CONSTRUCTOR (fndecl))
12211     static_ctors = perm_tree_cons (NULL_TREE, fndecl, static_ctors);
12212   if (DECL_STATIC_DESTRUCTOR (fndecl))
12213     static_dtors = perm_tree_cons (NULL_TREE, fndecl, static_dtors);
12214
12215   if (! nested)
12216     {
12217       /* Let the error reporting routines know that we're outside a
12218          function.  For a nested function, this value is used in
12219          pop_cp_function_context and then reset via pop_function_context.  */
12220       current_function_decl = NULL_TREE;
12221     }
12222
12223   named_label_uses = NULL;
12224   current_class_ptr = NULL_TREE;
12225   current_class_ref = NULL_TREE;
12226 }
12227 \f
12228 /* Create the FUNCTION_DECL for a function definition.
12229    LINE1 is the line number that the definition absolutely begins on.
12230    LINE2 is the line number that the name of the function appears on.
12231    DECLSPECS and DECLARATOR are the parts of the declaration;
12232    they describe the return type and the name of the function,
12233    but twisted together in a fashion that parallels the syntax of C.
12234
12235    This function creates a binding context for the function body
12236    as well as setting up the FUNCTION_DECL in current_function_decl.
12237
12238    Returns a FUNCTION_DECL on success.
12239
12240    If the DECLARATOR is not suitable for a function (it defines a datum
12241    instead), we return 0, which tells yyparse to report a parse error.
12242
12243    May return void_type_node indicating that this method is actually
12244    a friend.  See grokfield for more details.
12245
12246    Came here with a `.pushlevel' .
12247
12248    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
12249    CHANGES TO CODE IN `grokfield'.  */
12250
12251 tree
12252 start_method (declspecs, declarator)
12253      tree declarator, declspecs;
12254 {
12255   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
12256                                 NULL_TREE);
12257
12258   /* Something too ugly to handle.  */
12259   if (fndecl == NULL_TREE)
12260     return NULL_TREE;
12261
12262   /* Pass friends other than inline friend functions back.  */
12263   if (TYPE_MAIN_VARIANT (fndecl) == void_type_node)
12264     return fndecl;
12265
12266   if (TREE_CODE (fndecl) != FUNCTION_DECL)
12267     /* Not a function, tell parser to report parse error.  */
12268     return NULL_TREE;
12269
12270   if (IS_SIGNATURE (current_class_type))
12271     IS_DEFAULT_IMPLEMENTATION (fndecl) = 1;
12272
12273   if (DECL_IN_AGGR_P (fndecl))
12274     {
12275       if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
12276         {
12277           if (DECL_CONTEXT (fndecl))
12278             cp_error ("`%D' is already defined in class %s", fndecl,
12279                              TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
12280         }
12281       return void_type_node;
12282     }
12283
12284   DECL_THIS_INLINE (fndecl) = 1;
12285
12286   if (flag_default_inline)
12287     DECL_INLINE (fndecl) = 1;
12288
12289   if (processing_template_decl && ! current_function_decl)
12290     push_template_decl (fndecl);
12291
12292   /* We read in the parameters on the maybepermanent_obstack,
12293      but we won't be getting back to them until after we
12294      may have clobbered them.  So the call to preserve_data
12295      will keep them safe.  */
12296   preserve_data ();
12297
12298   if (! DECL_FRIEND_P (fndecl))
12299     {
12300       if (DECL_CHAIN (fndecl) != NULL_TREE)
12301         {
12302           /* Need a fresh node here so that we don't get circularity
12303              when we link these together.  If FNDECL was a friend, then
12304              `pushdecl' does the right thing, which is nothing wrt its
12305              current value of DECL_CHAIN.  */
12306           fndecl = copy_node (fndecl);
12307         }
12308       if (TREE_CHAIN (fndecl))
12309         {
12310           fndecl = copy_node (fndecl);
12311           TREE_CHAIN (fndecl) = NULL_TREE;
12312         }
12313
12314       if (DECL_CONSTRUCTOR_P (fndecl))
12315         {
12316           if (! grok_ctor_properties (current_class_type, fndecl))
12317             return void_type_node;
12318         }
12319       else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
12320         grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
12321     }
12322
12323   cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0, 0);
12324
12325   /* Make a place for the parms */
12326   pushlevel (0);
12327   current_binding_level->parm_flag = 1;
12328   
12329   DECL_IN_AGGR_P (fndecl) = 1;
12330   return fndecl;
12331 }
12332
12333 /* Go through the motions of finishing a function definition.
12334    We don't compile this method until after the whole class has
12335    been processed.
12336
12337    FINISH_METHOD must return something that looks as though it
12338    came from GROKFIELD (since we are defining a method, after all).
12339
12340    This is called after parsing the body of the function definition.
12341    STMTS is the chain of statements that makes up the function body.
12342
12343    DECL is the ..._DECL that `start_method' provided.  */
12344
12345 tree
12346 finish_method (decl)
12347      tree decl;
12348 {
12349   register tree fndecl = decl;
12350   tree old_initial;
12351
12352   register tree link;
12353
12354   if (TYPE_MAIN_VARIANT (decl) == void_type_node)
12355     return decl;
12356
12357   old_initial = DECL_INITIAL (fndecl);
12358
12359   /* Undo the level for the parms (from start_method).
12360      This is like poplevel, but it causes nothing to be
12361      saved.  Saving information here confuses symbol-table
12362      output routines.  Besides, this information will
12363      be correctly output when this method is actually
12364      compiled.  */
12365
12366   /* Clear out the meanings of the local variables of this level;
12367      also record in each decl which block it belongs to.  */
12368
12369   for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
12370     {
12371       if (DECL_NAME (link) != NULL_TREE)
12372         IDENTIFIER_LOCAL_VALUE (DECL_NAME (link)) = 0;
12373       my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
12374       DECL_CONTEXT (link) = NULL_TREE;
12375     }
12376
12377   /* Restore all name-meanings of the outer levels
12378      that were shadowed by this level.  */
12379
12380   for (link = current_binding_level->shadowed; link; link = TREE_CHAIN (link))
12381       IDENTIFIER_LOCAL_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
12382   for (link = current_binding_level->class_shadowed;
12383        link; link = TREE_CHAIN (link))
12384     IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
12385   for (link = current_binding_level->type_shadowed;
12386        link; link = TREE_CHAIN (link))
12387     IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
12388
12389   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
12390                       (HOST_WIDE_INT) current_binding_level->level_chain,
12391                       current_binding_level->parm_flag,
12392                       current_binding_level->keep);
12393
12394   poplevel (0, 0, 0);
12395
12396   DECL_INITIAL (fndecl) = old_initial;
12397
12398   /* We used to check if the context of FNDECL was different from
12399      current_class_type as another way to get inside here.  This didn't work
12400      for String.cc in libg++.  */
12401   if (DECL_FRIEND_P (fndecl))
12402     {
12403       CLASSTYPE_INLINE_FRIENDS (current_class_type)
12404         = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
12405       decl = void_type_node;
12406     }
12407
12408   return decl;
12409 }
12410 \f
12411 /* Called when a new struct TYPE is defined.
12412    If this structure or union completes the type of any previous
12413    variable declaration, lay it out and output its rtl.  */
12414
12415 void
12416 hack_incomplete_structures (type)
12417      tree type;
12418 {
12419   tree *list;
12420
12421   if (current_binding_level->incomplete == NULL_TREE)
12422     return;
12423
12424   if (!type) /* Don't do this for class templates.  */
12425     return;
12426
12427   for (list = &current_binding_level->incomplete; *list; )
12428     {
12429       tree decl = TREE_VALUE (*list);
12430       if (decl && TREE_TYPE (decl) == type
12431           || (TREE_TYPE (decl)
12432               && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
12433               && TREE_TYPE (TREE_TYPE (decl)) == type))
12434         {
12435           int toplevel = toplevel_bindings_p ();
12436           if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
12437               && TREE_TYPE (TREE_TYPE (decl)) == type)
12438             layout_type (TREE_TYPE (decl));
12439           layout_decl (decl, 0);
12440           rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
12441           if (! toplevel)
12442             {
12443               tree cleanup;
12444               expand_decl (decl);
12445               cleanup = maybe_build_cleanup (decl);
12446               expand_decl_init (decl);
12447               if (! expand_decl_cleanup (decl, cleanup))
12448                 cp_error ("parser lost in parsing declaration of `%D'",
12449                           decl);
12450             }
12451           *list = TREE_CHAIN (*list);
12452         }
12453       else
12454         list = &TREE_CHAIN (*list);
12455     }
12456 }
12457
12458 /* If DECL is of a type which needs a cleanup, build that cleanup here.
12459    See build_delete for information about AUTO_DELETE.
12460
12461    Don't build these on the momentary obstack; they must live
12462    the life of the binding contour.  */
12463
12464 static tree
12465 maybe_build_cleanup_1 (decl, auto_delete)
12466      tree decl, auto_delete;
12467 {
12468   tree type = TREE_TYPE (decl);
12469   if (TYPE_NEEDS_DESTRUCTOR (type))
12470     {
12471       int temp = 0, flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
12472       tree rval;
12473
12474       if (TREE_CODE (decl) != PARM_DECL)
12475         temp = suspend_momentary ();
12476
12477       if (TREE_CODE (type) == ARRAY_TYPE)
12478         rval = decl;
12479       else
12480         {
12481           mark_addressable (decl);
12482           rval = build_unary_op (ADDR_EXPR, decl, 0);
12483         }
12484
12485       /* Optimize for space over speed here.  */
12486       if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
12487           || flag_expensive_optimizations)
12488         flags |= LOOKUP_NONVIRTUAL;
12489
12490       rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
12491
12492       if (TYPE_USES_VIRTUAL_BASECLASSES (type)
12493           && ! TYPE_HAS_DESTRUCTOR (type))
12494         rval = build_compound_expr (tree_cons (NULL_TREE, rval,
12495                                                build_tree_list (NULL_TREE, build_vbase_delete (type, decl))));
12496
12497       if (TREE_CODE (decl) != PARM_DECL)
12498         resume_momentary (temp);
12499
12500       return rval;
12501     }
12502   return 0;
12503 }
12504
12505 /* If DECL is of a type which needs a cleanup, build that cleanup
12506    here.  The cleanup does free the storage with a call to delete.  */
12507
12508 tree
12509 maybe_build_cleanup_and_delete (decl)
12510      tree decl;
12511 {
12512   return maybe_build_cleanup_1 (decl, integer_three_node);
12513 }
12514
12515 /* If DECL is of a type which needs a cleanup, build that cleanup
12516    here.  The cleanup does not free the storage with a call a delete.  */
12517
12518 tree
12519 maybe_build_cleanup (decl)
12520      tree decl;
12521 {
12522   return maybe_build_cleanup_1 (decl, integer_two_node);
12523 }
12524 \f
12525 /* Expand a C++ expression at the statement level.
12526    This is needed to ferret out nodes which have UNKNOWN_TYPE.
12527    The C++ type checker should get all of these out when
12528    expressions are combined with other, type-providing, expressions,
12529    leaving only orphan expressions, such as:
12530
12531    &class::bar;         / / takes its address, but does nothing with it.  */
12532
12533 void
12534 cplus_expand_expr_stmt (exp)
12535      tree exp;
12536 {
12537   if (processing_template_decl)
12538     {
12539       add_tree (build_min_nt (EXPR_STMT, exp));
12540       return;
12541     }
12542
12543   /* Arrange for all temps to disappear.  */
12544   expand_start_target_temps ();
12545
12546   if (TREE_TYPE (exp) == unknown_type_node)
12547     {
12548       if (TREE_CODE (exp) == ADDR_EXPR || TREE_CODE (exp) == TREE_LIST)
12549         error ("address of overloaded function with no contextual type information");
12550       else if (TREE_CODE (exp) == COMPONENT_REF)
12551         warning ("useless reference to a member function name, did you forget the ()?");
12552     }
12553   else
12554     {
12555       if (TREE_CODE (exp) == FUNCTION_DECL)
12556         {
12557           cp_warning ("reference, not call, to function `%D'", exp);
12558           warning ("at this point in file");
12559         }
12560
12561 #if 0
12562       /* We should do this eventually, but right now this causes regex.o from
12563          libg++ to miscompile, and tString to core dump.  */
12564       exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
12565 #endif
12566       /* If we don't do this, we end up down inside expand_expr
12567          trying to do TYPE_MODE on the ERROR_MARK, and really
12568          go outside the bounds of the type.  */
12569       if (exp != error_mark_node)
12570         expand_expr_stmt (break_out_cleanups (exp));
12571     }
12572
12573   /* Clean up any pending cleanups.  This happens when a function call
12574      returns a cleanup-needing value that nobody uses.  */
12575   expand_end_target_temps ();
12576 }
12577
12578 /* When a stmt has been parsed, this function is called.
12579
12580    Currently, this function only does something within a
12581    constructor's scope: if a stmt has just assigned to this,
12582    and we are in a derived class, we call `emit_base_init'.  */
12583
12584 void
12585 finish_stmt ()
12586 {
12587   extern struct nesting *cond_stack, *loop_stack, *case_stack;
12588
12589   
12590   if (current_function_assigns_this
12591       || ! current_function_just_assigned_this)
12592     return;
12593   if (DECL_CONSTRUCTOR_P (current_function_decl))
12594     {
12595       /* Constructors must wait until we are out of control
12596          zones before calling base constructors.  */
12597       if (cond_stack || loop_stack || case_stack)
12598         return;
12599       expand_expr_stmt (base_init_expr);
12600       check_base_init (current_class_type);
12601     }
12602   current_function_assigns_this = 1;
12603 }
12604
12605 /* Change a static member function definition into a FUNCTION_TYPE, instead
12606    of the METHOD_TYPE that we create when it's originally parsed.
12607
12608    WARNING: DO NOT pass &TREE_TYPE (decl) to FN or &TYPE_ARG_TYPES
12609    (TREE_TYPE (decl)) to ARGTYPES, as doing so will corrupt the types of
12610    other decls.  Either pass the addresses of local variables or NULL.  */
12611
12612 static void
12613 revert_static_member_fn (decl, fn, argtypes)
12614      tree *decl, *fn, *argtypes;
12615 {
12616   tree tmp;
12617   tree function = fn ? *fn : TREE_TYPE (*decl);
12618   tree args = argtypes ? *argtypes : TYPE_ARG_TYPES (function);
12619
12620   if (TYPE_READONLY (TREE_TYPE (TREE_VALUE (args))))
12621     cp_error ("static member function `%#D' declared const", *decl);
12622   if (TYPE_VOLATILE (TREE_TYPE (TREE_VALUE (args))))
12623     cp_error ("static member function `%#D' declared volatile", *decl);
12624
12625   args = TREE_CHAIN (args);
12626   tmp = build_function_type (TREE_TYPE (function), args);
12627   tmp = build_type_variant (tmp, TYPE_READONLY (function),
12628                             TYPE_VOLATILE (function));
12629   tmp = build_exception_variant (tmp,
12630                                  TYPE_RAISES_EXCEPTIONS (function));
12631   TREE_TYPE (*decl) = tmp;
12632   if (DECL_ARGUMENTS (*decl))
12633     DECL_ARGUMENTS (*decl) = TREE_CHAIN (DECL_ARGUMENTS (*decl));
12634   DECL_STATIC_FUNCTION_P (*decl) = 1;
12635   if (fn)
12636     *fn = tmp;
12637   if (argtypes)
12638     *argtypes = args;
12639 }
12640
12641 int
12642 id_in_current_class (id)
12643      tree id;
12644 {
12645   return !!purpose_member (id, class_binding_level->class_shadowed);
12646 }
12647
12648 struct cp_function
12649 {
12650   int returns_value;
12651   int returns_null;
12652   int warn_about_return_type;
12653   int assigns_this;
12654   int just_assigned_this;
12655   int parms_stored;
12656   int temp_name_counter;
12657   tree named_labels;
12658   tree shadowed_labels;
12659   tree ctor_label;
12660   tree dtor_label;
12661   rtx last_dtor_insn;
12662   rtx last_parm_cleanup_insn;
12663   tree base_init_list;
12664   tree member_init_list;
12665   tree base_init_expr;
12666   tree current_class_ptr;
12667   tree current_class_ref;
12668   rtx result_rtx;
12669   struct cp_function *next;
12670   struct binding_level *binding_level;
12671   int static_labelno;
12672 };
12673
12674 static struct cp_function *cp_function_chain;
12675
12676 extern int temp_name_counter;
12677
12678 /* Save and reinitialize the variables
12679    used during compilation of a C++ function.  */
12680
12681 void
12682 push_cp_function_context (context)
12683      tree context;
12684 {
12685   struct cp_function *p
12686     = (struct cp_function *) xmalloc (sizeof (struct cp_function));
12687
12688   push_function_context_to (context);
12689
12690   p->next = cp_function_chain;
12691   cp_function_chain = p;
12692
12693   p->named_labels = named_labels;
12694   p->shadowed_labels = shadowed_labels;
12695   p->returns_value = current_function_returns_value;
12696   p->returns_null = current_function_returns_null;
12697   p->warn_about_return_type = warn_about_return_type;
12698   p->binding_level = current_binding_level;
12699   p->ctor_label = ctor_label;
12700   p->dtor_label = dtor_label;
12701   p->last_dtor_insn = last_dtor_insn;
12702   p->last_parm_cleanup_insn = last_parm_cleanup_insn;
12703   p->assigns_this = current_function_assigns_this;
12704   p->just_assigned_this = current_function_just_assigned_this;
12705   p->parms_stored = current_function_parms_stored;
12706   p->result_rtx = original_result_rtx;
12707   p->base_init_expr = base_init_expr;
12708   p->temp_name_counter = temp_name_counter;
12709   p->base_init_list = current_base_init_list;
12710   p->member_init_list = current_member_init_list;
12711   p->current_class_ptr = current_class_ptr;
12712   p->current_class_ref = current_class_ref;
12713   p->static_labelno = static_labelno;
12714 }
12715
12716 /* Restore the variables used during compilation of a C++ function.  */
12717
12718 void
12719 pop_cp_function_context (context)
12720      tree context;
12721 {
12722   struct cp_function *p = cp_function_chain;
12723   tree link;
12724
12725   /* Bring back all the labels that were shadowed.  */
12726   for (link = shadowed_labels; link; link = TREE_CHAIN (link))
12727     if (DECL_NAME (TREE_VALUE (link)) != 0)
12728       SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link)),
12729                                   TREE_VALUE (link));
12730
12731   pop_function_context_from (context);
12732
12733   cp_function_chain = p->next;
12734
12735   named_labels = p->named_labels;
12736   shadowed_labels = p->shadowed_labels;
12737   current_function_returns_value = p->returns_value;
12738   current_function_returns_null = p->returns_null;
12739   warn_about_return_type = p->warn_about_return_type;
12740   current_binding_level = p->binding_level;
12741   ctor_label = p->ctor_label;
12742   dtor_label = p->dtor_label;
12743   last_dtor_insn = p->last_dtor_insn;
12744   last_parm_cleanup_insn = p->last_parm_cleanup_insn;
12745   current_function_assigns_this = p->assigns_this;
12746   current_function_just_assigned_this = p->just_assigned_this;
12747   current_function_parms_stored = p->parms_stored;
12748   original_result_rtx = p->result_rtx;
12749   base_init_expr = p->base_init_expr;
12750   temp_name_counter = p->temp_name_counter;
12751   current_base_init_list = p->base_init_list;
12752   current_member_init_list = p->member_init_list;
12753   current_class_ptr = p->current_class_ptr;
12754   current_class_ref = p->current_class_ref;
12755   static_labelno = p->static_labelno;
12756
12757   free (p);
12758 }
12759
12760 int
12761 in_function_p ()
12762 {
12763   return function_depth != 0;
12764 }
12765
12766 /* FSF LOCAL dje prefix attributes */
12767 /* Strip attributes from SPECS_ATTRS, a list of declspecs and attributes.
12768    This function is used by the parser when a rule will accept attributes
12769    in a particular position, but we don't want to support that just yet.
12770
12771    A warning is issued for every ignored attribute.  */
12772
12773 tree
12774 strip_attrs (specs_attrs)
12775      tree specs_attrs;
12776 {
12777   tree specs, attrs;
12778
12779   split_specs_attrs (specs_attrs, &specs, &attrs);
12780
12781   while (attrs)
12782     {
12783       warning ("`%s' attribute ignored",
12784                IDENTIFIER_POINTER (TREE_PURPOSE (attrs)));
12785       attrs = TREE_CHAIN (attrs);
12786     }
12787
12788   return specs;
12789 }
12790 /* END FSF LOCAL */
12791