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