OSDN Git Service

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