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