Add the DragonFly cvs id and perform general cleanups on cvs/rcs/sccs ids. Most
[dragonfly.git] / contrib / gcc / cp / decl.c
1 /* Process declarations and variables for C compiler.
2    Copyright (C) 1988, 92-98, 1999 Free Software Foundation, Inc.
3    Contributed 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 /* $FreeBSD: src/contrib/gcc/cp/decl.c,v 1.4.2.2 2000/08/07 10:06:54 obrien Exp $ */
23 /* $DragonFly: src/contrib/gcc/cp/Attic/decl.c,v 1.2 2003/06/17 04:24:02 dillon Exp $ */
24
25
26 /* Process declarations and symbol lookup for C front end.
27    Also constructs types; the standard scalar types at initialization,
28    and structure, union, array and enum types when they are declared.  */
29
30 /* ??? not all decl nodes are given the most useful possible
31    line numbers.  For example, the CONST_DECLs for enum values.  */
32
33 #include "config.h"
34 #include "system.h"
35 #include "tree.h"
36 #include "rtl.h"
37 #include "flags.h"
38 #include "cp-tree.h"
39 #include "decl.h"
40 #include "lex.h"
41 #include <signal.h>
42 #include "obstack.h"
43 #include "defaults.h"
44 #include "output.h"
45 #include "except.h"
46 #include "toplev.h"
47 #include "../hash.h"
48
49 #define obstack_chunk_alloc xmalloc
50 #define obstack_chunk_free free
51
52 extern tree builtin_return_address_fndecl;
53
54 extern struct obstack permanent_obstack;
55 extern struct obstack* saveable_obstack;
56
57 extern int current_class_depth;
58
59 extern tree static_ctors, static_dtors;
60
61 extern int static_labelno;
62
63 extern tree current_namespace;
64 extern tree global_namespace;
65
66 extern void (*print_error_function) PROTO((char *));
67 extern int (*valid_lang_attribute) PROTO ((tree, tree, tree, tree));
68
69 /* Obstack used for remembering local class declarations (like
70    enums and static (const) members.  */
71 #include "stack.h"
72 struct obstack decl_obstack;
73 static struct stack_level *decl_stack;
74
75 #ifndef CHAR_TYPE_SIZE
76 #define CHAR_TYPE_SIZE BITS_PER_UNIT
77 #endif
78
79 #ifndef SHORT_TYPE_SIZE
80 #define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2))
81 #endif
82
83 #ifndef INT_TYPE_SIZE
84 #define INT_TYPE_SIZE BITS_PER_WORD
85 #endif
86
87 #ifndef LONG_TYPE_SIZE
88 #define LONG_TYPE_SIZE BITS_PER_WORD
89 #endif
90
91 #ifndef LONG_LONG_TYPE_SIZE
92 #define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
93 #endif
94
95 #ifndef WCHAR_UNSIGNED
96 #define WCHAR_UNSIGNED 0
97 #endif
98
99 #ifndef FLOAT_TYPE_SIZE
100 #define FLOAT_TYPE_SIZE BITS_PER_WORD
101 #endif
102
103 #ifndef DOUBLE_TYPE_SIZE
104 #define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
105 #endif
106
107 #ifndef LONG_DOUBLE_TYPE_SIZE
108 #define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
109 #endif
110
111 #ifndef BOOL_TYPE_SIZE
112 #ifdef SLOW_BYTE_ACCESS
113 #define BOOL_TYPE_SIZE ((SLOW_BYTE_ACCESS) ? (POINTER_SIZE) : (CHAR_TYPE_SIZE))
114 #else
115 #define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
116 #endif
117 #endif
118
119 /* We let tm.h override the types used here, to handle trivial differences
120    such as the choice of unsigned int or long unsigned int for size_t.
121    When machines start needing nontrivial differences in the size type,
122    it would be best to do something here to figure out automatically
123    from other information what type to use.  */
124
125 #ifndef SIZE_TYPE
126 #define SIZE_TYPE "long unsigned int"
127 #endif
128
129 #ifndef PTRDIFF_TYPE
130 #define PTRDIFF_TYPE "long int"
131 #endif
132
133 #ifndef WCHAR_TYPE
134 #define WCHAR_TYPE "int"
135 #endif
136
137 static tree grokparms                           PROTO((tree, int));
138 static tree lookup_nested_type                  PROTO((tree, tree));
139 static const char *redeclaration_error_message  PROTO((tree, tree));
140
141 static struct stack_level *push_decl_level PROTO((struct stack_level *,
142                                                   struct obstack *));
143 static void push_binding_level PROTO((struct binding_level *, int,
144                                       int));
145 static void pop_binding_level PROTO((void));
146 static void suspend_binding_level PROTO((void));
147 static void resume_binding_level PROTO((struct binding_level *));
148 static struct binding_level *make_binding_level PROTO((void));
149 static void declare_namespace_level PROTO((void));
150 static void signal_catch PROTO((int)) ATTRIBUTE_NORETURN;
151 static void storedecls PROTO((tree));
152 static void require_complete_types_for_parms PROTO((tree));
153 static void push_overloaded_decl_1 PROTO((tree));
154 static int ambi_op_p PROTO((tree));
155 static int unary_op_p PROTO((tree));
156 static tree store_bindings PROTO((tree, tree));
157 static tree lookup_tag_reverse PROTO((tree, tree));
158 static tree obscure_complex_init PROTO((tree, tree));
159 static tree maybe_build_cleanup_1 PROTO((tree, tree));
160 static tree lookup_name_real PROTO((tree, int, int, int));
161 static void warn_extern_redeclared_static PROTO((tree, tree));
162 static void grok_reference_init PROTO((tree, tree, tree));
163 static tree grokfndecl PROTO((tree, tree, tree, tree, int,
164                               enum overload_flags, tree,
165                               tree, int, int, int, int, int, int, tree));
166 static tree grokvardecl PROTO((tree, tree, RID_BIT_TYPE *, int, int, tree));
167 static tree lookup_tag PROTO((enum tree_code, tree,
168                               struct binding_level *, int));
169 static void set_identifier_type_value_with_scope
170         PROTO((tree, tree, struct binding_level *));
171 static void record_builtin_type PROTO((enum rid, const char *, tree));
172 static void record_unknown_type PROTO((tree, const char *));
173 static int member_function_or_else PROTO((tree, tree, const char *));
174 static void bad_specifiers PROTO((tree, const char *, int, int, int, int,
175                                   int));
176 static void lang_print_error_function PROTO((char *));
177 static tree maybe_process_template_type_declaration PROTO((tree, int, struct binding_level*));
178 static void check_for_uninitialized_const_var PROTO((tree));
179 static unsigned long typename_hash PROTO((hash_table_key));
180 static boolean typename_compare PROTO((hash_table_key, hash_table_key));
181 static void push_binding PROTO((tree, tree, struct binding_level*));
182 static int add_binding PROTO((tree, tree));
183 static void pop_binding PROTO((tree, tree));
184 static tree local_variable_p PROTO((tree));
185 static tree find_binding PROTO((tree, tree));
186 static tree select_decl PROTO((tree, int));
187 static tree unqualified_namespace_lookup PROTO((tree, int));
188 static int lookup_flags PROTO((int, int));
189 static tree qualify_lookup PROTO((tree, int));
190 static tree record_builtin_java_type PROTO((const char *, int));
191 static const char *tag_name PROTO((enum tag_types code));
192 static void find_class_binding_level PROTO((void));
193 static struct binding_level *innermost_nonclass_level PROTO((void));
194 static void finish_dtor PROTO((void));
195 static void finish_ctor PROTO((int));
196 static tree poplevel_class PROTO((void));
197 static void warn_about_implicit_typename_lookup PROTO((tree, tree));
198 static int walk_namespaces_r PROTO((tree, walk_namespaces_fn, void *));
199 static int walk_globals_r PROTO((tree, void *));
200
201 #if defined (DEBUG_CP_BINDING_LEVELS)
202 static void indent PROTO((void));
203 #endif
204
205 /* A node which has tree code ERROR_MARK, and whose type is itself.
206    All erroneous expressions are replaced with this node.  All functions
207    that accept nodes as arguments should avoid generating error messages
208    if this node is one of the arguments, since it is undesirable to get
209    multiple error messages from one error in the input.  */
210
211 tree error_mark_node;
212
213 /* Erroneous argument lists can use this *IFF* they do not modify it.  */
214 tree error_mark_list;
215
216 /* INTEGER_TYPE and REAL_TYPE nodes for the standard data types */
217
218 tree short_integer_type_node;
219 tree integer_type_node;
220 tree long_integer_type_node;
221 tree long_long_integer_type_node;
222
223 tree short_unsigned_type_node;
224 tree unsigned_type_node;
225 tree long_unsigned_type_node;
226 tree long_long_unsigned_type_node;
227
228 tree ptrdiff_type_node;
229
230 tree unsigned_char_type_node;
231 tree signed_char_type_node;
232 tree char_type_node;
233 tree wchar_type_node;
234 tree signed_wchar_type_node;
235 tree unsigned_wchar_type_node;
236
237 tree wchar_decl_node;
238
239 tree float_type_node;
240 tree double_type_node;
241 tree long_double_type_node;
242
243 tree complex_integer_type_node;
244 tree complex_float_type_node;
245 tree complex_double_type_node;
246 tree complex_long_double_type_node;
247
248 tree intQI_type_node;
249 tree intHI_type_node;
250 tree intSI_type_node;
251 tree intDI_type_node;
252 #if HOST_BITS_PER_WIDE_INT >= 64
253 tree intTI_type_node;
254 #endif
255
256 tree unsigned_intQI_type_node;
257 tree unsigned_intHI_type_node;
258 tree unsigned_intSI_type_node;
259 tree unsigned_intDI_type_node;
260 #if HOST_BITS_PER_WIDE_INT >= 64
261 tree unsigned_intTI_type_node;
262 #endif
263
264 tree java_byte_type_node;
265 tree java_short_type_node;
266 tree java_int_type_node;
267 tree java_long_type_node;
268 tree java_float_type_node;
269 tree java_double_type_node;
270 tree java_char_type_node;
271 tree java_boolean_type_node;
272
273 /* A VOID_TYPE node, and the same, packaged in a TREE_LIST.  */
274
275 tree void_type_node, void_list_node;
276 tree void_zero_node;
277
278 /* Nodes for types `void *' and `const void *'.  */
279
280 tree ptr_type_node;
281 tree const_ptr_type_node;
282
283 /* Nodes for types `char *' and `const char *'.  */
284
285 tree string_type_node, const_string_type_node;
286
287 /* Type `char[256]' or something like it.
288    Used when an array of char is needed and the size is irrelevant.  */
289
290 tree char_array_type_node;
291
292 /* Type `int[256]' or something like it.
293    Used when an array of int needed and the size is irrelevant.  */
294
295 tree int_array_type_node;
296
297 /* Type `wchar_t[256]' or something like it.
298    Used when a wide string literal is created.  */
299
300 tree wchar_array_type_node;
301
302 /* The bool data type, and constants */
303 tree boolean_type_node, boolean_true_node, boolean_false_node;
304
305 /* Type `int ()' -- used for implicit declaration of functions.  */
306
307 tree default_function_type;
308
309 /* Function types `double (double)' and `double (double, double)', etc.  */
310
311 static tree double_ftype_double, double_ftype_double_double;
312 static tree int_ftype_int, long_ftype_long;
313 static tree float_ftype_float;
314 static tree ldouble_ftype_ldouble;
315
316 /* Function type `int (const void *, const void *, size_t)' */
317 static tree int_ftype_cptr_cptr_sizet;
318
319 /* C++ extensions */
320 tree vtable_entry_type;
321 tree delta_type_node;
322 #if 0
323 /* Old rtti stuff.  */
324 tree __baselist_desc_type_node;
325 tree __i_desc_type_node, __m_desc_type_node;
326 tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
327 #endif
328 tree __t_desc_type_node;
329 #if 0
330 tree __tp_desc_type_node;
331 #endif
332 tree __access_mode_type_node;
333 tree __bltn_desc_type_node, __user_desc_type_node, __class_desc_type_node;
334 tree __ptr_desc_type_node, __attr_desc_type_node, __func_desc_type_node;
335 tree __ptmf_desc_type_node, __ptmd_desc_type_node;
336 #if 0
337 /* Not needed yet?  May be needed one day?  */
338 tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
339 tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
340 tree __ptmf_desc_array_type, __ptmd_desc_array_type;
341 #endif
342
343 /* This is the identifier __vlist. */
344 tree vlist_identifier;
345
346 /* This is the type _Vlist = vtable_entry_type**. */
347 tree vlist_type_node;
348
349 /* A null pointer of type _Vlist. */
350 tree vlist_zero_node;
351
352 /* Indicates that there is a type value in some namespace, although
353    that is not necessarily in scope at the moment. */
354
355 static tree global_type_node;
356
357 tree class_star_type_node;
358 tree class_type_node, record_type_node, union_type_node, enum_type_node;
359 tree unknown_type_node;
360 tree opaque_type_node, signature_type_node;
361 tree sigtable_entry_type;
362
363 /* Array type `vtable_entry_type[]' */
364 tree vtbl_type_node;
365 tree vtbl_ptr_type_node;
366
367 /* namespace std */
368 tree std_node;
369 int in_std = 0;
370
371 /* Expect only namespace names now. */
372 static int only_namespace_names;
373
374 /* In a destructor, the point at which all derived class destroying
375    has been done, just before any base class destroying will be done.  */
376
377 tree dtor_label;
378
379 /* In a destructor, the last insn emitted after the start of the
380    function and the parms.  */
381
382 static rtx last_dtor_insn;
383
384 /* In a constructor, the last insn emitted after the start of the
385    function and the parms, the exception specification and any
386    function-try-block.  The constructor initializers are emitted after
387    this insn.  */
388
389 static rtx last_parm_cleanup_insn;
390
391 /* In a constructor, the point at which we are ready to return
392    the pointer to the initialized object.  */
393
394 tree ctor_label;
395
396 /* A FUNCTION_DECL which can call `abort'.  Not necessarily the
397    one that the user will declare, but sufficient to be called
398    by routines that want to abort the program.  */
399
400 tree abort_fndecl;
401
402 /* A FUNCTION_DECL for the default `::operator delete'.  */
403
404 tree global_delete_fndecl;
405
406 extern rtx cleanup_label, return_label;
407
408 /* If original DECL_RESULT of current function was a register,
409    but due to being an addressable named return value, would up
410    on the stack, this variable holds the named return value's
411    original location.  */
412 static rtx original_result_rtx;
413
414 /* Sequence of insns which represents base initialization.  */
415 tree base_init_expr;
416
417 /* C++: Keep these around to reduce calls to `get_identifier'.
418    Identifiers for `this' in member functions and the auto-delete
419    parameter for destructors.  */
420 tree this_identifier, in_charge_identifier;
421 tree ctor_identifier, dtor_identifier;
422 /* Used in pointer to member functions, in vtables, and in sigtables.  */
423 tree pfn_identifier, index_identifier, delta_identifier, delta2_identifier;
424 tree pfn_or_delta2_identifier, tag_identifier;
425 tree vt_off_identifier;
426
427 struct named_label_list
428 {
429   struct binding_level *binding_level;
430   tree names_in_scope;
431   tree label_decl;
432   char *filename_o_goto;
433   int lineno_o_goto;
434   struct named_label_list *next;
435 };
436
437 /* A list (chain of TREE_LIST nodes) of named label uses.
438    The TREE_PURPOSE field is the list of variables defined
439    in the label's scope defined at the point of use.
440    The TREE_VALUE field is the LABEL_DECL used.
441    The TREE_TYPE field holds `current_binding_level' at the
442    point of the label's use.
443
444    BWAHAHAAHAHahhahahahaah.  No, no, no, said the little chicken.
445
446    Look at the pretty struct named_label_list. See the pretty struct
447    with the pretty named fields that describe what they do. See the
448    pretty lack of gratuitous casts. Notice the code got a lot cleaner.
449
450    Used only for jumps to as-yet undefined labels, since
451    jumps to defined labels can have their validity checked
452    by stmt.c.  */
453
454 static struct named_label_list *named_label_uses = NULL;
455
456 /* A list of objects which have constructors or destructors
457    which reside in the global scope.  The decl is stored in
458    the TREE_VALUE slot and the initializer is stored
459    in the TREE_PURPOSE slot.  */
460 tree static_aggregates;
461
462 /* -- end of C++ */
463
464 /* Two expressions that are constants with value zero.
465    The first is of type `int', the second of type `void *'.  */
466
467 tree integer_zero_node;
468 tree null_pointer_node;
469
470 /* The value for __null (NULL), namely, a zero of an integer type with
471    the same number of bits as a pointer.  */
472 tree null_node;
473
474 /* A node for the integer constants 1, 2, and 3.  */
475
476 tree integer_one_node, integer_two_node, integer_three_node;
477
478 /* While defining an enum type, this is 1 plus the last enumerator
479    constant value.  */
480
481 static tree enum_next_value;
482
483 /* Nonzero means that there was overflow computing enum_next_value.  */
484
485 static int enum_overflow;
486
487 /* Parsing a function declarator leaves a list of parameter names
488    or a chain or parameter decls here.  */
489
490 tree last_function_parms;
491
492 /* Parsing a function declarator leaves here a chain of structure
493    and enum types declared in the parmlist.  */
494
495 static tree last_function_parm_tags;
496
497 /* After parsing the declarator that starts a function definition,
498    `start_function' puts here the list of parameter names or chain of decls.
499    `store_parm_decls' finds it here.  */
500
501 static tree current_function_parms;
502
503 /* Similar, for last_function_parm_tags.  */
504 static tree current_function_parm_tags;
505
506 /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
507    that have names.  Here so we can clear out their names' definitions
508    at the end of the function.  */
509
510 static tree named_labels;
511
512 /* A list of LABEL_DECLs from outer contexts that are currently shadowed.  */
513
514 static tree shadowed_labels;
515
516 /* The FUNCTION_DECL for the function currently being compiled,
517    or 0 if between functions.  */
518 tree current_function_decl;
519
520 /* Set to 0 at beginning of a function definition, set to 1 if
521    a return statement that specifies a return value is seen.  */
522
523 int current_function_returns_value;
524
525 /* Set to 0 at beginning of a function definition, set to 1 if
526    a return statement with no argument is seen.  */
527
528 int current_function_returns_null;
529
530 /* Set to 0 at beginning of a function definition, and whenever
531    a label (case or named) is defined.  Set to value of expression
532    returned from function when that value can be transformed into
533    a named return value.  */
534
535 tree current_function_return_value;
536
537 /* Nonzero means give `double' the same size as `float'.  */
538
539 extern int flag_short_double;
540
541 /* Nonzero means don't recognize any builtin functions.  */
542
543 extern int flag_no_builtin;
544
545 /* Nonzero means don't recognize the non-ANSI builtin functions.
546    -ansi sets this.  */
547
548 extern int flag_no_nonansi_builtin;
549
550 /* Nonzero means enable obscure ANSI features and disable GNU extensions
551    that might cause ANSI-compliant code to be miscompiled.  */
552
553 extern int flag_ansi;
554
555 /* Nonzero if we want to support huge (> 2^(sizeof(short)*8-1) bytes)
556    objects.  */
557 extern int flag_huge_objects;
558
559 /* Nonzero if we want to conserve space in the .o files.  We do this
560    by putting uninitialized data and runtime initialized data into
561    .common instead of .data at the expense of not flagging multiple
562    definitions.  */
563 extern int flag_conserve_space;
564
565 /* Pointers to the base and current top of the language name stack.  */
566
567 extern tree *current_lang_base, *current_lang_stack;
568 \f
569 /* C and C++ flags are in decl2.c.  */
570
571 /* Set to 0 at beginning of a constructor, set to 1
572    if that function does an allocation before referencing its
573    instance variable.  */
574 static int current_function_assigns_this;
575 int current_function_just_assigned_this;
576
577 /* Set to 0 at beginning of a function.  Set non-zero when
578    store_parm_decls is called.  Don't call store_parm_decls
579    if this flag is non-zero!  */
580 int current_function_parms_stored;
581
582 /* Flag used when debugging spew.c */
583
584 extern int spew_debug;
585
586 /* This is a copy of the class_shadowed list of the previous class binding
587    contour when at global scope.  It's used to reset IDENTIFIER_CLASS_VALUEs
588    when entering another class scope (i.e. a cache miss).  */
589 extern tree previous_class_values;
590
591 /* A expression of value 0 with the same precision as a sizetype
592    node, but signed.  */
593 tree signed_size_zero_node;
594
595 /* The name of the anonymous namespace, throughout this translation
596    unit.  */
597 tree anonymous_namespace_name;
598
599 \f
600 /* Allocate a level of searching.  */
601
602 static
603 struct stack_level *
604 push_decl_level (stack, obstack)
605      struct stack_level *stack;
606      struct obstack *obstack;
607 {
608   struct stack_level tem;
609   tem.prev = stack;
610
611   return push_stack_level (obstack, (char *)&tem, sizeof (tem));
612 }
613 \f
614 /* For each binding contour we allocate a binding_level structure
615    which records the names defined in that contour.
616    Contours include:
617     0) the global one
618     1) one for each function definition,
619        where internal declarations of the parameters appear.
620     2) one for each compound statement,
621        to record its declarations.
622
623    The current meaning of a name can be found by searching the levels
624    from the current one out to the global one.
625
626    Off to the side, may be the class_binding_level.  This exists only
627    to catch class-local declarations.  It is otherwise nonexistent.
628
629    Also there may be binding levels that catch cleanups that must be
630    run when exceptions occur.  Thus, to see whether a name is bound in
631    the current scope, it is not enough to look in the
632    CURRENT_BINDING_LEVEL.  You should use lookup_name_current_level
633    instead.  */
634
635 /* Note that the information in the `names' component of the global contour
636    is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers.  */
637
638 struct binding_level
639   {
640     /* A chain of _DECL nodes for all variables, constants, functions,
641        and typedef types.  These are in the reverse of the order
642        supplied.  There may be OVERLOADs on this list, too, but they
643        are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD.  */
644     tree names;
645
646     /* A list of structure, union and enum definitions, for looking up
647        tag names.
648        It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
649        or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
650        or ENUMERAL_TYPE node.
651
652        C++: the TREE_VALUE nodes can be simple types for
653        component_bindings.  */
654     tree tags;
655
656     /* A list of USING_DECL nodes. */
657     tree usings;
658
659     /* A list of used namespaces. PURPOSE is the namespace,
660        VALUE the common ancestor with this binding_level's namespace. */
661     tree using_directives;
662
663     /* If this binding level is the binding level for a class, then
664        class_shadowed is a TREE_LIST.  The TREE_PURPOSE of each node
665        is the name of an entity bound in the class; the TREE_VALUE is
666        the IDENTIFIER_CLASS_VALUE before we entered the class.  Thus,
667        when leaving class scope, we can restore the
668        IDENTIFIER_CLASS_VALUE by walking this list.  The TREE_TYPE is
669        the DECL bound by this name in the class.  */
670     tree class_shadowed;
671
672     /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
673        is used for all binding levels.  */
674     tree type_shadowed;
675
676     /* For each level (except not the global one),
677        a chain of BLOCK nodes for all the levels
678        that were entered and exited one level down.  */
679     tree blocks;
680
681     /* The BLOCK node for this level, if one has been preallocated.
682        If 0, the BLOCK is allocated (if needed) when the level is popped.  */
683     tree this_block;
684
685     /* The binding level which this one is contained in (inherits from).  */
686     struct binding_level *level_chain;
687
688     /* List of decls in `names' that have incomplete
689        structure or union types.  */
690     tree incomplete;
691
692     /* List of VAR_DECLS saved from a previous for statement.
693        These would be dead in ANSI-conforming code, but might
694        be referenced in ARM-era code.  These are stored in a
695        TREE_LIST; the TREE_VALUE is the actual declaration.  */
696     tree dead_vars_from_for;
697
698     /* 1 for the level that holds the parameters of a function.
699        2 for the level that holds a class declaration.
700        3 for levels that hold parameter declarations.  */
701     unsigned parm_flag : 4;
702
703     /* 1 means make a BLOCK for this level regardless of all else.
704        2 for temporary binding contours created by the compiler.  */
705     unsigned keep : 3;
706
707     /* Nonzero if this level "doesn't exist" for tags.  */
708     unsigned tag_transparent : 1;
709
710     /* Nonzero if this level can safely have additional
711        cleanup-needing variables added to it.  */
712     unsigned more_cleanups_ok : 1;
713     unsigned have_cleanups : 1;
714
715     /* Nonzero if this level is for storing the decls for template
716        parameters and generic decls; these decls will be discarded and
717        replaced with a TEMPLATE_DECL.  */
718     unsigned pseudo_global : 1;
719
720     /* This is set for a namespace binding level.  */
721     unsigned namespace_p : 1;
722
723     /* True if this level is that of a for-statement where we need to
724        worry about ambiguous (ARM or ANSI) scope rules.  */
725     unsigned is_for_scope : 1;
726
727     /* Two bits left for this word.  */
728
729 #if defined(DEBUG_CP_BINDING_LEVELS)
730     /* Binding depth at which this level began.  */
731     unsigned binding_depth;
732 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
733   };
734
735 #define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
736   
737 /* The binding level currently in effect.  */
738
739 static struct binding_level *current_binding_level;
740
741 /* The binding level of the current class, if any.  */
742
743 static struct binding_level *class_binding_level;
744
745 /* A chain of binding_level structures awaiting reuse.  */
746
747 static struct binding_level *free_binding_level;
748
749 /* The outermost binding level, for names of file scope.
750    This is created when the compiler is started and exists
751    through the entire run.  */
752
753 static struct binding_level *global_binding_level;
754
755 /* Binding level structures are initialized by copying this one.  */
756
757 static struct binding_level clear_binding_level;
758
759 /* Nonzero means unconditionally make a BLOCK for the next level pushed.  */
760
761 static int keep_next_level_flag;
762
763 #if defined(DEBUG_CP_BINDING_LEVELS)
764 static int binding_depth = 0;
765 static int is_class_level = 0;
766
767 static void
768 indent ()
769 {
770   register unsigned i;
771
772   for (i = 0; i < binding_depth*2; i++)
773     putc (' ', stderr);
774 }
775 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
776
777 static tree pushdecl_with_scope PROTO((tree, struct binding_level *));
778
779 static void
780 push_binding_level (newlevel, tag_transparent, keep)
781      struct binding_level *newlevel;
782      int tag_transparent, keep;
783 {
784   /* Add this level to the front of the chain (stack) of levels that
785      are active.  */
786   *newlevel = clear_binding_level;
787   newlevel->level_chain = current_binding_level;
788   current_binding_level = newlevel;
789   newlevel->tag_transparent = tag_transparent;
790   newlevel->more_cleanups_ok = 1;
791   newlevel->keep = keep;
792 #if defined(DEBUG_CP_BINDING_LEVELS)
793   newlevel->binding_depth = binding_depth;
794   indent ();
795   fprintf (stderr, "push %s level 0x%08x line %d\n",
796            (is_class_level) ? "class" : "block", newlevel, lineno);
797   is_class_level = 0;
798   binding_depth++;
799 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
800 }
801
802 /* Find the innermost enclosing class scope, and reset
803    CLASS_BINDING_LEVEL appropriately.  */
804
805 static void
806 find_class_binding_level ()
807 {
808   struct binding_level *level = current_binding_level;
809
810   while (level && level->parm_flag != 2)
811     level = level->level_chain;
812   if (level && level->parm_flag == 2)
813     class_binding_level = level;
814   else
815     class_binding_level = 0;
816 }
817
818 static void
819 pop_binding_level ()
820 {
821   if (global_binding_level)
822     {
823       /* Cannot pop a level, if there are none left to pop.  */
824       if (current_binding_level == global_binding_level)
825         my_friendly_abort (123);
826     }
827   /* Pop the current level, and free the structure for reuse.  */
828 #if defined(DEBUG_CP_BINDING_LEVELS)
829   binding_depth--;
830   indent ();
831   fprintf (stderr, "pop  %s level 0x%08x line %d\n",
832           (is_class_level) ? "class" : "block",
833           current_binding_level, lineno);
834   if (is_class_level != (current_binding_level == class_binding_level))
835     {
836       indent ();
837       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
838     }
839   is_class_level = 0;
840 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
841   {
842     register struct binding_level *level = current_binding_level;
843     current_binding_level = current_binding_level->level_chain;
844     level->level_chain = free_binding_level;
845 #if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
846     if (level->binding_depth != binding_depth)
847       abort ();
848 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
849     free_binding_level = level;
850     find_class_binding_level ();
851   }
852 }
853
854 static void
855 suspend_binding_level ()
856 {
857   if (class_binding_level)
858     current_binding_level = class_binding_level;
859
860   if (global_binding_level)
861     {
862       /* Cannot suspend a level, if there are none left to suspend.  */
863       if (current_binding_level == global_binding_level)
864         my_friendly_abort (123);
865     }
866   /* Suspend the current level.  */
867 #if defined(DEBUG_CP_BINDING_LEVELS)
868   binding_depth--;
869   indent ();
870   fprintf (stderr, "suspend  %s level 0x%08x line %d\n",
871           (is_class_level) ? "class" : "block",
872           current_binding_level, lineno);
873   if (is_class_level != (current_binding_level == class_binding_level))
874     {
875       indent ();
876       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
877     }
878   is_class_level = 0;
879 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
880   current_binding_level = current_binding_level->level_chain;
881   find_class_binding_level ();
882 }
883
884 static void
885 resume_binding_level (b)
886      struct binding_level *b;
887 {
888   /* Resuming binding levels is meant only for namespaces,
889      and those cannot nest into classes. */
890   my_friendly_assert(!class_binding_level, 386);
891   /* Also, resuming a non-directly nested namespace is a no-no.  */
892   my_friendly_assert(b->level_chain == current_binding_level, 386);
893   current_binding_level = b;
894 #if defined(DEBUG_CP_BINDING_LEVELS)
895   b->binding_depth = binding_depth;
896   indent ();
897   fprintf (stderr, "resume %s level 0x%08x line %d\n",
898            (is_class_level) ? "class" : "block", b, lineno);
899   is_class_level = 0;
900   binding_depth++;
901 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
902 }
903 \f
904 /* Create a new `struct binding_level'.  */
905
906 static
907 struct binding_level *
908 make_binding_level ()
909 {
910   /* NOSTRICT */
911   return (struct binding_level *) xmalloc (sizeof (struct binding_level));
912 }
913
914 /* Nonzero if we are currently in the global binding level.  */
915
916 int
917 global_bindings_p ()
918 {
919   return current_binding_level == global_binding_level;
920 }
921
922 /* Return the innermost binding level that is not for a class scope.  */
923
924 static struct binding_level *
925 innermost_nonclass_level ()
926 {
927   struct binding_level *b;
928
929   b = current_binding_level;
930   while (b->parm_flag == 2)
931     b = b->level_chain;
932
933   return b;
934 }
935
936 /* Nonzero if we are currently in a toplevel binding level.  This
937    means either the global binding level or a namespace in a toplevel
938    binding level.  Since there are no non-toplevel namespace levels,
939    this really means any namespace or pseudo-global level.  We also
940    include a class whose context is toplevel.  */
941
942 int
943 toplevel_bindings_p ()
944 {
945   struct binding_level *b = innermost_nonclass_level ();
946
947   return b->namespace_p || b->pseudo_global;
948 }
949
950 /* Nonzero if this is a namespace scope, or if we are defining a class
951    which is itself at namespace scope, or whose enclosing class is
952    such a class, etc.  */
953
954 int
955 namespace_bindings_p ()
956 {
957   struct binding_level *b = innermost_nonclass_level ();
958
959   return b->namespace_p;
960 }
961
962 void
963 keep_next_level ()
964 {
965   keep_next_level_flag = 1;
966 }
967
968 /* Nonzero if the current level needs to have a BLOCK made.  */
969
970 int
971 kept_level_p ()
972 {
973   return (current_binding_level->blocks != NULL_TREE
974           || current_binding_level->keep
975           || current_binding_level->names != NULL_TREE
976           || (current_binding_level->tags != NULL_TREE
977               && !current_binding_level->tag_transparent));
978 }
979
980 /* Identify this binding level as a level of parameters.  */
981
982 void
983 declare_parm_level ()
984 {
985   current_binding_level->parm_flag = 1;
986 }
987
988 void
989 declare_pseudo_global_level ()
990 {
991   current_binding_level->pseudo_global = 1;
992 }
993
994 static void
995 declare_namespace_level ()
996 {
997   current_binding_level->namespace_p = 1;
998 }
999
1000 int
1001 pseudo_global_level_p ()
1002 {
1003   struct binding_level *b = innermost_nonclass_level ();
1004
1005   return b->pseudo_global;
1006 }
1007
1008 void
1009 set_class_shadows (shadows)
1010      tree shadows;
1011 {
1012   class_binding_level->class_shadowed = shadows;
1013 }
1014
1015 /* Enter a new binding level.
1016    If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
1017    not for that of tags.  */
1018
1019 void
1020 pushlevel (tag_transparent)
1021      int tag_transparent;
1022 {
1023   register struct binding_level *newlevel = NULL_BINDING_LEVEL;
1024
1025   /* If this is the top level of a function,
1026      just make sure that NAMED_LABELS is 0.
1027      They should have been set to 0 at the end of the previous function.  */
1028
1029   if (current_binding_level == global_binding_level)
1030     my_friendly_assert (named_labels == NULL_TREE, 134);
1031
1032   /* Reuse or create a struct for this binding level.  */
1033
1034 #if defined(DEBUG_CP_BINDING_LEVELS)
1035   if (0)
1036 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1037   if (free_binding_level)
1038 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1039     {
1040       newlevel = free_binding_level;
1041       free_binding_level = free_binding_level->level_chain;
1042     }
1043   else
1044     {
1045       newlevel = make_binding_level ();
1046     }
1047
1048   push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
1049   GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
1050   keep_next_level_flag = 0;
1051 }
1052
1053 void
1054 note_level_for_for ()
1055 {
1056   current_binding_level->is_for_scope = 1;
1057 }
1058
1059 void
1060 pushlevel_temporary (tag_transparent)
1061      int tag_transparent;
1062 {
1063   pushlevel (tag_transparent);
1064   current_binding_level->keep = 2;
1065   clear_last_expr ();
1066
1067   /* Note we don't call push_momentary() here.  Otherwise, it would cause
1068      cleanups to be allocated on the momentary obstack, and they will be
1069      overwritten by the next statement.  */
1070
1071   expand_start_bindings (0);
1072 }
1073
1074 /* For a binding between a name and an entity at a block scope,
1075    this is the `struct binding_level' for the block.  */
1076 #define BINDING_LEVEL(NODE) \
1077    (((struct tree_binding*)NODE)->scope.level)
1078
1079 /* These are currently unused, but permanent, CPLUS_BINDING nodes.
1080    They are kept here because they are allocated from the permanent
1081    obstack and cannot be easily freed.  */
1082 static tree free_binding_nodes;
1083
1084 /* Make DECL the innermost binding for ID.  The LEVEL is the binding
1085    level at which this declaration is being bound.  */
1086
1087 static void
1088 push_binding (id, decl, level)
1089      tree id;
1090      tree decl;
1091      struct binding_level* level;
1092 {
1093   tree binding;
1094
1095   if (!free_binding_nodes)
1096     {
1097       /* There are no free nodes, so we must build one here.  */
1098       push_obstacks_nochange ();
1099       end_temporary_allocation ();
1100       binding = make_node (CPLUS_BINDING);
1101       pop_obstacks ();
1102     }
1103   else
1104     {
1105       /* There are nodes on the free list.  Grab the first one.  */
1106       binding = free_binding_nodes;
1107       
1108       /* And update the free list.  */
1109       free_binding_nodes = TREE_CHAIN (free_binding_nodes);
1110     }
1111
1112   /* Now, fill in the binding information.  */
1113   BINDING_VALUE (binding) = decl;
1114   BINDING_TYPE (binding) = NULL_TREE;
1115   BINDING_LEVEL (binding) = level;
1116   INHERITED_VALUE_BINDING_P (binding) = 0;
1117   LOCAL_BINDING_P (binding) = (level != class_binding_level);
1118
1119   /* And put it on the front of the list of bindings for ID.  */
1120   TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
1121   IDENTIFIER_BINDING (id) = binding;
1122 }
1123
1124 /* ID is already bound in the current scope.  But, DECL is an
1125    additional binding for ID in the same scope.  This is the `struct
1126    stat' hack whereby a non-typedef class-name or enum-name can be
1127    bound at the same level as some other kind of entity.  It's the
1128    responsibility of the caller to check that inserting this name is
1129    legal here.  Returns nonzero if the new binding was successful.  */
1130 static int
1131 add_binding (id, decl)
1132      tree id;
1133      tree decl;
1134 {
1135   tree binding = IDENTIFIER_BINDING (id);
1136   int ok = 1;
1137
1138   if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
1139     /* The new name is the type name.  */
1140     BINDING_TYPE (binding) = decl;
1141   else if (!BINDING_VALUE (binding))
1142     /* This situation arises when push_class_level_binding moves an
1143        inherited type-binding out of the way to make room for a new
1144        value binding.  */
1145     BINDING_VALUE (binding) = decl;
1146   else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
1147            && DECL_ARTIFICIAL (BINDING_VALUE (binding)))
1148     {
1149       /* The old binding was a type name.  It was placed in
1150          BINDING_VALUE because it was thought, at the point it was
1151          declared, to be the only entity with such a name.  Move the
1152          type name into the type slot; it is now hidden by the new
1153          binding.  */
1154       BINDING_TYPE (binding) = BINDING_VALUE (binding);
1155       BINDING_VALUE (binding) = decl;
1156       INHERITED_VALUE_BINDING_P (binding) = 0;
1157     }
1158   else
1159     {
1160       cp_error ("declaration of `%#D'", decl);
1161       cp_error_at ("conflicts with previous declaration `%#D'",
1162                    BINDING_VALUE (binding));
1163       ok = 0;
1164     }
1165
1166   return ok;
1167 }
1168
1169 /* Bind DECL to ID in the current_binding_level.
1170    If PUSH_USING is set in FLAGS, we know that DECL doesn't really belong
1171    to this binding level, that it got here through a using-declaration.  */
1172
1173 void
1174 push_local_binding (id, decl, flags)
1175      tree id;
1176      tree decl;
1177      int flags;
1178 {
1179   struct binding_level *b;
1180
1181   /* Skip over any local classes.  This makes sense if we call
1182      push_local_binding with a friend decl of a local class.  */
1183   b = current_binding_level;
1184   while (b->parm_flag == 2)
1185     b = b->level_chain;
1186
1187   if (lookup_name_current_level (id))
1188     {
1189       /* Supplement the existing binding.  */
1190       if (!add_binding (id, decl))
1191         /* It didn't work.  Something else must be bound at this
1192            level.  Do not add DECL to the list of things to pop
1193            later.  */
1194         return;
1195     }
1196   else
1197     /* Create a new binding.  */
1198     push_binding (id, decl, b);
1199
1200   if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
1201     /* We must put the OVERLOAD into a TREE_LIST since the
1202        TREE_CHAIN of an OVERLOAD is already used.  Similarly for
1203        decls that got here through a using-declaration.  */
1204     decl = build_tree_list (NULL_TREE, decl);
1205
1206   /* And put DECL on the list of things declared by the current
1207      binding level.  */
1208   TREE_CHAIN (decl) = b->names;
1209   b->names = decl;
1210 }
1211
1212 /* Bind DECL to ID in the class_binding_level.  Returns nonzero if the
1213    binding was successful.  */
1214
1215 int
1216 push_class_binding (id, decl)
1217      tree id;
1218      tree decl;
1219 {
1220   int result = 1;
1221   tree binding = IDENTIFIER_BINDING (id);
1222   tree context;
1223
1224   /* Note that we declared this value so that we can issue an error if
1225      this an illegal redeclaration of a name already used for some
1226      other purpose.  */
1227   note_name_declared_in_class (id, decl);
1228
1229   if (binding && BINDING_LEVEL (binding) == class_binding_level)
1230     /* Supplement the existing binding.  */
1231     result = add_binding (id, decl);
1232   else
1233     /* Create a new binding.  */
1234     push_binding (id, decl, class_binding_level);
1235
1236   /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
1237      class-level declaration.  Note that we do not use DECL here
1238      because of the possibility of the `struct stat' hack; if DECL is
1239      a class-name or enum-name we might prefer a field-name, or some
1240      such.  */
1241   IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
1242
1243   /* If this is a binding from a base class, mark it as such.  */
1244   binding = IDENTIFIER_BINDING (id);
1245   if (BINDING_VALUE (binding) == decl && TREE_CODE (decl) != TREE_LIST)
1246     {
1247       /* Any implicit typename must be from a base-class.  The
1248          context for an implicit typename declaration is always
1249          the derived class in which the lookup was done, so the checks
1250          based on the context of DECL below will not trigger.  */
1251       if (TREE_CODE (decl) == TYPE_DECL 
1252           && IMPLICIT_TYPENAME_P (TREE_TYPE (decl)))
1253         INHERITED_VALUE_BINDING_P (binding) = 1;
1254       else
1255         {
1256           if (TREE_CODE (decl) == OVERLOAD)
1257             context = DECL_REAL_CONTEXT (OVL_CURRENT (decl));
1258           else
1259             {
1260               my_friendly_assert (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd',
1261                                   0);
1262               context = DECL_REAL_CONTEXT (decl);
1263             }
1264
1265           if (is_properly_derived_from (current_class_type, context))
1266             INHERITED_VALUE_BINDING_P (binding) = 1;
1267           else
1268             INHERITED_VALUE_BINDING_P (binding) = 0;
1269         }
1270     }
1271   else if (BINDING_VALUE (binding) == decl)
1272     /* We only encounter a TREE_LIST when push_class_decls detects an
1273        ambiguity.  Such an ambiguity can be overridden by a definition
1274        in this class.  */
1275     INHERITED_VALUE_BINDING_P (binding) = 1;
1276
1277   return result;
1278 }
1279
1280 /* Remove the binding for DECL which should be the innermost binding
1281    for ID.  */
1282
1283 static void 
1284 pop_binding (id, decl) 
1285      tree id;
1286      tree decl;
1287 {
1288   tree binding;
1289     
1290   if (id == NULL_TREE)
1291     /* It's easiest to write the loops that call this function without
1292        checking whether or not the entities involved have names.  We
1293        get here for such an entity.  */
1294     return;
1295
1296   /* Get the innermost binding for ID.  */
1297   binding = IDENTIFIER_BINDING (id);
1298
1299   /* The name should be bound.  */
1300   my_friendly_assert (binding != NULL_TREE, 0);
1301
1302   /* The DECL will be either the ordinary binding or the type
1303      binding for this identifier.  Remove that binding.  */
1304   if (BINDING_VALUE (binding) == decl)
1305     BINDING_VALUE (binding) = NULL_TREE;
1306   else if (BINDING_TYPE (binding) == decl)
1307     BINDING_TYPE (binding) = NULL_TREE;
1308   else
1309     my_friendly_abort (0);
1310
1311   if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
1312     {
1313       /* We're completely done with the innermost binding for this
1314          identifier.  Unhook it from the list of bindings.  */
1315       IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
1316
1317       /* And place it on the free list.  */
1318       TREE_CHAIN (binding) = free_binding_nodes;
1319       free_binding_nodes = binding;
1320     }
1321 }
1322
1323 /* Exit a binding level.
1324    Pop the level off, and restore the state of the identifier-decl mappings
1325    that were in effect when this level was entered.
1326
1327    If KEEP == 1, this level had explicit declarations, so
1328    and create a "block" (a BLOCK node) for the level
1329    to record its declarations and subblocks for symbol table output.
1330
1331    If FUNCTIONBODY is nonzero, this level is the body of a function,
1332    so create a block as if KEEP were set and also clear out all
1333    label names.
1334
1335    If REVERSE is nonzero, reverse the order of decls before putting
1336    them into the BLOCK.  */
1337
1338 tree
1339 poplevel (keep, reverse, functionbody)
1340      int keep;
1341      int reverse;
1342      int functionbody;
1343 {
1344   register tree link;
1345   /* The chain of decls was accumulated in reverse order.
1346      Put it into forward order, just for cleanliness.  */
1347   tree decls;
1348   int tmp = functionbody;
1349   int real_functionbody = current_binding_level->keep == 2
1350     ? ((functionbody = 0), tmp) : functionbody;
1351   tree tags = functionbody >= 0 ? current_binding_level->tags : 0;
1352   tree subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1353   tree block = NULL_TREE;
1354   tree decl;
1355   int block_previously_created;
1356   int leaving_for_scope;
1357
1358   if (current_binding_level->parm_flag == 2)
1359     return poplevel_class ();
1360
1361   my_friendly_assert (!current_binding_level->class_shadowed,
1362                       19990414);
1363
1364   /* We used to use KEEP == 2 to indicate that the new block should go
1365      at the beginning of the list of blocks at this binding level,
1366      rather than the end.  This hack is no longer used.  */
1367   my_friendly_assert (keep == 0 || keep == 1, 0);
1368
1369   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1370                       (HOST_WIDE_INT) current_binding_level->level_chain,
1371                       current_binding_level->parm_flag,
1372                       current_binding_level->keep);
1373
1374   if (current_binding_level->keep == 1)
1375     keep = 1;
1376
1377   /* Get the decls in the order they were written.
1378      Usually current_binding_level->names is in reverse order.
1379      But parameter decls were previously put in forward order.  */
1380
1381   if (reverse)
1382     current_binding_level->names
1383       = decls = nreverse (current_binding_level->names);
1384   else
1385     decls = current_binding_level->names;
1386
1387   /* Output any nested inline functions within this block
1388      if they weren't already output.  */
1389
1390   for (decl = decls; decl; decl = TREE_CHAIN (decl))
1391     if (TREE_CODE (decl) == FUNCTION_DECL
1392         && ! TREE_ASM_WRITTEN (decl)
1393         && DECL_INITIAL (decl) != NULL_TREE
1394         && TREE_ADDRESSABLE (decl)
1395         && decl_function_context (decl) == current_function_decl)
1396       {
1397         /* If this decl was copied from a file-scope decl
1398            on account of a block-scope extern decl,
1399            propagate TREE_ADDRESSABLE to the file-scope decl.  */
1400         if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1401           TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1402         else
1403           {
1404             push_function_context ();
1405             output_inline_function (decl);
1406             pop_function_context ();
1407           }
1408       }
1409
1410   /* If there were any declarations or structure tags in that level,
1411      or if this level is a function body,
1412      create a BLOCK to record them for the life of this function.  */
1413
1414   block = NULL_TREE;
1415   block_previously_created = (current_binding_level->this_block != NULL_TREE);
1416   if (block_previously_created)
1417     block = current_binding_level->this_block;
1418   else if (keep == 1 || functionbody)
1419     block = make_node (BLOCK);
1420   if (block != NULL_TREE)
1421     {
1422       if (block_previously_created)
1423         {
1424           if (decls || tags || subblocks)
1425             {
1426               if (BLOCK_VARS (block) || BLOCK_TYPE_TAGS (block))
1427                 warning ("internal compiler error: debugging info corrupted");
1428
1429               BLOCK_VARS (block) = decls;
1430               BLOCK_TYPE_TAGS (block) = tags;
1431
1432               /* We can have previous subblocks and new subblocks when
1433                  doing fixup_gotos with complex cleanups.  We chain the new
1434                  subblocks onto the end of any pre-existing subblocks.  */
1435               BLOCK_SUBBLOCKS (block) = chainon (BLOCK_SUBBLOCKS (block),
1436                                                  subblocks);
1437             }
1438           /* If we created the block earlier on, and we are just
1439              diddling it now, then it already should have a proper
1440              BLOCK_END_NOTE value associated with it.  */
1441         }
1442       else
1443         {
1444           BLOCK_VARS (block) = decls;
1445           BLOCK_TYPE_TAGS (block) = tags;
1446           BLOCK_SUBBLOCKS (block) = subblocks;
1447           /* Otherwise, for a new block, install a new BLOCK_END_NOTE
1448              value.  */ 
1449           remember_end_note (block);
1450         }
1451     }
1452
1453   /* In each subblock, record that this is its superior.  */
1454
1455   if (keep >= 0)
1456     for (link = subblocks; link; link = TREE_CHAIN (link))
1457       BLOCK_SUPERCONTEXT (link) = block;
1458
1459   /* We still support the old for-scope rules, whereby the variables
1460      in a for-init statement were in scope after the for-statement
1461      ended.  We only use the new rules in flag_new_for_scope is
1462      nonzero.  */
1463   leaving_for_scope 
1464     = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1465
1466   /* Remove declarations for all the DECLs in this level.  */
1467   for (link = decls; link; link = TREE_CHAIN (link))
1468     {
1469       if (leaving_for_scope && TREE_CODE (link) == VAR_DECL)
1470         {
1471           tree outer_binding 
1472             = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1473           tree ns_binding;
1474
1475           if (!outer_binding)
1476             ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
1477           else
1478             ns_binding = NULL_TREE;
1479
1480           if (outer_binding 
1481               && (BINDING_LEVEL (outer_binding) 
1482                   == current_binding_level->level_chain))
1483             /* We have something like:
1484                
1485                  int i;
1486                  for (int i; ;);
1487                  
1488                and we are leaving the `for' scope.  There's no reason to
1489                keep the binding of the inner `i' in this case.  */
1490             pop_binding (DECL_NAME (link), link);
1491           else if ((outer_binding 
1492                     && (TREE_CODE (BINDING_VALUE (outer_binding)) 
1493                         == TYPE_DECL))
1494                    || (ns_binding 
1495                        && TREE_CODE (ns_binding) == TYPE_DECL))
1496             /* Here, we have something like:
1497
1498                  typedef int I;
1499
1500                  void f () {
1501                    for (int I; ;);
1502                  }
1503
1504                We must pop the for-scope binding so we know what's a
1505                type and what isn't.  */
1506             pop_binding (DECL_NAME (link), link);
1507           else
1508             {
1509               /* Mark this VAR_DECL as dead so that we can tell we left it
1510                  there only for backward compatibility.  */
1511               DECL_DEAD_FOR_LOCAL (link) = 1;
1512               
1513               /* Keep track of what should of have happenned when we
1514                  popped the binding.  */
1515               if (outer_binding && BINDING_VALUE (outer_binding))
1516                 DECL_SHADOWED_FOR_VAR (link) 
1517                   = BINDING_VALUE (outer_binding);
1518
1519               /* Add it to the list of dead variables in the next
1520                  outermost binding to that we can remove these when we
1521                  leave that binding.  */
1522               current_binding_level->level_chain->dead_vars_from_for
1523                 = tree_cons (NULL_TREE, link,
1524                              current_binding_level->level_chain->
1525                              dead_vars_from_for);
1526
1527               /* Although we don't pop the CPLUS_BINDING, we do clear
1528                  its BINDING_LEVEL since the level is going away now.  */
1529               BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1530                 = 0;
1531             }
1532         }
1533       else 
1534         {
1535           /* Remove the binding.  */
1536           decl = link;
1537           if (TREE_CODE (decl) == TREE_LIST)
1538             decl = TREE_VALUE (decl);
1539           if (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd')
1540             pop_binding (DECL_NAME (decl), decl);
1541           else if (TREE_CODE (decl) == OVERLOAD)
1542             pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
1543           else 
1544             my_friendly_abort (0);
1545         }
1546     }
1547
1548   /* Remove declarations for any `for' variables from inner scopes
1549      that we kept around.  */
1550   for (link = current_binding_level->dead_vars_from_for;
1551        link; link = TREE_CHAIN (link))
1552     pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
1553
1554   /* Restore the IDENTIFIER_TYPE_VALUEs.  */
1555   for (link = current_binding_level->type_shadowed;
1556        link; link = TREE_CHAIN (link))
1557     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
1558   
1559   /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1560      list if a `using' declaration put them there.  The debugging
1561      back-ends won't understand OVERLOAD, so we remove them here.
1562      Because the BLOCK_VARS are (temporarily) shared with
1563      CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1564      popped all the bindings.  */
1565   if (block)
1566     {
1567       tree* d;
1568
1569       for (d = &BLOCK_VARS (block); *d; )
1570         {
1571           if (TREE_CODE (*d) == TREE_LIST)
1572             *d = TREE_CHAIN (*d);
1573           else
1574             d = &TREE_CHAIN (*d);
1575         }
1576     }
1577
1578   /* If the level being exited is the top level of a function,
1579      check over all the labels.  */
1580
1581   if (functionbody)
1582     {
1583       /* If this is the top level block of a function,
1584          the vars are the function's parameters.
1585          Don't leave them in the BLOCK because they are
1586          found in the FUNCTION_DECL instead.  */
1587
1588       BLOCK_VARS (block) = 0;
1589
1590       /* Clear out the definitions of all label names,
1591          since their scopes end here.  */
1592
1593       for (link = named_labels; link; link = TREE_CHAIN (link))
1594         {
1595           register tree label = TREE_VALUE (link);
1596
1597           if (DECL_INITIAL (label) == NULL_TREE)
1598             {
1599               cp_error_at ("label `%D' used but not defined", label);
1600               /* Avoid crashing later.  */
1601               define_label (input_filename, 1, DECL_NAME (label));
1602             }
1603           else if (warn_unused && !TREE_USED (label))
1604             cp_warning_at ("label `%D' defined but not used", label);
1605           SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), NULL_TREE);
1606
1607           /* Put the labels into the "variables" of the
1608              top-level block, so debugger can see them.  */
1609           TREE_CHAIN (label) = BLOCK_VARS (block);
1610           BLOCK_VARS (block) = label;
1611         }
1612
1613       named_labels = NULL_TREE;
1614     }
1615
1616   /* Any uses of undefined labels now operate under constraints
1617      of next binding contour.  */
1618   {
1619     struct binding_level *level_chain;
1620     level_chain = current_binding_level->level_chain;
1621     if (level_chain)
1622       {
1623         struct named_label_list *labels;
1624         for (labels = named_label_uses; labels; labels = labels->next)
1625           if (labels->binding_level == current_binding_level)
1626             {
1627               labels->binding_level = level_chain;
1628               labels->names_in_scope = level_chain->names;
1629             }
1630       }
1631   }
1632
1633   tmp = current_binding_level->keep;
1634
1635   pop_binding_level ();
1636   if (functionbody)
1637     DECL_INITIAL (current_function_decl) = block;
1638   else if (block)
1639     {
1640       if (!block_previously_created)
1641         current_binding_level->blocks
1642           = chainon (current_binding_level->blocks, block);
1643     }
1644   /* If we did not make a block for the level just exited,
1645      any blocks made for inner levels
1646      (since they cannot be recorded as subblocks in that level)
1647      must be carried forward so they will later become subblocks
1648      of something else.  */
1649   else if (subblocks)
1650     current_binding_level->blocks
1651       = chainon (current_binding_level->blocks, subblocks);
1652
1653   /* Take care of compiler's internal binding structures.  */
1654   if (tmp == 2)
1655     {
1656       expand_end_bindings (getdecls (), keep, 1);
1657       /* Each and every BLOCK node created here in `poplevel' is important
1658          (e.g. for proper debugging information) so if we created one
1659          earlier, mark it as "used".  */
1660       if (block)
1661         TREE_USED (block) = 1;
1662       block = poplevel (keep, reverse, real_functionbody);
1663     }
1664
1665   /* Each and every BLOCK node created here in `poplevel' is important
1666      (e.g. for proper debugging information) so if we created one
1667      earlier, mark it as "used".  */
1668   if (block)
1669     TREE_USED (block) = 1;
1670   return block;
1671 }
1672
1673 /* Delete the node BLOCK from the current binding level.
1674    This is used for the block inside a stmt expr ({...})
1675    so that the block can be reinserted where appropriate.  */
1676
1677 void
1678 delete_block (block)
1679      tree block;
1680 {
1681   tree t;
1682   if (current_binding_level->blocks == block)
1683     current_binding_level->blocks = TREE_CHAIN (block);
1684   for (t = current_binding_level->blocks; t;)
1685     {
1686       if (TREE_CHAIN (t) == block)
1687         TREE_CHAIN (t) = TREE_CHAIN (block);
1688       else
1689         t = TREE_CHAIN (t);
1690     }
1691   TREE_CHAIN (block) = NULL_TREE;
1692   /* Clear TREE_USED which is always set by poplevel.
1693      The flag is set again if insert_block is called.  */
1694   TREE_USED (block) = 0;
1695 }
1696
1697 /* Insert BLOCK at the end of the list of subblocks of the
1698    current binding level.  This is used when a BIND_EXPR is expanded,
1699    to handle the BLOCK node inside the BIND_EXPR.  */
1700
1701 void
1702 insert_block (block)
1703      tree block;
1704 {
1705   TREE_USED (block) = 1;
1706   current_binding_level->blocks
1707     = chainon (current_binding_level->blocks, block);
1708 }
1709
1710 /* Set the BLOCK node for the innermost scope
1711    (the one we are currently in).  */
1712
1713 void
1714 set_block (block)
1715     register tree block;
1716 {
1717   current_binding_level->this_block = block;
1718 }
1719
1720 /* Do a pushlevel for class declarations.  */
1721
1722 void
1723 pushlevel_class ()
1724 {
1725   register struct binding_level *newlevel;
1726
1727   /* Reuse or create a struct for this binding level.  */
1728 #if defined(DEBUG_CP_BINDING_LEVELS)
1729   if (0)
1730 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1731   if (free_binding_level)
1732 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1733     {
1734       newlevel = free_binding_level;
1735       free_binding_level = free_binding_level->level_chain;
1736     }
1737   else
1738     newlevel = make_binding_level ();
1739
1740 #if defined(DEBUG_CP_BINDING_LEVELS)
1741   is_class_level = 1;
1742 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1743
1744   push_binding_level (newlevel, 0, 0);
1745
1746   decl_stack = push_decl_level (decl_stack, &decl_obstack);
1747   class_binding_level = current_binding_level;
1748   class_binding_level->parm_flag = 2;
1749 }
1750
1751 /* ...and a poplevel for class declarations.  */
1752
1753 static tree
1754 poplevel_class ()
1755 {
1756   register struct binding_level *level = class_binding_level;
1757   tree shadowed;
1758
1759   my_friendly_assert (level != 0, 354);
1760   
1761   decl_stack = pop_stack_level (decl_stack);
1762   /* If we're leaving a toplevel class, don't bother to do the setting
1763      of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
1764      shouldn't even be used when current_class_type isn't set, and second,
1765      if we don't touch it here, we're able to use the cache effect if the
1766      next time we're entering a class scope, it is the same class.  */
1767   if (current_class_depth != 1)
1768     {
1769       struct binding_level* b;
1770
1771       /* Clear out our IDENTIFIER_CLASS_VALUEs.  */
1772       for (shadowed = level->class_shadowed;
1773            shadowed;
1774            shadowed = TREE_CHAIN (shadowed))
1775         IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = NULL_TREE;
1776         
1777       /* Find the next enclosing class, and recreate
1778          IDENTIFIER_CLASS_VALUEs appropriate for that class.  */
1779       b = level->level_chain;
1780       while (b && b->parm_flag != 2)
1781         b = b->level_chain;
1782
1783       if (b)
1784         for (shadowed = b->class_shadowed; 
1785              shadowed; 
1786              shadowed = TREE_CHAIN (shadowed))
1787           {
1788             tree t;
1789
1790             t = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
1791             while (t && BINDING_LEVEL (t) != b)
1792               t = TREE_CHAIN (t);
1793       
1794             if (t)
1795               IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) 
1796                 = BINDING_VALUE (t);
1797           }
1798     }
1799   else
1800     /* Remember to save what IDENTIFIER's were bound in this scope so we
1801        can recover from cache misses.  */
1802     {
1803       previous_class_type = current_class_type;
1804       previous_class_values = class_binding_level->class_shadowed;
1805     }
1806   for (shadowed = level->type_shadowed;
1807        shadowed;
1808        shadowed = TREE_CHAIN (shadowed))
1809     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
1810
1811   /* Remove the bindings for all of the class-level declarations.  */
1812   for (shadowed = level->class_shadowed; 
1813        shadowed; 
1814        shadowed = TREE_CHAIN (shadowed))
1815     pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
1816
1817   GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1818                       (HOST_WIDE_INT) class_binding_level->level_chain,
1819                       class_binding_level->parm_flag,
1820                       class_binding_level->keep);
1821
1822   /* Now, pop out of the binding level which we created up in the
1823      `pushlevel_class' routine.  */
1824 #if defined(DEBUG_CP_BINDING_LEVELS)
1825   is_class_level = 1;
1826 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1827
1828   pop_binding_level ();
1829
1830   return NULL_TREE;
1831 }
1832
1833 /* We are entering the scope of a class.  Clear IDENTIFIER_CLASS_VALUE
1834    for any names in enclosing classes.  */
1835
1836 void
1837 clear_identifier_class_values ()
1838 {
1839   tree t;
1840
1841   if (!class_binding_level)
1842     return;
1843
1844   for (t = class_binding_level->class_shadowed;
1845        t;
1846        t = TREE_CHAIN (t))
1847     IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
1848 }
1849
1850 /* Returns non-zero if T is a virtual function table.  */
1851
1852 int
1853 vtable_decl_p (t, data)
1854      tree t;
1855      void *data ATTRIBUTE_UNUSED;
1856 {
1857   return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
1858 }
1859
1860 /* Returns non-zero if T is a TYPE_DECL for a type with virtual
1861    functions.  */
1862
1863 int
1864 vtype_decl_p (t, data)
1865      tree t;
1866      void *data ATTRIBUTE_UNUSED;
1867 {
1868   return (TREE_CODE (t) == TYPE_DECL
1869           && TREE_TYPE (t) != error_mark_node
1870           && TYPE_LANG_SPECIFIC (TREE_TYPE (t))
1871           && CLASSTYPE_VSIZE (TREE_TYPE (t)));
1872 }
1873
1874 /* Returns non-zero if T is a signature table.  */
1875
1876 int 
1877 sigtable_decl_p (t, data)
1878      tree t;
1879      void *data ATTRIBUTE_UNUSED;
1880 {
1881   return (TREE_CODE (t) == VAR_DECL
1882           && TREE_TYPE (t) != error_mark_node
1883           && IS_SIGNATURE (TREE_TYPE (t)));
1884 }
1885
1886 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
1887    itself, calling F for each.  The DATA is passed to F as well.  */
1888
1889 static int
1890 walk_namespaces_r (namespace, f, data)
1891      tree namespace;
1892      walk_namespaces_fn f;
1893      void *data;
1894 {
1895   tree current;
1896   int result = 0;
1897
1898   result |= (*f) (namespace, data);
1899
1900   for (current = NAMESPACE_LEVEL (namespace)->names;
1901        current;
1902        current = TREE_CHAIN (current))
1903     {
1904       if (TREE_CODE (current) != NAMESPACE_DECL
1905           || DECL_NAMESPACE_ALIAS (current))
1906         continue;
1907       if (!DECL_LANG_SPECIFIC (current))
1908         {
1909           /* Hmm. std. */
1910           my_friendly_assert (current == std_node, 393);
1911           continue;
1912         }
1913
1914       /* We found a namespace.  */
1915       result |= walk_namespaces_r (current, f, data);
1916     }
1917
1918   return result;
1919 }
1920
1921 /* Walk all the namespaces, calling F for each.  The DATA is passed to
1922    F as well.  */
1923
1924 int
1925 walk_namespaces (f, data)
1926      walk_namespaces_fn f;
1927      void *data;
1928 {
1929   return walk_namespaces_r (global_namespace, f, data);
1930 }
1931
1932 struct walk_globals_data {
1933   walk_globals_pred p;
1934   walk_globals_fn f;
1935   void *data;
1936 };
1937
1938 /* Walk the global declarations in NAMESPACE.  Whenever one is found
1939    for which P returns non-zero, call F with its address.  If any call
1940    to F returns a non-zero value, return a non-zero value.  */
1941
1942 static int 
1943 walk_globals_r (namespace, data)
1944      tree namespace;
1945      void *data;
1946 {
1947   struct walk_globals_data* wgd = (struct walk_globals_data *) data;
1948   walk_globals_pred p = wgd->p;
1949   walk_globals_fn f = wgd->f;
1950   void *d = wgd->data;
1951   tree *t;
1952   int result = 0;
1953
1954   t = &NAMESPACE_LEVEL (namespace)->names;
1955
1956   while (*t)
1957     {
1958       tree glbl = *t;
1959
1960       if ((*p) (glbl, d))
1961         result |= (*f) (t, d);
1962
1963       /* If F changed *T, then *T still points at the next item to
1964          examine.  */
1965       if (*t == glbl)
1966         t = &TREE_CHAIN (*t);
1967     }
1968
1969   return result;
1970 }
1971
1972 /* Walk the global declarations.  Whenever one is found for which P
1973    returns non-zero, call F with its address.  If any call to F
1974    returns a non-zero value, return a non-zero value.  */
1975
1976 int
1977 walk_globals (p, f, data)
1978      walk_globals_pred p;
1979      walk_globals_fn f;
1980      void *data;
1981 {
1982   struct walk_globals_data wgd;
1983   wgd.p = p;
1984   wgd.f = f;
1985   wgd.data = data;
1986
1987   return walk_namespaces (walk_globals_r, &wgd);
1988 }
1989
1990 /* Call wrapup_globals_declarations for the globals in NAMESPACE.  If
1991    DATA is non-NULL, this is the last time we will call
1992    wrapup_global_declarations for this NAMESPACE.  */
1993
1994 int
1995 wrapup_globals_for_namespace (namespace, data)
1996      tree namespace;
1997      void *data;
1998 {
1999   tree globals = NAMESPACE_LEVEL (namespace)->names;
2000   int len = list_length (globals);
2001   tree *vec = (tree *) alloca (sizeof (tree) * len);
2002   int i;
2003   int result;
2004   tree decl;
2005   int last_time = (data != 0);
2006
2007   if (last_time && namespace == global_namespace)
2008     /* Let compile_file handle the global namespace.  */
2009     return 0;
2010
2011   /* Process the decls in reverse order--earliest first.
2012      Put them into VEC from back to front, then take out from front.  */
2013   
2014   for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
2015     vec[len - i - 1] = decl;
2016   
2017   if (last_time)
2018     {
2019       check_global_declarations (vec, len);
2020       return 0;
2021     }
2022
2023   /* Temporarily mark vtables as external.  That prevents
2024      wrapup_global_declarations from writing them out; we must process
2025      them ourselves in finish_vtable_vardecl.  */
2026   for (i = 0; i < len; ++i)
2027     if (vtable_decl_p (vec[i], /*data=*/0) && !DECL_EXTERNAL (vec[i]))
2028       {
2029         DECL_NOT_REALLY_EXTERN (vec[i]) = 1;
2030         DECL_EXTERNAL (vec[i]) = 1;
2031       }
2032
2033   /* Write out any globals that need to be output.  */
2034   result = wrapup_global_declarations (vec, len);
2035
2036   /* Undo the hack to DECL_EXTERNAL above.  */
2037   for (i = 0; i < len; ++i)
2038     if (vtable_decl_p (vec[i], /*data=*/0)
2039         && DECL_NOT_REALLY_EXTERN (vec[i]))
2040       {
2041         DECL_NOT_REALLY_EXTERN (vec[i]) = 0;
2042         DECL_EXTERNAL (vec[i]) = 0;
2043       }
2044
2045   return result;
2046 }
2047
2048 \f
2049 /* For debugging.  */
2050 static int no_print_functions = 0;
2051 static int no_print_builtins = 0;
2052
2053 void
2054 print_binding_level (lvl)
2055      struct binding_level *lvl;
2056 {
2057   tree t;
2058   int i = 0, len;
2059   fprintf (stderr, " blocks=");
2060   fprintf (stderr, HOST_PTR_PRINTF, (void *) lvl->blocks);
2061   fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
2062            list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
2063   if (lvl->tag_transparent)
2064     fprintf (stderr, " tag-transparent");
2065   if (lvl->more_cleanups_ok)
2066     fprintf (stderr, " more-cleanups-ok");
2067   if (lvl->have_cleanups)
2068     fprintf (stderr, " have-cleanups");
2069   fprintf (stderr, "\n");
2070   if (lvl->names)
2071     {
2072       fprintf (stderr, " names:\t");
2073       /* We can probably fit 3 names to a line?  */
2074       for (t = lvl->names; t; t = TREE_CHAIN (t))
2075         {
2076           if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL)) 
2077             continue;
2078           if (no_print_builtins
2079               && (TREE_CODE (t) == TYPE_DECL)
2080               && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
2081             continue;
2082
2083           /* Function decls tend to have longer names.  */
2084           if (TREE_CODE (t) == FUNCTION_DECL)
2085             len = 3;
2086           else
2087             len = 2;
2088           i += len;
2089           if (i > 6)
2090             {
2091               fprintf (stderr, "\n\t");
2092               i = len;
2093             }
2094           print_node_brief (stderr, "", t, 0);
2095           if (t == error_mark_node)
2096             break;
2097         }
2098       if (i)
2099         fprintf (stderr, "\n");
2100     }
2101   if (lvl->tags)
2102     {
2103       fprintf (stderr, " tags:\t");
2104       i = 0;
2105       for (t = lvl->tags; t; t = TREE_CHAIN (t))
2106         {
2107           if (TREE_PURPOSE (t) == NULL_TREE)
2108             len = 3;
2109           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2110             len = 2;
2111           else
2112             len = 4;
2113           i += len;
2114           if (i > 5)
2115             {
2116               fprintf (stderr, "\n\t");
2117               i = len;
2118             }
2119           if (TREE_PURPOSE (t) == NULL_TREE)
2120             {
2121               print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
2122               fprintf (stderr, ">");
2123             }
2124           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2125             print_node_brief (stderr, "", TREE_VALUE (t), 0);
2126           else
2127             {
2128               print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
2129               print_node_brief (stderr, "", TREE_VALUE (t), 0);
2130               fprintf (stderr, ">");
2131             }
2132         }
2133       if (i)
2134         fprintf (stderr, "\n");
2135     }
2136   if (lvl->class_shadowed)
2137     {
2138       fprintf (stderr, " class-shadowed:");
2139       for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
2140         {
2141           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2142         }
2143       fprintf (stderr, "\n");
2144     }
2145   if (lvl->type_shadowed)
2146     {
2147       fprintf (stderr, " type-shadowed:");
2148       for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
2149         {
2150           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2151         }
2152       fprintf (stderr, "\n");
2153     }
2154 }
2155
2156 void
2157 print_other_binding_stack (stack)
2158      struct binding_level *stack;
2159 {
2160   struct binding_level *level;
2161   for (level = stack; level != global_binding_level; level = level->level_chain)
2162     {
2163       fprintf (stderr, "binding level ");
2164       fprintf (stderr, HOST_PTR_PRINTF, (void *) level);
2165       fprintf (stderr, "\n");
2166       print_binding_level (level);
2167     }
2168 }
2169
2170 void
2171 print_binding_stack ()
2172 {
2173   struct binding_level *b;
2174   fprintf (stderr, "current_binding_level=");
2175   fprintf (stderr, HOST_PTR_PRINTF, (void *) current_binding_level);
2176   fprintf (stderr, "\nclass_binding_level=");
2177   fprintf (stderr, HOST_PTR_PRINTF, (void *) class_binding_level);
2178   fprintf (stderr, "\nglobal_binding_level=");
2179   fprintf (stderr, HOST_PTR_PRINTF, (void *) global_binding_level);
2180   fprintf (stderr, "\n");
2181   if (class_binding_level)
2182     {
2183       for (b = class_binding_level; b; b = b->level_chain)
2184         if (b == current_binding_level)
2185           break;
2186       if (b)
2187         b = class_binding_level;
2188       else
2189         b = current_binding_level;
2190     }
2191   else
2192     b = current_binding_level;
2193   print_other_binding_stack (b);
2194   fprintf (stderr, "global:\n");
2195   print_binding_level (global_binding_level);
2196 }
2197
2198 /* Namespace binding access routines: The namespace_bindings field of
2199    the identifier is polymorphic, with three possible values:
2200    NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
2201    indicating the BINDING_VALUE of global_namespace. */
2202
2203 /* Check whether the a binding for the name to scope is known.
2204    Assumes that the bindings of the name are already a list
2205    of bindings. Returns the binding found, or NULL_TREE. */
2206
2207 static tree
2208 find_binding (name, scope)
2209      tree name;
2210      tree scope;
2211 {
2212   tree iter, prev = NULL_TREE;
2213
2214   scope = ORIGINAL_NAMESPACE (scope);
2215   
2216   for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
2217        iter = TREE_CHAIN (iter))
2218     {
2219       my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
2220       if (BINDING_SCOPE (iter) == scope)
2221         {
2222           /* Move binding found to the fron of the list, so
2223              subsequent lookups will find it faster. */
2224           if (prev)
2225             {
2226               TREE_CHAIN (prev) = TREE_CHAIN (iter);
2227               TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
2228               IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
2229             }
2230           return iter;
2231         }
2232       prev = iter;
2233     }
2234   return NULL_TREE;
2235 }
2236
2237 /* Always returns a binding for name in scope. If the
2238    namespace_bindings is not a list, convert it to one first.
2239    If no binding is found, make a new one. */
2240
2241 tree
2242 binding_for_name (name, scope)
2243      tree name;
2244      tree scope;
2245 {
2246   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2247   tree result;
2248
2249   scope = ORIGINAL_NAMESPACE (scope);
2250   
2251   if (b && TREE_CODE (b) != CPLUS_BINDING)
2252     {
2253       /* Get rid of optimization for global scope. */
2254       IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
2255       BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
2256       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2257     }
2258   if (b && (result = find_binding (name, scope)))
2259     return result;
2260   /* Not found, make a new permanent one. */
2261   push_obstacks (&permanent_obstack, &permanent_obstack);
2262   result = make_node (CPLUS_BINDING);
2263   TREE_CHAIN (result) = b;
2264   IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
2265   BINDING_SCOPE (result) = scope;
2266   BINDING_TYPE (result) = NULL_TREE;
2267   BINDING_VALUE (result) = NULL_TREE;
2268   pop_obstacks ();
2269   return result;
2270 }
2271
2272 /* Return the binding value for name in scope, considering that
2273    namespace_binding may or may not be a list of CPLUS_BINDINGS. */
2274
2275 tree
2276 namespace_binding (name, scope)
2277      tree name;
2278      tree scope;
2279 {
2280   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2281   if (b == NULL_TREE)
2282     return NULL_TREE;
2283   if (scope == NULL_TREE)
2284     scope = global_namespace;
2285   if (TREE_CODE (b) != CPLUS_BINDING)
2286     return (scope == global_namespace) ? b : NULL_TREE;
2287   name = find_binding (name,scope);
2288   if (name == NULL_TREE)
2289     return name;
2290   return BINDING_VALUE (name);
2291 }
2292
2293 /* Set the binding value for name in scope. If modifying the binding
2294    of global_namespace is attempted, try to optimize it. */
2295
2296 void
2297 set_namespace_binding (name, scope, val)
2298      tree name;
2299      tree scope;
2300      tree val;
2301 {
2302   tree b;
2303
2304   if (scope == NULL_TREE)
2305     scope = global_namespace;
2306   
2307   if (scope == global_namespace)
2308     {
2309       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2310       if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
2311         {
2312           IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
2313           return;
2314         }
2315     }
2316   b = binding_for_name (name, scope);
2317   BINDING_VALUE (b) = val;
2318 }
2319
2320 /* Push into the scope of the NAME namespace.  If NAME is NULL_TREE, then we
2321    select a name that is unique to this compilation unit.  */
2322
2323 void
2324 push_namespace (name)
2325      tree name;
2326 {
2327   tree d = NULL_TREE;
2328   int need_new = 1;
2329   int implicit_use = 0;
2330   int global = 0;
2331   if (!global_namespace)
2332     {
2333       /* This must be ::. */
2334       my_friendly_assert (name == get_identifier ("::"), 377);
2335       global = 1;
2336     }
2337   else if (!name)
2338     {
2339       /* The name of anonymous namespace is unique for the translation
2340          unit.  */
2341       if (!anonymous_namespace_name)
2342         anonymous_namespace_name = get_file_function_name ('N');
2343       name = anonymous_namespace_name;
2344       d = IDENTIFIER_NAMESPACE_VALUE (name);
2345       if (d)
2346         /* Reopening anonymous namespace.  */
2347         need_new = 0;
2348       implicit_use = 1;
2349     }
2350   else if (current_namespace == global_namespace
2351            && name == DECL_NAME (std_node))
2352     {
2353       in_std++;
2354       return;
2355     }
2356   else
2357     {
2358       /* Check whether this is an extended namespace definition. */
2359       d = IDENTIFIER_NAMESPACE_VALUE (name);
2360       if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
2361         {
2362           need_new = 0;
2363           if (DECL_NAMESPACE_ALIAS (d))
2364             {
2365               cp_error ("namespace alias `%D' not allowed here, assuming `%D'",
2366                         d, DECL_NAMESPACE_ALIAS (d));
2367               d = DECL_NAMESPACE_ALIAS (d);
2368             }
2369         }
2370     }
2371   
2372   if (need_new)
2373     {
2374       /* Make a new namespace, binding the name to it. */
2375       d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2376       /* The global namespace is not pushed, and the global binding
2377          level is set elsewhere.  */
2378       if (!global)
2379         {
2380           d = pushdecl (d);
2381           pushlevel (0);
2382           declare_namespace_level ();
2383           NAMESPACE_LEVEL (d) = current_binding_level;
2384         }
2385     }
2386   else
2387     resume_binding_level (NAMESPACE_LEVEL (d));
2388
2389   if (implicit_use)
2390     do_using_directive (d);
2391   /* Enter the name space. */
2392   current_namespace = d;
2393 }
2394
2395 /* Pop from the scope of the current namespace.  */
2396
2397 void
2398 pop_namespace ()
2399 {
2400   if (current_namespace == global_namespace)
2401     {
2402       my_friendly_assert (in_std>0, 980421);
2403       in_std--;
2404       return;
2405     }
2406   current_namespace = CP_DECL_CONTEXT (current_namespace);
2407   /* The binding level is not popped, as it might be re-opened later.  */
2408   suspend_binding_level ();
2409 }
2410
2411 \f
2412 /* Subroutines for reverting temporarily to top-level for instantiation
2413    of templates and such.  We actually need to clear out the class- and
2414    local-value slots of all identifiers, so that only the global values
2415    are at all visible.  Simply setting current_binding_level to the global
2416    scope isn't enough, because more binding levels may be pushed.  */
2417 struct saved_scope {
2418   struct binding_level *old_binding_level;
2419   tree old_bindings;
2420   tree old_namespace;
2421   struct saved_scope *prev;
2422   tree class_name, class_type;
2423   tree access_specifier;
2424   tree function_decl;
2425   struct binding_level *class_bindings;
2426   tree *lang_base, *lang_stack, lang_name;
2427   int lang_stacksize;
2428   int minimal_parse_mode;
2429   tree last_function_parms;
2430   tree template_parms;
2431   HOST_WIDE_INT processing_template_decl;
2432   tree previous_class_type, previous_class_values;
2433   int processing_specialization;
2434   int processing_explicit_instantiation;
2435   char *class_cache_firstobj;
2436 };
2437 static struct saved_scope *current_saved_scope;
2438
2439 /* A chain of the binding vecs created by store_bindings.  We create a
2440    whole bunch of these during compilation, on permanent_obstack, so we
2441    can't just throw them away.  */
2442 static tree free_binding_vecs;
2443
2444 static tree
2445 store_bindings (names, old_bindings)
2446      tree names, old_bindings;
2447 {
2448   tree t;
2449   for (t = names; t; t = TREE_CHAIN (t))
2450     {
2451       tree binding, t1, id;
2452
2453       if (TREE_CODE (t) == TREE_LIST)
2454         id = TREE_PURPOSE (t);
2455       else
2456         id = DECL_NAME (t);
2457
2458       if (!id 
2459           /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2460              we have no IDENTIFIER_BINDING if we have left the class
2461              scope, but cached the class-level declarations.  */
2462           || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
2463         continue;
2464
2465       for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
2466         if (TREE_VEC_ELT (t1, 0) == id)
2467           goto skip_it;
2468
2469       if (free_binding_vecs)
2470         {
2471           binding = free_binding_vecs;
2472           free_binding_vecs = TREE_CHAIN (free_binding_vecs);
2473         }
2474       else
2475         binding = make_tree_vec (4);
2476
2477       if (id)
2478         {
2479           my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
2480           TREE_VEC_ELT (binding, 0) = id;
2481           TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
2482           TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
2483           TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
2484           IDENTIFIER_BINDING (id) = NULL_TREE;
2485           IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
2486         }
2487       TREE_CHAIN (binding) = old_bindings;
2488       old_bindings = binding;
2489     skip_it:
2490       ;
2491     }
2492   return old_bindings;
2493 }
2494
2495 void
2496 maybe_push_to_top_level (pseudo)
2497      int pseudo;
2498 {
2499   extern int current_lang_stacksize;
2500   struct saved_scope *s
2501     = (struct saved_scope *) xmalloc (sizeof (struct saved_scope));
2502   struct binding_level *b = current_binding_level;
2503   tree old_bindings = NULL_TREE;
2504
2505   push_cp_function_context (NULL_TREE);
2506
2507   if (previous_class_type)
2508     old_bindings = store_bindings (previous_class_values, old_bindings);
2509
2510   /* Have to include global_binding_level, because class-level decls
2511      aren't listed anywhere useful.  */
2512   for (; b; b = b->level_chain)
2513     {
2514       tree t;
2515
2516       /* Template IDs are inserted into the global level. If they were
2517          inserted into namespace level, finish_file wouldn't find them
2518          when doing pending instantiations. Therefore, don't stop at
2519          namespace level, but continue until :: .  */
2520       if (b == global_binding_level || (pseudo && b->pseudo_global))
2521         break;
2522
2523       old_bindings = store_bindings (b->names, old_bindings);
2524       /* We also need to check class_shadowed to save class-level type
2525          bindings, since pushclass doesn't fill in b->names.  */
2526       if (b->parm_flag == 2)
2527         old_bindings = store_bindings (b->class_shadowed, old_bindings);
2528
2529       /* Unwind type-value slots back to top level.  */
2530       for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2531         SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2532     }
2533
2534   s->old_binding_level = current_binding_level;
2535   current_binding_level = b;
2536
2537   s->old_namespace = current_namespace;
2538   s->class_name = current_class_name;
2539   s->class_type = current_class_type;
2540   s->access_specifier = current_access_specifier;
2541   s->function_decl = current_function_decl;
2542   s->class_bindings = class_binding_level;
2543   s->lang_stack = current_lang_stack;
2544   s->lang_base = current_lang_base;
2545   s->lang_stacksize = current_lang_stacksize;
2546   s->lang_name = current_lang_name;
2547   s->minimal_parse_mode = minimal_parse_mode;
2548   s->last_function_parms = last_function_parms;
2549   s->template_parms = current_template_parms;
2550   s->processing_template_decl = processing_template_decl;
2551   s->previous_class_type = previous_class_type;
2552   s->previous_class_values = previous_class_values;
2553   s->class_cache_firstobj = class_cache_firstobj;
2554   s->processing_specialization = processing_specialization;
2555   s->processing_explicit_instantiation = processing_explicit_instantiation;
2556
2557   current_class_name = current_class_type = NULL_TREE;
2558   current_function_decl = NULL_TREE;
2559   class_binding_level = (struct binding_level *)0;
2560   current_lang_stacksize = 10;
2561   current_lang_stack = current_lang_base
2562     = (tree *) xmalloc (current_lang_stacksize * sizeof (tree));
2563   current_lang_name = lang_name_cplusplus;
2564   strict_prototype = strict_prototypes_lang_cplusplus;
2565   named_labels = NULL_TREE;
2566   shadowed_labels = NULL_TREE;
2567   minimal_parse_mode = 0;
2568   previous_class_type = previous_class_values = NULL_TREE;
2569   class_cache_firstobj = 0;
2570   processing_specialization = 0;
2571   processing_explicit_instantiation = 0;
2572   current_template_parms = NULL_TREE;
2573   processing_template_decl = 0;
2574   current_namespace = global_namespace;
2575
2576   s->prev = current_saved_scope;
2577   s->old_bindings = old_bindings;
2578   current_saved_scope = s;
2579
2580   push_obstacks (&permanent_obstack, &permanent_obstack);
2581 }
2582
2583 void
2584 push_to_top_level ()
2585 {
2586   maybe_push_to_top_level (0);
2587 }
2588
2589 void
2590 pop_from_top_level ()
2591 {
2592   extern int current_lang_stacksize;
2593   struct saved_scope *s = current_saved_scope;
2594   tree t;
2595
2596   /* Clear out class-level bindings cache.  */
2597   if (previous_class_type)
2598     invalidate_class_lookup_cache ();
2599
2600   pop_obstacks ();
2601
2602   current_binding_level = s->old_binding_level;
2603   current_saved_scope = s->prev;
2604   for (t = s->old_bindings; t; )
2605     {
2606       tree save = t;
2607       tree id = TREE_VEC_ELT (t, 0);
2608       if (id)
2609         {
2610           SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
2611           IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
2612           IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
2613         }
2614       t = TREE_CHAIN (t);
2615       TREE_CHAIN (save) = free_binding_vecs;
2616       free_binding_vecs = save;
2617     }
2618   current_namespace = s->old_namespace;
2619   current_class_name = s->class_name;
2620   current_class_type = s->class_type;
2621   current_access_specifier = s->access_specifier;
2622   current_function_decl = s->function_decl;
2623   class_binding_level = s->class_bindings;
2624   free (current_lang_base);
2625   current_lang_base = s->lang_base;
2626   current_lang_stack = s->lang_stack;
2627   current_lang_name = s->lang_name;
2628   current_lang_stacksize = s->lang_stacksize;
2629   if (current_lang_name == lang_name_cplusplus)
2630     strict_prototype = strict_prototypes_lang_cplusplus;
2631   else if (current_lang_name == lang_name_c)
2632     strict_prototype = strict_prototypes_lang_c;
2633   minimal_parse_mode = s->minimal_parse_mode;
2634   last_function_parms = s->last_function_parms;
2635   current_template_parms = s->template_parms;
2636   processing_template_decl = s->processing_template_decl;
2637   previous_class_type = s->previous_class_type;
2638   previous_class_values = s->previous_class_values;
2639   processing_specialization = s->processing_specialization;
2640   processing_explicit_instantiation = s->processing_explicit_instantiation;
2641   class_cache_firstobj = s->class_cache_firstobj;
2642
2643   free (s);
2644
2645   pop_cp_function_context (NULL_TREE);
2646 }
2647 \f
2648 /* Push a definition of struct, union or enum tag "name".
2649    into binding_level "b".   "type" should be the type node, 
2650    We assume that the tag "name" is not already defined.
2651
2652    Note that the definition may really be just a forward reference.
2653    In that case, the TYPE_SIZE will be a NULL_TREE.
2654
2655    C++ gratuitously puts all these tags in the name space.  */
2656
2657 /* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2658    record the shadowed value for this binding contour.  TYPE is
2659    the type that ID maps to.  */
2660
2661 static void
2662 set_identifier_type_value_with_scope (id, type, b)
2663      tree id;
2664      tree type;
2665      struct binding_level *b;
2666 {
2667   if (!b->namespace_p)
2668     {
2669       /* Shadow the marker, not the real thing, so that the marker
2670          gets restored later. */
2671       tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
2672       b->type_shadowed
2673         = tree_cons (id, old_type_value, b->type_shadowed);
2674     }
2675   else
2676     {
2677       tree binding = binding_for_name (id, current_namespace);
2678       BINDING_TYPE (binding) = type;
2679       /* Store marker instead of real type. */
2680       type = global_type_node;
2681     }
2682   SET_IDENTIFIER_TYPE_VALUE (id, type);
2683 }
2684
2685 /* As set_identifier_type_value_with_scope, but using current_binding_level.  */
2686
2687 void
2688 set_identifier_type_value (id, type)
2689      tree id;
2690      tree type;
2691 {
2692   set_identifier_type_value_with_scope (id, type, current_binding_level);
2693 }
2694
2695 /* Return the type associated with id. */
2696
2697 tree
2698 identifier_type_value (id)
2699      tree id;
2700 {
2701   /* There is no type with that name, anywhere. */
2702   if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2703     return NULL_TREE;
2704   /* This is not the type marker, but the real thing. */
2705   if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2706     return REAL_IDENTIFIER_TYPE_VALUE (id);
2707   /* Have to search for it. It must be on the global level, now.
2708      Ask lookup_name not to return non-types. */
2709   id = lookup_name_real (id, 2, 1, 0);
2710   if (id)
2711     return TREE_TYPE (id);
2712   return NULL_TREE;
2713 }
2714
2715 /* Pop off extraneous binding levels left over due to syntax errors.
2716
2717    We don't pop past namespaces, as they might be valid.  */
2718
2719 void
2720 pop_everything ()
2721 {
2722 #ifdef DEBUG_CP_BINDING_LEVELS
2723   fprintf (stderr, "XXX entering pop_everything ()\n");
2724 #endif
2725   while (!toplevel_bindings_p ())
2726     {
2727       if (current_binding_level->parm_flag == 2)
2728         pop_nested_class ();
2729       else
2730         poplevel (0, 0, 0);
2731     }
2732 #ifdef DEBUG_CP_BINDING_LEVELS
2733   fprintf (stderr, "XXX leaving pop_everything ()\n");
2734 #endif
2735 }
2736
2737 /* The type TYPE is being declared.  If it is a class template, or a
2738    specialization of a class template, do any processing required and
2739    perform error-checking.  If IS_FRIEND is non-zero, this TYPE is
2740    being declared a friend.  B is the binding level at which this TYPE
2741    should be bound.
2742
2743    Returns the TYPE_DECL for TYPE, which may have been altered by this
2744    processing.  */
2745
2746 static tree 
2747 maybe_process_template_type_declaration (type, globalize, b)
2748      tree type;
2749      int globalize;
2750      struct binding_level* b;
2751 {
2752   tree decl = TYPE_NAME (type);
2753  
2754   if (processing_template_parmlist)
2755     /* You can't declare a new template type in a template parameter
2756        list.  But, you can declare a non-template type:
2757        
2758          template <class A*> struct S;
2759        
2760        is a forward-declaration of `A'.  */
2761     ;
2762   else 
2763     {
2764       maybe_check_template_type (type);
2765
2766       my_friendly_assert (IS_AGGR_TYPE (type) 
2767                           || TREE_CODE (type) == ENUMERAL_TYPE, 0);
2768                           
2769                           
2770       if (/* If !GLOBALIZE then we are looking at a definition.
2771              It may not be a primary template.  (For example, in:
2772                   
2773                template <class T>
2774                struct S1 { class S2 {}; }
2775                   
2776              we have to push_template_decl for S2.)  */
2777           (processing_template_decl && !globalize)
2778           /* If we are declaring a friend template class, we will
2779              have GLOBALIZE set, since something like:
2780
2781                template <class T>
2782                struct S1 {
2783                  template <class U>
2784                  friend class S2; 
2785                };
2786
2787              declares S2 to be at global scope.  */
2788           || PROCESSING_REAL_TEMPLATE_DECL_P ())
2789         {
2790           /* This may change after the call to
2791              push_template_decl_real, but we want the original value.  */
2792           tree name = DECL_NAME (decl);
2793
2794           decl = push_template_decl_real (decl, globalize);
2795           /* If the current binding level is the binding level for the
2796              template parameters (see the comment in
2797              begin_template_parm_list) and the enclosing level is a class
2798              scope, and we're not looking at a friend, push the
2799              declaration of the member class into the class scope.  In the
2800              friend case, push_template_decl will already have put the
2801              friend into global scope, if appropriate.  */
2802           if (TREE_CODE (type) != ENUMERAL_TYPE
2803               && !globalize && b->pseudo_global
2804               && b->level_chain->parm_flag == 2)
2805             {
2806               finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
2807               /* Put this tag on the list of tags for the class, since
2808                  that won't happen below because B is not the class
2809                  binding level, but is instead the pseudo-global level.  */
2810               b->level_chain->tags = 
2811                 saveable_tree_cons (name, type, b->level_chain->tags);
2812               if (TYPE_SIZE (current_class_type) == NULL_TREE)
2813                 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2814             }
2815         }
2816     }
2817
2818   return decl;
2819 }
2820
2821 /* Push a tag name NAME for struct/class/union/enum type TYPE.
2822    Normally put it into the inner-most non-tag-transparent scope,
2823    but if GLOBALIZE is true, put it in the inner-most non-class scope.
2824    The latter is needed for implicit declarations.  */
2825
2826 void
2827 pushtag (name, type, globalize)
2828      tree name, type;
2829      int globalize;
2830 {
2831   register struct binding_level *b;
2832
2833   b = current_binding_level;
2834   while (b->tag_transparent
2835          || (globalize && b->parm_flag == 2))
2836     b = b->level_chain;
2837
2838   if (toplevel_bindings_p ())
2839     b->tags = perm_tree_cons (name, type, b->tags);
2840   else
2841     b->tags = saveable_tree_cons (name, type, b->tags);
2842
2843   if (name)
2844     {
2845       /* Do C++ gratuitous typedefing.  */
2846       if (IDENTIFIER_TYPE_VALUE (name) != type)
2847         {
2848           register tree d = NULL_TREE;
2849           int newdecl = 0, in_class = 0;
2850           tree context;
2851           tree c_decl = NULL_TREE;
2852
2853           context = type ? TYPE_CONTEXT (type) : NULL_TREE;
2854           if (! context)
2855             {
2856               tree cs = current_scope ();
2857
2858               if (! globalize)
2859                 context = cs;
2860               else if (cs != NULL_TREE 
2861                        && TREE_CODE_CLASS (TREE_CODE (cs)) == 't')
2862                 /* When declaring a friend class of a local class, we want
2863                    to inject the newly named class into the scope
2864                    containing the local class, not the namespace scope.  */
2865                 context = hack_decl_function_context (get_type_decl (cs));
2866             }
2867           if (context)
2868             c_decl = TREE_CODE (context) == FUNCTION_DECL
2869               ? context : TYPE_MAIN_DECL (context);
2870
2871           if (!context)
2872             context = current_namespace;
2873
2874           if ((b->pseudo_global && b->level_chain->parm_flag == 2)
2875               || b->parm_flag == 2)
2876             in_class = 1;
2877           else
2878             d = lookup_nested_type (type, c_decl);
2879
2880           if (d == NULL_TREE)
2881             {
2882               newdecl = 1;
2883               d = build_decl (TYPE_DECL, name, type);
2884               if (current_lang_name == lang_name_java)
2885                 TYPE_FOR_JAVA (type) = 1;
2886               SET_DECL_ARTIFICIAL (d);
2887               if (! in_class)
2888                 set_identifier_type_value_with_scope (name, type, b);
2889             }
2890           else
2891             d = TYPE_MAIN_DECL (d);
2892
2893           TYPE_NAME (type) = d;
2894           DECL_CONTEXT (d) = FROB_CONTEXT (context);
2895
2896           d = maybe_process_template_type_declaration (type,
2897                                                        globalize, b);
2898
2899           if (b->parm_flag == 2)
2900             {
2901               if (newdecl && !PROCESSING_REAL_TEMPLATE_DECL_P ())
2902                 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2903                    class.  But if it's a member template class, we
2904                    want the TEMPLATE_DECL, not the TYPE_DECL, so this
2905                    is done later.  */
2906                 finish_member_declaration (d);
2907               else
2908                 pushdecl_class_level (d);
2909             }
2910           else
2911             d = pushdecl_with_scope (d, b);
2912
2913           if (newdecl)
2914             {
2915               if (ANON_AGGRNAME_P (name))
2916                 DECL_IGNORED_P (d) = 1;
2917
2918               TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2919               DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
2920               if (!uses_template_parms (type))
2921                 DECL_ASSEMBLER_NAME (d)
2922                   = get_identifier (build_overload_name (type, 1, 1));
2923             }
2924         }
2925       if (b->parm_flag == 2)
2926         {
2927           if (TYPE_SIZE (current_class_type) == NULL_TREE)
2928             CLASSTYPE_TAGS (current_class_type) = b->tags;
2929         }
2930     }
2931
2932   if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2933     /* Use the canonical TYPE_DECL for this node.  */
2934     TYPE_STUB_DECL (type) = TYPE_NAME (type);
2935   else
2936     {
2937       /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2938          will be the tagged type we just added to the current
2939          binding level.  This fake NULL-named TYPE_DECL node helps
2940          dwarfout.c to know when it needs to output a
2941          representation of a tagged type, and it also gives us a
2942          convenient place to record the "scope start" address for
2943          the tagged type.  */
2944
2945       tree d = build_decl (TYPE_DECL, NULL_TREE, type);
2946       TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2947     }
2948 }
2949
2950 /* Counter used to create anonymous type names.  */
2951
2952 static int anon_cnt = 0;
2953
2954 /* Return an IDENTIFIER which can be used as a name for
2955    anonymous structs and unions.  */
2956
2957 tree
2958 make_anon_name ()
2959 {
2960   char buf[32];
2961
2962   sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2963   return get_identifier (buf);
2964 }
2965
2966 /* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2967    This keeps dbxout from getting confused.  */
2968
2969 void
2970 clear_anon_tags ()
2971 {
2972   register struct binding_level *b;
2973   register tree tags;
2974   static int last_cnt = 0;
2975
2976   /* Fast out if no new anon names were declared.  */
2977   if (last_cnt == anon_cnt)
2978     return;
2979
2980   b = current_binding_level;
2981   while (b->tag_transparent)
2982     b = b->level_chain;
2983   tags = b->tags;
2984   while (tags)
2985     {
2986       /* A NULL purpose means we have already processed all tags
2987          from here to the end of the list.  */
2988       if (TREE_PURPOSE (tags) == NULL_TREE)
2989         break;
2990       if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2991         TREE_PURPOSE (tags) = NULL_TREE;
2992       tags = TREE_CHAIN (tags);
2993     }
2994   last_cnt = anon_cnt;
2995 }
2996 \f
2997 /* Subroutine of duplicate_decls: return truthvalue of whether
2998    or not types of these decls match.
2999
3000    For C++, we must compare the parameter list so that `int' can match
3001    `int&' in a parameter position, but `int&' is not confused with
3002    `const int&'.  */
3003
3004 int
3005 decls_match (newdecl, olddecl)
3006      tree newdecl, olddecl;
3007 {
3008   int types_match;
3009
3010   if (newdecl == olddecl)
3011     return 1;
3012
3013   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
3014     /* If the two DECLs are not even the same kind of thing, we're not
3015        interested in their types.  */
3016     return 0;
3017
3018   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3019     {
3020       tree f1 = TREE_TYPE (newdecl);
3021       tree f2 = TREE_TYPE (olddecl);
3022       tree p1 = TYPE_ARG_TYPES (f1);
3023       tree p2 = TYPE_ARG_TYPES (f2);
3024
3025       if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl)
3026           && ! (DECL_LANGUAGE (newdecl) == lang_c
3027                 && DECL_LANGUAGE (olddecl) == lang_c))
3028         return 0;
3029
3030       /* When we parse a static member function definition,
3031          we put together a FUNCTION_DECL which thinks its type
3032          is METHOD_TYPE.  Change that to FUNCTION_TYPE, and
3033          proceed.  */
3034       if (TREE_CODE (f1) == METHOD_TYPE && DECL_STATIC_FUNCTION_P (olddecl))
3035         revert_static_member_fn (&newdecl, &f1, &p1);
3036       else if (TREE_CODE (f2) == METHOD_TYPE
3037                && DECL_STATIC_FUNCTION_P (newdecl))
3038         revert_static_member_fn (&olddecl, &f2, &p2);
3039
3040       /* Here we must take care of the case where new default
3041          parameters are specified.  Also, warn if an old
3042          declaration becomes ambiguous because default
3043          parameters may cause the two to be ambiguous.  */
3044       if (TREE_CODE (f1) != TREE_CODE (f2))
3045         {
3046           if (TREE_CODE (f1) == OFFSET_TYPE)
3047             cp_compiler_error ("`%D' redeclared as member function", newdecl);
3048           else
3049             cp_compiler_error ("`%D' redeclared as non-member function", newdecl);
3050           return 0;
3051         }
3052
3053       if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
3054         {
3055           if (! strict_prototypes_lang_c && DECL_LANGUAGE (olddecl) == lang_c
3056               && p2 == NULL_TREE)
3057             {
3058               types_match = self_promoting_args_p (p1);
3059               if (p1 == void_list_node)
3060                 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
3061             }
3062           else if (!strict_prototypes_lang_c && DECL_LANGUAGE (olddecl)==lang_c
3063                    && DECL_LANGUAGE (newdecl) == lang_c && p1 == NULL_TREE)
3064             {
3065               types_match = self_promoting_args_p (p2);
3066               TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
3067             }
3068           else
3069             types_match = compparms (p1, p2);
3070         }
3071       else
3072         types_match = 0;
3073     }
3074   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3075     {
3076       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3077                                 DECL_TEMPLATE_PARMS (olddecl)))
3078         return 0;
3079       
3080       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3081         types_match = 1;
3082       else
3083         types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
3084                                    DECL_TEMPLATE_RESULT (newdecl));
3085     }
3086   else
3087     {
3088       if (TREE_TYPE (newdecl) == error_mark_node)
3089         types_match = TREE_TYPE (olddecl) == error_mark_node;
3090       else if (TREE_TYPE (olddecl) == NULL_TREE)
3091         types_match = TREE_TYPE (newdecl) == NULL_TREE;
3092       else if (TREE_TYPE (newdecl) == NULL_TREE)
3093         types_match = 0;
3094       else
3095         types_match = comptypes (TREE_TYPE (newdecl),
3096                                  TREE_TYPE (olddecl),
3097                                  COMPARE_REDECLARATION);
3098     }
3099
3100   return types_match;
3101 }
3102
3103 /* If NEWDECL is `static' and an `extern' was seen previously,
3104    warn about it.  (OLDDECL may be NULL_TREE; NAME contains
3105    information about previous usage as an `extern'.)
3106
3107    Note that this does not apply to the C++ case of declaring
3108    a variable `extern const' and then later `const'.
3109
3110    Don't complain about built-in functions, since they are beyond
3111    the user's control.  */
3112
3113 static void
3114 warn_extern_redeclared_static (newdecl, olddecl)
3115      tree newdecl, olddecl;
3116 {
3117   tree name;
3118
3119   static const char *explicit_extern_static_warning
3120     = "`%D' was declared `extern' and later `static'";
3121   static const char *implicit_extern_static_warning
3122     = "`%D' was declared implicitly `extern' and later `static'";
3123
3124   if (TREE_CODE (newdecl) == TYPE_DECL)
3125     return;
3126
3127   name = DECL_ASSEMBLER_NAME (newdecl);
3128   if (TREE_PUBLIC (name) && DECL_THIS_STATIC (newdecl))
3129     {
3130       /* It's okay to redeclare an ANSI built-in function as static,
3131          or to declare a non-ANSI built-in function as anything.  */
3132       if (! (TREE_CODE (newdecl) == FUNCTION_DECL
3133              && olddecl != NULL_TREE
3134              && TREE_CODE (olddecl) == FUNCTION_DECL
3135              && (DECL_BUILT_IN (olddecl)
3136                  || DECL_BUILT_IN_NONANSI (olddecl))))
3137         {
3138           cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
3139                       ? implicit_extern_static_warning
3140                       : explicit_extern_static_warning, newdecl);
3141           if (olddecl != NULL_TREE)
3142             cp_pedwarn_at ("previous declaration of `%D'", olddecl);
3143         }
3144     }
3145 }
3146
3147 /* Handle when a new declaration NEWDECL has the same name as an old
3148    one OLDDECL in the same binding contour.  Prints an error message
3149    if appropriate.
3150
3151    If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
3152    Otherwise, return 0.  */
3153
3154 int
3155 duplicate_decls (newdecl, olddecl)
3156      tree newdecl, olddecl;
3157 {
3158   extern struct obstack permanent_obstack;
3159   unsigned olddecl_uid = DECL_UID (olddecl);
3160   int olddecl_friend = 0, types_match = 0;
3161   int new_defines_function = 0;
3162
3163   if (newdecl == olddecl)
3164     return 1;
3165
3166   types_match = decls_match (newdecl, olddecl);
3167
3168   /* If either the type of the new decl or the type of the old decl is an
3169      error_mark_node, then that implies that we have already issued an
3170      error (earlier) for some bogus type specification, and in that case,
3171      it is rather pointless to harass the user with yet more error message
3172      about the same declaration, so just pretend the types match here.  */
3173   if (TREE_TYPE (newdecl) == error_mark_node
3174       || TREE_TYPE (olddecl) == error_mark_node)
3175     types_match = 1;
3176  
3177   /* Check for redeclaration and other discrepancies. */
3178   if (TREE_CODE (olddecl) == FUNCTION_DECL
3179       && DECL_ARTIFICIAL (olddecl)
3180       && (DECL_BUILT_IN (olddecl) || DECL_BUILT_IN_NONANSI (olddecl)))
3181     {
3182       /* If you declare a built-in or predefined function name as static,
3183          the old definition is overridden, but optionally warn this was a
3184          bad choice of name.  Ditto for overloads.  */
3185       if (! TREE_PUBLIC (newdecl)
3186           || (TREE_CODE (newdecl) == FUNCTION_DECL
3187               && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl)))
3188         {
3189           if (warn_shadow)
3190             cp_warning ("shadowing %s function `%#D'",
3191                         DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3192                         olddecl);
3193           /* Discard the old built-in function.  */
3194           return 0;
3195         }
3196       else if (! types_match)
3197         {
3198           if (TREE_CODE (newdecl) != FUNCTION_DECL)
3199             {
3200               /* If the built-in is not ansi, then programs can override
3201                  it even globally without an error.  */
3202               if (! DECL_BUILT_IN (olddecl))
3203                 cp_warning ("library function `%#D' redeclared as non-function `%#D'",
3204                             olddecl, newdecl);
3205               else
3206                 {
3207                   cp_error ("declaration of `%#D'", newdecl);
3208                   cp_error ("conflicts with built-in declaration `%#D'",
3209                             olddecl);
3210                 }
3211               return 0;
3212             }
3213
3214           cp_warning ("declaration of `%#D'", newdecl);
3215           cp_warning ("conflicts with built-in declaration `%#D'",
3216                       olddecl);
3217         }
3218     }
3219   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
3220     {
3221       if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
3222            && TREE_CODE (newdecl) != TYPE_DECL
3223            && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
3224                  && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
3225           || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
3226               && TREE_CODE (olddecl) != TYPE_DECL
3227               && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
3228                     && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
3229                         == TYPE_DECL))))
3230         {
3231           /* We do nothing special here, because C++ does such nasty
3232              things with TYPE_DECLs.  Instead, just let the TYPE_DECL
3233              get shadowed, and know that if we need to find a TYPE_DECL
3234              for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3235              slot of the identifier.  */
3236           return 0;
3237         }
3238
3239       if ((TREE_CODE (newdecl) == FUNCTION_DECL
3240            && DECL_FUNCTION_TEMPLATE_P (olddecl))
3241           || (TREE_CODE (olddecl) == FUNCTION_DECL
3242               && DECL_FUNCTION_TEMPLATE_P (newdecl)))
3243         return 0;
3244
3245       cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
3246       if (TREE_CODE (olddecl) == TREE_LIST)
3247         olddecl = TREE_VALUE (olddecl);
3248       cp_error_at ("previous declaration of `%#D'", olddecl);
3249
3250       /* New decl is completely inconsistent with the old one =>
3251          tell caller to replace the old one.  */
3252
3253       return 0;
3254     }
3255   else if (!types_match)
3256     {
3257       if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl))
3258         /* These are certainly not duplicate declarations; they're
3259            from different scopes.  */
3260         return 0;
3261
3262       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3263         {
3264           /* The name of a class template may not be declared to refer to
3265              any other template, class, function, object, namespace, value,
3266              or type in the same scope.  */
3267           if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
3268               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3269             {
3270               cp_error ("declaration of template `%#D'", newdecl);
3271               cp_error_at ("conflicts with previous declaration `%#D'",
3272                            olddecl);
3273             }
3274           else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
3275                    && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3276                    && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
3277                                  TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
3278                    && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3279                                            DECL_TEMPLATE_PARMS (olddecl)))
3280             {
3281               cp_error ("new declaration `%#D'", newdecl);
3282               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3283             }
3284           return 0;
3285         }
3286       if (TREE_CODE (newdecl) == FUNCTION_DECL)
3287         {
3288           if (DECL_LANGUAGE (newdecl) == lang_c
3289               && DECL_LANGUAGE (olddecl) == lang_c)
3290             {
3291               cp_error ("declaration of C function `%#D' conflicts with",
3292                         newdecl);
3293               cp_error_at ("previous declaration `%#D' here", olddecl);
3294             }
3295           else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3296                               TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3297             {
3298               cp_error ("new declaration `%#D'", newdecl);
3299               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3300             }
3301           else
3302             return 0;
3303         }
3304
3305       /* Already complained about this, so don't do so again.  */
3306       else if (current_class_type == NULL_TREE
3307           || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3308         {
3309           cp_error ("conflicting types for `%#D'", newdecl);
3310           cp_error_at ("previous declaration as `%#D'", olddecl);
3311         }
3312     }
3313   else if (TREE_CODE (newdecl) == FUNCTION_DECL 
3314             && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3315                  && (!DECL_TEMPLATE_INFO (newdecl)
3316                      || (DECL_TI_TEMPLATE (newdecl) 
3317                          != DECL_TI_TEMPLATE (olddecl))))
3318                 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3319                     && (!DECL_TEMPLATE_INFO (olddecl)
3320                         || (DECL_TI_TEMPLATE (olddecl) 
3321                             != DECL_TI_TEMPLATE (newdecl))))))
3322     /* It's OK to have a template specialization and a non-template
3323        with the same type, or to have specializations of two
3324        different templates with the same type.  Note that if one is a
3325        specialization, and the other is an instantiation of the same
3326        template, that we do not exit at this point.  That situation
3327        can occur if we instantiate a template class, and then
3328        specialize one of its methods.  This situation is legal, but
3329        the declarations must be merged in the usual way.  */
3330     return 0;
3331   else if (TREE_CODE (newdecl) == FUNCTION_DECL 
3332            && ((DECL_TEMPLATE_INSTANTIATION (olddecl) 
3333                 && !DECL_USE_TEMPLATE (newdecl))
3334                || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3335                    && !DECL_USE_TEMPLATE (olddecl))))
3336     /* One of the declarations is a template instantiation, and the
3337        other is not a template at all.  That's OK.  */
3338     return 0;
3339   else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3340            && DECL_NAMESPACE_ALIAS (newdecl)
3341            && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3342     /* Redeclaration of namespace alias, ignore it. */
3343     return 1;
3344   else
3345     {
3346       const char *errmsg = redeclaration_error_message (newdecl, olddecl);
3347       if (errmsg)
3348         {
3349           cp_error (errmsg, newdecl);
3350           if (DECL_NAME (olddecl) != NULL_TREE)
3351             cp_error_at ((DECL_INITIAL (olddecl)
3352                           && namespace_bindings_p ())
3353                          ? "`%#D' previously defined here"
3354                          : "`%#D' previously declared here", olddecl);
3355         }
3356       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3357                && DECL_INITIAL (olddecl) != NULL_TREE
3358                && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3359                && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3360         {
3361           /* Prototype decl follows defn w/o prototype.  */
3362           cp_warning_at ("prototype for `%#D'", newdecl);
3363           cp_warning_at ("follows non-prototype definition here", olddecl);
3364         }
3365       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3366                && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
3367         {
3368           /* extern "C" int foo ();
3369              int foo () { bar (); }
3370              is OK.  */
3371           if (current_lang_stack == current_lang_base)
3372             DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3373           else
3374             {
3375               cp_error_at ("previous declaration of `%#D' with %L linkage",
3376                            olddecl, DECL_LANGUAGE (olddecl));
3377               cp_error ("conflicts with new declaration with %L linkage",
3378                         DECL_LANGUAGE (newdecl));
3379             }
3380         }
3381
3382       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
3383         ;
3384       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
3385         {
3386           tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3387           tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3388           int i = 1;
3389
3390           if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3391             t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
3392         
3393           for (; t1 && t1 != void_list_node;
3394                t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3395             if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3396               {
3397                 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3398                                            TREE_PURPOSE (t2)))
3399                   {
3400                     if (pedantic)
3401                       {
3402                         cp_pedwarn ("default argument given for parameter %d of `%#D'",
3403                                     i, newdecl);
3404                         cp_pedwarn_at ("after previous specification in `%#D'",
3405                                        olddecl);
3406                       }
3407                   }
3408                 else
3409                   {
3410                     cp_error ("default argument given for parameter %d of `%#D'",
3411                               i, newdecl);
3412                     cp_error_at ("after previous specification in `%#D'",
3413                                  olddecl);
3414                   }
3415               }
3416
3417           if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
3418               && TREE_ADDRESSABLE (olddecl) && warn_inline)
3419             {
3420               cp_warning ("`%#D' was used before it was declared inline",
3421                           newdecl);
3422               cp_warning_at ("previous non-inline declaration here",
3423                              olddecl);
3424             }
3425         }
3426     }
3427
3428   /* If new decl is `static' and an `extern' was seen previously,
3429      warn about it.  */
3430   warn_extern_redeclared_static (newdecl, olddecl);
3431
3432   /* We have committed to returning 1 at this point.  */
3433   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3434     {
3435       /* Now that functions must hold information normally held
3436          by field decls, there is extra work to do so that
3437          declaration information does not get destroyed during
3438          definition.  */
3439       if (DECL_VINDEX (olddecl))
3440         DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
3441       if (DECL_CONTEXT (olddecl))
3442         DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
3443       if (DECL_CLASS_CONTEXT (olddecl))
3444         DECL_CLASS_CONTEXT (newdecl) = DECL_CLASS_CONTEXT (olddecl);
3445       if (DECL_PENDING_INLINE_INFO (newdecl) == (struct pending_inline *)0)
3446         DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
3447       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3448       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
3449       DECL_ABSTRACT_VIRTUAL_P (newdecl) |= DECL_ABSTRACT_VIRTUAL_P (olddecl);
3450       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
3451       DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
3452       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
3453       
3454       /* Optionally warn about more than one declaration for the same
3455          name, but don't warn about a function declaration followed by a
3456          definition.  */
3457       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3458           && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3459           /* Don't warn about extern decl followed by definition. */
3460           && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3461           /* Don't warn about friends, let add_friend take care of it. */
3462           && ! DECL_FRIEND_P (newdecl))
3463         {
3464           cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3465           cp_warning_at ("previous declaration of `%D'", olddecl);
3466         }
3467     }
3468
3469   /* Deal with C++: must preserve virtual function table size.  */
3470   if (TREE_CODE (olddecl) == TYPE_DECL)
3471     {
3472       register tree newtype = TREE_TYPE (newdecl);
3473       register tree oldtype = TREE_TYPE (olddecl);
3474
3475       if (newtype != error_mark_node && oldtype != error_mark_node
3476           && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3477         {
3478           CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3479           CLASSTYPE_FRIEND_CLASSES (newtype)
3480             = CLASSTYPE_FRIEND_CLASSES (oldtype);
3481         }
3482     }
3483
3484   /* Copy all the DECL_... slots specified in the new decl
3485      except for any that we copy here from the old type.  */
3486   DECL_MACHINE_ATTRIBUTES (newdecl) 
3487     = merge_machine_decl_attributes (olddecl, newdecl);
3488
3489   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3490     {
3491       if (! duplicate_decls (DECL_TEMPLATE_RESULT (newdecl),
3492                              DECL_TEMPLATE_RESULT (olddecl)))
3493         cp_error ("invalid redeclaration of %D", newdecl);
3494       TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
3495       DECL_TEMPLATE_SPECIALIZATIONS (olddecl) 
3496         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3497                    DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
3498  
3499       return 1;
3500     }
3501     
3502   if (types_match)
3503     {
3504       /* Automatically handles default parameters.  */
3505       tree oldtype = TREE_TYPE (olddecl);
3506       tree newtype;
3507
3508       /* Make sure we put the new type in the same obstack as the old one.  */
3509       if (oldtype)
3510         push_obstacks (TYPE_OBSTACK (oldtype), TYPE_OBSTACK (oldtype));
3511       else
3512         {
3513           push_obstacks_nochange ();
3514           end_temporary_allocation ();
3515         }
3516
3517       /* Merge the data types specified in the two decls.  */
3518       newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3519
3520       if (TREE_CODE (newdecl) == VAR_DECL)
3521         DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3522       /* Do this after calling `common_type' so that default
3523          parameters don't confuse us.  */
3524       else if (TREE_CODE (newdecl) == FUNCTION_DECL
3525           && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3526               != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3527         {
3528           TREE_TYPE (newdecl) = build_exception_variant (newtype,
3529                                                          TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
3530           TREE_TYPE (olddecl) = build_exception_variant (newtype,
3531                                                          TYPE_RAISES_EXCEPTIONS (oldtype));
3532
3533           if ((pedantic || (! DECL_IN_SYSTEM_HEADER (olddecl)
3534                             && ! DECL_IN_SYSTEM_HEADER (newdecl)))
3535               && DECL_SOURCE_LINE (olddecl) != 0
3536               && flag_exceptions
3537               && ! compexcepttypes (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
3538             {
3539               cp_pedwarn ("declaration of `%D' throws different exceptions",
3540                         newdecl);
3541               cp_pedwarn_at ("previous declaration here", olddecl);
3542             }
3543         }
3544       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3545
3546       /* Lay the type out, unless already done.  */
3547       if (! same_type_p (newtype, oldtype)
3548           && TREE_TYPE (newdecl) != error_mark_node
3549           && !(processing_template_decl && uses_template_parms (newdecl)))
3550         layout_type (TREE_TYPE (newdecl));
3551
3552       if ((TREE_CODE (newdecl) == VAR_DECL
3553            || TREE_CODE (newdecl) == PARM_DECL
3554            || TREE_CODE (newdecl) == RESULT_DECL
3555            || TREE_CODE (newdecl) == FIELD_DECL
3556            || TREE_CODE (newdecl) == TYPE_DECL)
3557           && !(processing_template_decl && uses_template_parms (newdecl)))
3558         layout_decl (newdecl, 0);
3559
3560       /* Merge the type qualifiers.  */
3561       if (TREE_READONLY (newdecl))
3562         TREE_READONLY (olddecl) = 1;
3563       if (TREE_THIS_VOLATILE (newdecl))
3564         TREE_THIS_VOLATILE (olddecl) = 1;
3565
3566       /* Merge the initialization information.  */
3567       if (DECL_INITIAL (newdecl) == NULL_TREE
3568           && DECL_INITIAL (olddecl) != NULL_TREE)
3569         {
3570           DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3571           DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3572           DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
3573           if (DECL_LANG_SPECIFIC (newdecl)
3574               && DECL_LANG_SPECIFIC (olddecl))
3575             DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
3576         }
3577
3578       /* Merge the section attribute.
3579          We want to issue an error if the sections conflict but that must be
3580          done later in decl_attributes since we are called before attributes
3581          are assigned.  */
3582       if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3583         DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3584
3585       /* Keep the old rtl since we can safely use it, unless it's the
3586          call to abort() used for abstract virtuals.  */
3587       if ((DECL_LANG_SPECIFIC (olddecl)
3588            && !DECL_ABSTRACT_VIRTUAL_P (olddecl))
3589           || DECL_RTL (olddecl) != DECL_RTL (abort_fndecl))
3590         DECL_RTL (newdecl) = DECL_RTL (olddecl);
3591
3592       pop_obstacks ();
3593     }
3594   /* If cannot merge, then use the new type and qualifiers,
3595      and don't preserve the old rtl.  */
3596   else
3597     {
3598       /* Clean out any memory we had of the old declaration.  */
3599       tree oldstatic = value_member (olddecl, static_aggregates);
3600       if (oldstatic)
3601         TREE_VALUE (oldstatic) = error_mark_node;
3602
3603       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3604       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3605       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3606       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3607     }
3608
3609   /* Merge the storage class information.  */
3610   DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
3611   DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
3612   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3613   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3614   if (! DECL_EXTERNAL (olddecl))
3615     DECL_EXTERNAL (newdecl) = 0;
3616   
3617   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
3618     {
3619       DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3620       DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
3621       DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
3622       DECL_TEMPLATE_INSTANTIATED (newdecl) 
3623         |= DECL_TEMPLATE_INSTANTIATED (olddecl);
3624       /* Don't really know how much of the language-specific
3625          values we should copy from old to new.  */
3626       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3627       DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3628       DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
3629       DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3630       olddecl_friend = DECL_FRIEND_P (olddecl);
3631
3632       /* Only functions have DECL_BEFRIENDING_CLASSES.  */
3633       if (TREE_CODE (newdecl) == FUNCTION_DECL
3634           || DECL_FUNCTION_TEMPLATE_P (newdecl))
3635         DECL_BEFRIENDING_CLASSES (newdecl)
3636           = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3637                      DECL_BEFRIENDING_CLASSES (olddecl));
3638     }
3639
3640   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3641     {
3642       if (DECL_TEMPLATE_INSTANTIATION (olddecl) 
3643           && !DECL_TEMPLATE_INSTANTIATION (newdecl)) 
3644         {
3645           /* If newdecl is not a specialization, then it is not a
3646              template-related function at all.  And that means that we
3647              shoud have exited above, returning 0.  */
3648           my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3649                               0);
3650
3651           if (TREE_USED (olddecl)) 
3652             /* From [temp.expl.spec]:
3653                
3654                If a template, a member template or the member of a class
3655                template is explicitly specialized then that
3656                specialization shall be declared before the first use of
3657                that specialization that would cause an implicit
3658                instantiation to take place, in every translation unit in
3659                which such a use occurs.  */
3660             cp_error ("explicit specialization of %D after first use", 
3661                       olddecl);
3662
3663           SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3664         }
3665       DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3666
3667       /* If either decl says `inline', this fn is inline, unless its
3668          definition was passed already.  */
3669       if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3670         DECL_INLINE (olddecl) = 1;
3671       DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3672
3673       if (! types_match)
3674         {
3675           DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3676           DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3677           DECL_RTL (olddecl) = DECL_RTL (newdecl);
3678         }
3679       if (! types_match || new_defines_function)
3680         {
3681           /* These need to be copied so that the names are available.  */
3682           DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3683           DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
3684         }
3685       if (new_defines_function)
3686         /* If defining a function declared with other language
3687            linkage, use the previously declared language linkage.  */
3688         DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3689       else
3690         {
3691           /* If redeclaring a builtin function, and not a definition,
3692              it stays built in.  */
3693           if (DECL_BUILT_IN (olddecl))
3694             {
3695               DECL_BUILT_IN (newdecl) = 1;
3696               DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
3697               /* If we're keeping the built-in definition, keep the rtl,
3698                  regardless of declaration matches.  */
3699               DECL_RTL (newdecl) = DECL_RTL (olddecl);
3700             }
3701           else
3702             DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
3703
3704           DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
3705           if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
3706             /* Previously saved insns go together with
3707                the function's previous definition.  */
3708             DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3709           /* Don't clear out the arguments if we're redefining a function.  */
3710           if (DECL_ARGUMENTS (olddecl))
3711             DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3712         }
3713       if (DECL_LANG_SPECIFIC (olddecl))
3714         DECL_MAIN_VARIANT (newdecl) = DECL_MAIN_VARIANT (olddecl);
3715     }
3716
3717   if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3718     {
3719       NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3720     }
3721
3722   /* Now preserve various other info from the definition.  */
3723   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3724   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3725   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
3726   DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
3727
3728   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3729     {
3730       int function_size;
3731       struct lang_decl *ol = DECL_LANG_SPECIFIC (olddecl);
3732       struct lang_decl *nl = DECL_LANG_SPECIFIC (newdecl);
3733
3734       function_size = sizeof (struct tree_decl);
3735
3736       bcopy ((char *) newdecl + sizeof (struct tree_common),
3737              (char *) olddecl + sizeof (struct tree_common),
3738              function_size - sizeof (struct tree_common));
3739
3740       /* Can we safely free the storage used by newdecl?  */
3741
3742 #define ROUND(x) ((x + obstack_alignment_mask (&permanent_obstack)) \
3743                   & ~ obstack_alignment_mask (&permanent_obstack))
3744
3745       if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3746         {
3747           /* If newdecl is a template instantiation, it is possible that
3748              the following sequence of events has occurred:
3749
3750              o A friend function was declared in a class template.  The
3751              class template was instantiated.  
3752
3753              o The instantiation of the friend declaration was 
3754              recorded on the instantiation list, and is newdecl.  
3755
3756              o Later, however, instantiate_class_template called pushdecl
3757              on the newdecl to perform name injection.  But, pushdecl in
3758              turn called duplicate_decls when it discovered that another
3759              declaration of a global function with the same name already
3760              existed. 
3761
3762              o Here, in duplicate_decls, we decided to clobber newdecl.
3763
3764              If we're going to do that, we'd better make sure that
3765              olddecl, and not newdecl, is on the list of
3766              instantiations so that if we try to do the instantiation
3767              again we won't get the clobbered declaration.  */
3768
3769           tree tmpl = DECL_TI_TEMPLATE (newdecl); 
3770           tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); 
3771
3772           for (; decls; decls = TREE_CHAIN (decls))
3773             if (TREE_VALUE (decls) == newdecl)
3774               TREE_VALUE (decls) = olddecl;
3775         }
3776
3777       if (((char *)newdecl + ROUND (function_size) == (char *)nl
3778            && ((char *)newdecl + ROUND (function_size)
3779                + ROUND (sizeof (struct lang_decl))
3780                == obstack_next_free (&permanent_obstack)))
3781           || ((char *)newdecl + ROUND (function_size)
3782               == obstack_next_free (&permanent_obstack)))
3783         {
3784           DECL_MAIN_VARIANT (newdecl) = olddecl;
3785           DECL_LANG_SPECIFIC (olddecl) = ol;
3786           bcopy ((char *)nl, (char *)ol, sizeof (struct lang_decl));
3787
3788           obstack_free (&permanent_obstack, newdecl);
3789         }
3790       else if (LANG_DECL_PERMANENT (ol) && ol != nl)
3791         {
3792           if (DECL_MAIN_VARIANT (olddecl) == olddecl)
3793             {
3794               /* Save these lang_decls that would otherwise be lost.  */
3795               extern tree free_lang_decl_chain;
3796               tree free_lang_decl = (tree) ol;
3797
3798               if (DECL_LANG_SPECIFIC (olddecl) == ol)
3799                 abort ();
3800
3801               TREE_CHAIN (free_lang_decl) = free_lang_decl_chain;
3802               free_lang_decl_chain = free_lang_decl;
3803             }
3804           else
3805             {
3806               /* Storage leak.  */;
3807             }
3808         }
3809     }
3810   else
3811     {
3812       bcopy ((char *) newdecl + sizeof (struct tree_common),
3813              (char *) olddecl + sizeof (struct tree_common),
3814              sizeof (struct tree_decl) - sizeof (struct tree_common)
3815              + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3816     }
3817
3818   DECL_UID (olddecl) = olddecl_uid;
3819   if (olddecl_friend)
3820     DECL_FRIEND_P (olddecl) = 1;
3821
3822   /* NEWDECL contains the merged attribute lists.
3823      Update OLDDECL to be the same.  */
3824   DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3825
3826   return 1;
3827 }
3828
3829 /* Record a decl-node X as belonging to the current lexical scope.
3830    Check for errors (such as an incompatible declaration for the same
3831    name already seen in the same scope).
3832
3833    Returns either X or an old decl for the same name.
3834    If an old decl is returned, it may have been smashed
3835    to agree with what X says.  */
3836
3837 tree
3838 pushdecl (x)
3839      tree x;
3840 {
3841   register tree t;
3842   register tree name = DECL_ASSEMBLER_NAME (x);
3843   int need_new_binding = 1;
3844
3845   if (DECL_TEMPLATE_PARM_P (x))
3846     /* Template parameters have no context; they are not X::T even
3847        when declared within a class or namespace.  */
3848     ;
3849   else
3850     {
3851       if (current_function_decl && x != current_function_decl
3852           /* A local declaration for a function doesn't constitute
3853              nesting.  */
3854           && (TREE_CODE (x) != FUNCTION_DECL || DECL_INITIAL (x))
3855           /* Don't change DECL_CONTEXT of virtual methods.  */
3856           && (TREE_CODE (x) != FUNCTION_DECL || !DECL_VIRTUAL_P (x))
3857           && !DECL_CONTEXT (x))
3858         DECL_CONTEXT (x) = current_function_decl;
3859       if (!DECL_CONTEXT (x))
3860         DECL_CONTEXT (x) = FROB_CONTEXT (current_namespace);
3861     }
3862
3863   /* Type are looked up using the DECL_NAME, as that is what the rest of the
3864      compiler wants to use.  */
3865   if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
3866       || TREE_CODE (x) == NAMESPACE_DECL)
3867     name = DECL_NAME (x);
3868
3869   if (name)
3870     {
3871 #if 0
3872       /* Not needed...see below.  */
3873       char *file;
3874       int line;
3875 #endif
3876       if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3877         name = TREE_OPERAND (name, 0);
3878       
3879       /* Namespace-scoped variables are not found in the current level. */
3880       if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x))
3881         t = namespace_binding (name, DECL_CONTEXT (x));
3882       else
3883         t = lookup_name_current_level (name);
3884       if (t == error_mark_node)
3885         {
3886           /* error_mark_node is 0 for a while during initialization!  */
3887           t = NULL_TREE;
3888           cp_error_at ("`%#D' used prior to declaration", x);
3889         }
3890
3891       else if (t != NULL_TREE)
3892         {
3893 #if 0
3894           /* This is turned off until I have time to do it right (bpk).  */
3895           /* With the code below that uses it...  */
3896           file = DECL_SOURCE_FILE (t);
3897           line = DECL_SOURCE_LINE (t);
3898 #endif
3899           if (TREE_CODE (t) == PARM_DECL)
3900             {
3901               if (DECL_CONTEXT (t) == NULL_TREE)
3902                 fatal ("parse errors have confused me too much");
3903
3904               /* Check for duplicate params.  */
3905               if (duplicate_decls (x, t))
3906                 return t;
3907             }
3908           else if (((TREE_CODE (x) == FUNCTION_DECL && DECL_LANGUAGE (x) == lang_c)
3909                     || DECL_FUNCTION_TEMPLATE_P (x))
3910                    && is_overloaded_fn (t))
3911             /* Don't do anything just yet. */;
3912           else if (t == wchar_decl_node)
3913             {
3914               if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
3915                 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
3916
3917               /* Throw away the redeclaration.  */
3918               return t;
3919             }
3920           else if (TREE_CODE (t) != TREE_CODE (x))
3921             {
3922               if (duplicate_decls (x, t))
3923                 return t;
3924             }
3925           else if (duplicate_decls (x, t))
3926             {
3927 #if 0
3928               /* This is turned off until I have time to do it right (bpk).  */
3929
3930               /* Also warn if they did a prototype with `static' on it, but
3931                  then later left the `static' off.  */
3932               if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
3933                 {
3934                   if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3935                     return t;
3936
3937                   if (extra_warnings)
3938                     {
3939                       cp_warning ("`static' missing from declaration of `%D'",
3940                                   t);
3941                       warning_with_file_and_line (file, line,
3942                                                   "previous declaration of `%s'",
3943                                                   decl_as_string (t, 0));
3944                     }
3945
3946                   /* Now fix things so it'll do what they expect.  */
3947                   if (current_function_decl)
3948                     TREE_PUBLIC (current_function_decl) = 0;
3949                 }
3950               /* Due to interference in memory reclamation (X may be
3951                  obstack-deallocated at this point), we must guard against
3952                  one really special case.  [jason: This should be handled
3953                  by start_function]  */
3954               if (current_function_decl == x)
3955                 current_function_decl = t;
3956 #endif
3957               if (TREE_CODE (t) == TYPE_DECL)
3958                 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
3959               else if (TREE_CODE (t) == FUNCTION_DECL)
3960                 check_default_args (t);
3961
3962               return t;
3963             }
3964           else if (DECL_MAIN_P (x))
3965             {
3966               /* A redeclaration of main, but not a duplicate of the
3967                  previous one. 
3968
3969                  [basic.start.main]
3970
3971                  This function shall not be overloaded.  */
3972               cp_error_at ("invalid redeclaration of `%D'", t);
3973               cp_error ("as `%D'", x);
3974               /* We don't try to push this declaration since that
3975                  causes a crash.  */
3976               return x;
3977             }
3978         }
3979
3980       check_template_shadow (x);
3981
3982       /* If this is a function conjured up by the backend, massage it
3983          so it looks friendly.  */
3984       if (TREE_CODE (x) == FUNCTION_DECL
3985           && ! DECL_LANG_SPECIFIC (x))
3986         {
3987           retrofit_lang_decl (x);
3988           DECL_LANGUAGE (x) = lang_c;
3989         }
3990
3991       if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_FUNCTION_MEMBER_P (x))
3992         {
3993           t = push_overloaded_decl (x, PUSH_LOCAL);
3994           if (t != x || DECL_LANGUAGE (x) == lang_c)
3995             return t;
3996           if (!namespace_bindings_p ())
3997             /* We do not need to create a binding for this name;
3998                push_overloaded_decl will have already done so if
3999                necessary.  */
4000             need_new_binding = 0;
4001         }
4002       else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
4003         return push_overloaded_decl (x, PUSH_GLOBAL);
4004
4005       /* If declaring a type as a typedef, copy the type (unless we're
4006          at line 0), and install this TYPE_DECL as the new type's typedef
4007          name.  See the extensive comment in ../c-decl.c (pushdecl). */
4008       if (TREE_CODE (x) == TYPE_DECL)
4009         {
4010           tree type = TREE_TYPE (x);
4011           if (DECL_SOURCE_LINE (x) == 0)
4012             {
4013               if (TYPE_NAME (type) == 0)
4014                 TYPE_NAME (type) = x;
4015             }
4016           else if (type != error_mark_node && TYPE_NAME (type) != x
4017                    /* We don't want to copy the type when all we're
4018                       doing is making a TYPE_DECL for the purposes of
4019                       inlining.  */
4020                    && (!TYPE_NAME (type) 
4021                        || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
4022             {
4023               push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
4024
4025               DECL_ORIGINAL_TYPE (x) = type;
4026               type = build_type_copy (type);
4027               TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
4028               TYPE_NAME (type) = x;
4029               TREE_TYPE (x) = type;
4030
4031               pop_obstacks ();
4032             }
4033
4034           if (type != error_mark_node
4035               && TYPE_NAME (type)
4036               && TYPE_IDENTIFIER (type))
4037             set_identifier_type_value_with_scope (DECL_NAME (x), type, 
4038                                                   current_binding_level);
4039
4040         }
4041
4042       /* Multiple external decls of the same identifier ought to match.
4043
4044          We get warnings about inline functions where they are defined.
4045          We get warnings about other functions from push_overloaded_decl.
4046          
4047          Avoid duplicate warnings where they are used.  */
4048       if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
4049         {
4050           tree decl;
4051
4052           if (IDENTIFIER_NAMESPACE_VALUE (name) != NULL_TREE
4053               && (DECL_EXTERNAL (IDENTIFIER_NAMESPACE_VALUE (name))
4054                   || TREE_PUBLIC (IDENTIFIER_NAMESPACE_VALUE (name))))
4055             decl = IDENTIFIER_NAMESPACE_VALUE (name);
4056           else
4057             decl = NULL_TREE;
4058
4059           if (decl
4060               /* If different sort of thing, we already gave an error.  */
4061               && TREE_CODE (decl) == TREE_CODE (x)
4062               && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
4063             {
4064               cp_pedwarn ("type mismatch with previous external decl", x);
4065               cp_pedwarn_at ("previous external decl of `%#D'", decl);
4066             }
4067         }
4068
4069       /* This name is new in its binding level.
4070          Install the new declaration and return it.  */
4071       if (namespace_bindings_p ())
4072         {
4073           /* Install a global value.  */
4074
4075           /* If the first global decl has external linkage,
4076              warn if we later see static one.  */
4077           if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
4078             TREE_PUBLIC (name) = 1;
4079
4080           if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
4081                 && t != NULL_TREE))
4082             {
4083               if (TREE_CODE (x) == FUNCTION_DECL)
4084                 my_friendly_assert 
4085                   ((IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
4086                   || (IDENTIFIER_GLOBAL_VALUE (name) == x), 378);
4087               SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
4088             }
4089
4090           /* Don't forget if the function was used via an implicit decl.  */
4091           if (IDENTIFIER_IMPLICIT_DECL (name)
4092               && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
4093             TREE_USED (x) = 1;
4094
4095           /* Don't forget if its address was taken in that way.  */
4096           if (IDENTIFIER_IMPLICIT_DECL (name)
4097               && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
4098             TREE_ADDRESSABLE (x) = 1;
4099
4100           /* Warn about mismatches against previous implicit decl.  */
4101           if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
4102               /* If this real decl matches the implicit, don't complain.  */
4103               && ! (TREE_CODE (x) == FUNCTION_DECL
4104                     && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
4105             cp_warning
4106               ("`%D' was previously implicitly declared to return `int'", x);
4107
4108           /* If new decl is `static' and an `extern' was seen previously,
4109              warn about it.  */
4110           if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
4111             warn_extern_redeclared_static (x, t);
4112         }
4113       else
4114         {
4115           /* Here to install a non-global value.  */
4116           tree oldlocal = IDENTIFIER_VALUE (name);
4117           tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
4118
4119           if (need_new_binding)
4120             {
4121               push_local_binding (name, x, 0);
4122               /* Because push_local_binding will hook X on to the
4123                  current_binding_level's name list, we don't want to
4124                  do that again below.  */
4125               need_new_binding = 0;
4126             }
4127
4128           /* If this is a TYPE_DECL, push it into the type value slot.  */
4129           if (TREE_CODE (x) == TYPE_DECL)
4130             set_identifier_type_value_with_scope (name, TREE_TYPE (x), 
4131                                                   current_binding_level);
4132
4133           /* Clear out any TYPE_DECL shadowed by a namespace so that
4134              we won't think this is a type.  The C struct hack doesn't
4135              go through namespaces.  */
4136           if (TREE_CODE (x) == NAMESPACE_DECL)
4137             set_identifier_type_value_with_scope (name, NULL_TREE, 
4138                                                   current_binding_level);
4139
4140           /* If this is an extern function declaration, see if we
4141              have a global definition or declaration for the function.  */
4142           if (oldlocal == NULL_TREE
4143               && DECL_EXTERNAL (x)
4144               && oldglobal != NULL_TREE
4145               && TREE_CODE (x) == FUNCTION_DECL
4146               && TREE_CODE (oldglobal) == FUNCTION_DECL)
4147             {
4148               /* We have one.  Their types must agree.  */
4149               if (decls_match (x, oldglobal))
4150                 /* OK */;
4151               else
4152                 {
4153                   cp_warning ("extern declaration of `%#D' doesn't match", x);
4154                   cp_warning_at ("global declaration `%#D'", oldglobal);
4155                 }
4156             }
4157           /* If we have a local external declaration,
4158              and no file-scope declaration has yet been seen,
4159              then if we later have a file-scope decl it must not be static.  */
4160           if (oldlocal == NULL_TREE
4161               && oldglobal == NULL_TREE
4162               && DECL_EXTERNAL (x)
4163               && TREE_PUBLIC (x))
4164             TREE_PUBLIC (name) = 1;
4165
4166           if (DECL_FROM_INLINE (x))
4167             /* Inline decls shadow nothing.  */;
4168
4169           /* Warn if shadowing an argument at the top level of the body.  */
4170           else if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
4171                    && TREE_CODE (oldlocal) == PARM_DECL
4172                    /* Don't complain if it's from an enclosing function.  */
4173                    && DECL_CONTEXT (oldlocal) == current_function_decl
4174                    && TREE_CODE (x) != PARM_DECL)
4175             {
4176               /* Go to where the parms should be and see if we
4177                  find them there.  */
4178               struct binding_level *b = current_binding_level->level_chain;
4179
4180               if (cleanup_label)
4181                 b = b->level_chain;
4182
4183               /* ARM $8.3 */
4184               if (b->parm_flag == 1)
4185                 cp_error ("declaration of `%#D' shadows a parameter", name);
4186             }
4187           else if (warn_shadow && oldlocal != NULL_TREE
4188                    && current_binding_level->is_for_scope
4189                    && !DECL_DEAD_FOR_LOCAL (oldlocal))
4190             {
4191               warning ("variable `%s' shadows local",
4192                        IDENTIFIER_POINTER (name));
4193               cp_warning_at ("  this is the shadowed declaration", oldlocal);
4194             }              
4195           /* Maybe warn if shadowing something else.  */
4196           else if (warn_shadow && !DECL_EXTERNAL (x)
4197                    /* No shadow warnings for internally generated vars.  */
4198                    && ! DECL_ARTIFICIAL (x)
4199                    /* No shadow warnings for vars made for inlining.  */
4200                    && ! DECL_FROM_INLINE (x))
4201             {
4202               const char *warnstring = NULL;
4203
4204               if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
4205                 warnstring = "declaration of `%s' shadows a parameter";
4206               else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
4207                        && current_class_ptr
4208                        && !TREE_STATIC (name))
4209                 warnstring = "declaration of `%s' shadows a member of `this'";
4210               else if (oldlocal != NULL_TREE)
4211                 warnstring = "declaration of `%s' shadows previous local";
4212               else if (oldglobal != NULL_TREE)
4213                 /* XXX shadow warnings in outer-more namespaces */
4214                 warnstring = "declaration of `%s' shadows global declaration";
4215
4216               if (warnstring)
4217                 warning (warnstring, IDENTIFIER_POINTER (name));
4218             }
4219         }
4220
4221       if (TREE_CODE (x) == FUNCTION_DECL)
4222         check_default_args (x);
4223
4224       /* Keep count of variables in this level with incomplete type.  */
4225       if (TREE_CODE (x) == VAR_DECL
4226           && TREE_TYPE (x) != error_mark_node
4227           && ((TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
4228                && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
4229               /* RTTI TD entries are created while defining the type_info.  */
4230               || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
4231                   && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
4232         current_binding_level->incomplete 
4233           = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
4234     }
4235
4236   if (need_new_binding)
4237     {
4238       /* Put decls on list in reverse order.
4239          We will reverse them later if necessary.  */
4240       TREE_CHAIN (x) = current_binding_level->names;
4241       current_binding_level->names = x;
4242       if (current_binding_level == global_binding_level
4243           && !TREE_PERMANENT (x))
4244         my_friendly_abort (124);
4245     }
4246
4247   return x;
4248 }
4249
4250 /* Same as pushdecl, but define X in binding-level LEVEL.  We rely on the
4251    caller to set DECL_CONTEXT properly.  */
4252
4253 static tree
4254 pushdecl_with_scope (x, level)
4255      tree x;
4256      struct binding_level *level;
4257 {
4258   register struct binding_level *b;
4259   tree function_decl = current_function_decl;
4260
4261   current_function_decl = NULL_TREE;
4262   if (level->parm_flag == 2)
4263     {
4264       b = class_binding_level;
4265       class_binding_level = level;
4266       pushdecl_class_level (x);
4267       class_binding_level = b;
4268     }
4269   else
4270     {
4271       b = current_binding_level;
4272       current_binding_level = level;
4273       x = pushdecl (x);
4274       current_binding_level = b;
4275     }
4276   current_function_decl = function_decl;
4277   return x;
4278 }
4279
4280 /* Like pushdecl, only it places X in the current namespace,
4281    if appropriate.  */
4282
4283 tree
4284 pushdecl_namespace_level (x)
4285      tree x;
4286 {
4287   register struct binding_level *b = current_binding_level;
4288   register tree t;
4289
4290   t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
4291
4292   /* Now, the type_shadowed stack may screw us.  Munge it so it does
4293      what we want.  */
4294   if (TREE_CODE (x) == TYPE_DECL)
4295     {
4296       tree name = DECL_NAME (x);
4297       tree newval;
4298       tree *ptr = (tree *)0;
4299       for (; b != global_binding_level; b = b->level_chain)
4300         {
4301           tree shadowed = b->type_shadowed;
4302           for (; shadowed; shadowed = TREE_CHAIN (shadowed))
4303             if (TREE_PURPOSE (shadowed) == name)
4304               {
4305                 ptr = &TREE_VALUE (shadowed);
4306                 /* Can't break out of the loop here because sometimes
4307                    a binding level will have duplicate bindings for
4308                    PT names.  It's gross, but I haven't time to fix it.  */
4309               }
4310         }
4311       newval = TREE_TYPE (x);
4312       if (ptr == (tree *)0)
4313         {
4314           /* @@ This shouldn't be needed.  My test case "zstring.cc" trips
4315              up here if this is changed to an assertion.  --KR  */
4316           SET_IDENTIFIER_TYPE_VALUE (name, newval);
4317         }
4318       else
4319         {
4320           *ptr = newval;
4321         }
4322     }
4323   return t;
4324 }
4325
4326 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4327    if appropriate.  */
4328
4329 tree
4330 pushdecl_top_level (x)
4331      tree x;
4332 {
4333   tree cur_namespace = current_namespace;
4334   current_namespace = global_namespace;
4335   x = pushdecl_namespace_level (x);
4336   current_namespace = cur_namespace;
4337   return x;
4338 }
4339
4340 /* Make the declaration of X appear in CLASS scope.  */
4341
4342 void
4343 pushdecl_class_level (x)
4344      tree x;
4345 {
4346   /* Don't use DECL_ASSEMBLER_NAME here!  Everything that looks in class
4347      scope looks for the pre-mangled name.  */
4348   register tree name;
4349
4350   if (TREE_CODE (x) == OVERLOAD)
4351     x = OVL_CURRENT (x);
4352   name = DECL_NAME (x);
4353
4354   if (name)
4355     {
4356       push_class_level_binding (name, x);
4357       if (TREE_CODE (x) == TYPE_DECL)
4358         set_identifier_type_value (name, TREE_TYPE (x));
4359     }
4360   else if (ANON_UNION_TYPE_P (TREE_TYPE (x)))
4361     {
4362       tree f;
4363
4364       for (f = TYPE_FIELDS (TREE_TYPE (x));
4365            f;
4366            f = TREE_CHAIN (f))
4367         pushdecl_class_level (f);
4368     }
4369 }
4370
4371 #if 0
4372 /* This function is used to push the mangled decls for nested types into
4373    the appropriate scope.  Previously pushdecl_top_level was used, but that
4374    is incorrect for members of local classes.  */
4375
4376 void
4377 pushdecl_nonclass_level (x)
4378      tree x;
4379 {
4380   struct binding_level *b = current_binding_level;
4381
4382   my_friendly_assert (b->parm_flag != 2, 180);
4383
4384 #if 0
4385   /* Get out of template binding levels */
4386   while (b->pseudo_global)
4387     b = b->level_chain;
4388 #endif
4389
4390   pushdecl_with_scope (x, b);
4391 }
4392 #endif
4393
4394 /* Make the declaration(s) of X appear in CLASS scope
4395    under the name NAME.  */
4396
4397 void
4398 push_class_level_binding (name, x)
4399      tree name;
4400      tree x;
4401 {
4402   tree binding;
4403   /* The class_binding_level will be NULL if x is a template 
4404      parameter name in a member template.  */
4405   if (!class_binding_level)
4406     return;
4407
4408   /* Make sure that this new member does not have the same name
4409      as a template parameter.  */
4410   if (TYPE_BEING_DEFINED (current_class_type))
4411     check_template_shadow (x);
4412
4413   /* If this declaration shadows a declaration from an enclosing
4414      class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4415      we leave this class.  Record the shadowed declaration here.  */
4416   binding = IDENTIFIER_BINDING (name);
4417   if (binding 
4418       && ((TREE_CODE (x) == OVERLOAD
4419            && BINDING_VALUE (binding)
4420            && is_overloaded_fn (BINDING_VALUE (binding)))
4421           || INHERITED_VALUE_BINDING_P (binding)))
4422     {
4423       tree shadow;
4424       tree old_decl;
4425
4426       /* If the old binding was from a base class, and was for a tag
4427          name, slide it over to make room for the new binding.  The
4428          old binding is still visible if explicitly qualified with a
4429          class-key.  */
4430       if (INHERITED_VALUE_BINDING_P (binding)
4431           && BINDING_VALUE (binding)
4432           && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
4433           && DECL_ARTIFICIAL (BINDING_VALUE (binding))
4434           && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
4435         {
4436           old_decl = BINDING_TYPE (binding);
4437           BINDING_TYPE (binding) = BINDING_VALUE (binding);
4438           BINDING_VALUE (binding) = NULL_TREE;
4439           INHERITED_VALUE_BINDING_P (binding) = 0;
4440         }
4441       else
4442         old_decl = BINDING_VALUE (binding);
4443
4444       /* There was already a binding for X containing fewer
4445          functions than are named in X.  Find the previous
4446          declaration of X on the class-shadowed list, and update it.  */
4447       for (shadow = class_binding_level->class_shadowed;
4448            shadow;
4449            shadow = TREE_CHAIN (shadow))
4450         if (TREE_PURPOSE (shadow) == name
4451             && TREE_TYPE (shadow) == old_decl)
4452           {
4453             BINDING_VALUE (binding) = x;
4454             INHERITED_VALUE_BINDING_P (binding) = 0;
4455             TREE_TYPE (shadow) = x;
4456             return;
4457           }
4458     }
4459
4460   /* If we didn't replace an existing binding, put the binding on the
4461      stack of bindings for the identifier, and update
4462      IDENTIFIER_CLASS_VALUE.  */
4463   if (push_class_binding (name, x))
4464     {
4465       push_cache_obstack ();
4466       class_binding_level->class_shadowed
4467         = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
4468                      class_binding_level->class_shadowed);
4469       pop_obstacks ();
4470       /* Record the value we are binding NAME to so that we can know
4471          what to pop later.  */
4472       TREE_TYPE (class_binding_level->class_shadowed) = x;
4473     }
4474 }
4475
4476 /* Insert another USING_DECL into the current binding level,
4477    returning this declaration. If this is a redeclaration,
4478    do nothing and return NULL_TREE.  */
4479
4480 tree
4481 push_using_decl (scope, name)
4482      tree scope;
4483      tree name;
4484 {
4485   tree decl;
4486   
4487   my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4488   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4489   for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4490     if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4491       break;
4492   if (decl)
4493     return NULL_TREE;
4494   decl = build_lang_decl (USING_DECL, name, void_type_node);
4495   DECL_INITIAL (decl) = scope;
4496   TREE_CHAIN (decl) = current_binding_level->usings;
4497   current_binding_level->usings = decl;
4498   return decl;
4499 }
4500
4501 /* Add namespace to using_directives. Return NULL_TREE if nothing was
4502    changed (i.e. there was already a directive), or the fresh
4503    TREE_LIST otherwise.  */
4504
4505 tree
4506 push_using_directive (used)
4507      tree used;
4508 {
4509   tree ud = current_binding_level->using_directives;
4510   tree iter, ancestor;
4511   
4512   /* Check if we already have this. */
4513   if (purpose_member (used, ud) != NULL_TREE)
4514     return NULL_TREE;
4515
4516   /* Recursively add all namespaces used. */
4517   for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4518     push_using_directive (TREE_PURPOSE (iter));
4519
4520   ancestor = namespace_ancestor (current_decl_namespace (), used);
4521   ud = current_binding_level->using_directives;
4522   ud = perm_tree_cons (used, ancestor, ud);
4523   current_binding_level->using_directives = ud;
4524   return ud;
4525 }
4526
4527 /* DECL is a FUNCTION_DECL for a non-member function, which may have
4528    other definitions already in place.  We get around this by making
4529    the value of the identifier point to a list of all the things that
4530    want to be referenced by that name.  It is then up to the users of
4531    that name to decide what to do with that list.
4532
4533    DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its DECL_RESULT
4534    slot.  It is dealt with the same way.
4535
4536    FLAGS is a bitwise-or of the following values:
4537      PUSH_LOCAL: Bind DECL in the current scope, rather than at
4538                  namespace scope.
4539      PUSH_USING: DECL is being pushed as the result of a using
4540                  declaration. 
4541
4542    The value returned may be a previous declaration if we guessed wrong
4543    about what language DECL should belong to (C or C++).  Otherwise,
4544    it's always DECL (and never something that's not a _DECL).  */
4545
4546 tree
4547 push_overloaded_decl (decl, flags)
4548      tree decl;
4549      int flags;
4550 {
4551   tree name = DECL_NAME (decl);
4552   tree old;
4553   tree new_binding;
4554   int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
4555
4556   if (doing_global)
4557     {
4558       old = namespace_binding (name, DECL_CONTEXT (decl));
4559       if (old && TREE_CODE (old) == FUNCTION_DECL
4560           && DECL_ARTIFICIAL (old)
4561           && (DECL_BUILT_IN (old) || DECL_BUILT_IN_NONANSI (old)))
4562         {
4563           if (duplicate_decls (decl, old))
4564             return old;
4565           old = NULL_TREE;
4566         }
4567     }
4568   else
4569     old = lookup_name_current_level (name);
4570
4571   if (old)
4572     {
4573       if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
4574         {
4575           tree t = TREE_TYPE (old);
4576           if (IS_AGGR_TYPE (t) && warn_shadow
4577               && (! DECL_IN_SYSTEM_HEADER (decl)
4578                   || ! DECL_IN_SYSTEM_HEADER (old)))
4579             cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
4580           old = NULL_TREE;
4581         }
4582       else if (is_overloaded_fn (old))
4583         {
4584           tree tmp;
4585           
4586           for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
4587             {
4588               tree fn = OVL_CURRENT (tmp);
4589
4590               if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4591                   && !(flags & PUSH_USING)
4592                   && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4593                                 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4594                 cp_error ("`%#D' conflicts with previous using declaration `%#D'",
4595                           decl, fn);
4596               
4597               if (duplicate_decls (decl, fn))
4598                 return fn;
4599             }
4600         }
4601       else
4602         {
4603           cp_error_at ("previous non-function declaration `%#D'", old);
4604           cp_error ("conflicts with function declaration `%#D'", decl);
4605           return decl;
4606         }
4607     }
4608
4609   if (old || TREE_CODE (decl) == TEMPLATE_DECL)
4610     {
4611       if (old && TREE_CODE (old) != OVERLOAD)
4612         new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4613       else
4614         new_binding = ovl_cons (decl, old);
4615       if (flags & PUSH_USING)
4616         OVL_USED (new_binding) = 1;
4617     }
4618   else
4619     /* NAME is not ambiguous.  */
4620     new_binding = decl;
4621
4622   if (doing_global)
4623     set_namespace_binding (name, current_namespace, new_binding);
4624   else
4625     {
4626       /* We only create an OVERLOAD if there was a previous binding at
4627          this level, or if decl is a template. In the former case, we
4628          need to remove the old binding and replace it with the new
4629          binding.  We must also run through the NAMES on the binding
4630          level where the name was bound to update the chain.  */
4631
4632       if (TREE_CODE (new_binding) == OVERLOAD && old)
4633         {
4634           tree *d;
4635           
4636           for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4637                *d;
4638                d = &TREE_CHAIN (*d))
4639             if (*d == old
4640                 || (TREE_CODE (*d) == TREE_LIST
4641                     && TREE_VALUE (*d) == old))
4642               {
4643                 if (TREE_CODE (*d) == TREE_LIST)
4644                   /* Just replace the old binding with the new.  */
4645                   TREE_VALUE (*d) = new_binding;
4646                 else
4647                   /* Build a TREE_LIST to wrap the OVERLOAD.  */
4648                   *d = build_tree_list (NULL_TREE, new_binding);
4649
4650                 /* And update the CPLUS_BINDING node.  */
4651                 BINDING_VALUE (IDENTIFIER_BINDING (name))
4652                   = new_binding;
4653                 return decl;
4654               }
4655
4656           /* We should always find a previous binding in this case.  */
4657           my_friendly_abort (0);
4658         }
4659
4660       /* Install the new binding.  */
4661       push_local_binding (name, new_binding, flags);
4662     }
4663
4664   return decl;
4665 }
4666 \f
4667 /* Generate an implicit declaration for identifier FUNCTIONID
4668    as a function of type int ().  Print a warning if appropriate.  */
4669
4670 tree
4671 implicitly_declare (functionid)
4672      tree functionid;
4673 {
4674   register tree decl;
4675   int temp = allocation_temporary_p ();
4676
4677   push_obstacks_nochange ();
4678
4679   /* Save the decl permanently so we can warn if definition follows.
4680      In ANSI C, warn_implicit is usually false, so the saves little space.
4681      But in C++, it's usually true, hence the extra code.  */
4682   if (temp && (! warn_implicit || toplevel_bindings_p ()))
4683     end_temporary_allocation ();
4684
4685   /* We used to reuse an old implicit decl here,
4686      but this loses with inline functions because it can clobber
4687      the saved decl chains.  */
4688   decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4689
4690   DECL_EXTERNAL (decl) = 1;
4691   TREE_PUBLIC (decl) = 1;
4692
4693   /* ANSI standard says implicit declarations are in the innermost block.
4694      So we record the decl in the standard fashion.  */
4695   pushdecl (decl);
4696   rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4697
4698   if (warn_implicit
4699       /* Only one warning per identifier.  */
4700       && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4701     {
4702       cp_pedwarn ("implicit declaration of function `%#D'", decl);
4703     }
4704
4705   SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4706
4707   pop_obstacks ();
4708
4709   return decl;
4710 }
4711
4712 /* Return zero if the declaration NEWDECL is valid
4713    when the declaration OLDDECL (assumed to be for the same name)
4714    has already been seen.
4715    Otherwise return an error message format string with a %s
4716    where the identifier should go.  */
4717
4718 static const char *
4719 redeclaration_error_message (newdecl, olddecl)
4720      tree newdecl, olddecl;
4721 {
4722   if (TREE_CODE (newdecl) == TYPE_DECL)
4723     {
4724       /* Because C++ can put things into name space for free,
4725          constructs like "typedef struct foo { ... } foo"
4726          would look like an erroneous redeclaration.  */
4727       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
4728         return 0;
4729       else
4730         return "redefinition of `%#D'";
4731     }
4732   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4733     {
4734       /* If this is a pure function, its olddecl will actually be
4735          the original initialization to `0' (which we force to call
4736          abort()).  Don't complain about redefinition in this case.  */
4737       if (DECL_LANG_SPECIFIC (olddecl) && DECL_ABSTRACT_VIRTUAL_P (olddecl))
4738         return 0;
4739
4740       /* If both functions come from different namespaces, this is not
4741          a redeclaration - this is a conflict with a used function. */
4742       if (DECL_NAMESPACE_SCOPE_P (olddecl)
4743           && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
4744         return "`%D' conflicts with used function";
4745
4746       /* We'll complain about linkage mismatches in
4747          warn_extern_redeclared_static.  */
4748
4749       /* Defining the same name twice is no good.  */
4750       if (DECL_INITIAL (olddecl) != NULL_TREE
4751           && DECL_INITIAL (newdecl) != NULL_TREE)
4752         {
4753           if (DECL_NAME (olddecl) == NULL_TREE)
4754             return "`%#D' not declared in class";
4755           else
4756             return "redefinition of `%#D'";
4757         }
4758       return 0;
4759     }
4760   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4761     {
4762       if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
4763            && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4764            && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4765           || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
4766               && TYPE_SIZE (TREE_TYPE (newdecl))
4767               && TYPE_SIZE (TREE_TYPE (olddecl))))
4768         return "redefinition of `%#D'";
4769       return 0;
4770     }
4771   else if (toplevel_bindings_p ())
4772     {
4773       /* Objects declared at top level:  */
4774       /* If at least one is a reference, it's ok.  */
4775       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
4776         return 0;
4777       /* Reject two definitions.  */
4778       return "redefinition of `%#D'";
4779     }
4780   else
4781     {
4782       /* Objects declared with block scope:  */
4783       /* Reject two definitions, and reject a definition
4784          together with an external reference.  */
4785       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
4786         return "redeclaration of `%#D'";
4787       return 0;
4788     }
4789 }
4790 \f
4791 /* Get the LABEL_DECL corresponding to identifier ID as a label.
4792    Create one if none exists so far for the current function.
4793    This function is called for both label definitions and label references.  */
4794
4795 tree
4796 lookup_label (id)
4797      tree id;
4798 {
4799   register tree decl = IDENTIFIER_LABEL_VALUE (id);
4800
4801   if (current_function_decl == NULL_TREE)
4802     {
4803       error ("label `%s' referenced outside of any function",
4804              IDENTIFIER_POINTER (id));
4805       return NULL_TREE;
4806     }
4807
4808   if ((decl == NULL_TREE
4809       || DECL_SOURCE_LINE (decl) == 0)
4810       && (named_label_uses == NULL
4811           || named_label_uses->names_in_scope != current_binding_level->names
4812           || named_label_uses->label_decl != decl))
4813     {
4814       struct named_label_list *new_ent;
4815       new_ent
4816         = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
4817       new_ent->label_decl = decl;
4818       new_ent->names_in_scope = current_binding_level->names;
4819       new_ent->binding_level = current_binding_level;
4820       new_ent->lineno_o_goto = lineno;
4821       new_ent->filename_o_goto = input_filename;
4822       new_ent->next = named_label_uses;
4823       named_label_uses = new_ent;
4824     }
4825
4826   /* Use a label already defined or ref'd with this name.  */
4827   if (decl != NULL_TREE)
4828     {
4829       /* But not if it is inherited and wasn't declared to be inheritable.  */
4830       if (DECL_CONTEXT (decl) != current_function_decl
4831           && ! C_DECLARED_LABEL_FLAG (decl))
4832         return shadow_label (id);
4833       return decl;
4834     }
4835
4836   decl = build_decl (LABEL_DECL, id, void_type_node);
4837
4838   /* Make sure every label has an rtx.  */
4839   label_rtx (decl);
4840
4841   /* A label not explicitly declared must be local to where it's ref'd.  */
4842   DECL_CONTEXT (decl) = current_function_decl;
4843
4844   DECL_MODE (decl) = VOIDmode;
4845
4846   /* Say where one reference is to the label,
4847      for the sake of the error if it is not defined.  */
4848   DECL_SOURCE_LINE (decl) = lineno;
4849   DECL_SOURCE_FILE (decl) = input_filename;
4850
4851   SET_IDENTIFIER_LABEL_VALUE (id, decl);
4852
4853   named_labels = tree_cons (NULL_TREE, decl, named_labels);
4854   named_label_uses->label_decl = decl;
4855
4856   return decl;
4857 }
4858
4859 /* Make a label named NAME in the current function,
4860    shadowing silently any that may be inherited from containing functions
4861    or containing scopes.
4862
4863    Note that valid use, if the label being shadowed
4864    comes from another scope in the same function,
4865    requires calling declare_nonlocal_label right away.  */
4866
4867 tree
4868 shadow_label (name)
4869      tree name;
4870 {
4871   register tree decl = IDENTIFIER_LABEL_VALUE (name);
4872
4873   if (decl != NULL_TREE)
4874     {
4875       shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
4876       SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE);
4877     }
4878
4879   return lookup_label (name);
4880 }
4881
4882 /* Define a label, specifying the location in the source file.
4883    Return the LABEL_DECL node for the label, if the definition is valid.
4884    Otherwise return 0.  */
4885
4886 tree
4887 define_label (filename, line, name)
4888      char *filename;
4889      int line;
4890      tree name;
4891 {
4892   tree decl;
4893
4894   if (minimal_parse_mode)
4895     {
4896       push_obstacks (&permanent_obstack, &permanent_obstack);
4897       decl = build_decl (LABEL_DECL, name, void_type_node);
4898       pop_obstacks ();
4899       DECL_SOURCE_LINE (decl) = line;
4900       DECL_SOURCE_FILE (decl) = filename;
4901       add_tree (decl);
4902       return decl;
4903     }
4904
4905   decl = lookup_label (name);
4906
4907   /* After labels, make any new cleanups go into their
4908      own new (temporary) binding contour.  */
4909   current_binding_level->more_cleanups_ok = 0;
4910
4911   /* If label with this name is known from an outer context, shadow it.  */
4912   if (decl != NULL_TREE && DECL_CONTEXT (decl) != current_function_decl)
4913     {
4914       shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
4915       SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE);
4916       decl = lookup_label (name);
4917     }
4918
4919   if (name == get_identifier ("wchar_t"))
4920     cp_pedwarn ("label named wchar_t");
4921
4922   if (DECL_INITIAL (decl) != NULL_TREE)
4923     {
4924       cp_error ("duplicate label `%D'", decl);
4925       return 0;
4926     }
4927   else
4928     {
4929       struct named_label_list *uses, *prev;
4930       int identified = 0;
4931
4932       /* Mark label as having been defined.  */
4933       DECL_INITIAL (decl) = error_mark_node;
4934       /* Say where in the source.  */
4935       DECL_SOURCE_FILE (decl) = filename;
4936       DECL_SOURCE_LINE (decl) = line;
4937
4938       prev = NULL;
4939       uses = named_label_uses;
4940       while (uses != NULL)
4941         if (uses->label_decl == decl)
4942           {
4943             struct binding_level *b = current_binding_level;
4944             while (b)
4945               {
4946                 tree new_decls = b->names;
4947                 tree old_decls = (b == uses->binding_level)
4948                                   ? uses->names_in_scope : NULL_TREE;
4949                 while (new_decls != old_decls)
4950                   {
4951                     if (TREE_CODE (new_decls) == VAR_DECL
4952                         /* Don't complain about crossing initialization
4953                            of internal entities.  They can't be accessed,
4954                            and they should be cleaned up
4955                            by the time we get to the label.  */
4956                         && ! DECL_ARTIFICIAL (new_decls)
4957                         && !(DECL_INITIAL (new_decls) == NULL_TREE
4958                              && pod_type_p (TREE_TYPE (new_decls))))
4959                       {
4960                         /* This is really only important if we're crossing
4961                            an initialization.  The POD stuff is just
4962                            pedantry; why should it matter if the class
4963                            contains a field of pointer to member type?  */
4964                         int problem = (DECL_INITIAL (new_decls)
4965                                        || (TYPE_NEEDS_CONSTRUCTING
4966                                            (TREE_TYPE (new_decls))));
4967
4968                         if (! identified)
4969                           {
4970                             if (problem)
4971                               {
4972                                 cp_error ("jump to label `%D'", decl);
4973                                 error_with_file_and_line
4974                                   (uses->filename_o_goto,
4975                                    uses->lineno_o_goto, "  from here");
4976                               }
4977                             else
4978                               {
4979                                 cp_pedwarn ("jump to label `%D'", decl);
4980                                 pedwarn_with_file_and_line
4981                                   (uses->filename_o_goto,
4982                                    uses->lineno_o_goto, "  from here");
4983                               }
4984                             identified = 1;
4985                         }
4986
4987                         if (problem)
4988                           cp_error_at ("  crosses initialization of `%#D'",
4989                                        new_decls);
4990                         else
4991                           cp_pedwarn_at ("  enters scope of non-POD `%#D'",
4992                                          new_decls);
4993                       }
4994                     new_decls = TREE_CHAIN (new_decls);
4995                   }
4996                 if (b == uses->binding_level)
4997                   break;
4998                 b = b->level_chain;
4999               }
5000
5001             if (prev != NULL)
5002               prev->next = uses->next;
5003             else
5004               named_label_uses = uses->next;
5005
5006             uses = uses->next;
5007           }
5008         else
5009           {
5010             prev = uses;
5011             uses = uses->next;
5012           }
5013       current_function_return_value = NULL_TREE;
5014       return decl;
5015     }
5016 }
5017
5018 struct cp_switch
5019 {
5020   struct binding_level *level;
5021   struct cp_switch *next;
5022 };
5023
5024 static struct cp_switch *switch_stack;
5025
5026 void
5027 push_switch ()
5028 {
5029   struct cp_switch *p
5030     = (struct cp_switch *) oballoc (sizeof (struct cp_switch));
5031   p->level = current_binding_level;
5032   p->next = switch_stack;
5033   switch_stack = p;
5034 }
5035
5036 void
5037 pop_switch ()
5038 {
5039   switch_stack = switch_stack->next;
5040 }
5041
5042 /* Same, but for CASE labels.  If DECL is NULL_TREE, it's the default.  */
5043 /* XXX Note decl is never actually used. (bpk) */
5044
5045 void
5046 define_case_label ()
5047 {
5048   tree cleanup = last_cleanup_this_contour ();
5049   struct binding_level *b = current_binding_level;
5050   int identified = 0;
5051
5052   if (cleanup)
5053     {
5054       static int explained = 0;
5055       cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
5056       warning ("where case label appears here");
5057       if (!explained)
5058         {
5059           warning ("(enclose actions of previous case statements requiring");
5060           warning ("destructors in their own binding contours.)");
5061           explained = 1;
5062         }
5063     }
5064
5065   for (; b && b != switch_stack->level; b = b->level_chain)
5066     {
5067       tree new_decls = b->names;
5068       for (; new_decls; new_decls = TREE_CHAIN (new_decls))
5069         {
5070           if (TREE_CODE (new_decls) == VAR_DECL
5071               /* Don't complain about crossing initialization
5072                  of internal entities.  They can't be accessed,
5073                  and they should be cleaned up
5074                  by the time we get to the label.  */
5075               && ! DECL_ARTIFICIAL (new_decls)
5076               && ((DECL_INITIAL (new_decls) != NULL_TREE
5077                    && DECL_INITIAL (new_decls) != error_mark_node)
5078                   || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
5079             {
5080               if (! identified)
5081                 error ("jump to case label");
5082               identified = 1;
5083               cp_error_at ("  crosses initialization of `%#D'",
5084                            new_decls);
5085             }
5086         }
5087     }
5088
5089   /* After labels, make any new cleanups go into their
5090      own new (temporary) binding contour.  */
5091
5092   current_binding_level->more_cleanups_ok = 0;
5093   current_function_return_value = NULL_TREE;
5094 }
5095 \f
5096 /* Return the list of declarations of the current level.
5097    Note that this list is in reverse order unless/until
5098    you nreverse it; and when you do nreverse it, you must
5099    store the result back using `storedecls' or you will lose.  */
5100
5101 tree
5102 getdecls ()
5103 {
5104   return current_binding_level->names;
5105 }
5106
5107 /* Return the list of type-tags (for structs, etc) of the current level.  */
5108
5109 tree
5110 gettags ()
5111 {
5112   return current_binding_level->tags;
5113 }
5114
5115 /* Store the list of declarations of the current level.
5116    This is done for the parameter declarations of a function being defined,
5117    after they are modified in the light of any missing parameters.  */
5118
5119 static void
5120 storedecls (decls)
5121      tree decls;
5122 {
5123   current_binding_level->names = decls;
5124 }
5125
5126 /* Similarly, store the list of tags of the current level.  */
5127
5128 void
5129 storetags (tags)
5130      tree tags;
5131 {
5132   current_binding_level->tags = tags;
5133 }
5134 \f
5135 /* Given NAME, an IDENTIFIER_NODE,
5136    return the structure (or union or enum) definition for that name.
5137    Searches binding levels from BINDING_LEVEL up to the global level.
5138    If THISLEVEL_ONLY is nonzero, searches only the specified context
5139    (but skips any tag-transparent contexts to find one that is
5140    meaningful for tags).
5141    FORM says which kind of type the caller wants;
5142    it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
5143    If the wrong kind of type is found, and it's not a template, an error is
5144    reported.  */
5145
5146 static tree
5147 lookup_tag (form, name, binding_level, thislevel_only)
5148      enum tree_code form;
5149      tree name;
5150      struct binding_level *binding_level;
5151      int thislevel_only;
5152 {
5153   register struct binding_level *level;
5154   /* Non-zero if, we should look past a pseudo-global level, even if
5155      THISLEVEL_ONLY.  */
5156   int allow_pseudo_global = 1;
5157
5158   for (level = binding_level; level; level = level->level_chain)
5159     {
5160       register tree tail;
5161       if (ANON_AGGRNAME_P (name))
5162         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5163           {
5164             /* There's no need for error checking here, because
5165                anon names are unique throughout the compilation.  */
5166             if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
5167               return TREE_VALUE (tail);
5168           }
5169       else if (level->namespace_p)
5170         /* Do namespace lookup. */
5171         for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
5172           {
5173             tree old = binding_for_name (name, tail);
5174
5175             /* If we just skipped past a pseudo global level, even
5176                though THISLEVEL_ONLY, and we find a template class
5177                declaration, then we use the _TYPE node for the
5178                template.  See the example below.  */
5179             if (thislevel_only && !allow_pseudo_global
5180                 && old && BINDING_VALUE (old) 
5181                 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
5182               old = TREE_TYPE (BINDING_VALUE (old));
5183             else 
5184               old = BINDING_TYPE (old);
5185
5186             /* If it has an original type, it is a typedef, and we
5187                should not return it.  */
5188             if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
5189               old = NULL_TREE;
5190             if (old && TREE_CODE (old) != form
5191                 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
5192               {
5193                 cp_error ("`%#D' redeclared as %C", old, form);
5194                 return NULL_TREE;
5195               }
5196             if (old)
5197               return old;
5198             if (thislevel_only || tail == global_namespace)
5199               return NULL_TREE;
5200           }
5201       else
5202         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5203           {
5204             if (TREE_PURPOSE (tail) == name)
5205               {
5206                 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
5207                 /* Should tighten this up; it'll probably permit
5208                    UNION_TYPE and a struct template, for example.  */
5209                 if (code != form
5210                     && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
5211                   {
5212                     /* Definition isn't the kind we were looking for.  */
5213                     cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
5214                               form);
5215                     return NULL_TREE;
5216                   }
5217                 return TREE_VALUE (tail);
5218               }
5219           }
5220       if (thislevel_only && ! level->tag_transparent)
5221         {
5222           if (level->pseudo_global && allow_pseudo_global)
5223             {
5224               /* We must deal with cases like this:
5225                  
5226                    template <class T> struct S;
5227                    template <class T> struct S {};
5228                    
5229                  When looking up `S', for the second declaration, we
5230                  would like to find the first declaration.  But, we
5231                  are in the pseudo-global level created for the
5232                  template parameters, rather than the (surrounding)
5233                  namespace level.  Thus, we keep going one more level,
5234                  even though THISLEVEL_ONLY is non-zero.  */
5235               allow_pseudo_global = 0;
5236               continue;
5237             }
5238           else
5239             return NULL_TREE;
5240         }
5241       if (current_class_type && level->level_chain->namespace_p)
5242         {
5243           /* Try looking in this class's tags before heading into
5244              global binding level.  */
5245           tree context = current_class_type;
5246           while (context)
5247             {
5248               switch (TREE_CODE_CLASS (TREE_CODE (context)))
5249                 {
5250                 tree these_tags;
5251                 case 't':
5252                     these_tags = CLASSTYPE_TAGS (context);
5253                     if (ANON_AGGRNAME_P (name))
5254                       while (these_tags)
5255                         {
5256                           if (TYPE_IDENTIFIER (TREE_VALUE (these_tags))
5257                               == name)
5258                             return TREE_VALUE (tail);
5259                           these_tags = TREE_CHAIN (these_tags);
5260                         }
5261                     else
5262                       while (these_tags)
5263                         {
5264                           if (TREE_PURPOSE (these_tags) == name)
5265                             {
5266                               if (TREE_CODE (TREE_VALUE (these_tags)) != form)
5267                                 {
5268                                   cp_error ("`%#D' redeclared as %C in class scope",
5269                                             TREE_VALUE (tail), form);
5270                                   return NULL_TREE;
5271                                 }
5272                               return TREE_VALUE (tail);
5273                             }
5274                           these_tags = TREE_CHAIN (these_tags);
5275                         }
5276                     /* If this type is not yet complete, then don't
5277                        look at its context.  */
5278                     if (TYPE_SIZE (context) == NULL_TREE)
5279                       goto no_context;
5280                     /* Go to next enclosing type, if any.  */
5281                     context = DECL_CONTEXT (TYPE_MAIN_DECL (context));
5282                     break;
5283                 case 'd':
5284                     context = DECL_CONTEXT (context);
5285                     break;
5286                 default:
5287                     my_friendly_abort (10);
5288                 }
5289               continue;
5290               no_context:
5291               break;
5292             }
5293         }
5294     }
5295   return NULL_TREE;
5296 }
5297
5298 #if 0
5299 void
5300 set_current_level_tags_transparency (tags_transparent)
5301      int tags_transparent;
5302 {
5303   current_binding_level->tag_transparent = tags_transparent;
5304 }
5305 #endif
5306
5307 /* Given a type, find the tag that was defined for it and return the tag name.
5308    Otherwise return 0.  However, the value can never be 0
5309    in the cases in which this is used.
5310
5311    C++: If NAME is non-zero, this is the new name to install.  This is
5312    done when replacing anonymous tags with real tag names.  */
5313
5314 static tree
5315 lookup_tag_reverse (type, name)
5316      tree type;
5317      tree name;
5318 {
5319   register struct binding_level *level;
5320
5321   for (level = current_binding_level; level; level = level->level_chain)
5322     {
5323       register tree tail;
5324       for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5325         {
5326           if (TREE_VALUE (tail) == type)
5327             {
5328               if (name)
5329                 TREE_PURPOSE (tail) = name;
5330               return TREE_PURPOSE (tail);
5331             }
5332         }
5333     }
5334   return NULL_TREE;
5335 }
5336 \f
5337 /* Lookup TYPE in CONTEXT (a chain of nested types or a FUNCTION_DECL).
5338    Return the type value, or NULL_TREE if not found.  */
5339
5340 static tree
5341 lookup_nested_type (type, context)
5342      tree type;
5343      tree context;
5344 {
5345   if (context == NULL_TREE)
5346     return NULL_TREE;
5347   while (context)
5348     {
5349       switch (TREE_CODE (context))
5350         {
5351         case TYPE_DECL:
5352           {
5353             tree ctype = TREE_TYPE (context);
5354             tree match = value_member (type, CLASSTYPE_TAGS (ctype));
5355             if (match)
5356               return TREE_VALUE (match);
5357             context = DECL_CONTEXT (context);
5358
5359             /* When we have a nested class whose member functions have
5360                local types (e.g., a set of enums), we'll arrive here
5361                with the DECL_CONTEXT as the actual RECORD_TYPE node for
5362                the enclosing class.  Instead, we want to make sure we
5363                come back in here with the TYPE_DECL, not the RECORD_TYPE.  */
5364             if (context && TREE_CODE (context) == RECORD_TYPE)
5365               context = TREE_CHAIN (context);
5366           }
5367           break;
5368         case FUNCTION_DECL:
5369           if (TYPE_NAME (type) && TYPE_IDENTIFIER (type))
5370             return lookup_name (TYPE_IDENTIFIER (type), 1);
5371           return NULL_TREE;
5372         default:
5373           my_friendly_abort (12);
5374         }
5375     }
5376   return NULL_TREE;
5377 }
5378
5379 /* Look up NAME in the NAMESPACE.  */
5380
5381 tree
5382 lookup_namespace_name (namespace, name)
5383      tree namespace, name;
5384 {
5385   struct tree_binding _b;
5386   tree val;
5387
5388   my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
5389
5390   if (TREE_CODE (name) == NAMESPACE_DECL)
5391     /* This happens for A::B<int> when B is a namespace. */
5392     return name;
5393   else if (TREE_CODE (name) == TEMPLATE_DECL)
5394     {
5395       /* This happens for A::B where B is a template, and there are no
5396          template arguments.  */
5397       cp_error ("invalid use of `%D'", name);
5398       return error_mark_node;
5399     }
5400
5401   namespace = ORIGINAL_NAMESPACE (namespace);
5402
5403   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
5404   
5405   val = binding_init (&_b);
5406   if (!qualified_lookup_using_namespace (name, namespace, val, 0))
5407     return error_mark_node;
5408
5409   if (BINDING_VALUE (val))
5410     {
5411       val = BINDING_VALUE (val);
5412
5413       /* If we have a single function from a using decl, pull it out.  */
5414       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5415         val = OVL_FUNCTION (val);
5416       return val;
5417     }
5418
5419   cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
5420   return error_mark_node;
5421 }
5422
5423 /* Hash a TYPENAME_TYPE.  K is really of type `tree'.  */
5424
5425 static unsigned long
5426 typename_hash (k)
5427      hash_table_key k;
5428 {
5429   unsigned long hash;
5430   tree t;
5431
5432   t = (tree) k;
5433   hash = (((unsigned long) TYPE_CONTEXT (t))
5434           ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5435
5436   return hash;
5437 }
5438
5439 /* Compare two TYPENAME_TYPEs.  K1 and K2 are really of type `tree'.  */
5440
5441 static boolean
5442 typename_compare (k1, k2)
5443      hash_table_key k1;
5444      hash_table_key k2;
5445 {
5446   tree t1;
5447   tree t2;
5448   tree d1;
5449   tree d2;
5450
5451   t1 = (tree) k1;
5452   t2 = (tree) k2;
5453   d1 = TYPE_NAME (t1);
5454   d2 = TYPE_NAME (t2);
5455   
5456   return (DECL_NAME (d1) == DECL_NAME (d2)
5457           && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
5458           && ((TREE_TYPE (t1) != NULL_TREE) 
5459               == (TREE_TYPE (t2) != NULL_TREE))
5460           && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5461           && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5462 }
5463
5464 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
5465    the type of `T', NAME is the IDENTIFIER_NODE for `t'.  If BASE_TYPE
5466    is non-NULL, this type is being created by the implicit typename
5467    extension, and BASE_TYPE is a type named `t' in some base class of
5468    `T' which depends on template parameters.  
5469
5470    Returns the new TYPENAME_TYPE.  */
5471
5472 tree
5473 build_typename_type (context, name, fullname, base_type)
5474      tree context;
5475      tree name;
5476      tree fullname;
5477      tree base_type;
5478 {
5479   tree t;
5480   tree d;
5481   struct hash_entry* e;
5482
5483   static struct hash_table ht;
5484
5485   push_obstacks (&permanent_obstack, &permanent_obstack);
5486
5487   if (!ht.table
5488       && !hash_table_init (&ht, &hash_newfunc, &typename_hash, 
5489                            &typename_compare))
5490     fatal ("virtual memory exhausted");
5491
5492   /* The FULLNAME needs to exist for the life of the hash table, i.e.,
5493      for the entire compilation.  */
5494   if (!TREE_PERMANENT (fullname))
5495     fullname = copy_to_permanent (fullname);
5496
5497   /* Build the TYPENAME_TYPE.  */
5498   t = make_lang_type (TYPENAME_TYPE);
5499   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5500   TYPENAME_TYPE_FULLNAME (t) = fullname;
5501   TREE_TYPE (t) = base_type;
5502
5503   /* Build the corresponding TYPE_DECL.  */
5504   d = build_decl (TYPE_DECL, name, t);
5505   TYPE_NAME (TREE_TYPE (d)) = d;
5506   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5507   DECL_CONTEXT (d) = FROB_CONTEXT (context);
5508   DECL_ARTIFICIAL (d) = 1;
5509
5510   /* See if we already have this type.  */
5511   e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5512   if (e)
5513     {
5514       /* This will free not only TREE_TYPE, but the lang-specific data
5515          and the TYPE_DECL as well.  */
5516       obstack_free (&permanent_obstack, t);
5517       t = (tree) e->key;
5518     }
5519   else
5520     /* Insert the type into the table.  */
5521     hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5522
5523   pop_obstacks ();
5524
5525   return t;
5526 }
5527
5528 tree
5529 make_typename_type (context, name)
5530      tree context, name;
5531 {
5532   tree t;
5533   tree fullname;
5534
5535   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
5536     {
5537       if (!(TYPE_LANG_SPECIFIC (name) 
5538             && (CLASSTYPE_IS_TEMPLATE (name) 
5539                 || CLASSTYPE_USE_TEMPLATE (name))))
5540         name = TYPE_IDENTIFIER (name);
5541       else
5542         /* Create a TEMPLATE_ID_EXPR for the type.  */
5543         name = build_nt (TEMPLATE_ID_EXPR,
5544                          CLASSTYPE_TI_TEMPLATE (name),
5545                          CLASSTYPE_TI_ARGS (name));
5546     }
5547   else if (TREE_CODE (name) == TYPE_DECL)
5548     name = DECL_NAME (name);
5549
5550   fullname = name;
5551
5552   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5553     {
5554       name = TREE_OPERAND (name, 0);
5555       if (TREE_CODE (name) == TEMPLATE_DECL)
5556         name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5557     }
5558   if (TREE_CODE (name) != IDENTIFIER_NODE)
5559     my_friendly_abort (2000);
5560
5561   if (TREE_CODE (context) == NAMESPACE_DECL)
5562     {
5563       /* We can get here from typename_sub0 in the explicit_template_type
5564          expansion.  Just fail.  */
5565       cp_error ("no class template named `%#T' in `%#T'",
5566                 name, context);
5567       return error_mark_node;
5568     }
5569
5570   if (! uses_template_parms (context)
5571       || currently_open_class (context))
5572     {
5573       if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5574         {
5575           tree tmpl = NULL_TREE;
5576           if (IS_AGGR_TYPE (context))
5577             tmpl = lookup_field (context, name, 0, 0);
5578           if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5579             {
5580               cp_error ("no class template named `%#T' in `%#T'",
5581                         name, context);
5582               return error_mark_node;
5583             }
5584
5585           return lookup_template_class (tmpl, 
5586                                         TREE_OPERAND (fullname, 1),
5587                                         NULL_TREE, context, 
5588                                         /*entering_scope=*/0);
5589         }
5590       else
5591         {
5592           if (IS_AGGR_TYPE (context))
5593             t = lookup_field (context, name, 0, 1);
5594           else
5595             {
5596               cp_error ("no type named `%#T' in `%#T'", name, context);
5597               return error_mark_node;
5598             }
5599
5600           if (t)
5601             return TREE_TYPE (t);
5602         }
5603     }
5604
5605   /* If the CONTEXT is not a template type, then either the field is
5606      there now or its never going to be.  */
5607   if (!uses_template_parms (context) && !t)
5608     {
5609       cp_error ("no type named `%#T' in `%#T'", name, context);
5610       return error_mark_node;
5611     }
5612     
5613   
5614   return build_typename_type (context, name, fullname,  NULL_TREE);
5615 }
5616
5617 /* Select the right _DECL from multiple choices. */
5618
5619 static tree
5620 select_decl (binding, flags)
5621      tree binding;
5622      int flags;
5623 {
5624   tree val;
5625   val = BINDING_VALUE (binding);
5626   if (LOOKUP_NAMESPACES_ONLY (flags))
5627     {
5628       /* We are not interested in types. */
5629       if (val && TREE_CODE (val) == NAMESPACE_DECL)
5630         return val;
5631       return NULL_TREE;
5632     }
5633   
5634   /* If we could have a type and
5635      we have nothing or we need a type and have none.  */
5636   if (BINDING_TYPE (binding)
5637       && (!val || ((flags & LOOKUP_PREFER_TYPES)
5638                    && TREE_CODE (val) != TYPE_DECL)))
5639     val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5640   /* Don't return non-types if we really prefer types. */
5641   else if (val && LOOKUP_TYPES_ONLY (flags)  && TREE_CODE (val) != TYPE_DECL
5642            && (TREE_CODE (val) != TEMPLATE_DECL
5643                || !DECL_CLASS_TEMPLATE_P (val)))
5644     val = NULL_TREE;
5645
5646   return val;
5647 }
5648
5649 /* Unscoped lookup of a global, iterate over namespaces, considering
5650    using namespace statements. */
5651
5652 static tree
5653 unqualified_namespace_lookup (name, flags)
5654      tree name;
5655      int flags;
5656 {
5657   struct tree_binding _binding;
5658   tree b = binding_init (&_binding);
5659   tree initial = current_decl_namespace();
5660   tree scope = initial;
5661   tree siter;
5662   struct binding_level *level;
5663   tree val = NULL_TREE;
5664
5665   while (!val)
5666     {
5667       val = binding_for_name (name, scope);
5668
5669       /* Initialize binding for this context. */
5670       BINDING_VALUE (b) = BINDING_VALUE (val);
5671       BINDING_TYPE (b) = BINDING_TYPE (val);
5672
5673       /* Add all _DECLs seen through local using-directives. */
5674       for (level = current_binding_level; 
5675            !level->namespace_p;
5676            level = level->level_chain)
5677         if (!lookup_using_namespace (name, b, level->using_directives,
5678                                      scope, flags))
5679           /* Give up because of error. */
5680           return error_mark_node;
5681
5682       /* Add all _DECLs seen through global using-directives. */
5683       /* XXX local and global using lists should work equally. */
5684       siter = initial;
5685       while (1)
5686         {
5687           if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter), 
5688                                        scope, flags))
5689             /* Give up because of error. */
5690             return error_mark_node;
5691           if (siter == scope) break;
5692           siter = CP_DECL_CONTEXT (siter);
5693         }
5694
5695       val = select_decl (b, flags);
5696       if (scope == global_namespace)
5697         break;
5698       scope = CP_DECL_CONTEXT (scope);
5699     }
5700   return val;
5701 }
5702
5703 /* Combine prefer_type and namespaces_only into flags.  */
5704
5705 static int
5706 lookup_flags (prefer_type, namespaces_only)
5707   int prefer_type, namespaces_only;
5708 {
5709   if (namespaces_only)
5710     return LOOKUP_PREFER_NAMESPACES;
5711   if (prefer_type > 1)
5712     return LOOKUP_PREFER_TYPES;
5713   if (prefer_type > 0)
5714     return LOOKUP_PREFER_BOTH;
5715   return 0;
5716 }
5717
5718 /* Given a lookup that returned VAL, use FLAGS to decide if we want to
5719    ignore it or not.  Subroutine of lookup_name_real.  */
5720
5721 static tree
5722 qualify_lookup (val, flags)
5723      tree val;
5724      int flags;
5725 {
5726   if (val == NULL_TREE)
5727     return val;
5728   if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5729     return val;
5730   if ((flags & LOOKUP_PREFER_TYPES)
5731       && (TREE_CODE (val) == TYPE_DECL
5732           || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5733               && DECL_CLASS_TEMPLATE_P (val))))
5734     return val;
5735   if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
5736     return NULL_TREE;
5737   return val;
5738 }
5739
5740 /* Any other BINDING overrides an implicit TYPENAME.  Warn about
5741    that.  */
5742
5743 static void
5744 warn_about_implicit_typename_lookup (typename, binding)
5745      tree typename;
5746      tree binding;
5747 {
5748   tree subtype = TREE_TYPE (TREE_TYPE (typename));
5749   tree name = DECL_NAME (typename);
5750
5751   if (! (TREE_CODE (binding) == TEMPLATE_DECL
5752          && CLASSTYPE_TEMPLATE_INFO (subtype)
5753          && CLASSTYPE_TI_TEMPLATE (subtype) == binding)
5754       && ! (TREE_CODE (binding) == TYPE_DECL
5755             && same_type_p (TREE_TYPE (binding), subtype)))
5756     {
5757       cp_warning ("lookup of `%D' finds `%#D'", 
5758                   name, binding);
5759       cp_warning ("  instead of `%D' from dependent base class",
5760                   typename);
5761       cp_warning ("  (use `typename %T::%D' if that's what you meant)",
5762                   constructor_name (current_class_type), name);
5763     }
5764 }
5765
5766 /* Look up NAME in the current binding level and its superiors in the
5767    namespace of variables, functions and typedefs.  Return a ..._DECL
5768    node of some kind representing its definition if there is only one
5769    such declaration, or return a TREE_LIST with all the overloaded
5770    definitions if there are many, or return 0 if it is undefined.
5771
5772    If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5773    If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
5774    If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
5775    Otherwise we prefer non-TYPE_DECLs.  
5776
5777    If NONCLASS is non-zero, we don't look for the NAME in class scope,
5778    using IDENTIFIER_CLASS_VALUE.  */
5779
5780 static tree
5781 lookup_name_real (name, prefer_type, nonclass, namespaces_only)
5782      tree name;
5783      int prefer_type, nonclass, namespaces_only;
5784 {
5785   tree t;
5786   tree val = NULL_TREE;
5787   int yylex = 0;
5788   tree from_obj = NULL_TREE;
5789   int flags;
5790   int val_is_implicit_typename = 0;
5791
5792   /* Hack: copy flag set by parser, if set. */
5793   if (only_namespace_names)
5794     namespaces_only = 1;
5795
5796   if (prefer_type == -2)
5797     {
5798       extern int looking_for_typename;
5799       tree type = NULL_TREE;
5800
5801       yylex = 1;
5802       prefer_type = looking_for_typename;
5803
5804       flags = lookup_flags (prefer_type, namespaces_only);
5805       /* If the next thing is '<', class templates are types. */
5806       if (looking_for_template)
5807         flags |= LOOKUP_TEMPLATES_EXPECTED;
5808
5809       /* std:: becomes :: for now.  */
5810       if (got_scope == std_node)
5811         got_scope = void_type_node;
5812
5813       if (got_scope)
5814         type = got_scope;
5815       else if (got_object != error_mark_node)
5816         type = got_object;
5817       
5818       if (type)
5819         {
5820           if (type == error_mark_node)
5821             return error_mark_node;
5822           if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5823             type = TREE_TYPE (type);
5824
5825           if (TYPE_P (type))
5826             type = complete_type (type);
5827
5828           if (TREE_CODE (type) == VOID_TYPE)
5829             type = global_namespace;
5830           if (TREE_CODE (type) == NAMESPACE_DECL)
5831             {
5832               struct tree_binding b;
5833               val = binding_init (&b);
5834               flags |= LOOKUP_COMPLAIN;
5835               if (!qualified_lookup_using_namespace (name, type, val, flags))
5836                 return NULL_TREE;
5837               val = select_decl (val, flags);
5838             }
5839           else if (! IS_AGGR_TYPE (type)
5840                    || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5841                    || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
5842                    || TREE_CODE (type) == TYPENAME_TYPE)
5843             /* Someone else will give an error about this if needed.  */
5844             val = NULL_TREE;
5845           else if (type == current_class_type)
5846             val = IDENTIFIER_CLASS_VALUE (name);
5847           else
5848             val = lookup_member (type, name, 0, prefer_type);
5849         }
5850       else
5851         val = NULL_TREE;
5852
5853       if (got_scope)
5854         goto done;
5855       else if (got_object && val)
5856         from_obj = val;
5857     }
5858   else
5859     {
5860       flags = lookup_flags (prefer_type, namespaces_only);
5861       /* If we're not parsing, we need to complain. */
5862       flags |= LOOKUP_COMPLAIN;
5863     }
5864
5865   /* First, look in non-namespace scopes.  */
5866   for (t = IDENTIFIER_BINDING (name); t; t = TREE_CHAIN (t))
5867     {
5868       tree binding;
5869
5870       if (!LOCAL_BINDING_P (t) && nonclass)
5871         /* We're not looking for class-scoped bindings, so keep going.  */
5872         continue;
5873       
5874       /* If this is the kind of thing we're looking for, we're done.  */
5875       if (qualify_lookup (BINDING_VALUE (t), flags))
5876         binding = BINDING_VALUE (t);
5877       else if ((flags & LOOKUP_PREFER_TYPES) 
5878                && qualify_lookup (BINDING_TYPE (t), flags))
5879         binding = BINDING_TYPE (t);
5880       else
5881         binding = NULL_TREE;
5882
5883       if (binding
5884           && (!val || !(TREE_CODE (binding) == TYPE_DECL
5885                         && IMPLICIT_TYPENAME_P (TREE_TYPE (binding)))))
5886         {
5887           if (val_is_implicit_typename && !yylex)
5888             warn_about_implicit_typename_lookup (val, binding);
5889           val = binding;
5890           val_is_implicit_typename 
5891             = (TREE_CODE (val) == TYPE_DECL
5892                && IMPLICIT_TYPENAME_P (TREE_TYPE (val)));
5893           if (!val_is_implicit_typename)
5894             break;
5895         }
5896     }
5897
5898   /* Now lookup in namespace scopes.  */
5899   if (!val || val_is_implicit_typename)
5900     {
5901       t = unqualified_namespace_lookup (name, flags);
5902       if (t)
5903         {
5904           if (val_is_implicit_typename && !yylex)
5905             warn_about_implicit_typename_lookup (val, t);
5906           val = t;
5907         }
5908     }
5909
5910  done:
5911   if (val)
5912     {
5913       /* This should only warn about types used in qualified-ids.  */
5914       if (from_obj && from_obj != val)
5915         {
5916           if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
5917               && TREE_CODE (val) == TYPE_DECL
5918               && TREE_TYPE (from_obj) != TREE_TYPE (val))
5919             {
5920               cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
5921                           name, got_object, TREE_TYPE (from_obj));
5922               cp_pedwarn ("  does not match lookup in the current scope (`%#T')",
5923                           TREE_TYPE (val));
5924             }
5925
5926           /* We don't change val to from_obj if got_object depends on
5927              template parms because that breaks implicit typename for
5928              destructor calls.  */
5929           if (! uses_template_parms (got_object))
5930             val = from_obj;
5931         }
5932
5933       /* If we have a single function from a using decl, pull it out.  */
5934       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5935         val = OVL_FUNCTION (val);
5936     }
5937   else if (from_obj)
5938     val = from_obj;
5939
5940   return val;
5941 }
5942
5943 tree
5944 lookup_name_nonclass (name)
5945      tree name;
5946 {
5947   return lookup_name_real (name, 0, 1, 0);
5948 }
5949
5950 tree
5951 lookup_function_nonclass (name, args)
5952      tree name;
5953      tree args;
5954 {
5955   return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
5956 }
5957
5958 tree
5959 lookup_name_namespace_only (name)
5960      tree name;
5961 {
5962   /* type-or-namespace, nonclass, namespace_only */
5963   return lookup_name_real (name, 1, 1, 1);
5964 }
5965
5966 tree
5967 lookup_name (name, prefer_type)
5968      tree name;
5969      int prefer_type;
5970 {
5971   return lookup_name_real (name, prefer_type, 0, 0);
5972 }
5973
5974 /* Similar to `lookup_name' but look only in the innermost non-class
5975    binding level.  */
5976
5977 tree
5978 lookup_name_current_level (name)
5979      tree name;
5980 {
5981   struct binding_level *b;
5982   tree t = NULL_TREE;
5983
5984   b = current_binding_level;
5985   while (b->parm_flag == 2)
5986     b = b->level_chain;
5987
5988   if (b->namespace_p)
5989     {
5990       t =  IDENTIFIER_NAMESPACE_VALUE (name);
5991
5992       /* extern "C" function() */
5993       if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
5994         t = TREE_VALUE (t);
5995     }
5996   else if (IDENTIFIER_BINDING (name) 
5997            && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
5998     {
5999       while (1)
6000         {
6001           if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
6002             return IDENTIFIER_VALUE (name);
6003           
6004           if (b->keep == 2)
6005             b = b->level_chain;
6006           else
6007             break;
6008         }
6009     }
6010
6011   return t;
6012 }
6013
6014 /* Like lookup_name_current_level, but for types.  */
6015
6016 tree
6017 lookup_type_current_level (name)
6018      tree name;
6019 {
6020   register tree t = NULL_TREE;
6021
6022   my_friendly_assert (! current_binding_level->namespace_p, 980716);
6023
6024   if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
6025       && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
6026     {
6027       struct binding_level *b = current_binding_level;
6028       while (1)
6029         {
6030           if (purpose_member (name, b->type_shadowed))
6031             return REAL_IDENTIFIER_TYPE_VALUE (name);
6032           if (b->keep == 2)
6033             b = b->level_chain;
6034           else
6035             break;
6036         }
6037     }
6038
6039   return t;
6040 }
6041
6042 void
6043 begin_only_namespace_names ()
6044 {
6045   only_namespace_names = 1;
6046 }
6047
6048 void
6049 end_only_namespace_names ()
6050 {
6051   only_namespace_names = 0;
6052 }
6053 \f
6054 /* Arrange for the user to get a source line number, even when the
6055    compiler is going down in flames, so that she at least has a
6056    chance of working around problems in the compiler.  We used to
6057    call error(), but that let the segmentation fault continue
6058    through; now, it's much more passive by asking them to send the
6059    maintainers mail about the problem.  */
6060
6061 static void
6062 signal_catch (sig)
6063      int sig ATTRIBUTE_UNUSED;
6064 {
6065   signal (SIGSEGV, SIG_DFL);
6066 #ifdef SIGIOT
6067   signal (SIGIOT, SIG_DFL);
6068 #endif
6069 #ifdef SIGILL
6070   signal (SIGILL, SIG_DFL);
6071 #endif
6072 #ifdef SIGABRT
6073   signal (SIGABRT, SIG_DFL);
6074 #endif
6075 #ifdef SIGBUS
6076   signal (SIGBUS, SIG_DFL);
6077 #endif
6078   my_friendly_abort (0);
6079 }
6080
6081 #if 0
6082 /* Unused -- brendan 970107 */
6083 /* Array for holding types considered "built-in".  These types
6084    are output in the module in which `main' is defined.  */
6085 static tree *builtin_type_tdescs_arr;
6086 static int builtin_type_tdescs_len, builtin_type_tdescs_max;
6087 #endif
6088
6089 /* Push the declarations of builtin types into the namespace.
6090    RID_INDEX, if < RID_MAX is the index of the builtin type
6091    in the array RID_POINTERS.  NAME is the name used when looking
6092    up the builtin type.  TYPE is the _TYPE node for the builtin type.  */
6093
6094 static void
6095 record_builtin_type (rid_index, name, type)
6096      enum rid rid_index;
6097      const char *name;
6098      tree type;
6099 {
6100   tree rname = NULL_TREE, tname = NULL_TREE;
6101   tree tdecl = NULL_TREE;
6102
6103   if ((int) rid_index < (int) RID_MAX)
6104     rname = ridpointers[(int) rid_index];
6105   if (name)
6106     tname = get_identifier (name);
6107
6108   TYPE_BUILT_IN (type) = 1;
6109   
6110   if (tname)
6111     {
6112       tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
6113       set_identifier_type_value (tname, NULL_TREE);
6114       if ((int) rid_index < (int) RID_MAX)
6115         /* Built-in types live in the global namespace. */
6116         SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
6117     }
6118   if (rname != NULL_TREE)
6119     {
6120       if (tname != NULL_TREE)
6121         {
6122           set_identifier_type_value (rname, NULL_TREE);
6123           SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
6124         }
6125       else
6126         {
6127           tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
6128           set_identifier_type_value (rname, NULL_TREE);
6129         }
6130     }
6131 }
6132
6133 /* Record one of the standard Java types.
6134  * Declare it as having the given NAME.
6135  * If SIZE > 0, it is the size of one of the integral types;
6136  * otherwise it is the negative of the size of one of the other types.  */
6137
6138 static tree
6139 record_builtin_java_type (name, size)
6140      const char *name;
6141      int size;
6142 {
6143   tree type, decl;
6144   if (size > 0)
6145     type = make_signed_type (size);
6146   else if (size > -32)
6147     { /* "__java_char" or ""__java_boolean". */
6148       type = make_unsigned_type (-size);
6149       /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
6150     }
6151   else
6152     { /* "__java_float" or ""__java_double". */
6153       type = make_node (REAL_TYPE);
6154       TYPE_PRECISION (type) = - size;
6155       layout_type (type);
6156     }
6157   record_builtin_type (RID_MAX, name, type);
6158   decl = TYPE_NAME (type);
6159
6160   /* Suppress generate debug symbol entries for these types,
6161      since for normal C++ they are just clutter.
6162      However, push_lang_context undoes this if extern "Java" is seen. */
6163   DECL_IGNORED_P (decl) = 1;
6164
6165   TYPE_FOR_JAVA (type) = 1;
6166   return type;
6167 }
6168
6169 /* Push a type into the namespace so that the back-ends ignore it. */
6170
6171 static void
6172 record_unknown_type (type, name)
6173      tree type;
6174      const char *name;
6175 {
6176   tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
6177   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
6178   DECL_IGNORED_P (decl) = 1;
6179   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6180   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
6181   TYPE_ALIGN (type) = 1;
6182   TYPE_MODE (type) = TYPE_MODE (void_type_node);
6183
6184
6185 /* Push overloaded decl, in global scope, with one argument so it
6186    can be used as a callback from define_function.  */
6187
6188 static void
6189 push_overloaded_decl_1 (x)
6190      tree x;
6191 {
6192   push_overloaded_decl (x, PUSH_GLOBAL);
6193 }
6194
6195 #ifdef __GNUC__
6196 __inline
6197 #endif
6198 tree
6199 auto_function (name, type, code)
6200      tree name, type;
6201      enum built_in_function code;
6202 {
6203   return define_function
6204     (IDENTIFIER_POINTER (name), type, code, push_overloaded_decl_1,
6205      IDENTIFIER_POINTER (build_decl_overload (name, TYPE_ARG_TYPES (type),
6206                                               0)));
6207 }
6208
6209 /* Create the predefined scalar types of C,
6210    and some nodes representing standard constants (0, 1, (void *)0).
6211    Initialize the global binding level.
6212    Make definitions for built-in primitive functions.  */
6213
6214 void
6215 init_decl_processing ()
6216 {
6217   register tree endlink, int_endlink, double_endlink, unsigned_endlink;
6218   tree fields[20];
6219   /* Data type of memcpy.  */
6220   tree memcpy_ftype, strlen_ftype;
6221   int wchar_type_size;
6222   tree temp;
6223   tree array_domain_type;
6224   tree vb_off_identifier = NULL_TREE;
6225   /* Function type `char *(char *, char *)' and similar ones */
6226   tree string_ftype_ptr_ptr, int_ftype_string_string;
6227   tree sizetype_endlink;
6228   tree ptr_ftype, ptr_ftype_unsigned, ptr_ftype_sizetype;
6229   tree void_ftype, void_ftype_int, void_ftype_ptr;
6230
6231   /* Have to make these distinct before we try using them.  */
6232   lang_name_cplusplus = get_identifier ("C++");
6233   lang_name_c = get_identifier ("C");
6234   lang_name_java = get_identifier ("Java");
6235
6236   /* Enter the global namespace. */
6237   my_friendly_assert (global_namespace == NULL_TREE, 375);
6238   my_friendly_assert (current_lang_name == NULL_TREE, 375);
6239   current_lang_name = lang_name_cplusplus;
6240   push_namespace (get_identifier ("::"));
6241   global_namespace = current_namespace;
6242   current_lang_name = NULL_TREE;
6243
6244   if (flag_strict_prototype == 2)
6245     flag_strict_prototype = pedantic;
6246   if (! flag_permissive && ! pedantic)
6247     flag_pedantic_errors = 1;
6248
6249   strict_prototypes_lang_c = flag_strict_prototype;
6250
6251   /* Initially, C.  */
6252   current_lang_name = lang_name_c;
6253
6254   current_function_decl = NULL_TREE;
6255   named_labels = NULL_TREE;
6256   named_label_uses = NULL;
6257   current_binding_level = NULL_BINDING_LEVEL;
6258   free_binding_level = NULL_BINDING_LEVEL;
6259
6260   /* Because most segmentation signals can be traced back into user
6261      code, catch them and at least give the user a chance of working
6262      around compiler bugs.  */
6263   signal (SIGSEGV, signal_catch);
6264
6265   /* We will also catch aborts in the back-end through signal_catch and
6266      give the user a chance to see where the error might be, and to defeat
6267      aborts in the back-end when there have been errors previously in their
6268      code.  */
6269 #ifdef SIGIOT
6270   signal (SIGIOT, signal_catch);
6271 #endif
6272 #ifdef SIGILL
6273   signal (SIGILL, signal_catch);
6274 #endif
6275 #ifdef SIGABRT
6276   signal (SIGABRT, signal_catch);
6277 #endif
6278 #ifdef SIGBUS
6279   signal (SIGBUS, signal_catch);
6280 #endif
6281
6282   gcc_obstack_init (&decl_obstack);
6283
6284   /* Must lay these out before anything else gets laid out.  */
6285   error_mark_node = make_node (ERROR_MARK);
6286   TREE_PERMANENT (error_mark_node) = 1;
6287   TREE_TYPE (error_mark_node) = error_mark_node;
6288   error_mark_list = build_tree_list (error_mark_node, error_mark_node);
6289   TREE_TYPE (error_mark_list) = error_mark_node;
6290
6291   /* Make the binding_level structure for global names.  */
6292   pushlevel (0);
6293   global_binding_level = current_binding_level;
6294   /* The global level is the namespace level of ::.  */
6295   NAMESPACE_LEVEL (global_namespace) = global_binding_level;
6296   declare_namespace_level ();
6297
6298   this_identifier = get_identifier (THIS_NAME);
6299   in_charge_identifier = get_identifier (IN_CHARGE_NAME);
6300   vlist_identifier = get_identifier (VLIST_NAME);
6301   ctor_identifier = get_identifier (CTOR_NAME);
6302   dtor_identifier = get_identifier (DTOR_NAME);
6303   pfn_identifier = get_identifier (VTABLE_PFN_NAME);
6304   index_identifier = get_identifier (VTABLE_INDEX_NAME);
6305   delta_identifier = get_identifier (VTABLE_DELTA_NAME);
6306   delta2_identifier = get_identifier (VTABLE_DELTA2_NAME);
6307   pfn_or_delta2_identifier = get_identifier ("__pfn_or_delta2");
6308   if (flag_handle_signatures)
6309     {
6310       tag_identifier = get_identifier (SIGTABLE_TAG_NAME);
6311       vb_off_identifier = get_identifier (SIGTABLE_VB_OFF_NAME);
6312       vt_off_identifier = get_identifier (SIGTABLE_VT_OFF_NAME);
6313     }
6314
6315   /* Define `int' and `char' first so that dbx will output them first.  */
6316
6317   integer_type_node = make_signed_type (INT_TYPE_SIZE);
6318   record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
6319
6320   /* Define `char', which is like either `signed char' or `unsigned char'
6321      but not the same as either.  */
6322
6323   char_type_node
6324     = (flag_signed_char
6325        ? make_signed_type (CHAR_TYPE_SIZE)
6326        : make_unsigned_type (CHAR_TYPE_SIZE));
6327   record_builtin_type (RID_CHAR, "char", char_type_node);
6328
6329   /* `signed' is the same as `int' */
6330   record_builtin_type (RID_SIGNED, NULL_PTR, integer_type_node);
6331   
6332   long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
6333   record_builtin_type (RID_LONG, "long int", long_integer_type_node);
6334
6335   unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
6336   record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
6337
6338   long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
6339   record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
6340   record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
6341
6342   long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
6343   record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
6344
6345   long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
6346   record_builtin_type (RID_MAX, "long long unsigned int",
6347                        long_long_unsigned_type_node);
6348   record_builtin_type (RID_MAX, "long long unsigned",
6349                        long_long_unsigned_type_node);
6350
6351   short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
6352   record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
6353   short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
6354   record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
6355   record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
6356
6357   /* `unsigned long' is the standard type for sizeof.
6358      Note that stddef.h uses `unsigned long',
6359      and this must agree, even if long and int are the same size.  */
6360   set_sizetype
6361     (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
6362
6363   ptrdiff_type_node
6364     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
6365
6366   /* Define both `signed char' and `unsigned char'.  */
6367   signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
6368   record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
6369   unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
6370   record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
6371
6372   /* These are types that type_for_size and type_for_mode use.  */
6373   intQI_type_node = make_signed_type (GET_MODE_BITSIZE (QImode));
6374   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
6375   intHI_type_node = make_signed_type (GET_MODE_BITSIZE (HImode));
6376   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
6377   intSI_type_node = make_signed_type (GET_MODE_BITSIZE (SImode));
6378   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
6379   intDI_type_node = make_signed_type (GET_MODE_BITSIZE (DImode));
6380   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
6381 #if HOST_BITS_PER_WIDE_INT >= 64
6382   intTI_type_node = make_signed_type (GET_MODE_BITSIZE (TImode));
6383   pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
6384 #endif
6385   unsigned_intQI_type_node = make_unsigned_type (GET_MODE_BITSIZE (QImode));
6386   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
6387   unsigned_intHI_type_node = make_unsigned_type (GET_MODE_BITSIZE (HImode));
6388   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
6389   unsigned_intSI_type_node = make_unsigned_type (GET_MODE_BITSIZE (SImode));
6390   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
6391   unsigned_intDI_type_node = make_unsigned_type (GET_MODE_BITSIZE (DImode));
6392   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
6393 #if HOST_BITS_PER_WIDE_INT >= 64
6394   unsigned_intTI_type_node = make_unsigned_type (GET_MODE_BITSIZE (TImode));
6395   pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
6396 #endif
6397
6398   float_type_node = make_node (REAL_TYPE);
6399   TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
6400   record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
6401   layout_type (float_type_node);
6402
6403   double_type_node = make_node (REAL_TYPE);
6404   if (flag_short_double)
6405     TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
6406   else
6407     TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
6408   record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
6409   layout_type (double_type_node);
6410
6411   long_double_type_node = make_node (REAL_TYPE);
6412   TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
6413   record_builtin_type (RID_MAX, "long double", long_double_type_node);
6414   layout_type (long_double_type_node);
6415
6416   complex_integer_type_node = make_node (COMPLEX_TYPE);
6417   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
6418                         complex_integer_type_node));
6419   TREE_TYPE (complex_integer_type_node) = integer_type_node;
6420   layout_type (complex_integer_type_node);
6421
6422   complex_float_type_node = make_node (COMPLEX_TYPE);
6423   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
6424                         complex_float_type_node));
6425   TREE_TYPE (complex_float_type_node) = float_type_node;
6426   layout_type (complex_float_type_node);
6427
6428   complex_double_type_node = make_node (COMPLEX_TYPE);
6429   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
6430                         complex_double_type_node));
6431   TREE_TYPE (complex_double_type_node) = double_type_node;
6432   layout_type (complex_double_type_node);
6433
6434   complex_long_double_type_node = make_node (COMPLEX_TYPE);
6435   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
6436                         complex_long_double_type_node));
6437   TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
6438   layout_type (complex_long_double_type_node);
6439
6440   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6441   java_short_type_node = record_builtin_java_type ("__java_short", 16);
6442   java_int_type_node = record_builtin_java_type ("__java_int", 32);
6443   java_long_type_node = record_builtin_java_type ("__java_long", 64);
6444   java_float_type_node = record_builtin_java_type ("__java_float", -32);
6445   java_double_type_node = record_builtin_java_type ("__java_double", -64);
6446   java_char_type_node = record_builtin_java_type ("__java_char", -16);
6447   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
6448
6449   integer_zero_node = build_int_2 (0, 0);
6450   TREE_TYPE (integer_zero_node) = integer_type_node;
6451   integer_one_node = build_int_2 (1, 0);
6452   TREE_TYPE (integer_one_node) = integer_type_node;
6453   integer_two_node = build_int_2 (2, 0);
6454   TREE_TYPE (integer_two_node) = integer_type_node;
6455   integer_three_node = build_int_2 (3, 0);
6456   TREE_TYPE (integer_three_node) = integer_type_node;
6457
6458   boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6459   TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
6460   TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6461   TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6462   TYPE_PRECISION (boolean_type_node) = 1;
6463   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6464   boolean_false_node = build_int_2 (0, 0);
6465   TREE_TYPE (boolean_false_node) = boolean_type_node;
6466   boolean_true_node = build_int_2 (1, 0);
6467   TREE_TYPE (boolean_true_node) = boolean_type_node;
6468
6469   /* These are needed by stor-layout.c.  */
6470   size_zero_node = size_int (0);
6471   size_one_node = size_int (1);
6472
6473   signed_size_zero_node = build_int_2 (0, 0);
6474   TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6475
6476   void_type_node = make_node (VOID_TYPE);
6477   record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
6478   layout_type (void_type_node); /* Uses integer_zero_node.  */
6479   void_list_node = build_tree_list (NULL_TREE, void_type_node);
6480   TREE_PARMLIST (void_list_node) = 1;
6481
6482   null_pointer_node = build_int_2 (0, 0);
6483   TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
6484   layout_type (TREE_TYPE (null_pointer_node));
6485      
6486   /* Used for expressions that do nothing, but are not errors.  */
6487   void_zero_node = build_int_2 (0, 0);
6488   TREE_TYPE (void_zero_node) = void_type_node;
6489
6490   string_type_node = build_pointer_type (char_type_node);
6491   const_string_type_node
6492     = build_pointer_type (build_qualified_type (char_type_node, 
6493                                                 TYPE_QUAL_CONST));
6494 #if 0
6495   record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6496 #endif
6497
6498   /* Make a type to be the domain of a few array types
6499      whose domains don't really matter.
6500      200 is small enough that it always fits in size_t
6501      and large enough that it can hold most function names for the
6502      initializations of __FUNCTION__ and __PRETTY_FUNCTION__.  */
6503   array_domain_type = build_index_type (build_int_2 (200, 0));
6504
6505   /* Make a type for arrays of characters.
6506      With luck nothing will ever really depend on the length of this
6507      array type.  */
6508   char_array_type_node
6509     = build_array_type (char_type_node, array_domain_type);
6510   /* Likewise for arrays of ints.  */
6511   int_array_type_node
6512     = build_array_type (integer_type_node, array_domain_type);
6513
6514   /* This is just some anonymous class type.  Nobody should ever
6515      need to look inside this envelope.  */
6516   class_star_type_node = build_pointer_type (make_lang_type (RECORD_TYPE));
6517
6518   default_function_type
6519     = build_function_type (integer_type_node, NULL_TREE);
6520
6521   ptr_type_node = build_pointer_type (void_type_node);
6522   const_ptr_type_node
6523     = build_pointer_type (build_qualified_type (void_type_node,
6524                                                 TYPE_QUAL_CONST)); 
6525 #if 0
6526   record_builtin_type (RID_MAX, NULL_PTR, ptr_type_node);
6527 #endif
6528
6529   endlink = void_list_node;
6530   int_endlink = tree_cons (NULL_TREE, integer_type_node, endlink);
6531   double_endlink = tree_cons (NULL_TREE, double_type_node, endlink);
6532   unsigned_endlink = tree_cons (NULL_TREE, unsigned_type_node, endlink);
6533
6534   ptr_ftype = build_function_type (ptr_type_node, NULL_TREE);
6535   ptr_ftype_unsigned = build_function_type (ptr_type_node, unsigned_endlink);
6536   sizetype_endlink = tree_cons (NULL_TREE, sizetype, endlink);
6537   /* We realloc here because sizetype could be int or unsigned.  S'ok.  */
6538   ptr_ftype_sizetype = build_function_type (ptr_type_node, sizetype_endlink);
6539
6540   void_ftype = build_function_type (void_type_node, endlink);
6541   void_ftype_int = build_function_type (void_type_node, int_endlink);
6542   void_ftype_ptr
6543     = build_function_type (void_type_node,
6544                            tree_cons (NULL_TREE, ptr_type_node, endlink));
6545   void_ftype_ptr
6546     = build_exception_variant (void_ftype_ptr,
6547                                tree_cons (NULL_TREE, NULL_TREE, NULL_TREE));
6548
6549   float_ftype_float
6550     = build_function_type (float_type_node,
6551                            tree_cons (NULL_TREE, float_type_node, endlink));
6552
6553   double_ftype_double
6554     = build_function_type (double_type_node, double_endlink);
6555
6556   ldouble_ftype_ldouble
6557     = build_function_type (long_double_type_node,
6558                            tree_cons (NULL_TREE, long_double_type_node,
6559                                       endlink));
6560
6561   double_ftype_double_double
6562     = build_function_type (double_type_node,
6563                            tree_cons (NULL_TREE, double_type_node,
6564                                       double_endlink));
6565
6566   int_ftype_int
6567     = build_function_type (integer_type_node, int_endlink);
6568
6569   long_ftype_long
6570     = build_function_type (long_integer_type_node,
6571                            tree_cons (NULL_TREE, long_integer_type_node,
6572                                       endlink));
6573
6574   int_ftype_cptr_cptr_sizet
6575     = build_function_type (integer_type_node,
6576                            tree_cons (NULL_TREE, const_ptr_type_node,
6577                                       tree_cons (NULL_TREE, const_ptr_type_node,
6578                                                  tree_cons (NULL_TREE,
6579                                                             sizetype,
6580                                                             endlink))));
6581
6582   string_ftype_ptr_ptr          /* strcpy prototype */
6583     = build_function_type (string_type_node,
6584                            tree_cons (NULL_TREE, string_type_node,
6585                                       tree_cons (NULL_TREE,
6586                                                  const_string_type_node,
6587                                                  endlink)));
6588
6589   int_ftype_string_string       /* strcmp prototype */
6590     = build_function_type (integer_type_node,
6591                            tree_cons (NULL_TREE, const_string_type_node,
6592                                       tree_cons (NULL_TREE,
6593                                                  const_string_type_node,
6594                                                  endlink)));
6595
6596   strlen_ftype          /* strlen prototype */
6597     = build_function_type (sizetype,
6598                            tree_cons (NULL_TREE, const_string_type_node,
6599                                       endlink));
6600
6601   memcpy_ftype  /* memcpy prototype */
6602     = build_function_type (ptr_type_node,
6603                            tree_cons (NULL_TREE, ptr_type_node,
6604                                       tree_cons (NULL_TREE, const_ptr_type_node,
6605                                                  sizetype_endlink)));
6606
6607   if (flag_huge_objects)
6608     delta_type_node = long_integer_type_node;
6609   else
6610     delta_type_node = short_integer_type_node;
6611
6612   builtin_function ("__builtin_constant_p", default_function_type,
6613                     BUILT_IN_CONSTANT_P, NULL_PTR);
6614
6615   builtin_return_address_fndecl
6616     = builtin_function ("__builtin_return_address", ptr_ftype_unsigned,
6617                         BUILT_IN_RETURN_ADDRESS, NULL_PTR);
6618
6619   builtin_function ("__builtin_frame_address", ptr_ftype_unsigned,
6620                     BUILT_IN_FRAME_ADDRESS, NULL_PTR);
6621
6622   builtin_function ("__builtin_alloca", ptr_ftype_sizetype,
6623                     BUILT_IN_ALLOCA, "alloca");
6624   builtin_function ("__builtin_ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
6625   /* Define alloca, ffs as builtins.
6626      Declare _exit just to mark it as volatile.  */
6627   if (! flag_no_builtin && !flag_no_nonansi_builtin)
6628     {
6629       temp = builtin_function ("alloca", ptr_ftype_sizetype,
6630                                BUILT_IN_ALLOCA, NULL_PTR);
6631       /* Suppress error if redefined as a non-function.  */
6632       DECL_BUILT_IN_NONANSI (temp) = 1;
6633       temp = builtin_function ("ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
6634       /* Suppress error if redefined as a non-function.  */
6635       DECL_BUILT_IN_NONANSI (temp) = 1;
6636       temp = builtin_function ("_exit", void_ftype_int,
6637                                NOT_BUILT_IN, NULL_PTR);
6638       TREE_THIS_VOLATILE (temp) = 1;
6639       TREE_SIDE_EFFECTS (temp) = 1;
6640       /* Suppress error if redefined as a non-function.  */
6641       DECL_BUILT_IN_NONANSI (temp) = 1;
6642     }
6643
6644   builtin_function ("__builtin_abs", int_ftype_int, BUILT_IN_ABS, NULL_PTR);
6645   builtin_function ("__builtin_fabsf", float_ftype_float, BUILT_IN_FABS,
6646                     NULL_PTR);
6647   builtin_function ("__builtin_fabs", double_ftype_double, BUILT_IN_FABS,
6648                     NULL_PTR);
6649   builtin_function ("__builtin_fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
6650                     NULL_PTR);
6651   builtin_function ("__builtin_labs", long_ftype_long,
6652                     BUILT_IN_LABS, NULL_PTR);
6653   builtin_function ("__builtin_saveregs", ptr_ftype,
6654                     BUILT_IN_SAVEREGS, NULL_PTR);
6655   builtin_function ("__builtin_classify_type", default_function_type,
6656                     BUILT_IN_CLASSIFY_TYPE, NULL_PTR);
6657   builtin_function ("__builtin_next_arg", ptr_ftype,
6658                     BUILT_IN_NEXT_ARG, NULL_PTR);
6659   builtin_function ("__builtin_args_info", int_ftype_int,
6660                     BUILT_IN_ARGS_INFO, NULL_PTR);
6661   builtin_function ("__builtin_setjmp",
6662                     build_function_type (integer_type_node,
6663                                          tree_cons (NULL_TREE, ptr_type_node,
6664                                                     endlink)),
6665                     BUILT_IN_SETJMP, NULL_PTR);
6666   builtin_function ("__builtin_longjmp",
6667                     build_function_type (integer_type_node,
6668                                          tree_cons (NULL_TREE, ptr_type_node,
6669                                                     tree_cons (NULL_TREE,
6670                                                                integer_type_node,
6671                                                                endlink))),
6672                     BUILT_IN_LONGJMP, NULL_PTR);
6673
6674   /* Untyped call and return.  */
6675   builtin_function ("__builtin_apply_args", ptr_ftype,
6676                     BUILT_IN_APPLY_ARGS, NULL_PTR);
6677
6678   temp = tree_cons (NULL_TREE,
6679                     build_pointer_type (build_function_type (void_type_node,
6680                                                              NULL_TREE)),
6681                     tree_cons (NULL_TREE, ptr_ftype_sizetype, NULL_TREE));
6682   builtin_function ("__builtin_apply",
6683                     build_function_type (ptr_type_node, temp),
6684                     BUILT_IN_APPLY, NULL_PTR);
6685   builtin_function ("__builtin_return", void_ftype_ptr,
6686                     BUILT_IN_RETURN, NULL_PTR);
6687
6688   /* Currently under experimentation.  */
6689   builtin_function ("__builtin_memcpy", memcpy_ftype,
6690                     BUILT_IN_MEMCPY, "memcpy");
6691   builtin_function ("__builtin_memcmp", int_ftype_cptr_cptr_sizet,
6692                     BUILT_IN_MEMCMP, "memcmp");
6693   builtin_function ("__builtin_strcmp", int_ftype_string_string,
6694                     BUILT_IN_STRCMP, "strcmp");
6695   builtin_function ("__builtin_strcpy", string_ftype_ptr_ptr,
6696                     BUILT_IN_STRCPY, "strcpy");
6697   builtin_function ("__builtin_strlen", strlen_ftype,
6698                     BUILT_IN_STRLEN, "strlen");
6699   builtin_function ("__builtin_sqrtf", float_ftype_float, 
6700                     BUILT_IN_FSQRT, "sqrtf");
6701   builtin_function ("__builtin_fsqrt", double_ftype_double,
6702                     BUILT_IN_FSQRT, NULL_PTR);
6703   builtin_function ("__builtin_sqrtl", ldouble_ftype_ldouble, 
6704                     BUILT_IN_FSQRT, "sqrtl");
6705   builtin_function ("__builtin_sinf", float_ftype_float, 
6706                     BUILT_IN_SIN, "sinf");
6707   builtin_function ("__builtin_sin", double_ftype_double, 
6708                     BUILT_IN_SIN, "sin");
6709   builtin_function ("__builtin_sinl", ldouble_ftype_ldouble, 
6710                     BUILT_IN_SIN, "sinl");
6711   builtin_function ("__builtin_cosf", float_ftype_float, 
6712                     BUILT_IN_COS, "cosf");
6713   builtin_function ("__builtin_cos", double_ftype_double, 
6714                     BUILT_IN_COS, "cos");
6715   builtin_function ("__builtin_cosl", ldouble_ftype_ldouble, 
6716                     BUILT_IN_COS, "cosl");
6717
6718   if (!flag_no_builtin)
6719     {
6720       builtin_function ("abs", int_ftype_int, BUILT_IN_ABS, NULL_PTR);
6721       builtin_function ("fabs", double_ftype_double, BUILT_IN_FABS, NULL_PTR);
6722       builtin_function ("labs", long_ftype_long, BUILT_IN_LABS, NULL_PTR);
6723       builtin_function ("fabsf", float_ftype_float, BUILT_IN_FABS, NULL_PTR);
6724       builtin_function ("fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
6725                         NULL_PTR);
6726       builtin_function ("memcpy", memcpy_ftype, BUILT_IN_MEMCPY, NULL_PTR);
6727       builtin_function ("memcmp", int_ftype_cptr_cptr_sizet, BUILT_IN_MEMCMP,
6728                         NULL_PTR);
6729       builtin_function ("strcmp", int_ftype_string_string, BUILT_IN_STRCMP,
6730                         NULL_PTR);
6731       builtin_function ("strcpy", string_ftype_ptr_ptr, BUILT_IN_STRCPY,
6732                         NULL_PTR);
6733       builtin_function ("strlen", strlen_ftype, BUILT_IN_STRLEN, NULL_PTR);
6734       builtin_function ("sqrtf", float_ftype_float, BUILT_IN_FSQRT, NULL_PTR);
6735       builtin_function ("sqrt", double_ftype_double, BUILT_IN_FSQRT, NULL_PTR);
6736       builtin_function ("sqrtl", ldouble_ftype_ldouble, BUILT_IN_FSQRT,
6737                         NULL_PTR);
6738       builtin_function ("sinf", float_ftype_float, BUILT_IN_SIN, NULL_PTR);
6739       builtin_function ("sin", double_ftype_double, BUILT_IN_SIN, NULL_PTR);
6740       builtin_function ("sinl", ldouble_ftype_ldouble, BUILT_IN_SIN, NULL_PTR);
6741       builtin_function ("cosf", float_ftype_float, BUILT_IN_COS, NULL_PTR);
6742       builtin_function ("cos", double_ftype_double, BUILT_IN_COS, NULL_PTR);
6743       builtin_function ("cosl", ldouble_ftype_ldouble, BUILT_IN_COS, NULL_PTR);
6744
6745       /* Declare these functions volatile
6746          to avoid spurious "control drops through" warnings.  */
6747       temp = builtin_function ("abort", void_ftype,
6748                                NOT_BUILT_IN, NULL_PTR);
6749       TREE_THIS_VOLATILE (temp) = 1;
6750       TREE_SIDE_EFFECTS (temp) = 1;
6751       /* Well, these are actually ANSI, but we can't set DECL_BUILT_IN on
6752          them...  */
6753       DECL_BUILT_IN_NONANSI (temp) = 1;
6754       temp = builtin_function ("exit", void_ftype_int,
6755                                NOT_BUILT_IN, NULL_PTR);
6756       TREE_THIS_VOLATILE (temp) = 1;
6757       TREE_SIDE_EFFECTS (temp) = 1;
6758       DECL_BUILT_IN_NONANSI (temp) = 1;
6759     }
6760
6761 #if 0
6762   /* Support for these has not been written in either expand_builtin
6763      or build_function_call.  */
6764   builtin_function ("__builtin_div", default_ftype, BUILT_IN_DIV, NULL_PTR);
6765   builtin_function ("__builtin_ldiv", default_ftype, BUILT_IN_LDIV, NULL_PTR);
6766   builtin_function ("__builtin_ffloor", double_ftype_double, BUILT_IN_FFLOOR,
6767                     NULL_PTR);
6768   builtin_function ("__builtin_fceil", double_ftype_double, BUILT_IN_FCEIL,
6769                     NULL_PTR);
6770   builtin_function ("__builtin_fmod", double_ftype_double_double,
6771                     BUILT_IN_FMOD, NULL_PTR);
6772   builtin_function ("__builtin_frem", double_ftype_double_double,
6773                     BUILT_IN_FREM, NULL_PTR);
6774   builtin_function ("__builtin_memset", ptr_ftype_ptr_int_int,
6775                     BUILT_IN_MEMSET, NULL_PTR);
6776   builtin_function ("__builtin_getexp", double_ftype_double, BUILT_IN_GETEXP,
6777                     NULL_PTR);
6778   builtin_function ("__builtin_getman", double_ftype_double, BUILT_IN_GETMAN,
6779                     NULL_PTR);
6780 #endif
6781
6782   /* C++ extensions */
6783
6784   unknown_type_node = make_node (UNKNOWN_TYPE);
6785   record_unknown_type (unknown_type_node, "unknown type");
6786
6787   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
6788   TREE_TYPE (unknown_type_node) = unknown_type_node;
6789
6790   TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
6791
6792   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6793      result.  */
6794   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6795   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6796
6797   /* This is for handling opaque types in signatures.  */
6798   opaque_type_node = copy_node (ptr_type_node);
6799   TYPE_MAIN_VARIANT (opaque_type_node) = opaque_type_node;
6800   record_builtin_type (RID_MAX, 0, opaque_type_node);
6801
6802   /* This is special for C++ so functions can be overloaded.  */
6803   wchar_type_node
6804     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (WCHAR_TYPE)));
6805   wchar_type_size = TYPE_PRECISION (wchar_type_node);
6806   signed_wchar_type_node = make_signed_type (wchar_type_size);
6807   unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
6808   wchar_type_node
6809     = TREE_UNSIGNED (wchar_type_node)
6810       ? unsigned_wchar_type_node
6811       : signed_wchar_type_node;
6812   record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
6813
6814   /* Artificial declaration of wchar_t -- can be bashed */
6815   wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
6816                                 wchar_type_node);
6817   pushdecl (wchar_decl_node);
6818
6819   /* This is for wide string constants.  */
6820   wchar_array_type_node
6821     = build_array_type (wchar_type_node, array_domain_type);
6822
6823   if (flag_vtable_thunks)
6824     {
6825       /* Make sure we get a unique function type, so we can give
6826          its pointer type a name.  (This wins for gdb.) */
6827       tree vfunc_type = make_node (FUNCTION_TYPE);
6828       TREE_TYPE (vfunc_type) = integer_type_node;
6829       TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6830       layout_type (vfunc_type);
6831
6832       vtable_entry_type = build_pointer_type (vfunc_type);
6833     }
6834   else
6835     {
6836       vtable_entry_type = make_lang_type (RECORD_TYPE);
6837       fields[0] = build_lang_field_decl (FIELD_DECL, delta_identifier,
6838                                          delta_type_node);
6839       fields[1] = build_lang_field_decl (FIELD_DECL, index_identifier,
6840                                          delta_type_node);
6841       fields[2] = build_lang_field_decl (FIELD_DECL, pfn_identifier,
6842                                          ptr_type_node);
6843       finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6844                            double_type_node);
6845
6846       /* Make this part of an invisible union.  */
6847       fields[3] = copy_node (fields[2]);
6848       TREE_TYPE (fields[3]) = delta_type_node;
6849       DECL_NAME (fields[3]) = delta2_identifier;
6850       DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6851       DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
6852       TREE_UNSIGNED (fields[3]) = 0;
6853       TREE_CHAIN (fields[2]) = fields[3];
6854       vtable_entry_type = build_qualified_type (vtable_entry_type,
6855                                                 TYPE_QUAL_CONST);
6856     }
6857   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
6858
6859   vtbl_type_node
6860     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
6861   layout_type (vtbl_type_node);
6862   vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
6863   record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
6864   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6865   layout_type (vtbl_ptr_type_node);
6866   record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
6867
6868   if (flag_vtable_thunks)
6869     {
6870       /* We need vlists only when using thunks; otherwise leave them
6871          as NULL_TREE. That way, it doesn't get into the way of the
6872          mangling.  */
6873       vlist_type_node = build_pointer_type (vtbl_ptr_type_node); 
6874       vlist_zero_node = build_int_2 (0, 0);
6875       TREE_TYPE (vlist_zero_node) = vlist_type_node; 
6876     }
6877
6878   /* Simplify life by making a "sigtable_entry_type".  Give its
6879      fields names so that the debugger can use them.  */
6880
6881   if (flag_handle_signatures)
6882     {
6883       sigtable_entry_type = make_lang_type (RECORD_TYPE);
6884       fields[0] = build_lang_field_decl (FIELD_DECL, tag_identifier,
6885                                          delta_type_node);
6886       fields[1] = build_lang_field_decl (FIELD_DECL, vb_off_identifier,
6887                                          delta_type_node);
6888       fields[2] = build_lang_field_decl (FIELD_DECL, delta_identifier,
6889                                          delta_type_node);
6890       fields[3] = build_lang_field_decl (FIELD_DECL, index_identifier,
6891                                          delta_type_node);
6892       fields[4] = build_lang_field_decl (FIELD_DECL, pfn_identifier,
6893                                          ptr_type_node);
6894
6895       /* Set the alignment to the max of the alignment of ptr_type_node and
6896          delta_type_node.  Double alignment wastes a word on the Sparc.  */
6897       finish_builtin_type (sigtable_entry_type, SIGTABLE_PTR_TYPE, fields, 4,
6898                            (TYPE_ALIGN (ptr_type_node) > TYPE_ALIGN (delta_type_node))
6899                            ? ptr_type_node
6900                            : delta_type_node);
6901
6902       /* Make this part of an invisible union.  */
6903       fields[5] = copy_node (fields[4]);
6904       TREE_TYPE (fields[5]) = delta_type_node;
6905       DECL_NAME (fields[5]) = vt_off_identifier;
6906       DECL_MODE (fields[5]) = TYPE_MODE (delta_type_node);
6907       DECL_SIZE (fields[5]) = TYPE_SIZE (delta_type_node);
6908       TREE_UNSIGNED (fields[5]) = 0;
6909       TREE_CHAIN (fields[4]) = fields[5];
6910
6911       sigtable_entry_type = build_qualified_type (sigtable_entry_type, 
6912                                                   TYPE_QUAL_CONST);
6913       record_builtin_type (RID_MAX, SIGTABLE_PTR_TYPE, sigtable_entry_type);
6914     }
6915
6916   std_node = build_decl (NAMESPACE_DECL, 
6917                          get_identifier (flag_honor_std ? "fake std":"std"),
6918                          void_type_node);
6919   pushdecl (std_node);
6920
6921   global_type_node = make_node (LANG_TYPE);
6922   record_unknown_type (global_type_node, "global type");
6923
6924   /* Now, C++.  */
6925   current_lang_name = lang_name_cplusplus;
6926
6927   {
6928     tree bad_alloc_type_node, newtype, deltype;
6929     if (flag_honor_std)
6930       push_namespace (get_identifier ("std"));
6931     bad_alloc_type_node = xref_tag
6932       (class_type_node, get_identifier ("bad_alloc"), 1);
6933     if (flag_honor_std)
6934       pop_namespace ();
6935     newtype = build_exception_variant
6936       (ptr_ftype_sizetype, build_tree_list (NULL_TREE, bad_alloc_type_node));
6937     deltype = build_exception_variant
6938       (void_ftype_ptr, build_tree_list (NULL_TREE, NULL_TREE));
6939     auto_function (ansi_opname[(int) NEW_EXPR], newtype, NOT_BUILT_IN);
6940     auto_function (ansi_opname[(int) VEC_NEW_EXPR], newtype, NOT_BUILT_IN);
6941     global_delete_fndecl
6942       = auto_function (ansi_opname[(int) DELETE_EXPR], deltype, NOT_BUILT_IN);
6943     auto_function (ansi_opname[(int) VEC_DELETE_EXPR], deltype, NOT_BUILT_IN);
6944   }
6945
6946   abort_fndecl
6947     = define_function ("__pure_virtual", void_ftype,
6948                        NOT_BUILT_IN, 0, 0);
6949
6950   /* Perform other language dependent initializations.  */
6951   init_class_processing ();
6952   init_init_processing ();
6953   init_search_processing ();
6954   if (flag_rtti)
6955     init_rtti_processing ();
6956
6957   if (flag_exceptions)
6958     init_exception_processing ();
6959   if (flag_no_inline)
6960     {
6961       flag_inline_functions = 0;
6962     }
6963
6964   if (! supports_one_only ())
6965     flag_weak = 0;
6966
6967   /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__.  */
6968   declare_function_name ();
6969
6970   /* Prepare to check format strings against argument lists.  */
6971   init_function_format_info ();
6972
6973   /* Show we use EH for cleanups.  */
6974   using_eh_for_cleanups ();
6975
6976   print_error_function = lang_print_error_function;
6977   lang_get_alias_set = &c_get_alias_set;
6978   valid_lang_attribute = cp_valid_lang_attribute;
6979
6980   /* Maintain consistency.  Perhaps we should just complain if they
6981      say -fwritable-strings?  */
6982   if (flag_writable_strings)
6983     flag_const_strings = 0;
6984 }
6985
6986 /* Function to print any language-specific context for an error message.  */
6987
6988 static void
6989 lang_print_error_function (file)
6990      char *file;
6991 {
6992   default_print_error_function (file);
6993   maybe_print_template_context ();
6994 }
6995
6996 /* Make a definition for a builtin function named NAME and whose data type
6997    is TYPE.  TYPE should be a function type with argument types.
6998    FUNCTION_CODE tells later passes how to compile calls to this function.
6999    See tree.h for its possible values.
7000
7001    If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
7002    the name to be called if we can't opencode the function.  */
7003
7004 tree
7005 define_function (name, type, function_code, pfn, library_name)
7006      const char *name;
7007      tree type;
7008      enum built_in_function function_code;
7009      void (*pfn) PROTO((tree));
7010      const char *library_name;
7011 {
7012   tree decl = build_lang_decl (FUNCTION_DECL, get_identifier (name), type);
7013   DECL_EXTERNAL (decl) = 1;
7014   TREE_PUBLIC (decl) = 1;
7015   DECL_ARTIFICIAL (decl) = 1;
7016
7017   my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
7018   DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
7019
7020   /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
7021      we cannot change DECL_ASSEMBLER_NAME until we have installed this
7022      function in the namespace.  */
7023   if (pfn) (*pfn) (decl);
7024   if (library_name)
7025     DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
7026   make_function_rtl (decl);
7027   if (function_code != NOT_BUILT_IN)
7028     {
7029       DECL_BUILT_IN (decl) = 1;
7030       DECL_FUNCTION_CODE (decl) = function_code;
7031     }
7032   return decl;
7033 }
7034 \f
7035 /* When we call finish_struct for an anonymous union, we create
7036    default copy constructors and such.  But, an anonymous union
7037    shouldn't have such things; this function undoes the damage to the
7038    anonymous union type T.
7039
7040    (The reason that we create the synthesized methods is that we don't
7041    distinguish `union { int i; }' from `typedef union { int i; } U'.
7042    The first is an anonymous union; the second is just an ordinary
7043    union type.)  */
7044
7045 void
7046 fixup_anonymous_union (t)
7047      tree t;
7048 {
7049   tree *q;
7050
7051   /* Wipe out memory of synthesized methods */
7052   TYPE_HAS_CONSTRUCTOR (t) = 0;
7053   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
7054   TYPE_HAS_INIT_REF (t) = 0;
7055   TYPE_HAS_CONST_INIT_REF (t) = 0;
7056   TYPE_HAS_ASSIGN_REF (t) = 0;
7057   TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
7058
7059   /* Splice the implicitly generated functions out of the TYPE_METHODS
7060      list.  */
7061   q = &TYPE_METHODS (t);
7062   while (*q)
7063     {
7064       if (DECL_ARTIFICIAL (*q))
7065         *q = TREE_CHAIN (*q);
7066       else
7067         q = &TREE_CHAIN (*q);
7068     }
7069
7070   /* ANSI C++ June 5 1992 WP 9.5.3.  Anonymous unions may not have
7071      function members.  */
7072   if (TYPE_METHODS (t))
7073     error ("an anonymous union cannot have function members");
7074 }
7075
7076 /* Make sure that a declaration with no declarator is well-formed, i.e.
7077    just defines a tagged type or anonymous union.
7078
7079    Returns the type defined, if any.  */
7080
7081 tree
7082 check_tag_decl (declspecs)
7083      tree declspecs;
7084 {
7085   int found_type = 0;
7086   tree ob_modifier = NULL_TREE;
7087   register tree link;
7088   register tree t = NULL_TREE;
7089
7090   for (link = declspecs; link; link = TREE_CHAIN (link))
7091     {
7092       register tree value = TREE_VALUE (link);
7093
7094       if (TYPE_P (value))
7095         {
7096           ++found_type;
7097
7098           if (IS_AGGR_TYPE (value) || TREE_CODE (value) == ENUMERAL_TYPE)
7099             {
7100               my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
7101               t = value;
7102             }
7103         }
7104       else if (value == ridpointers[(int) RID_FRIEND])
7105         {
7106           if (current_class_type == NULL_TREE
7107               || current_scope () != current_class_type)
7108             ob_modifier = value;
7109         }
7110       else if (value == ridpointers[(int) RID_STATIC]
7111                || value == ridpointers[(int) RID_EXTERN]
7112                || value == ridpointers[(int) RID_AUTO]
7113                || value == ridpointers[(int) RID_REGISTER]
7114                || value == ridpointers[(int) RID_INLINE]
7115                || value == ridpointers[(int) RID_VIRTUAL]
7116                || value == ridpointers[(int) RID_CONST]
7117                || value == ridpointers[(int) RID_VOLATILE]
7118                || value == ridpointers[(int) RID_EXPLICIT])
7119         ob_modifier = value;
7120     }
7121
7122   if (found_type > 1)
7123     error ("multiple types in one declaration");
7124
7125   /* Inside a class, we might be in a friend or access declaration.
7126      Until we have a good way of detecting the latter, don't warn.  */
7127   if (t == NULL_TREE && ! current_class_type)
7128     pedwarn ("declaration does not declare anything");
7129
7130   /* Check for an anonymous union.  We're careful
7131      accessing TYPE_IDENTIFIER because some built-in types, like
7132      pointer-to-member types, do not have TYPE_NAME.  */
7133   else if (t && TREE_CODE (t) == UNION_TYPE
7134            && TYPE_NAME (t)
7135            && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
7136     {
7137       /* Anonymous unions are objects, so they can have specifiers.  */;
7138       SET_ANON_UNION_TYPE_P (t);
7139     }
7140
7141   else if (ob_modifier)
7142     {
7143       if (ob_modifier == ridpointers[(int) RID_INLINE]
7144           || ob_modifier == ridpointers[(int) RID_VIRTUAL])
7145         cp_error ("`%D' can only be specified for functions", ob_modifier);
7146       else if (ob_modifier == ridpointers[(int) RID_FRIEND])
7147         cp_error ("`%D' can only be specified inside a class", ob_modifier);
7148       else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
7149         cp_error ("`%D' can only be specified for constructors",
7150                   ob_modifier);
7151       else
7152         cp_error ("`%D' can only be specified for objects and functions",
7153                   ob_modifier);
7154     }
7155
7156   return t;
7157 }
7158
7159 /* Called when a declaration is seen that contains no names to declare.
7160    If its type is a reference to a structure, union or enum inherited
7161    from a containing scope, shadow that tag name for the current scope
7162    with a forward reference.
7163    If its type defines a new named structure or union
7164    or defines an enum, it is valid but we need not do anything here.
7165    Otherwise, it is an error.
7166
7167    C++: may have to grok the declspecs to learn about static,
7168    complain for anonymous unions.  */
7169
7170 void
7171 shadow_tag (declspecs)
7172      tree declspecs;
7173 {
7174   tree t = check_tag_decl (declspecs);
7175
7176   if (t)
7177     maybe_process_partial_specialization (t);
7178
7179   /* This is where the variables in an anonymous union are
7180      declared.  An anonymous union declaration looks like:
7181      union { ... } ;
7182      because there is no declarator after the union, the parser
7183      sends that declaration here.  */
7184   if (t && ANON_UNION_TYPE_P (t))
7185     {
7186       fixup_anonymous_union (t);
7187
7188       if (TYPE_FIELDS (t))
7189         {
7190           tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
7191                                       NULL_TREE);
7192           finish_anon_union (decl);
7193         }
7194     }
7195 }
7196 \f
7197 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
7198
7199 tree
7200 groktypename (typename)
7201      tree typename;
7202 {
7203   if (TREE_CODE (typename) != TREE_LIST)
7204     return typename;
7205   return grokdeclarator (TREE_VALUE (typename),
7206                          TREE_PURPOSE (typename),
7207                          TYPENAME, 0, NULL_TREE);
7208 }
7209
7210 /* Decode a declarator in an ordinary declaration or data definition.
7211    This is called as soon as the type information and variable name
7212    have been parsed, before parsing the initializer if any.
7213    Here we create the ..._DECL node, fill in its type,
7214    and put it on the list of decls for the current context.
7215    The ..._DECL node is returned as the value.
7216
7217    Exception: for arrays where the length is not specified,
7218    the type is left null, to be filled in by `cp_finish_decl'.
7219
7220    Function definitions do not come here; they go to start_function
7221    instead.  However, external and forward declarations of functions
7222    do go through here.  Structure field declarations are done by
7223    grokfield and not through here.  */
7224
7225 /* Set this to zero to debug not using the temporary obstack
7226    to parse initializers.  */
7227 int debug_temp_inits = 1;
7228
7229 tree
7230 start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
7231      tree declarator, declspecs;
7232      int initialized;
7233      tree attributes, prefix_attributes;
7234 {
7235   register tree decl;
7236   register tree type, tem;
7237   tree context;
7238   extern int have_extern_spec;
7239   extern int used_extern_spec;
7240   tree attrlist;
7241
7242 #if 0
7243   /* See code below that used this.  */
7244   int init_written = initialized;
7245 #endif
7246
7247   /* This should only be done once on the top most decl.  */
7248   if (have_extern_spec && !used_extern_spec)
7249     {
7250       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
7251                                   declspecs);
7252       used_extern_spec = 1;
7253     }
7254
7255   if (attributes || prefix_attributes)
7256     attrlist = build_scratch_list (attributes, prefix_attributes);
7257   else
7258     attrlist = NULL_TREE;
7259
7260   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
7261                          attrlist);
7262                          
7263   if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
7264     return NULL_TREE;
7265
7266   type = TREE_TYPE (decl);
7267
7268   if (type == error_mark_node)
7269     return NULL_TREE;
7270
7271   /* Don't lose if destructors must be executed at file-level.  */
7272   if (! processing_template_decl && TREE_STATIC (decl)
7273       && TYPE_NEEDS_DESTRUCTOR (complete_type (type))
7274       && !TREE_PERMANENT (decl))
7275     {
7276       push_obstacks (&permanent_obstack, &permanent_obstack);
7277       decl = copy_node (decl);
7278       if (TREE_CODE (type) == ARRAY_TYPE)
7279         {
7280           tree itype = TYPE_DOMAIN (type);
7281           if (itype && ! TREE_PERMANENT (itype))
7282             {
7283               itype = build_index_type (copy_to_permanent (TYPE_MAX_VALUE (itype)));
7284               type = build_cplus_array_type (TREE_TYPE (type), itype);
7285               TREE_TYPE (decl) = type;
7286             }
7287         }
7288       pop_obstacks ();
7289     }
7290
7291   context
7292     = (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
7293       ? DECL_CLASS_CONTEXT (decl)
7294       : DECL_CONTEXT (decl);
7295
7296   if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
7297       && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
7298     {
7299       /* When parsing the initializer, lookup should use the object's
7300          namespace. */
7301       push_decl_namespace (context);
7302     }
7303
7304   /* We are only interested in class contexts, later. */
7305   if (context && TREE_CODE (context) == NAMESPACE_DECL)
7306     context = NULL_TREE;
7307
7308   if (initialized)
7309     /* Is it valid for this decl to have an initializer at all?
7310        If not, set INITIALIZED to zero, which will indirectly
7311        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
7312     switch (TREE_CODE (decl))
7313       {
7314       case TYPE_DECL:
7315         /* typedef foo = bar  means give foo the same type as bar.
7316            We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
7317            Any other case of an initialization in a TYPE_DECL is an error.  */
7318         if (pedantic || list_length (declspecs) > 1)
7319           {
7320             cp_error ("typedef `%D' is initialized", decl);
7321             initialized = 0;
7322           }
7323         break;
7324
7325       case FUNCTION_DECL:
7326         cp_error ("function `%#D' is initialized like a variable", decl);
7327         initialized = 0;
7328         break;
7329
7330       default:
7331         if (! processing_template_decl)
7332           {
7333             if (type != error_mark_node)
7334               {
7335                 if (TYPE_SIZE (type) != NULL_TREE
7336                     && ! TREE_CONSTANT (TYPE_SIZE (type)))
7337                   {
7338                     cp_error
7339                       ("variable-sized object `%D' may not be initialized",
7340                        decl);
7341                     initialized = 0;
7342                   }
7343
7344                 if (TREE_CODE (type) == ARRAY_TYPE
7345                     && TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
7346                   {
7347                     cp_error
7348                       ("elements of array `%#D' have incomplete type", decl);
7349                     initialized = 0;
7350                   }
7351               }
7352           }
7353       }
7354
7355   if (initialized)
7356     {
7357       if (! toplevel_bindings_p ()
7358           && DECL_EXTERNAL (decl))
7359         cp_warning ("declaration of `%#D' has `extern' and is initialized",
7360                     decl);
7361       DECL_EXTERNAL (decl) = 0;
7362       if (toplevel_bindings_p ())
7363         TREE_STATIC (decl) = 1;
7364
7365       /* Tell `pushdecl' this is an initialized decl
7366          even though we don't yet have the initializer expression.
7367          Also tell `cp_finish_decl' it may store the real initializer.  */
7368       DECL_INITIAL (decl) = error_mark_node;
7369     }
7370
7371 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
7372   SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
7373 #endif
7374   
7375   /* Set attributes here so if duplicate decl, will have proper attributes.  */
7376   cplus_decl_attributes (decl, attributes, prefix_attributes);
7377
7378   if (context && TYPE_SIZE (complete_type (context)) != NULL_TREE)
7379     {
7380       push_nested_class (context, 2);
7381
7382       if (TREE_CODE (decl) == VAR_DECL)
7383         {
7384           tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
7385           if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
7386             cp_error ("`%#D' is not a static member of `%#T'", decl, context);
7387           else
7388             {
7389               if (DECL_CONTEXT (field) != context)
7390                 {
7391                   cp_pedwarn ("ANSI C++ does not permit `%T::%D' to be defined as `%T::%D'",
7392                               DECL_CONTEXT (field), DECL_NAME (decl),
7393                               context, DECL_NAME (decl));
7394                   DECL_CONTEXT (decl) = DECL_CONTEXT (field);
7395                 }
7396               /* Static data member are tricky; an in-class initialization
7397                  still doesn't provide a definition, so the in-class
7398                  declaration will have DECL_EXTERNAL set, but will have an
7399                  initialization.  Thus, duplicate_decls won't warn
7400                  about this situation, and so we check here.  */
7401               if (DECL_INITIAL (decl) && DECL_INITIAL (field))
7402                 cp_error ("duplicate initialization of %D", decl);
7403               if (duplicate_decls (decl, field))
7404                 decl = field;
7405             }
7406         }
7407       else
7408         {
7409           tree field = check_classfn (context, decl);
7410           if (field && duplicate_decls (decl, field))
7411             decl = field;
7412         }
7413
7414       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
7415       DECL_IN_AGGR_P (decl) = 0;
7416       if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl)) 
7417           || CLASSTYPE_USE_TEMPLATE (context))
7418         {
7419           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
7420           /* [temp.expl.spec] An explicit specialization of a static data
7421              member of a template is a definition if the declaration
7422              includes an initializer; otherwise, it is a declaration.
7423
7424              We check for processing_specialization so this only applies
7425              to the new specialization syntax.  */
7426           if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
7427             DECL_EXTERNAL (decl) = 1;
7428         }
7429
7430       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
7431         cp_pedwarn ("declaration of `%#D' outside of class is not definition",
7432                     decl);
7433     }
7434
7435   /* Add this decl to the current binding level, but not if it
7436      comes from another scope, e.g. a static member variable.
7437      TEM may equal DECL or it may be a previous decl of the same name.  */
7438   
7439   if ((TREE_CODE (decl) != PARM_DECL && DECL_CONTEXT (decl) != NULL_TREE 
7440        /* Definitions of namespace members outside their namespace are
7441           possible. */
7442        && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
7443       || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
7444       || TREE_CODE (type) == LANG_TYPE
7445       /* The declaration of template specializations does not affect
7446          the functions available for overload resolution, so we do not
7447          call pushdecl.  */
7448       || (TREE_CODE (decl) == FUNCTION_DECL
7449           && DECL_TEMPLATE_SPECIALIZATION (decl)))
7450     tem = decl;
7451   else
7452     tem = pushdecl (decl);
7453
7454   if (processing_template_decl)
7455     {
7456       if (! current_function_decl)
7457         tem = push_template_decl (tem);
7458       else if (minimal_parse_mode)
7459         DECL_VINDEX (tem)
7460             = build_min_nt (DECL_STMT, copy_to_permanent (declarator),
7461                             copy_to_permanent (declspecs),
7462                             NULL_TREE);
7463     }
7464
7465
7466 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7467   /* Tell the back-end to use or not use .common as appropriate.  If we say
7468      -fconserve-space, we want this to save .data space, at the expense of
7469      wrong semantics.  If we say -fno-conserve-space, we want this to
7470      produce errors about redefs; to do this we force variables into the
7471      data segment.  */
7472   DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
7473 #endif
7474   
7475   if (! processing_template_decl)
7476     start_decl_1 (tem);
7477
7478   /* Corresponding pop_obstacks is done in `cp_finish_decl'.  */
7479   push_obstacks_nochange ();
7480
7481 #if 0
7482   /* We have no way of knowing whether the initializer will need to be
7483      evaluated at run-time or not until we've parsed it, so let's just put
7484      it in the permanent obstack.  (jason) */
7485   if (init_written
7486       && ! (TREE_CODE (tem) == PARM_DECL
7487             || (TREE_READONLY (tem)
7488                 && (TREE_CODE (tem) == VAR_DECL
7489                     || TREE_CODE (tem) == FIELD_DECL))))
7490     {
7491       /* When parsing and digesting the initializer,
7492          use temporary storage.  Do this even if we will ignore the value.  */
7493       if (toplevel_bindings_p () && debug_temp_inits)
7494         {
7495           if (processing_template_decl
7496               || TYPE_NEEDS_CONSTRUCTING (type)
7497               || TREE_CODE (type) == REFERENCE_TYPE)
7498             /* In this case, the initializer must lay down in permanent
7499                storage, since it will be saved until `finish_file' is run.   */
7500             ;
7501           else
7502             temporary_allocation ();
7503         }
7504     }
7505 #endif
7506
7507   return tem;
7508 }
7509
7510 void
7511 start_decl_1 (decl)
7512      tree decl;
7513 {
7514   tree type = TREE_TYPE (decl);
7515   int initialized = (DECL_INITIAL (decl) != NULL_TREE);
7516
7517   if (type == error_mark_node)
7518     return;
7519
7520   /* If this type of object needs a cleanup, and control may
7521      jump past it, make a new binding level so that it is cleaned
7522      up only when it is initialized first.  */
7523   if (TYPE_NEEDS_DESTRUCTOR (type)
7524       && current_binding_level->more_cleanups_ok == 0)
7525     pushlevel_temporary (1);
7526
7527   if (initialized)
7528     /* Is it valid for this decl to have an initializer at all?
7529        If not, set INITIALIZED to zero, which will indirectly
7530        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
7531     {
7532       /* Don't allow initializations for incomplete types except for
7533          arrays which might be completed by the initialization.  */
7534       if (TYPE_SIZE (complete_type (type)) != NULL_TREE)
7535         ;                       /* A complete type is ok.  */
7536       else if (TREE_CODE (type) != ARRAY_TYPE)
7537         {
7538           cp_error ("variable `%#D' has initializer but incomplete type",
7539                     decl);
7540           initialized = 0;
7541           type = TREE_TYPE (decl) = error_mark_node;
7542         }
7543       else if (TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
7544         {
7545           if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
7546             cp_error ("elements of array `%#D' have incomplete type", decl);
7547           /* else we already gave an error in start_decl.  */
7548           initialized = 0;
7549         }
7550     }
7551
7552   if (!initialized
7553       && TREE_CODE (decl) != TYPE_DECL
7554       && TREE_CODE (decl) != TEMPLATE_DECL
7555       && IS_AGGR_TYPE (type) && ! DECL_EXTERNAL (decl))
7556     {
7557       if ((! processing_template_decl || ! uses_template_parms (type))
7558           && TYPE_SIZE (complete_type (type)) == NULL_TREE)
7559         {
7560           cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
7561                  decl);
7562           /* Change the type so that assemble_variable will give
7563              DECL an rtl we can live with: (mem (const_int 0)).  */
7564           type = TREE_TYPE (decl) = error_mark_node;
7565         }
7566       else
7567         {
7568           /* If any base type in the hierarchy of TYPE needs a constructor,
7569              then we set initialized to 1.  This way any nodes which are
7570              created for the purposes of initializing this aggregate
7571              will live as long as it does.  This is necessary for global
7572              aggregates which do not have their initializers processed until
7573              the end of the file.  */
7574           initialized = TYPE_NEEDS_CONSTRUCTING (type);
7575         }
7576     }
7577
7578 #if 0
7579   /* We don't do this yet for GNU C++.  */
7580   /* For a local variable, define the RTL now.  */
7581   if (! toplevel_bindings_p ()
7582       /* But not if this is a duplicate decl
7583          and we preserved the rtl from the previous one
7584          (which may or may not happen).  */
7585       && DECL_RTL (tem) == NULL_RTX)
7586     {
7587       if (TYPE_SIZE (TREE_TYPE (tem)) != NULL_TREE)
7588         expand_decl (tem);
7589       else if (TREE_CODE (TREE_TYPE (tem)) == ARRAY_TYPE
7590                && DECL_INITIAL (tem) != NULL_TREE)
7591         expand_decl (tem);
7592     }
7593 #endif
7594
7595   if (! initialized)
7596     DECL_INITIAL (decl) = NULL_TREE;
7597 }
7598
7599 /* Handle initialization of references.
7600    These three arguments are from `cp_finish_decl', and have the
7601    same meaning here that they do there.
7602
7603    Quotes on semantics can be found in ARM 8.4.3.  */
7604
7605 static void
7606 grok_reference_init (decl, type, init)
7607      tree decl, type, init;
7608 {
7609   tree tmp;
7610
7611   if (init == NULL_TREE)
7612     {
7613       if ((DECL_LANG_SPECIFIC (decl) == 0
7614            || DECL_IN_AGGR_P (decl) == 0)
7615           && ! DECL_THIS_EXTERN (decl))
7616         {
7617           cp_error ("`%D' declared as reference but not initialized", decl);
7618           if (TREE_CODE (decl) == VAR_DECL)
7619             SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
7620         }
7621       return;
7622     }
7623
7624   if (init == error_mark_node)
7625     return;
7626
7627   if (TREE_CODE (type) == REFERENCE_TYPE
7628       && TREE_CODE (init) == CONSTRUCTOR)
7629     {
7630       cp_error ("ANSI C++ forbids use of initializer list to initialize reference `%D'", decl);
7631       return;
7632     }
7633
7634   if (TREE_CODE (init) == TREE_LIST)
7635     init = build_compound_expr (init);
7636
7637   if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
7638     init = convert_from_reference (init);
7639
7640   if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
7641       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
7642     {
7643       /* Note: default conversion is only called in very special cases.  */
7644       init = default_conversion (init);
7645     }
7646
7647   tmp = convert_to_reference
7648     (type, init, CONV_IMPLICIT,
7649      LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
7650
7651   if (tmp == error_mark_node)
7652     goto fail;
7653   else if (tmp != NULL_TREE)
7654     {
7655       init = tmp;
7656       DECL_INITIAL (decl) = save_expr (init);
7657     }
7658   else
7659     {
7660       cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
7661       goto fail;
7662     }
7663
7664   /* ?? Can this be optimized in some cases to
7665      hand back the DECL_INITIAL slot??  */
7666   if (TYPE_SIZE (TREE_TYPE (type)))
7667     {
7668       init = convert_from_reference (decl);
7669       if (TREE_PERMANENT (decl))
7670         init = copy_to_permanent (init);
7671       SET_DECL_REFERENCE_SLOT (decl, init);
7672     }
7673
7674   if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
7675     {
7676       expand_static_init (decl, DECL_INITIAL (decl));
7677       DECL_INITIAL (decl) = NULL_TREE;
7678     }
7679   return;
7680
7681  fail:
7682   if (TREE_CODE (decl) == VAR_DECL)
7683     SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
7684   return;
7685 }
7686
7687 /* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7688    mucking with forces it does not comprehend (i.e. initialization with a
7689    constructor).  If we are at global scope and won't go into COMMON, fill
7690    it in with a dummy CONSTRUCTOR to force the variable into .data;
7691    otherwise we can use error_mark_node.  */
7692
7693 static tree
7694 obscure_complex_init (decl, init)
7695      tree decl, init;
7696 {
7697   if (! flag_no_inline && TREE_STATIC (decl))
7698     {
7699       if (extract_init (decl, init))
7700         return NULL_TREE;
7701     }
7702
7703 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7704   if (toplevel_bindings_p () && ! DECL_COMMON (decl))
7705     DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7706                                  NULL_TREE);
7707   else
7708 #endif
7709     DECL_INITIAL (decl) = error_mark_node;
7710
7711   return init;
7712 }
7713
7714 /* Issue an error message if DECL is an uninitialized const variable.  */
7715
7716 static void
7717 check_for_uninitialized_const_var (decl)
7718      tree decl;
7719 {
7720   tree type = TREE_TYPE (decl);
7721
7722   /* ``Unless explicitly declared extern, a const object does not have
7723      external linkage and must be initialized. ($8.4; $12.1)'' ARM
7724      7.1.6 */
7725   if (TREE_CODE (decl) == VAR_DECL
7726       && TREE_CODE (type) != REFERENCE_TYPE
7727       && CP_TYPE_CONST_P (type)
7728       && !TYPE_NEEDS_CONSTRUCTING (type)
7729       && !DECL_INITIAL (decl))
7730     cp_error ("uninitialized const `%D'", decl);
7731 }
7732
7733 /* Finish processing of a declaration;
7734    install its line number and initial value.
7735    If the length of an array type is not known before,
7736    it must be determined now, from the initial value, or it is an error.
7737
7738    Call `pop_obstacks' iff NEED_POP is nonzero.
7739
7740    For C++, `cp_finish_decl' must be fairly evasive:  it must keep initializers
7741    for aggregates that have constructors alive on the permanent obstack,
7742    so that the global initializing functions can be written at the end.
7743
7744    INIT0 holds the value of an initializer that should be allowed to escape
7745    the normal rules.
7746
7747    FLAGS is LOOKUP_ONLYCONVERTING is the = init syntax was used, else 0
7748    if the (init) syntax was used.
7749
7750    For functions that take default parameters, DECL points to its
7751    "maximal" instantiation.  `cp_finish_decl' must then also declared its
7752    subsequently lower and lower forms of instantiation, checking for
7753    ambiguity as it goes.  This can be sped up later.  */
7754
7755 void
7756 cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
7757      tree decl, init;
7758      tree asmspec_tree;
7759      int need_pop;
7760      int flags;
7761 {
7762   register tree type;
7763   tree cleanup = NULL_TREE, ttype = NULL_TREE;
7764   int was_incomplete;
7765   int temporary = allocation_temporary_p ();
7766   char *asmspec = NULL;
7767   int was_readonly = 0;
7768   int already_used = 0;
7769   tree core_type;
7770
7771   /* If this is 0, then we did not change obstacks.  */
7772   if (! decl)
7773     {
7774       if (init)
7775         error ("assignment (not initialization) in declaration");
7776       return;
7777     }
7778
7779   /* If a name was specified, get the string.  */
7780   if (asmspec_tree)
7781       asmspec = TREE_STRING_POINTER (asmspec_tree);
7782
7783   if (init && TREE_CODE (init) == NAMESPACE_DECL)
7784     {
7785       cp_error ("Cannot initialize `%D' to namespace `%D'",
7786                 decl, init);
7787       init = NULL_TREE;
7788     }
7789
7790   if (current_class_type
7791       && DECL_REAL_CONTEXT (decl) == current_class_type
7792       && TYPE_BEING_DEFINED (current_class_type)
7793       && (DECL_INITIAL (decl) || init))
7794     DECL_DEFINED_IN_CLASS_P (decl) = 1;
7795
7796   if (TREE_CODE (decl) == VAR_DECL 
7797       && DECL_CONTEXT (decl)
7798       && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
7799       && DECL_CONTEXT (decl) != current_namespace
7800       && init)
7801     {
7802       /* Leave the namespace of the object. */
7803       pop_decl_namespace ();
7804     }
7805
7806   /* If the type of the thing we are declaring either has
7807      a constructor, or has a virtual function table pointer,
7808      AND its initialization was accepted by `start_decl',
7809      then we stayed on the permanent obstack through the
7810      declaration, otherwise, changed obstacks as GCC would.  */
7811
7812   type = TREE_TYPE (decl);
7813
7814   if (type == error_mark_node)
7815     {
7816       if (toplevel_bindings_p () && temporary)
7817         end_temporary_allocation ();
7818
7819       return;
7820     }
7821
7822   if (TYPE_HAS_MUTABLE_P (type))
7823     TREE_READONLY (decl) = 0;
7824   
7825   if (processing_template_decl)
7826     {
7827       if (init && DECL_INITIAL (decl))
7828         DECL_INITIAL (decl) = init;
7829       if (minimal_parse_mode && ! DECL_ARTIFICIAL (decl))
7830         {
7831           tree stmt = DECL_VINDEX (decl);
7832           /* If the decl is declaring a member of a local class (in a
7833              template function), the DECL_VINDEX will either be NULL,
7834              or it will be an actual virtual function index, not a
7835              DECL_STMT.  */
7836           if (stmt != NULL_TREE && TREE_CODE (stmt) == DECL_STMT)
7837             {
7838               DECL_VINDEX (decl) = NULL_TREE;
7839               TREE_OPERAND (stmt, 2) = copy_to_permanent (init);
7840               add_tree (stmt);
7841             }
7842         }
7843
7844       goto finish_end0;
7845     }
7846   /* Take care of TYPE_DECLs up front.  */
7847   if (TREE_CODE (decl) == TYPE_DECL)
7848     {
7849       if (init && DECL_INITIAL (decl))
7850         {
7851           /* typedef foo = bar; store the type of bar as the type of foo.  */
7852           TREE_TYPE (decl) = type = TREE_TYPE (init);
7853           DECL_INITIAL (decl) = init = NULL_TREE;
7854         }
7855       if (type != error_mark_node
7856           && IS_AGGR_TYPE (type) && DECL_NAME (decl))
7857         {
7858           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7859             cp_warning ("shadowing previous type declaration of `%#D'", decl);
7860           set_identifier_type_value (DECL_NAME (decl), type);
7861           CLASSTYPE_GOT_SEMICOLON (type) = 1;
7862         }
7863       GNU_xref_decl (current_function_decl, decl);
7864
7865       /* If we have installed this as the canonical typedef for this
7866          type, and that type has not been defined yet, delay emitting
7867          the debug information for it, as we will emit it later.  */
7868       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7869           && TYPE_SIZE (TREE_TYPE (decl)) == NULL_TREE)
7870         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7871
7872       rest_of_decl_compilation (decl, NULL_PTR,
7873                                 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
7874       goto finish_end;
7875     }
7876   if (TREE_CODE (decl) != FUNCTION_DECL)
7877     {
7878       ttype = target_type (type);
7879     }
7880
7881   if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
7882       && TYPE_NEEDS_CONSTRUCTING (type))
7883     {
7884
7885       /* Currently, GNU C++ puts constants in text space, making them
7886          impossible to initialize.  In the future, one would hope for
7887          an operating system which understood the difference between
7888          initialization and the running of a program.  */
7889       was_readonly = 1;
7890       TREE_READONLY (decl) = 0;
7891     }
7892
7893   if (TREE_CODE (decl) == FIELD_DECL)
7894     {
7895       if (init && init != error_mark_node)
7896         my_friendly_assert (TREE_PERMANENT (init), 147);
7897
7898       if (asmspec)
7899         {
7900           /* This must override the asm specifier which was placed
7901              by grokclassfn.  Lay this out fresh.  */
7902           DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
7903           DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7904           make_decl_rtl (decl, asmspec, 0);
7905         }
7906     }
7907   /* If `start_decl' didn't like having an initialization, ignore it now.  */
7908   else if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7909     init = NULL_TREE;
7910   else if (DECL_EXTERNAL (decl))
7911     ;
7912   else if (TREE_CODE (type) == REFERENCE_TYPE
7913            || (TYPE_LANG_SPECIFIC (type) && IS_SIGNATURE_REFERENCE (type)))
7914     {
7915       if (TREE_STATIC (decl))
7916         make_decl_rtl (decl, NULL_PTR,
7917                        toplevel_bindings_p ()
7918                        || pseudo_global_level_p ());
7919       grok_reference_init (decl, type, init);
7920       init = NULL_TREE;
7921     }
7922
7923   GNU_xref_decl (current_function_decl, decl);
7924
7925   core_type = type;
7926   while (TREE_CODE (core_type) == ARRAY_TYPE)
7927     core_type = TREE_TYPE (core_type);
7928   
7929   if (TREE_CODE (decl) == FIELD_DECL)
7930     ;
7931   else if (TREE_CODE (decl) == CONST_DECL)
7932     {
7933       my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7934
7935       DECL_INITIAL (decl) = init;
7936
7937       /* This will keep us from needing to worry about our obstacks.  */
7938       my_friendly_assert (init != NULL_TREE, 149);
7939       init = NULL_TREE;
7940     }
7941   else if (init)
7942     {
7943       if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7944         {
7945           if (TREE_CODE (type) == ARRAY_TYPE)
7946             init = digest_init (type, init, (tree *) 0);
7947           else if (TREE_CODE (init) == CONSTRUCTOR
7948                    && TREE_HAS_CONSTRUCTOR (init))
7949             {
7950               if (TYPE_NON_AGGREGATE_CLASS (type))
7951                 {
7952                   cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7953                             decl);
7954                   init = error_mark_node;
7955                 }
7956               else
7957                 goto dont_use_constructor;
7958             }
7959         }
7960       else
7961         {
7962         dont_use_constructor:
7963           if (TREE_CODE (init) != TREE_VEC)
7964             init = store_init_value (decl, init);
7965         }
7966
7967       if (init)
7968         /* We must hide the initializer so that expand_decl
7969            won't try to do something it does not understand.  */
7970         init = obscure_complex_init (decl, init);
7971     }
7972   else if (DECL_EXTERNAL (decl))
7973     ;
7974   else if (TREE_CODE_CLASS (TREE_CODE (type)) == 't'
7975            && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7976     {
7977       if (! TYPE_NEEDS_CONSTRUCTING (core_type))
7978         {
7979           if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
7980             cp_error ("structure `%D' with uninitialized const members", decl);
7981           if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
7982             cp_error ("structure `%D' with uninitialized reference members",
7983                       decl);
7984         }
7985
7986       check_for_uninitialized_const_var (decl);
7987
7988       if (TYPE_SIZE (type) != NULL_TREE
7989           && TYPE_NEEDS_CONSTRUCTING (type))
7990         init = obscure_complex_init (decl, NULL_TREE);
7991
7992     }
7993   else
7994     check_for_uninitialized_const_var (decl);
7995   
7996   /* For top-level declaration, the initial value was read in
7997      the temporary obstack.  MAXINDEX, rtl, etc. to be made below
7998      must go in the permanent obstack; but don't discard the
7999      temporary data yet.  */
8000
8001   if (toplevel_bindings_p () && temporary)
8002     end_temporary_allocation ();
8003
8004   /* Deduce size of array from initialization, if not already known.  */
8005
8006   if (TREE_CODE (type) == ARRAY_TYPE
8007       && TYPE_DOMAIN (type) == NULL_TREE
8008       && TREE_CODE (decl) != TYPE_DECL)
8009     {
8010       int do_default
8011         = (TREE_STATIC (decl)
8012            /* Even if pedantic, an external linkage array
8013               may have incomplete type at first.  */
8014            ? pedantic && ! DECL_EXTERNAL (decl)
8015            : !DECL_EXTERNAL (decl));
8016       tree initializer = init ? init : DECL_INITIAL (decl);
8017       int failure = complete_array_type (type, initializer, do_default);
8018
8019       if (failure == 1)
8020         cp_error ("initializer fails to determine size of `%D'", decl);
8021
8022       if (failure == 2)
8023         {
8024           if (do_default)
8025             cp_error ("array size missing in `%D'", decl);
8026           /* If a `static' var's size isn't known, make it extern as
8027              well as static, so it does not get allocated.  If it's not
8028              `static', then don't mark it extern; finish_incomplete_decl
8029              will give it a default size and it will get allocated.  */
8030           else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
8031             DECL_EXTERNAL (decl) = 1;
8032         }
8033
8034       if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
8035           && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
8036                               integer_zero_node))
8037         cp_error ("zero-size array `%D'", decl);
8038
8039       layout_decl (decl, 0);
8040     }
8041
8042   if (TREE_CODE (decl) == VAR_DECL)
8043     {
8044       if (DECL_SIZE (decl) == NULL_TREE
8045           && TYPE_SIZE (complete_type (TREE_TYPE (decl))) != NULL_TREE)
8046         layout_decl (decl, 0);
8047
8048       if (TREE_STATIC (decl) && DECL_SIZE (decl) == NULL_TREE)
8049         {
8050           /* A static variable with an incomplete type:
8051              that is an error if it is initialized.
8052              Otherwise, let it through, but if it is not `extern'
8053              then it may cause an error message later.  */
8054           if (DECL_INITIAL (decl) != NULL_TREE)
8055             cp_error ("storage size of `%D' isn't known", decl);
8056           init = NULL_TREE;
8057         }
8058       else if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
8059         {
8060           /* An automatic variable with an incomplete type: that is an error.
8061              Don't talk about array types here, since we took care of that
8062              message in grokdeclarator.  */
8063           cp_error ("storage size of `%D' isn't known", decl);
8064           TREE_TYPE (decl) = error_mark_node;
8065         }
8066       else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
8067         /* Let debugger know it should output info for this type.  */
8068         note_debug_info_needed (ttype);
8069
8070       if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
8071         note_debug_info_needed (DECL_CONTEXT (decl));
8072
8073       if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
8074           && DECL_SIZE (decl) != NULL_TREE
8075           && ! TREE_CONSTANT (DECL_SIZE (decl)))
8076         {
8077           if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
8078             constant_expression_warning (DECL_SIZE (decl));
8079           else
8080             cp_error ("storage size of `%D' isn't constant", decl);
8081         }
8082
8083       if (! DECL_EXTERNAL (decl) && TYPE_NEEDS_DESTRUCTOR (type)
8084           /* Cleanups for static variables are handled by `finish_file'.  */
8085           && ! TREE_STATIC (decl))
8086         {
8087           int yes = suspend_momentary ();
8088           cleanup = maybe_build_cleanup (decl);
8089           resume_momentary (yes);
8090         }
8091     }
8092   /* PARM_DECLs get cleanups, too.  */
8093   else if (TREE_CODE (decl) == PARM_DECL && TYPE_NEEDS_DESTRUCTOR (type))
8094     {
8095       if (temporary)
8096         end_temporary_allocation ();
8097       cleanup = maybe_build_cleanup (decl);
8098       if (temporary)
8099         resume_temporary_allocation ();
8100     }
8101
8102   /* Output the assembler code and/or RTL code for variables and functions,
8103      unless the type is an undefined structure or union.
8104      If not, it will get done when the type is completed.  */
8105
8106   was_incomplete = (DECL_SIZE (decl) == NULL_TREE);
8107
8108   if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
8109       || TREE_CODE (decl) == RESULT_DECL)
8110     {
8111       /* ??? FIXME: What about nested classes?  */
8112       int toplev = toplevel_bindings_p () || pseudo_global_level_p ();
8113       int was_temp
8114         = (TREE_STATIC (decl) && TYPE_NEEDS_DESTRUCTOR (type)
8115            && allocation_temporary_p ());
8116
8117       if (was_temp)
8118         end_temporary_allocation ();
8119
8120       /* Static data in a function with comdat linkage also has comdat
8121          linkage.  */
8122       if (TREE_CODE (decl) == VAR_DECL
8123           && TREE_STATIC (decl)
8124           /* Don't mess with __FUNCTION__.  */
8125           && ! TREE_ASM_WRITTEN (decl)
8126           && current_function_decl
8127           && DECL_CONTEXT (decl) == current_function_decl
8128           && (DECL_THIS_INLINE (current_function_decl)
8129               || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
8130           && TREE_PUBLIC (current_function_decl))
8131         {
8132           /* Rather than try to get this right with inlining, we suppress
8133              inlining of such functions.  */
8134           current_function_cannot_inline
8135             = "function with static variable cannot be inline";
8136
8137           /* If flag_weak, we don't need to mess with this, as we can just
8138              make the function weak, and let it refer to its unique local
8139              copy.  This works because we don't allow the function to be
8140              inlined.  */
8141           if (! flag_weak)
8142             {
8143               if (DECL_INTERFACE_KNOWN (current_function_decl))
8144                 {
8145                   TREE_PUBLIC (decl) = 1;
8146                   DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
8147                 }
8148               else if (DECL_INITIAL (decl) == NULL_TREE
8149                        || DECL_INITIAL (decl) == error_mark_node)
8150                 {
8151                   TREE_PUBLIC (decl) = 1;
8152                   DECL_COMMON (decl) = 1;
8153                 }
8154               /* else we lose. We can only do this if we can use common,
8155                  which we can't if it has been initialized.  */
8156
8157               if (TREE_PUBLIC (decl))
8158                 DECL_ASSEMBLER_NAME (decl)
8159                   = build_static_name (current_function_decl, DECL_NAME (decl));
8160               else if (! DECL_ARTIFICIAL (decl))
8161                 {
8162                   cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
8163                   cp_warning_at ("  you can work around this by removing the initializer", decl);
8164                 }
8165             }
8166         }
8167
8168       else if (TREE_CODE (decl) == VAR_DECL
8169                && DECL_LANG_SPECIFIC (decl)
8170                && DECL_COMDAT (decl))
8171         /* Set it up again; we might have set DECL_INITIAL since the
8172            last time.  */
8173         comdat_linkage (decl);
8174
8175       if (TREE_CODE (decl) == VAR_DECL && DECL_VIRTUAL_P (decl))
8176         make_decl_rtl (decl, NULL_PTR, toplev);
8177       else if (TREE_CODE (decl) == VAR_DECL
8178                && TREE_READONLY (decl)
8179                && DECL_INITIAL (decl) != NULL_TREE
8180                && DECL_INITIAL (decl) != error_mark_node
8181                && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
8182         {
8183           DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
8184
8185           if (asmspec)
8186             DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
8187
8188           if (! toplev
8189               && TREE_STATIC (decl)
8190               && ! TREE_SIDE_EFFECTS (decl)
8191               && ! TREE_PUBLIC (decl)
8192               && ! DECL_EXTERNAL (decl)
8193               && ! TYPE_NEEDS_DESTRUCTOR (type)
8194               && DECL_MODE (decl) != BLKmode)
8195             {
8196               /* If this variable is really a constant, then fill its DECL_RTL
8197                  slot with something which won't take up storage.
8198                  If something later should take its address, we can always give
8199                  it legitimate RTL at that time.  */
8200               DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
8201               store_expr (DECL_INITIAL (decl), DECL_RTL (decl), 0);
8202               TREE_ASM_WRITTEN (decl) = 1;
8203             }
8204           else if (toplev && ! TREE_PUBLIC (decl))
8205             {
8206               /* If this is a static const, change its apparent linkage
8207                  if it belongs to a #pragma interface.  */
8208               if (!interface_unknown)
8209                 {
8210                   TREE_PUBLIC (decl) = 1;
8211                   DECL_EXTERNAL (decl) = interface_only;
8212                 }
8213               make_decl_rtl (decl, asmspec, toplev);
8214             }
8215           else
8216             rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
8217         }
8218       else if (TREE_CODE (decl) == VAR_DECL
8219                && DECL_LANG_SPECIFIC (decl)
8220                && DECL_IN_AGGR_P (decl))
8221         {
8222           if (TREE_STATIC (decl))
8223             {
8224               if (init == NULL_TREE
8225 #ifdef DEFAULT_STATIC_DEFS
8226                   /* If this code is dead, then users must
8227                      explicitly declare static member variables
8228                      outside the class def'n as well.  */
8229                   && TYPE_NEEDS_CONSTRUCTING (type)
8230 #endif
8231                   )
8232                 {
8233                   DECL_EXTERNAL (decl) = 1;
8234                   make_decl_rtl (decl, asmspec, 1);
8235                 }
8236               else
8237                 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
8238             }
8239           else
8240             /* Just a constant field.  Should not need any rtl.  */
8241             goto finish_end0;
8242         }
8243       else
8244         rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
8245
8246       if (was_temp)
8247         resume_temporary_allocation ();
8248
8249       if (type != error_mark_node
8250           && TYPE_LANG_SPECIFIC (core_type)
8251           && CLASSTYPE_ABSTRACT_VIRTUALS (core_type))
8252         abstract_virtuals_error (decl, core_type);
8253       else if ((TREE_CODE (type) == FUNCTION_TYPE
8254                 || TREE_CODE (type) == METHOD_TYPE)
8255                && TYPE_LANG_SPECIFIC (TREE_TYPE (type))
8256                && CLASSTYPE_ABSTRACT_VIRTUALS (TREE_TYPE (type)))
8257         abstract_virtuals_error (decl, TREE_TYPE (type));
8258
8259       if (TYPE_LANG_SPECIFIC (core_type) && IS_SIGNATURE (core_type))
8260         signature_error (decl, core_type);
8261       else if ((TREE_CODE (type) == FUNCTION_TYPE
8262                 || TREE_CODE (type) == METHOD_TYPE)
8263                && TYPE_LANG_SPECIFIC (TREE_TYPE (type))
8264                && IS_SIGNATURE (TREE_TYPE (type)))
8265         signature_error (decl, TREE_TYPE (type));
8266
8267       if (TREE_CODE (decl) == FUNCTION_DECL)
8268         ;
8269       else if (DECL_EXTERNAL (decl)
8270                && ! (DECL_LANG_SPECIFIC (decl)
8271                      && DECL_NOT_REALLY_EXTERN (decl)))
8272         {
8273           if (init)
8274             DECL_INITIAL (decl) = init;
8275         }
8276       else if (TREE_STATIC (decl) && type != error_mark_node)
8277         {
8278           /* Cleanups for static variables are handled by `finish_file'.  */
8279           if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
8280               || TYPE_NEEDS_DESTRUCTOR (type))
8281             expand_static_init (decl, init);
8282         }
8283       else if (! toplev)
8284         {
8285           /* This is a declared decl which must live until the
8286              end of the binding contour.  It may need a cleanup.  */
8287
8288           /* Recompute the RTL of a local array now
8289              if it used to be an incomplete type.  */
8290           if (was_incomplete && ! TREE_STATIC (decl))
8291             {
8292               /* If we used it already as memory, it must stay in memory.  */
8293               TREE_ADDRESSABLE (decl) = TREE_USED (decl);
8294               /* If it's still incomplete now, no init will save it.  */
8295               if (DECL_SIZE (decl) == NULL_TREE)
8296                 DECL_INITIAL (decl) = NULL_TREE;
8297               expand_decl (decl);
8298             }
8299           else if (! TREE_ASM_WRITTEN (decl)
8300                    && (TYPE_SIZE (type) != NULL_TREE
8301                        || TREE_CODE (type) == ARRAY_TYPE))
8302             {
8303               /* Do this here, because we did not expand this decl's
8304                  rtl in start_decl.  */
8305               if (DECL_RTL (decl) == NULL_RTX)
8306                 expand_decl (decl);
8307               else if (cleanup)
8308                 {
8309                   /* XXX: Why don't we use decl here?  */
8310                   /* Ans: Because it was already expanded? */
8311                   if (! expand_decl_cleanup (NULL_TREE, cleanup))
8312                     cp_error ("parser lost in parsing declaration of `%D'",
8313                               decl);
8314                   /* Cleanup used up here.  */
8315                   cleanup = NULL_TREE;
8316                 }
8317             }
8318
8319           if (current_binding_level->is_for_scope)
8320             {
8321               struct binding_level *outer 
8322                 = current_binding_level->level_chain;
8323
8324               /* Check to see if the same name is already bound at
8325                  the outer level, either because it was directly declared,
8326                  or because a dead for-decl got preserved.  In either case,
8327                  the code would not have been valid under the ARM
8328                  scope rules, so clear is_for_scope for the
8329                  current_binding_level.
8330
8331                  Otherwise, we need to preserve the temp slot for decl
8332                  to last into the outer binding level.  */
8333
8334               tree outer_binding 
8335                 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
8336               
8337               if (outer_binding && BINDING_LEVEL (outer_binding) == outer
8338                   && (TREE_CODE (BINDING_VALUE (outer_binding)) 
8339                       == VAR_DECL)
8340                   && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
8341                 {
8342                   BINDING_VALUE (outer_binding)
8343                     = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
8344                   current_binding_level->is_for_scope = 0;
8345                 }
8346               else if (DECL_IN_MEMORY_P (decl))
8347                 preserve_temp_slots (DECL_RTL (decl));
8348             }
8349
8350           expand_start_target_temps ();
8351
8352           if (DECL_SIZE (decl) && type != error_mark_node)
8353             {
8354               /* Compute and store the initial value.  */
8355               expand_decl_init (decl);
8356               already_used = TREE_USED (decl) || TREE_USED (type);
8357
8358               if (init || TYPE_NEEDS_CONSTRUCTING (type))
8359                 {
8360                   emit_line_note (DECL_SOURCE_FILE (decl),
8361                                   DECL_SOURCE_LINE (decl));
8362                   expand_aggr_init (decl, init, flags);
8363                 }
8364
8365               /* Set this to 0 so we can tell whether an aggregate which
8366                  was initialized was ever used.  Don't do this if it has a
8367                  destructor, so we don't complain about the 'resource
8368                  allocation is initialization' idiom.  */
8369               /* Now set attribute((unused)) on types so decls of
8370                  that type will be marked used. (see TREE_USED, above.) 
8371                  This avoids the warning problems this particular code
8372                  tried to work around. */
8373
8374               if (TYPE_NEEDS_CONSTRUCTING (type)
8375                   && ! already_used
8376                   && cleanup == NULL_TREE
8377                   && DECL_NAME (decl))
8378                 TREE_USED (decl) = 0;
8379
8380               if (already_used)
8381                 TREE_USED (decl) = 1;
8382             }
8383
8384           /* Cleanup any temporaries needed for the initial value.  */
8385           expand_end_target_temps ();
8386
8387           if (DECL_SIZE (decl) && type != error_mark_node)
8388             {
8389               /* Store the cleanup, if there was one.  */
8390               if (cleanup)
8391                 {
8392                   if (! expand_decl_cleanup (decl, cleanup))
8393                     cp_error ("parser lost in parsing declaration of `%D'",
8394                               decl);
8395                 }
8396             }
8397         }
8398     finish_end0:
8399
8400       /* Undo call to `pushclass' that was done in `start_decl'
8401          due to initialization of qualified member variable.
8402          I.e., Foo::x = 10;  */
8403       {
8404         tree context = DECL_REAL_CONTEXT (decl);
8405         if (context
8406             && TREE_CODE_CLASS (TREE_CODE (context)) == 't'
8407             && (TREE_CODE (decl) == VAR_DECL
8408                 /* We also have a pushclass done that we need to undo here
8409                    if we're at top level and declare a method.  */
8410                 || TREE_CODE (decl) == FUNCTION_DECL)
8411             /* If size hasn't been set, we're still defining it,
8412                and therefore inside the class body; don't pop
8413                the binding level..  */
8414             && TYPE_SIZE (context) != NULL_TREE
8415             && context == current_class_type)
8416           pop_nested_class ();
8417       }
8418     }
8419
8420  finish_end:
8421
8422   /* If requested, warn about definitions of large data objects.  */
8423
8424   if (warn_larger_than
8425       && ! processing_template_decl
8426       && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
8427       && !DECL_EXTERNAL (decl))
8428     {
8429       register tree decl_size = DECL_SIZE (decl);
8430
8431       if (decl_size && TREE_CODE (decl_size) == INTEGER_CST)
8432         {
8433           unsigned units = TREE_INT_CST_LOW (decl_size) / BITS_PER_UNIT;
8434
8435           if (units > larger_than_size)
8436             warning_with_decl (decl, "size of `%s' is %u bytes", units);
8437         }
8438     }
8439
8440   if (need_pop)
8441     {
8442       /* Resume permanent allocation, if not within a function.  */
8443       /* The corresponding push_obstacks_nochange is in start_decl,
8444          start_method, groktypename, and in grokfield.  */
8445       pop_obstacks ();
8446     }
8447
8448   if (was_readonly)
8449     TREE_READONLY (decl) = 1;
8450 }
8451
8452 /* This is here for a midend callback from c-common.c */
8453
8454 void
8455 finish_decl (decl, init, asmspec_tree)
8456      tree decl, init;
8457      tree asmspec_tree;
8458 {
8459   cp_finish_decl (decl, init, asmspec_tree, 1, 0);
8460 }
8461
8462 void
8463 expand_static_init (decl, init)
8464      tree decl;
8465      tree init;
8466 {
8467   tree oldstatic = value_member (decl, static_aggregates);
8468
8469   if (oldstatic)
8470     {
8471       if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
8472         cp_error ("multiple initializations given for `%D'", decl);
8473     }
8474   else if (! toplevel_bindings_p ())
8475     {
8476       /* Emit code to perform this initialization but once.  */
8477       tree temp;
8478
8479       /* Remember this information until end of file.  */
8480       push_obstacks (&permanent_obstack, &permanent_obstack);
8481
8482       /* Emit code to perform this initialization but once.  This code
8483          looks like:
8484
8485            static int temp = 0;
8486            if (!temp) {
8487              // Do initialization.
8488              temp = 1;
8489              // Register variable for destruction at end of program.
8490            }
8491
8492          Note that the `temp' variable is only set to 1 *after* the
8493          initialization is complete.  This ensures that an exception,
8494          thrown during the construction, will cause the variable to
8495          reinitialized when we pass through this code again, as per:
8496          
8497            [stmt.dcl]
8498
8499            If the initialization exits by throwing an exception, the
8500            initialization is not complete, so it will be tried again
8501            the next time control enters the declaration.
8502
8503          In theory, this process should be thread-safe, too; multiple
8504          threads should not be able to initialize the variable more
8505          than once.  We don't yet attempt to ensure thread-safety.  */
8506       temp = get_temp_name (integer_type_node, 1);
8507       rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
8508
8509       /* Begin the conditional initialization.  */
8510       expand_start_cond (build_binary_op (EQ_EXPR, temp,
8511                                           integer_zero_node), 0);
8512       expand_start_target_temps ();
8513
8514       /* Do the initialization itself.  */
8515       if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
8516           || (init && TREE_CODE (init) == TREE_LIST))
8517         {
8518           expand_aggr_init (decl, init, 0);
8519           do_pending_stack_adjust ();
8520         }
8521       else if (init)
8522         expand_assignment (decl, init, 0, 0);
8523
8524       /* Set TEMP to 1.  */
8525       expand_assignment (temp, integer_one_node, 0, 0);
8526
8527       /* Cleanup any temporaries needed for the initial value.  If
8528          destroying one of the temporaries causes an exception to be
8529          thrown, then the object itself has still been fully
8530          constructed.  */
8531       expand_end_target_temps ();
8532
8533       /* Use atexit to register a function for destroying this static
8534          variable.  */
8535       if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
8536         {
8537           tree cleanup, fcall;
8538           static tree Atexit = 0;
8539           int saved_flag_access_control;
8540
8541           if (Atexit == 0)
8542             {
8543               tree atexit_fndecl, PFV, pfvlist;
8544               /* Remember this information until end of file.  */
8545               push_obstacks (&permanent_obstack, &permanent_obstack);
8546               PFV = build_pointer_type (build_function_type
8547                                         (void_type_node, void_list_node));
8548
8549               pfvlist = tree_cons (NULL_TREE, PFV, void_list_node);
8550
8551               push_lang_context (lang_name_c);
8552               atexit_fndecl
8553                 = builtin_function ("atexit",
8554                                     build_function_type (void_type_node,
8555                                                          pfvlist),
8556                                     NOT_BUILT_IN, NULL_PTR);
8557               mark_used (atexit_fndecl);
8558               Atexit = default_conversion (atexit_fndecl);
8559               pop_lang_context ();
8560               pop_obstacks ();
8561             }
8562               
8563           /* Call build_cleanup before we enter the anonymous function
8564              so that any access checks will be done relative to the
8565              current scope, rather than the scope of the anonymous
8566              function.  */
8567           build_cleanup (decl);
8568
8569           /* Now start the function.  */
8570           cleanup = start_anon_func ();
8571
8572           /* Now, recompute the cleanup.  It may contain SAVE_EXPRs
8573              that refer to the original function, rather than the
8574              anonymous one.  That will make the back-end think that
8575              nested functions are in use, which causes confusion.  */
8576           saved_flag_access_control = flag_access_control;
8577           flag_access_control = 0;
8578           fcall = build_cleanup (decl);
8579           flag_access_control = saved_flag_access_control;
8580
8581           /* Finish off the function.  */
8582           expand_expr_stmt (fcall);
8583           end_anon_func ();
8584
8585           /* Call atexit with the cleanup function.  */
8586           mark_addressable (cleanup);
8587           cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
8588           fcall = build_function_call (Atexit, 
8589                                        expr_tree_cons (NULL_TREE, 
8590                                                        cleanup, 
8591                                                        NULL_TREE));
8592           expand_expr_stmt (fcall);
8593         }
8594
8595       expand_end_cond ();
8596       /* Resume old (possibly temporary) allocation.  */
8597       pop_obstacks ();
8598     }
8599   else
8600     {
8601       /* This code takes into account memory allocation policy of
8602          `start_decl'.  Namely, if TYPE_NEEDS_CONSTRUCTING does not
8603          hold for this object, then we must make permanent the storage
8604          currently in the temporary obstack.  */
8605       if (!TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
8606         preserve_initializer ();
8607       static_aggregates = perm_tree_cons (init, decl, static_aggregates);
8608     }
8609 }
8610 \f
8611 /* Make TYPE a complete type based on INITIAL_VALUE.
8612    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8613    2 if there was no information (in which case assume 0 if DO_DEFAULT).  */
8614
8615 int
8616 complete_array_type (type, initial_value, do_default)
8617      tree type, initial_value;
8618      int do_default;
8619 {
8620   register tree maxindex = NULL_TREE;
8621   int value = 0;
8622   
8623   /* Allocate on the same obstack as TYPE.  */
8624   push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8625   
8626   if (initial_value)
8627     {
8628       /* Note MAXINDEX  is really the maximum index,
8629          one less than the size.  */
8630       if (TREE_CODE (initial_value) == STRING_CST)
8631         {
8632           int eltsize
8633             = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8634           maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8635                                    / eltsize) - 1, 0);
8636         }
8637       else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8638         {
8639           tree elts = CONSTRUCTOR_ELTS (initial_value);
8640           maxindex = size_binop (MINUS_EXPR, integer_zero_node, size_one_node);
8641           for (; elts; elts = TREE_CHAIN (elts))
8642             {
8643               if (TREE_PURPOSE (elts))
8644                 maxindex = TREE_PURPOSE (elts);
8645               else
8646                 maxindex = size_binop (PLUS_EXPR, maxindex, size_one_node);
8647             }
8648           maxindex = copy_node (maxindex);
8649         }
8650       else
8651         {
8652           /* Make an error message unless that happened already.  */
8653           if (initial_value != error_mark_node)
8654             value = 1;
8655           else
8656             initial_value = NULL_TREE;
8657
8658           /* Prevent further error messages.  */
8659           maxindex = build_int_2 (0, 0);
8660         }
8661     }
8662
8663   if (!maxindex)
8664     {
8665       if (do_default)
8666         maxindex = build_int_2 (0, 0);
8667       value = 2;
8668     }
8669
8670   if (maxindex)
8671     {
8672       tree itype;
8673       tree domain;
8674
8675       domain = build_index_type (maxindex);
8676       TYPE_DOMAIN (type) = domain;
8677
8678       if (! TREE_TYPE (maxindex))
8679         TREE_TYPE (maxindex) = domain;
8680       if (initial_value)
8681         itype = TREE_TYPE (initial_value);
8682       else
8683         itype = NULL;
8684       if (itype && !TYPE_DOMAIN (itype))
8685         TYPE_DOMAIN (itype) = domain;
8686       /* The type of the main variant should never be used for arrays
8687          of different sizes.  It should only ever be completed with the
8688          size of the array.  */
8689       if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
8690         TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
8691     }
8692
8693   pop_obstacks();
8694   
8695   /* Lay out the type now that we can get the real answer.  */
8696
8697   layout_type (type);
8698
8699   return value;
8700 }
8701 \f
8702 /* Return zero if something is declared to be a member of type
8703    CTYPE when in the context of CUR_TYPE.  STRING is the error
8704    message to print in that case.  Otherwise, quietly return 1.  */
8705
8706 static int
8707 member_function_or_else (ctype, cur_type, string)
8708      tree ctype, cur_type;
8709      const char *string;
8710 {
8711   if (ctype && ctype != cur_type)
8712     {
8713       error (string, TYPE_NAME_STRING (ctype));
8714       return 0;
8715     }
8716   return 1;
8717 }
8718 \f
8719 /* Subroutine of `grokdeclarator'.  */
8720
8721 /* Generate errors possibly applicable for a given set of specifiers.
8722    This is for ARM $7.1.2.  */
8723
8724 static void
8725 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8726      tree object;
8727      const char *type;
8728      int virtualp, quals, friendp, raises, inlinep;
8729 {
8730   if (virtualp)
8731     cp_error ("`%D' declared as a `virtual' %s", object, type);
8732   if (inlinep)
8733     cp_error ("`%D' declared as an `inline' %s", object, type);
8734   if (quals)
8735     cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
8736               object, type);
8737   if (friendp)
8738     cp_error_at ("invalid friend declaration", object);
8739   if (raises)
8740     cp_error_at ("invalid exception specifications", object);
8741 }
8742
8743 /* CTYPE is class type, or null if non-class.
8744    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8745    or METHOD_TYPE.
8746    DECLARATOR is the function's name.
8747    VIRTUALP is truthvalue of whether the function is virtual or not.
8748    FLAGS are to be passed through to `grokclassfn'.
8749    QUALS are qualifiers indicating whether the function is `const'
8750    or `volatile'.
8751    RAISES is a list of exceptions that this function can raise.
8752    CHECK is 1 if we must find this method in CTYPE, 0 if we should
8753    not look, and -1 if we should not call `grokclassfn' at all.  
8754
8755    Returns `NULL_TREE' if something goes wrong, after issuing
8756    applicable error messages.  */
8757
8758 static tree
8759 grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
8760             raises, check, friendp, publicp, inlinep, funcdef_flag,
8761             template_count, in_namespace)
8762      tree ctype, type;
8763      tree declarator;
8764      tree orig_declarator;
8765      int virtualp;
8766      enum overload_flags flags;
8767      tree quals, raises;
8768      int check, friendp, publicp, inlinep, funcdef_flag, template_count;
8769      tree in_namespace;
8770 {
8771   tree cname, decl;
8772   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8773   int has_default_arg = 0;
8774   tree t;
8775
8776   if (ctype)
8777     cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8778       ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8779   else
8780     cname = NULL_TREE;
8781
8782   if (raises)
8783     {
8784       type = build_exception_variant (type, raises);
8785     }
8786
8787   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8788   /* Propagate volatile out from type to decl. */
8789   if (TYPE_VOLATILE (type))
8790     TREE_THIS_VOLATILE (decl) = 1;
8791
8792   /* If this decl has namespace scope, set that up.  */
8793   if (in_namespace)
8794     set_decl_namespace (decl, in_namespace, friendp);
8795   else if (publicp && ! ctype)
8796     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8797
8798   /* `main' and builtins have implicit 'C' linkage.  */
8799   if ((MAIN_NAME_P (declarator)
8800        || (IDENTIFIER_LENGTH (declarator) > 10
8801            && IDENTIFIER_POINTER (declarator)[0] == '_'
8802            && IDENTIFIER_POINTER (declarator)[1] == '_'
8803            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8804       && current_lang_name == lang_name_cplusplus
8805       && ctype == NULL_TREE
8806       /* NULL_TREE means global namespace.  */
8807       && DECL_CONTEXT (decl) == NULL_TREE)
8808     DECL_LANGUAGE (decl) = lang_c;
8809
8810   /* Should probably propagate const out from type to decl I bet (mrs).  */
8811   if (staticp)
8812     {
8813       DECL_STATIC_FUNCTION_P (decl) = 1;
8814       DECL_CONTEXT (decl) = ctype;
8815     }
8816
8817   if (ctype)
8818     DECL_CLASS_CONTEXT (decl) = ctype;
8819
8820   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8821     {
8822       if (processing_template_decl)
8823         error ("cannot declare `main' to be a template");
8824       if (inlinep)
8825         error ("cannot declare `main' to be inline");
8826       else if (! publicp)
8827         error ("cannot declare `main' to be static");
8828       inlinep = 0;
8829       publicp = 1;
8830     }
8831
8832   /* Members of anonymous types and local classes have no linkage; make
8833      them internal.  */
8834   if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
8835                 || hack_decl_function_context (TYPE_MAIN_DECL (ctype))))
8836     publicp = 0;
8837
8838   if (publicp)
8839     {
8840       /* [basic.link]: A name with no linkage (notably, the name of a class
8841          or enumeration declared in a local scope) shall not be used to
8842          declare an entity with linkage.
8843
8844          Only check this for public decls for now.  */
8845       t = no_linkage_check (TREE_TYPE (decl));
8846       if (t)
8847         {
8848           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8849             {
8850               if (DECL_LANGUAGE (decl) == lang_c)
8851                 /* Allow this; it's pretty common in C.  */;
8852               else
8853                 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8854                             decl);
8855             }
8856           else
8857             cp_pedwarn ("non-local function `%#D' uses local type `%T'",
8858                         decl, t);
8859         }
8860     }
8861
8862   TREE_PUBLIC (decl) = publicp;
8863   if (! publicp)
8864     {
8865       DECL_INTERFACE_KNOWN (decl) = 1;
8866       DECL_NOT_REALLY_EXTERN (decl) = 1;
8867     }
8868
8869   if (inlinep)
8870     DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8871
8872   DECL_EXTERNAL (decl) = 1;
8873   if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8874     {
8875       cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8876                 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8877       quals = NULL_TREE;
8878     }
8879
8880   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8881     grok_op_properties (decl, virtualp, check < 0);
8882
8883   if (ctype && hack_decl_function_context (decl))
8884     DECL_NO_STATIC_CHAIN (decl) = 1;
8885
8886   for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8887     if (TREE_PURPOSE (t)
8888         && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8889       {
8890         has_default_arg = 1;
8891         break;
8892       }
8893
8894   if (friendp
8895       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8896     {
8897       if (funcdef_flag)
8898         cp_error
8899           ("defining explicit specialization `%D' in friend declaration",
8900            orig_declarator);
8901       else
8902         {
8903           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8904             {
8905               /* Something like `template <class T> friend void f<T>()'.  */
8906               cp_error ("template-id `%D' in declaration of primary template", 
8907                         orig_declarator);
8908               return NULL_TREE;
8909             }
8910
8911
8912           /* A friend declaration of the form friend void f<>().  Record
8913              the information in the TEMPLATE_ID_EXPR.  */
8914           SET_DECL_IMPLICIT_INSTANTIATION (decl);
8915           DECL_TEMPLATE_INFO (decl)
8916             = perm_tree_cons (TREE_OPERAND (orig_declarator, 0),
8917                               TREE_OPERAND (orig_declarator, 1),
8918                               NULL_TREE);
8919
8920           if (has_default_arg)
8921             {
8922               cp_error ("default arguments are not allowed in declaration of friend template specialization `%D'",
8923                         decl);
8924               return NULL_TREE;
8925             }
8926
8927           if (inlinep)
8928             {
8929               cp_error ("`inline' is not allowed in declaration of friend template specialization `%D'", 
8930                         decl);
8931               return NULL_TREE;
8932             }
8933         }
8934     }
8935
8936   if (has_default_arg)
8937     add_defarg_fn (decl);
8938
8939   /* Plain overloading: will not be grok'd by grokclassfn.  */
8940   if (! ctype && ! processing_template_decl
8941       && DECL_LANGUAGE (decl) != lang_c
8942       && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
8943     set_mangled_name_for_decl (decl);
8944
8945   if (funcdef_flag)
8946     /* Make the init_value nonzero so pushdecl knows this is not
8947        tentative.  error_mark_node is replaced later with the BLOCK.  */
8948     DECL_INITIAL (decl) = error_mark_node;
8949
8950   /* Caller will do the rest of this.  */
8951   if (check < 0)
8952     return decl;
8953
8954   if (check && funcdef_flag)
8955     DECL_INITIAL (decl) = error_mark_node;
8956
8957   if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
8958     {
8959       tree tmp;
8960       /* Just handle constructors here.  We could do this
8961          inside the following if stmt, but I think
8962          that the code is more legible by breaking this
8963          case out.  See comments below for what each of
8964          the following calls is supposed to do.  */
8965       DECL_CONSTRUCTOR_P (decl) = 1;
8966
8967       grokclassfn (ctype, decl, flags, quals);
8968
8969       decl = check_explicit_specialization (orig_declarator, decl,
8970                                             template_count, 
8971                                             2 * (funcdef_flag != 0) + 
8972                                             4 * (friendp != 0));
8973
8974       if (decl == error_mark_node)
8975         return NULL_TREE;
8976
8977       maybe_vlist_ctor_wrapper (decl, funcdef_flag);
8978
8979       if ((! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8980           && check)
8981         {
8982           tmp = check_classfn (ctype, decl);
8983
8984           if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8985             tmp = DECL_TEMPLATE_RESULT(tmp);
8986
8987           if (tmp && DECL_ARTIFICIAL (tmp))
8988             cp_error ("definition of implicitly-declared `%D'", tmp);
8989           if (tmp && duplicate_decls (decl, tmp))
8990             return tmp;
8991         }
8992       if (! grok_ctor_properties (ctype, decl))
8993         return NULL_TREE;
8994     }
8995   else
8996     {
8997       tree tmp;
8998
8999       /* Function gets the ugly name, field gets the nice one.
9000          This call may change the type of the function (because
9001          of default parameters)!  */
9002       if (ctype != NULL_TREE)
9003         grokclassfn (ctype, decl, flags, quals);
9004
9005       decl = check_explicit_specialization (orig_declarator, decl,
9006                                             template_count, 
9007                                             2 * (funcdef_flag != 0) + 
9008                                             4 * (friendp != 0));
9009       if (decl == error_mark_node)
9010         return NULL_TREE;
9011
9012       if (ctype != NULL_TREE
9013           && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
9014           && check)
9015         {
9016           tmp = check_classfn (ctype, decl);
9017
9018           if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
9019             tmp = DECL_TEMPLATE_RESULT (tmp);
9020               
9021           if (tmp && DECL_STATIC_FUNCTION_P (tmp)
9022               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
9023             {
9024               /* Remove the `this' parm added by grokclassfn.
9025                  XXX Isn't this done in start_function, too?  */
9026               revert_static_member_fn (&decl, NULL, NULL);
9027               last_function_parms = TREE_CHAIN (last_function_parms);
9028             }
9029           if (tmp && DECL_ARTIFICIAL (tmp))
9030             cp_error ("definition of implicitly-declared `%D'", tmp);
9031           if (tmp)
9032             {
9033               /* Attempt to merge the declarations.  This can fail, in
9034                  the case of some illegal specialization declarations.  */
9035               if (!duplicate_decls (decl, tmp))
9036                 cp_error ("no `%#D' member function declared in class `%T'",
9037                           decl, ctype);
9038               return tmp;
9039             }
9040         }
9041
9042       if (ctype == NULL_TREE || check)
9043         return decl;
9044
9045       if (virtualp)
9046         {
9047           DECL_VIRTUAL_P (decl) = 1;
9048           if (DECL_VINDEX (decl) == NULL_TREE)
9049             DECL_VINDEX (decl) = error_mark_node;
9050           IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
9051         }
9052     }
9053   return decl;
9054 }
9055
9056 static tree
9057 grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
9058      tree type;
9059      tree declarator;
9060      RID_BIT_TYPE *specbits_in;
9061      int initialized;
9062      int constp;
9063      tree in_namespace;
9064 {
9065   tree decl;
9066   RID_BIT_TYPE specbits;
9067
9068   specbits = *specbits_in;
9069
9070   if (TREE_CODE (type) == OFFSET_TYPE)
9071     {
9072       /* If you declare a static member so that it
9073          can be initialized, the code will reach here.  */
9074       tree basetype = TYPE_OFFSET_BASETYPE (type);
9075       type = TREE_TYPE (type);
9076       decl = build_lang_field_decl (VAR_DECL, declarator, type);
9077       DECL_CONTEXT (decl) = basetype;
9078       DECL_CLASS_CONTEXT (decl) = basetype;
9079       DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
9080     }
9081   else
9082     {
9083       tree context;
9084
9085       if (in_namespace)
9086         context = in_namespace;
9087       else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
9088         context = current_namespace;
9089       else
9090         context = NULL_TREE;
9091
9092       decl = build_decl (VAR_DECL, declarator, complete_type (type));
9093
9094       if (context)
9095         set_decl_namespace (decl, context, 0);
9096
9097       context = DECL_CONTEXT (decl);
9098       if (declarator && context && current_lang_name != lang_name_c)
9099         DECL_ASSEMBLER_NAME (decl) = build_static_name (context, declarator);
9100     }
9101
9102   if (in_namespace)
9103     set_decl_namespace (decl, in_namespace, 0);
9104
9105   if (RIDBIT_SETP (RID_EXTERN, specbits))
9106     {
9107       DECL_THIS_EXTERN (decl) = 1;
9108       DECL_EXTERNAL (decl) = !initialized;
9109     }
9110
9111   /* In class context, static means one per class,
9112      public access, and static storage.  */
9113   if (DECL_CLASS_SCOPE_P (decl))
9114     {
9115       TREE_PUBLIC (decl) = 1;
9116       TREE_STATIC (decl) = 1;
9117       DECL_EXTERNAL (decl) = 0;
9118     }
9119   /* At top level, either `static' or no s.c. makes a definition
9120      (perhaps tentative), and absence of `static' makes it public.  */
9121   else if (toplevel_bindings_p ())
9122     {
9123       TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
9124                             && (DECL_THIS_EXTERN (decl) || ! constp));
9125       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
9126     }
9127   /* Not at top level, only `static' makes a static definition.  */
9128   else
9129     {
9130       TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
9131       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
9132     }
9133
9134   if (TREE_PUBLIC (decl))
9135     {
9136       /* [basic.link]: A name with no linkage (notably, the name of a class
9137          or enumeration declared in a local scope) shall not be used to
9138          declare an entity with linkage.
9139
9140          Only check this for public decls for now.  */
9141       tree t = no_linkage_check (TREE_TYPE (decl));
9142       if (t)
9143         {
9144           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
9145             /* Ignore for now; `enum { foo } e' is pretty common.  */;
9146           else
9147             cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
9148                         decl, t);
9149         }
9150     }
9151
9152   return decl;
9153 }
9154
9155 /* Create and return a canonical pointer to member function type, for
9156    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
9157
9158 tree
9159 build_ptrmemfunc_type (type)
9160      tree type;
9161 {
9162   tree fields[4];
9163   tree t;
9164   tree u;
9165
9166   /* If a canonical type already exists for this type, use it.  We use
9167      this method instead of type_hash_canon, because it only does a
9168      simple equality check on the list of field members.  */
9169
9170   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
9171     return t;
9172
9173   push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
9174
9175   u = make_lang_type (UNION_TYPE);
9176   SET_IS_AGGR_TYPE (u, 0);
9177   fields[0] = build_lang_field_decl (FIELD_DECL, pfn_identifier, type);
9178   fields[1] = build_lang_field_decl (FIELD_DECL, delta2_identifier,
9179                                      delta_type_node);
9180   finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
9181   TYPE_NAME (u) = NULL_TREE;
9182
9183   t = make_lang_type (RECORD_TYPE);
9184
9185   /* Let the front-end know this is a pointer to member function...  */
9186   TYPE_PTRMEMFUNC_FLAG (t) = 1;
9187   /* ... and not really an aggregate.  */
9188   SET_IS_AGGR_TYPE (t, 0);
9189
9190   fields[0] = build_lang_field_decl (FIELD_DECL, delta_identifier,
9191                                      delta_type_node);
9192   fields[1] = build_lang_field_decl (FIELD_DECL, index_identifier,
9193                                      delta_type_node);
9194   fields[2] = build_lang_field_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
9195   finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
9196
9197   pop_obstacks ();
9198
9199   /* Zap out the name so that the back-end will give us the debugging
9200      information for this anonymous RECORD_TYPE.  */
9201   TYPE_NAME (t) = NULL_TREE;
9202
9203   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
9204
9205   /* Seems to be wanted.  */
9206   CLASSTYPE_GOT_SEMICOLON (t) = 1;
9207   return t;
9208 }
9209
9210 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9211    Check to see that the definition is valid.  Issue appropriate error
9212    messages.  Return 1 if the definition is particularly bad, or 0
9213    otherwise.  */
9214
9215 int
9216 check_static_variable_definition (decl, type)
9217      tree decl;
9218      tree type;
9219 {
9220   /* Motion 10 at San Diego: If a static const integral data member is
9221      initialized with an integral constant expression, the initializer
9222      may appear either in the declaration (within the class), or in
9223      the definition, but not both.  If it appears in the class, the
9224      member is a member constant.  The file-scope definition is always
9225      required.  */
9226   if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
9227     {
9228       cp_error ("in-class initialization of static data member of non-integral type `%T'", 
9229                 type);
9230       /* If we just return the declaration, crashes will sometimes
9231          occur.  We therefore return void_type_node, as if this was a
9232          friend declaration, to cause callers to completely ignore
9233          this declaration.  */
9234       return 1;
9235     }
9236   else if (!CP_TYPE_CONST_P (type))
9237     cp_error ("ANSI C++ forbids in-class initialization of non-const static member `%D'",
9238               decl);
9239   else if (pedantic && !INTEGRAL_TYPE_P (type))
9240     cp_pedwarn ("ANSI C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
9241
9242   return 0;
9243 }
9244
9245 /* Given declspecs and a declarator,
9246    determine the name and type of the object declared
9247    and construct a ..._DECL node for it.
9248    (In one case we can return a ..._TYPE node instead.
9249     For invalid input we sometimes return 0.)
9250
9251    DECLSPECS is a chain of tree_list nodes whose value fields
9252     are the storage classes and type specifiers.
9253
9254    DECL_CONTEXT says which syntactic context this declaration is in:
9255      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
9256      FUNCDEF for a function definition.  Like NORMAL but a few different
9257       error messages in each case.  Return value may be zero meaning
9258       this definition is too screwy to try to parse.
9259      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
9260       handle member functions (which have FIELD context).
9261       Return value may be zero meaning this definition is too screwy to
9262       try to parse.
9263      PARM for a parameter declaration (either within a function prototype
9264       or before a function body).  Make a PARM_DECL, or return void_type_node.
9265      CATCHPARM for a parameter declaration before a catch clause.
9266      TYPENAME if for a typename (in a cast or sizeof).
9267       Don't make a DECL node; just return the ..._TYPE node.
9268      FIELD for a struct or union field; make a FIELD_DECL.
9269      BITFIELD for a field with specified width.
9270    INITIALIZED is 1 if the decl has an initializer.
9271
9272    ATTRLIST is a TREE_LIST node with prefix attributes in TREE_VALUE and
9273    normal attributes in TREE_PURPOSE, or NULL_TREE.
9274
9275    In the TYPENAME case, DECLARATOR is really an absolute declarator.
9276    It may also be so in the PARM case, for a prototype where the
9277    argument type is specified but not the name.
9278
9279    This function is where the complicated C meanings of `static'
9280    and `extern' are interpreted.
9281
9282    For C++, if there is any monkey business to do, the function which
9283    calls this one must do it, i.e., prepending instance variables,
9284    renaming overloaded function names, etc.
9285
9286    Note that for this C++, it is an error to define a method within a class
9287    which does not belong to that class.
9288
9289    Except in the case where SCOPE_REFs are implicitly known (such as
9290    methods within a class being redundantly qualified),
9291    declarations which involve SCOPE_REFs are returned as SCOPE_REFs
9292    (class_name::decl_name).  The caller must also deal with this.
9293
9294    If a constructor or destructor is seen, and the context is FIELD,
9295    then the type gains the attribute TREE_HAS_x.  If such a declaration
9296    is erroneous, NULL_TREE is returned.
9297
9298    QUALS is used only for FUNCDEF and MEMFUNCDEF cases.  For a member
9299    function, these are the qualifiers to give to the `this' pointer.
9300
9301    May return void_type_node if the declarator turned out to be a friend.
9302    See grokfield for details.  */
9303
9304 enum return_types { return_normal, return_ctor, return_dtor, return_conversion };
9305
9306 tree
9307 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
9308      tree declspecs;
9309      tree declarator;
9310      enum decl_context decl_context;
9311      int initialized;
9312      tree attrlist;
9313 {
9314   RID_BIT_TYPE specbits;
9315   int nclasses = 0;
9316   tree spec;
9317   tree type = NULL_TREE;
9318   int longlong = 0;
9319   int constp;
9320   int restrictp;
9321   int volatilep;
9322   int type_quals;
9323   int virtualp, explicitp, friendp, inlinep, staticp;
9324   int explicit_int = 0;
9325   int explicit_char = 0;
9326   int defaulted_int = 0;
9327   int opaque_typedef = 0;
9328   tree typedef_decl = NULL_TREE;
9329   char *name;
9330   tree typedef_type = NULL_TREE;
9331   int funcdef_flag = 0;
9332   enum tree_code innermost_code = ERROR_MARK;
9333   int bitfield = 0;
9334 #if 0
9335   /* See the code below that used this.  */
9336   tree decl_machine_attr = NULL_TREE;
9337 #endif
9338   /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
9339      All FIELD_DECLs we build here have `init' put into their DECL_INITIAL.  */
9340   tree init = NULL_TREE;
9341
9342   /* Keep track of what sort of function is being processed
9343      so that we can warn about default return values, or explicit
9344      return values which do not match prescribed defaults.  */
9345   enum return_types return_type = return_normal;
9346
9347   tree dname = NULL_TREE;
9348   tree ctype = current_class_type;
9349   tree ctor_return_type = NULL_TREE;
9350   enum overload_flags flags = NO_SPECIAL;
9351   tree quals = NULL_TREE;
9352   tree raises = NULL_TREE;
9353   int template_count = 0;
9354   tree in_namespace = NULL_TREE;
9355   tree inner_attrs;
9356   int ignore_attrs;
9357
9358   RIDBIT_RESET_ALL (specbits);
9359   if (decl_context == FUNCDEF)
9360     funcdef_flag = 1, decl_context = NORMAL;
9361   else if (decl_context == MEMFUNCDEF)
9362     funcdef_flag = -1, decl_context = FIELD;
9363   else if (decl_context == BITFIELD)
9364     bitfield = 1, decl_context = FIELD;
9365
9366   /* Look inside a declarator for the name being declared
9367      and get it as a string, for an error message.  */
9368   {
9369     tree *next = &declarator;
9370     register tree decl;
9371     name = NULL;
9372
9373     while (next && *next)
9374       {
9375         decl = *next;
9376         switch (TREE_CODE (decl))
9377           {
9378           case TREE_LIST:
9379             /* For attributes.  */
9380             next = &TREE_VALUE (decl);
9381             break;
9382
9383           case COND_EXPR:
9384             ctype = NULL_TREE;
9385             next = &TREE_OPERAND (decl, 0);
9386             break;
9387
9388           case BIT_NOT_EXPR:    /* For C++ destructors!  */
9389             {
9390               tree name = TREE_OPERAND (decl, 0);
9391               tree rename = NULL_TREE;
9392
9393               my_friendly_assert (flags == NO_SPECIAL, 152);
9394               flags = DTOR_FLAG;
9395               return_type = return_dtor;
9396               if (TREE_CODE (name) == TYPE_DECL)
9397                 TREE_OPERAND (decl, 0) = name = constructor_name (name);
9398               my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
9399               if (ctype == NULL_TREE)
9400                 {
9401                   if (current_class_type == NULL_TREE)
9402                     {
9403                       error ("destructors must be member functions");
9404                       flags = NO_SPECIAL;
9405                     }
9406                   else
9407                     {
9408                       tree t = constructor_name (current_class_name);
9409                       if (t != name)
9410                         rename = t;
9411                     }
9412                 }
9413               else
9414                 {
9415                   tree t = constructor_name (ctype);
9416                   if (t != name)
9417                     rename = t;
9418                 }
9419
9420               if (rename)
9421                 {
9422                   cp_error ("destructor `%T' must match class name `%T'",
9423                             name, rename);
9424                   TREE_OPERAND (decl, 0) = rename;
9425                 }
9426               next = &name;
9427             }
9428             break;
9429
9430           case ADDR_EXPR:       /* C++ reference declaration */
9431             /* Fall through. */
9432           case ARRAY_REF:
9433           case INDIRECT_REF:
9434             ctype = NULL_TREE;
9435             innermost_code = TREE_CODE (decl);
9436             next = &TREE_OPERAND (decl, 0);
9437             break;
9438
9439           case CALL_EXPR:
9440             if (parmlist_is_exprlist (TREE_OPERAND (decl, 1)))
9441               {
9442                 /* This is actually a variable declaration using
9443                    constructor syntax.  We need to call start_decl and
9444                    cp_finish_decl so we can get the variable
9445                    initialized...  */
9446
9447                 tree attributes, prefix_attributes;
9448
9449                 *next = TREE_OPERAND (decl, 0);
9450                 init = TREE_OPERAND (decl, 1);
9451
9452                 if (attrlist)
9453                   {
9454                     attributes = TREE_PURPOSE (attrlist);
9455                     prefix_attributes = TREE_VALUE (attrlist);
9456                   }
9457                 else
9458                   {
9459                     attributes = NULL_TREE;
9460                     prefix_attributes = NULL_TREE;
9461                   }
9462
9463                 decl = start_decl (declarator, declspecs, 1,
9464                                    attributes, prefix_attributes);
9465                 if (decl)
9466                   {
9467                     /* Look for __unused__ attribute */
9468                     if (TREE_USED (TREE_TYPE (decl)))
9469                       TREE_USED (decl) = 1;
9470                     finish_decl (decl, init, NULL_TREE);
9471                   }
9472                 else
9473                   cp_error ("invalid declarator");
9474                 return 0;
9475               }
9476             innermost_code = TREE_CODE (decl);
9477             if (decl_context == FIELD && ctype == NULL_TREE)
9478               ctype = current_class_type;
9479             if (ctype
9480                 && TREE_OPERAND (decl, 0)
9481                 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
9482                     && ((DECL_NAME (TREE_OPERAND (decl, 0))
9483                          == constructor_name_full (ctype))
9484                         || (DECL_NAME (TREE_OPERAND (decl, 0))
9485                             == constructor_name (ctype)))))
9486               TREE_OPERAND (decl, 0) = constructor_name (ctype);
9487             next = &TREE_OPERAND (decl, 0);
9488             decl = *next;
9489             if (ctype != NULL_TREE
9490                 && decl != NULL_TREE && flags != DTOR_FLAG
9491                 && decl == constructor_name (ctype))
9492               {
9493                 return_type = return_ctor;
9494                 ctor_return_type = ctype;
9495               }
9496             ctype = NULL_TREE;
9497             break;
9498             
9499           case TEMPLATE_ID_EXPR:
9500               {
9501                 tree fns = TREE_OPERAND (decl, 0);
9502
9503                 if (TREE_CODE (fns) == LOOKUP_EXPR)
9504                   fns = TREE_OPERAND (fns, 0);
9505
9506                 dname = fns;
9507                 if (TREE_CODE (dname) == COMPONENT_REF)
9508                   dname = TREE_OPERAND (dname, 1);
9509                 if (TREE_CODE (dname) != IDENTIFIER_NODE)
9510                   {
9511                     my_friendly_assert (is_overloaded_fn (dname),
9512                                         19990331);
9513                     dname = DECL_NAME (get_first_fn (dname));
9514                   }
9515               }
9516           /* Fall through. */
9517
9518           case IDENTIFIER_NODE:
9519             if (TREE_CODE (decl) == IDENTIFIER_NODE)
9520               dname = decl;
9521
9522             next = 0;
9523
9524             if (is_rid (dname))
9525               {
9526                 cp_error ("declarator-id missing; using reserved word `%D'",
9527                           dname);
9528                 name = IDENTIFIER_POINTER (dname);
9529               }
9530             if (! IDENTIFIER_OPNAME_P (dname)
9531                 /* GNU/Linux headers use '__op'.  Arrgh.  */
9532                 || (IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname)))
9533               name = IDENTIFIER_POINTER (dname);
9534             else
9535               {
9536                 if (IDENTIFIER_TYPENAME_P (dname))
9537                   {
9538                     my_friendly_assert (flags == NO_SPECIAL, 154);
9539                     flags = TYPENAME_FLAG;
9540                     ctor_return_type = TREE_TYPE (dname);
9541                     return_type = return_conversion;
9542                   }
9543                 name = operator_name_string (dname);
9544               }
9545             break;
9546
9547             /* C++ extension */
9548           case SCOPE_REF:
9549             {
9550               /* Perform error checking, and decide on a ctype.  */
9551               tree cname = TREE_OPERAND (decl, 0);
9552               if (cname == NULL_TREE)
9553                 ctype = NULL_TREE;
9554               else if (TREE_CODE (cname) == NAMESPACE_DECL)
9555                 {
9556                   ctype = NULL_TREE;
9557                   in_namespace = TREE_OPERAND (decl, 0);
9558                   TREE_OPERAND (decl, 0) = NULL_TREE;
9559                 }
9560               else if (! is_aggr_type (cname, 1))
9561                 TREE_OPERAND (decl, 0) = NULL_TREE;
9562               /* Must test TREE_OPERAND (decl, 1), in case user gives
9563                  us `typedef (class::memfunc)(int); memfunc *memfuncptr;'  */
9564               else if (TREE_OPERAND (decl, 1)
9565                        && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9566                 ctype = cname;
9567               else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
9568                        || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
9569                 {
9570                   cp_error ("`%T::%D' is not a valid declarator", cname,
9571                             TREE_OPERAND (decl, 1));
9572                   cp_error ("  perhaps you want `typename %T::%D' to make it a type",
9573                             cname, TREE_OPERAND (decl, 1));
9574                   return void_type_node;
9575                 }
9576               else if (ctype == NULL_TREE)
9577                 ctype = cname;
9578               else if (TREE_COMPLEXITY (decl) == current_class_depth)
9579                 TREE_OPERAND (decl, 0) = ctype;
9580               else
9581                 {
9582                   if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
9583                     {
9584                       cp_error ("type `%T' is not derived from type `%T'",
9585                                 cname, ctype);
9586                       TREE_OPERAND (decl, 0) = NULL_TREE;
9587                     }
9588                   else
9589                     ctype = cname;
9590                 }
9591
9592               if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
9593                   && ((DECL_NAME (TREE_OPERAND (decl, 1))
9594                        == constructor_name_full (ctype))
9595                       || (DECL_NAME (TREE_OPERAND (decl, 1))
9596                           == constructor_name (ctype))))
9597                 TREE_OPERAND (decl, 1) = constructor_name (ctype);
9598               next = &TREE_OPERAND (decl, 1);
9599               decl = *next;
9600               if (ctype)
9601                 {
9602                   if (TREE_CODE (decl) == IDENTIFIER_NODE
9603                       && constructor_name (ctype) == decl)
9604                     {
9605                       return_type = return_ctor;
9606                       ctor_return_type = ctype;
9607                     }
9608                   else if (TREE_CODE (decl) == BIT_NOT_EXPR
9609                            && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9610                            && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9611                                || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9612                     {
9613                       return_type = return_dtor;
9614                       ctor_return_type = ctype;
9615                       flags = DTOR_FLAG;
9616                       TREE_OPERAND (decl, 0) = constructor_name (ctype);
9617                       next = &TREE_OPERAND (decl, 0);
9618                     }
9619                 }
9620             }
9621             break;
9622
9623           case ERROR_MARK:
9624             next = 0;
9625             break;
9626
9627           case TYPE_DECL:
9628             /* Parse error puts this typespec where
9629                a declarator should go.  */
9630             cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
9631             if (TREE_TYPE (decl) == current_class_type)
9632               cp_error ("  perhaps you want `%T' for a constructor",
9633                         current_class_name);
9634             dname = DECL_NAME (decl);
9635             name = IDENTIFIER_POINTER (dname);
9636
9637             /* Avoid giving two errors for this.  */
9638             IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9639
9640             declspecs = temp_tree_cons (NULL_TREE, integer_type_node,
9641                                         declspecs);
9642             *next = dname;
9643             next = 0;
9644             break;
9645
9646           default:
9647             cp_compiler_error ("`%D' as declarator", decl);
9648             return 0; /* We used to do a 155 abort here.  */
9649           }
9650       }
9651     if (name == NULL)
9652       name = "type name";
9653   }
9654
9655   /* A function definition's declarator must have the form of
9656      a function declarator.  */
9657
9658   if (funcdef_flag && innermost_code != CALL_EXPR)
9659     return 0;
9660
9661   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9662       && innermost_code != CALL_EXPR
9663       && ! (ctype && declspecs == NULL_TREE))
9664     {
9665       cp_error ("declaration of `%D' as non-function", dname);
9666       return void_type_node;
9667     }
9668
9669   /* Anything declared one level down from the top level
9670      must be one of the parameters of a function
9671      (because the body is at least two levels down).  */
9672
9673   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9674      by not allowing C++ class definitions to specify their parameters
9675      with xdecls (must be spec.d in the parmlist).
9676
9677      Since we now wait to push a class scope until we are sure that
9678      we are in a legitimate method context, we must set oldcname
9679      explicitly (since current_class_name is not yet alive).
9680
9681      We also want to avoid calling this a PARM if it is in a namespace.  */
9682
9683   if (decl_context == NORMAL && ! namespace_bindings_p ()
9684       && ! pseudo_global_level_p ())
9685     {
9686       struct binding_level *b = current_binding_level;
9687       current_binding_level = b->level_chain;
9688       if (current_binding_level != 0 && toplevel_bindings_p ())
9689         decl_context = PARM;
9690       current_binding_level = b;
9691     }
9692
9693   /* Look through the decl specs and record which ones appear.
9694      Some typespecs are defined as built-in typenames.
9695      Others, the ones that are modifiers of other types,
9696      are represented by bits in SPECBITS: set the bits for
9697      the modifiers that appear.  Storage class keywords are also in SPECBITS.
9698
9699      If there is a typedef name or a type, store the type in TYPE.
9700      This includes builtin typedefs such as `int'.
9701
9702      Set EXPLICIT_INT if the type is `int' or `char' and did not
9703      come from a user typedef.
9704
9705      Set LONGLONG if `long' is mentioned twice.
9706
9707      For C++, constructors and destructors have their own fast treatment.  */
9708
9709   for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9710     {
9711       register int i;
9712       register tree id;
9713
9714       /* Certain parse errors slip through.  For example,
9715          `int class;' is not caught by the parser. Try
9716          weakly to recover here.  */
9717       if (TREE_CODE (spec) != TREE_LIST)
9718         return 0;
9719
9720       id = TREE_VALUE (spec);
9721
9722       if (TREE_CODE (id) == IDENTIFIER_NODE)
9723         {
9724           if (id == ridpointers[(int) RID_INT]
9725               || id == ridpointers[(int) RID_CHAR]
9726               || id == ridpointers[(int) RID_BOOL]
9727               || id == ridpointers[(int) RID_WCHAR])
9728             {
9729               if (type)
9730                 {
9731                   if (id == ridpointers[(int) RID_BOOL])
9732                     error ("`bool' is now a keyword");
9733                   else
9734                     cp_error ("extraneous `%T' ignored", id);
9735                 }
9736               else
9737                 {
9738                   if (id == ridpointers[(int) RID_INT])
9739                     explicit_int = 1;
9740                   else if (id == ridpointers[(int) RID_CHAR])
9741                     explicit_char = 1;
9742                   type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
9743                 }
9744               goto found;
9745             }
9746           /* C++ aggregate types.  */
9747           if (IDENTIFIER_HAS_TYPE_VALUE (id))
9748             {
9749               if (type)
9750                 cp_error ("multiple declarations `%T' and `%T'", type, id);
9751               else
9752                 type = IDENTIFIER_TYPE_VALUE (id);
9753               goto found;
9754             }
9755
9756           for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
9757             {
9758               if (ridpointers[i] == id)
9759                 {
9760                   if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
9761                     {
9762                       if (pedantic && ! in_system_header && warn_long_long)
9763                         pedwarn ("ANSI C++ does not support `long long'");
9764                       if (longlong)
9765                         error ("`long long long' is too long for GCC");
9766                       else
9767                         longlong = 1;
9768                     }
9769                   else if (RIDBIT_SETP (i, specbits))
9770                     pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
9771                   RIDBIT_SET (i, specbits);
9772                   goto found;
9773                 }
9774             }
9775         }
9776       /* C++ aggregate types.  */
9777       else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
9778         {
9779           if (type)
9780             cp_error ("multiple declarations `%T' and `%T'", type,
9781                       TREE_TYPE (id));
9782           else
9783             {
9784               type = TREE_TYPE (id);
9785               TREE_VALUE (spec) = type;
9786             }
9787           goto found;
9788         }
9789       if (type)
9790         error ("two or more data types in declaration of `%s'", name);
9791       else if (TREE_CODE (id) == IDENTIFIER_NODE)
9792         {
9793           register tree t = lookup_name (id, 1);
9794           if (!t || TREE_CODE (t) != TYPE_DECL)
9795             error ("`%s' fails to be a typedef or built in type",
9796                    IDENTIFIER_POINTER (id));
9797           else
9798             {
9799               type = TREE_TYPE (t);
9800 #if 0
9801               /* See the code below that used this.  */
9802               decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
9803 #endif
9804               typedef_decl = t;
9805             }
9806         }
9807       else if (id != error_mark_node)
9808         /* Can't change CLASS nodes into RECORD nodes here!  */
9809         type = id;
9810
9811     found: ;
9812     }
9813
9814   typedef_type = type;
9815
9816   /* No type at all: default to `int', and set DEFAULTED_INT
9817      because it was not a user-defined typedef.
9818      Except when we have a `typedef' inside a signature, in
9819      which case the type defaults to `unknown type' and is
9820      instantiated when assigning to a signature pointer or ref.  */
9821
9822   if (type == NULL_TREE
9823       && (RIDBIT_SETP (RID_SIGNED, specbits)
9824           || RIDBIT_SETP (RID_UNSIGNED, specbits)
9825           || RIDBIT_SETP (RID_LONG, specbits)
9826           || RIDBIT_SETP (RID_SHORT, specbits)))
9827     {
9828       /* These imply 'int'.  */
9829       type = integer_type_node;
9830       defaulted_int = 1;
9831     }
9832
9833   if (type == NULL_TREE)
9834     {
9835       explicit_int = -1;
9836       if (return_type == return_dtor)
9837         type = void_type_node;
9838       else if (return_type == return_ctor)
9839         type = build_pointer_type (ctor_return_type);
9840       else if (return_type == return_conversion)
9841         type = ctor_return_type;
9842       else if (current_class_type
9843                && IS_SIGNATURE (current_class_type)
9844                && RIDBIT_SETP (RID_TYPEDEF, specbits)
9845                && (decl_context == FIELD || decl_context == NORMAL))
9846         {
9847           explicit_int = 0;
9848           opaque_typedef = 1;
9849           type = copy_node (opaque_type_node);
9850         }
9851       else
9852         {
9853           /* We handle `main' specially here, because 'main () { }' is so
9854              common.  With no options, it is allowed.  With -Wreturn-type,
9855              it is a warning.  It is only an error with -pedantic-errors.  */
9856           int is_main = (funcdef_flag
9857                          && MAIN_NAME_P (dname)
9858                          && ctype == NULL_TREE
9859                          && in_namespace == NULL_TREE
9860                          && current_namespace == global_namespace);
9861
9862           if (in_system_header)
9863             /* Allow it, sigh.  */;
9864           else if (pedantic || ! is_main)
9865             cp_pedwarn ("ANSI C++ forbids declaration `%D' with no type",
9866                         dname);
9867           else if (warn_return_type)
9868             cp_warning ("ANSI C++ forbids declaration `%D' with no type",
9869                         dname);
9870
9871           type = integer_type_node;
9872         }
9873     }
9874   else if (return_type == return_dtor)
9875     {
9876       error ("return type specification for destructor invalid");
9877       type = void_type_node;
9878     }
9879   else if (return_type == return_ctor)
9880     {
9881       error ("return type specification for constructor invalid");
9882       type = build_pointer_type (ctor_return_type);
9883     }
9884   else if (return_type == return_conversion)
9885     {
9886       if (!same_type_p (type, ctor_return_type))
9887         cp_error ("operator `%T' declared to return `%T'",
9888                   ctor_return_type, type);
9889       else
9890         cp_pedwarn ("return type specified for `operator %T'",
9891                     ctor_return_type);
9892
9893       type = ctor_return_type;
9894     }
9895
9896   ctype = NULL_TREE;
9897
9898   /* Now process the modifiers that were specified
9899      and check for invalid combinations.  */
9900
9901   /* Long double is a special combination.  */
9902
9903   if (RIDBIT_SETP (RID_LONG, specbits)
9904       && TYPE_MAIN_VARIANT (type) == double_type_node)
9905     {
9906       RIDBIT_RESET (RID_LONG, specbits);
9907       type = build_qualified_type (long_double_type_node, 
9908                                    CP_TYPE_QUALS (type));
9909     }
9910
9911   /* Check all other uses of type modifiers.  */
9912
9913   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9914       || RIDBIT_SETP (RID_SIGNED, specbits)
9915       || RIDBIT_SETP (RID_LONG, specbits)
9916       || RIDBIT_SETP (RID_SHORT, specbits))
9917     {
9918       int ok = 0;
9919
9920       if (TREE_CODE (type) == REAL_TYPE)
9921         error ("short, signed or unsigned invalid for `%s'", name);
9922       else if (TREE_CODE (type) != INTEGER_TYPE)
9923         error ("long, short, signed or unsigned invalid for `%s'", name);
9924       else if (RIDBIT_SETP (RID_LONG, specbits)
9925                && RIDBIT_SETP (RID_SHORT, specbits))
9926         error ("long and short specified together for `%s'", name);
9927       else if ((RIDBIT_SETP (RID_LONG, specbits)
9928                 || RIDBIT_SETP (RID_SHORT, specbits))
9929                && explicit_char)
9930         error ("long or short specified with char for `%s'", name);
9931       else if ((RIDBIT_SETP (RID_LONG, specbits)
9932                 || RIDBIT_SETP (RID_SHORT, specbits))
9933                && TREE_CODE (type) == REAL_TYPE)
9934         error ("long or short specified with floating type for `%s'", name);
9935       else if (RIDBIT_SETP (RID_SIGNED, specbits)
9936                && RIDBIT_SETP (RID_UNSIGNED, specbits))
9937         error ("signed and unsigned given together for `%s'", name);
9938       else
9939         {
9940           ok = 1;
9941           if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
9942             {
9943               pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
9944                        name);
9945               if (flag_pedantic_errors)
9946                 ok = 0;
9947             }
9948         }
9949
9950       /* Discard the type modifiers if they are invalid.  */
9951       if (! ok)
9952         {
9953           RIDBIT_RESET (RID_UNSIGNED, specbits);
9954           RIDBIT_RESET (RID_SIGNED, specbits);
9955           RIDBIT_RESET (RID_LONG, specbits);
9956           RIDBIT_RESET (RID_SHORT, specbits);
9957           longlong = 0;
9958         }
9959     }
9960
9961   if (RIDBIT_SETP (RID_COMPLEX, specbits)
9962       && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9963     {
9964       error ("complex invalid for `%s'", name);
9965       RIDBIT_RESET (RID_COMPLEX, specbits);
9966     }
9967
9968   /* Decide whether an integer type is signed or not.
9969      Optionally treat bitfields as signed by default.  */
9970   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9971       || (bitfield && ! flag_signed_bitfields
9972           && (explicit_int || defaulted_int || explicit_char
9973               /* A typedef for plain `int' without `signed'
9974                  can be controlled just like plain `int'.  */
9975               || ! (typedef_decl != NULL_TREE
9976                     && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
9977           && TREE_CODE (type) != ENUMERAL_TYPE
9978           && RIDBIT_NOTSETP (RID_SIGNED, specbits)))
9979     {
9980       if (longlong)
9981         type = long_long_unsigned_type_node;
9982       else if (RIDBIT_SETP (RID_LONG, specbits))
9983         type = long_unsigned_type_node;
9984       else if (RIDBIT_SETP (RID_SHORT, specbits))
9985         type = short_unsigned_type_node;
9986       else if (type == char_type_node)
9987         type = unsigned_char_type_node;
9988       else if (typedef_decl)
9989         type = unsigned_type (type);
9990       else
9991         type = unsigned_type_node;
9992     }
9993   else if (RIDBIT_SETP (RID_SIGNED, specbits)
9994            && type == char_type_node)
9995     type = signed_char_type_node;
9996   else if (longlong)
9997     type = long_long_integer_type_node;
9998   else if (RIDBIT_SETP (RID_LONG, specbits))
9999     type = long_integer_type_node;
10000   else if (RIDBIT_SETP (RID_SHORT, specbits))
10001     type = short_integer_type_node;
10002
10003   if (RIDBIT_SETP (RID_COMPLEX, specbits))
10004     {
10005       /* If we just have "complex", it is equivalent to
10006          "complex double", but if any modifiers at all are specified it is
10007          the complex form of TYPE.  E.g, "complex short" is
10008          "complex short int".  */
10009
10010       if (defaulted_int && ! longlong
10011           && ! (RIDBIT_SETP (RID_LONG, specbits)
10012                 || RIDBIT_SETP (RID_SHORT, specbits)
10013                 || RIDBIT_SETP (RID_SIGNED, specbits)
10014                 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
10015         type = complex_double_type_node;
10016       else if (type == integer_type_node)
10017         type = complex_integer_type_node;
10018       else if (type == float_type_node)
10019         type = complex_float_type_node;
10020       else if (type == double_type_node)
10021         type = complex_double_type_node;
10022       else if (type == long_double_type_node)
10023         type = complex_long_double_type_node;
10024       else
10025         type = build_complex_type (type);
10026     }
10027
10028   if (return_type == return_conversion 
10029       && (RIDBIT_SETP (RID_CONST, specbits)
10030           || RIDBIT_SETP (RID_VOLATILE, specbits)
10031           || RIDBIT_SETP (RID_RESTRICT, specbits)))
10032     cp_error ("qualifiers are not allowed on declaration of `operator %T'",
10033               ctor_return_type);
10034
10035   /* Set CONSTP if this declaration is `const', whether by
10036      explicit specification or via a typedef.
10037      Likewise for VOLATILEP.  */
10038
10039   constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
10040   restrictp = 
10041     !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
10042   volatilep = 
10043     !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
10044   type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10045                 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10046                 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10047   type = cp_build_qualified_type (type, type_quals);
10048   staticp = 0;
10049   inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
10050   virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
10051   RIDBIT_RESET (RID_VIRTUAL, specbits);
10052   explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
10053   RIDBIT_RESET (RID_EXPLICIT, specbits);
10054
10055   if (RIDBIT_SETP (RID_STATIC, specbits))
10056     staticp = 1 + (decl_context == FIELD);
10057
10058   if (virtualp && staticp == 2)
10059     {
10060       cp_error ("member `%D' cannot be declared both virtual and static",
10061                 dname);
10062       staticp = 0;
10063     }
10064   friendp = RIDBIT_SETP (RID_FRIEND, specbits);
10065   RIDBIT_RESET (RID_FRIEND, specbits);
10066
10067   /* $7.1.2, Function specifiers */
10068   if (friendp && explicitp)
10069     error ("only declarations of constructors can be `explicit'");
10070
10071   if (RIDBIT_SETP (RID_MUTABLE, specbits))
10072     {
10073       if (decl_context == PARM)
10074         {
10075           error ("non-member `%s' cannot be declared `mutable'", name);
10076           RIDBIT_RESET (RID_MUTABLE, specbits);
10077         }
10078       else if (friendp || decl_context == TYPENAME)
10079         {
10080           error ("non-object member `%s' cannot be declared `mutable'", name);
10081           RIDBIT_RESET (RID_MUTABLE, specbits);
10082         }
10083     }
10084
10085   /* Warn if two storage classes are given. Default to `auto'.  */
10086
10087   if (RIDBIT_ANY_SET (specbits))
10088     {
10089       if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
10090       if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
10091       if (decl_context == PARM && nclasses > 0)
10092         error ("storage class specifiers invalid in parameter declarations");
10093       if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10094         {
10095           if (decl_context == PARM)
10096             error ("typedef declaration invalid in parameter declaration");
10097           nclasses++;
10098         }
10099       if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
10100       if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
10101     }
10102
10103   /* Give error if `virtual' is used outside of class declaration.  */
10104   if (virtualp
10105       && (current_class_name == NULL_TREE || decl_context != FIELD))
10106     {
10107       error ("virtual outside class declaration");
10108       virtualp = 0;
10109     }
10110   if (current_class_name == NULL_TREE && RIDBIT_SETP (RID_MUTABLE, specbits))
10111     {
10112       error ("only members can be declared mutable");
10113       RIDBIT_RESET (RID_MUTABLE, specbits);
10114     }
10115
10116   /* Static anonymous unions are dealt with here.  */
10117   if (staticp && decl_context == TYPENAME
10118       && TREE_CODE (declspecs) == TREE_LIST
10119       && ANON_UNION_TYPE_P (TREE_VALUE (declspecs)))
10120     decl_context = FIELD;
10121
10122   /* Give error if `const,' `volatile,' `inline,' `friend,' or `virtual'
10123      is used in a signature member function declaration.  */
10124   if (decl_context == FIELD
10125       && IS_SIGNATURE (current_class_type)
10126       && RIDBIT_NOTSETP (RID_TYPEDEF, specbits))
10127     {
10128       if (type_quals != TYPE_UNQUALIFIED)
10129         {
10130           error ("type qualifiers specified for signature member function `%s'", name);
10131           type_quals = TYPE_UNQUALIFIED;
10132         }
10133       if (inlinep)
10134         {
10135           error ("`inline' specified for signature member function `%s'", name);
10136           /* Later, we'll make signature member functions inline.  */
10137           inlinep = 0;
10138         }
10139       if (friendp)
10140         {
10141           error ("`friend' declaration in signature definition");
10142           friendp = 0;
10143         }
10144       if (virtualp)
10145         {
10146           error ("`virtual' specified for signature member function `%s'",
10147                  name);
10148           /* Later, we'll make signature member functions virtual.  */
10149           virtualp = 0;
10150         }
10151     }
10152
10153   /* Warn about storage classes that are invalid for certain
10154      kinds of declarations (parameters, typenames, etc.).  */
10155
10156   if (nclasses > 1)
10157     error ("multiple storage classes in declaration of `%s'", name);
10158   else if (decl_context != NORMAL && nclasses > 0)
10159     {
10160       if ((decl_context == PARM || decl_context == CATCHPARM)
10161           && (RIDBIT_SETP (RID_REGISTER, specbits)
10162               || RIDBIT_SETP (RID_AUTO, specbits)))
10163         ;
10164       else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10165         ;
10166       else if (decl_context == FIELD
10167                && ! IS_SIGNATURE (current_class_type)
10168                /* C++ allows static class elements  */
10169                && RIDBIT_SETP (RID_STATIC, specbits))
10170         /* C++ also allows inlines and signed and unsigned elements,
10171            but in those cases we don't come in here.  */
10172         ;
10173       else
10174         {
10175           if (decl_context == FIELD)
10176             {
10177               tree tmp = NULL_TREE;
10178               register int op = 0;
10179
10180               if (declarator)
10181                 {
10182                   /* Avoid trying to get an operand off an identifier node.  */ 
10183                   if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10184                     tmp = declarator;
10185                   else
10186                     tmp = TREE_OPERAND (declarator, 0);
10187                   op = IDENTIFIER_OPNAME_P (tmp);
10188                 }
10189               error ("storage class specified for %s `%s'",
10190                      IS_SIGNATURE (current_class_type)
10191                      ? (op
10192                         ? "signature member operator"
10193                         : "signature member function")
10194                      : (op ? "member operator" : "field"),
10195                      op ? operator_name_string (tmp) : name);
10196             }
10197           else
10198             error (((decl_context == PARM || decl_context == CATCHPARM)
10199                     ? "storage class specified for parameter `%s'"
10200                     : "storage class specified for typename"), name);
10201           RIDBIT_RESET (RID_REGISTER, specbits);
10202           RIDBIT_RESET (RID_AUTO, specbits);
10203           RIDBIT_RESET (RID_EXTERN, specbits);
10204
10205           if (decl_context == FIELD && IS_SIGNATURE (current_class_type))
10206             {
10207               RIDBIT_RESET (RID_STATIC, specbits);
10208               staticp = 0;
10209             }
10210         }
10211     }
10212   else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
10213     {
10214       if (toplevel_bindings_p ())
10215         {
10216           /* It's common practice (and completely valid) to have a const
10217              be initialized and declared extern.  */
10218           if (!(type_quals & TYPE_QUAL_CONST))
10219             warning ("`%s' initialized and declared `extern'", name);
10220         }
10221       else
10222         error ("`%s' has both `extern' and initializer", name);
10223     }
10224   else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
10225            && ! toplevel_bindings_p ())
10226     error ("nested function `%s' declared `extern'", name);
10227   else if (toplevel_bindings_p ())
10228     {
10229       if (RIDBIT_SETP (RID_AUTO, specbits))
10230         error ("top-level declaration of `%s' specifies `auto'", name);
10231     }
10232
10233   if (nclasses > 0 && friendp)
10234     error ("storage class specifiers invalid in friend function declarations");
10235
10236   /* Now figure out the structure of the declarator proper.
10237      Descend through it, creating more complex types, until we reach
10238      the declared identifier (or NULL_TREE, in an absolute declarator).  */
10239
10240   inner_attrs = NULL_TREE;
10241   ignore_attrs = 0;  
10242
10243   while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
10244          && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
10245     {
10246       /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
10247          an INDIRECT_REF (for *...),
10248          a CALL_EXPR (for ...(...)),
10249          an identifier (for the name being declared)
10250          or a null pointer (for the place in an absolute declarator
10251          where the name was omitted).
10252          For the last two cases, we have just exited the loop.
10253
10254          For C++ it could also be
10255          a SCOPE_REF (for class :: ...).  In this case, we have converted
10256          sensible names to types, and those are the values we use to
10257          qualify the member name.
10258          an ADDR_EXPR (for &...),
10259          a BIT_NOT_EXPR (for destructors)
10260
10261          At this point, TYPE is the type of elements of an array,
10262          or for a function to return, or for a pointer to point to.
10263          After this sequence of ifs, TYPE is the type of the
10264          array or function or pointer, and DECLARATOR has had its
10265          outermost layer removed.  */
10266
10267       if (type == error_mark_node)
10268         {
10269           if (TREE_CODE (declarator) == SCOPE_REF)
10270             declarator = TREE_OPERAND (declarator, 1);
10271           else
10272             declarator = TREE_OPERAND (declarator, 0);
10273           continue;
10274         }
10275       if (quals != NULL_TREE
10276           && (declarator == NULL_TREE
10277               || TREE_CODE (declarator) != SCOPE_REF))
10278         {
10279           if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
10280             ctype = TYPE_METHOD_BASETYPE (type);
10281           if (ctype != NULL_TREE)
10282             {
10283               tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
10284               ctype = grok_method_quals (ctype, dummy, quals);
10285               type = TREE_TYPE (dummy);
10286               quals = NULL_TREE;
10287             }
10288         }
10289
10290       /* See the comment for the TREE_LIST case, below.  */
10291       if (ignore_attrs)
10292         ignore_attrs = 0;
10293       else if (inner_attrs)
10294         {
10295           decl_attributes (type, inner_attrs, NULL_TREE);
10296           inner_attrs = NULL_TREE;
10297         }
10298
10299       switch (TREE_CODE (declarator))
10300         {
10301         case TREE_LIST:
10302           {
10303             /* We encode a declarator with embedded attributes using
10304                a TREE_LIST.  The attributes apply to the declarator
10305                directly inside them, so we have to skip an iteration
10306                before applying them to the type.  If the declarator just
10307                inside is the declarator-id, we apply the attrs to the
10308                decl itself.  */
10309             inner_attrs = TREE_PURPOSE (declarator);
10310             ignore_attrs = 1;
10311             declarator = TREE_VALUE (declarator);
10312           }
10313           break;
10314
10315         case ARRAY_REF:
10316           {
10317             register tree itype = NULL_TREE;
10318             register tree size = TREE_OPERAND (declarator, 1);
10319             /* The index is a signed object `sizetype' bits wide.  */
10320             tree index_type = signed_type (sizetype);
10321
10322             declarator = TREE_OPERAND (declarator, 0);
10323
10324             /* Check for some types that there cannot be arrays of.  */
10325
10326             if (TREE_CODE (type) == VOID_TYPE)
10327               {
10328                 cp_error ("declaration of `%D' as array of voids", dname);
10329                 type = error_mark_node;
10330               }
10331
10332             if (TREE_CODE (type) == FUNCTION_TYPE)
10333               {
10334                 cp_error ("declaration of `%D' as array of functions", dname);
10335                 type = error_mark_node;
10336               }
10337
10338             /* ARM $8.4.3: Since you can't have a pointer to a reference,
10339                you can't have arrays of references.  If we allowed them,
10340                then we'd be saying x[i] is valid for an array x, but
10341                then you'd have to ask: what does `*(x + i)' mean?  */
10342             if (TREE_CODE (type) == REFERENCE_TYPE)
10343               {
10344                 if (decl_context == TYPENAME)
10345                   cp_error ("cannot make arrays of references");
10346                 else
10347                   cp_error ("declaration of `%D' as array of references",
10348                             dname);
10349                 type = error_mark_node;
10350               }
10351
10352             if (TREE_CODE (type) == OFFSET_TYPE)
10353               {
10354                   cp_error ("declaration of `%D' as array of data members",
10355                             dname);
10356                 type = error_mark_node;
10357               }
10358
10359             if (TREE_CODE (type) == METHOD_TYPE)
10360               {
10361                 cp_error ("declaration of `%D' as array of function members",
10362                           dname);
10363                 type = error_mark_node;
10364               }
10365
10366             if (size == error_mark_node)
10367               type = error_mark_node;
10368             else if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
10369               {
10370                 /* [dcl.array]
10371
10372                    the constant expressions that specify the bounds of
10373                    the arrays can be omitted only for the first member
10374                    of the sequence.  */
10375                 cp_error ("declaration of `%D' as multidimensional array",
10376                           dname);
10377                 cp_error ("must have bounds for all dimensions except the first");
10378                 type = error_mark_node;
10379               }
10380
10381             if (type == error_mark_node)
10382               continue;
10383
10384             /* VC++ spells a zero-sized array with [].  */
10385             if (size == NULL_TREE && decl_context == FIELD && ! staticp
10386                 && ! RIDBIT_SETP (RID_TYPEDEF, specbits))
10387               size = integer_zero_node;
10388
10389             if (size)
10390               {
10391                 /* Must suspend_momentary here because the index
10392                    type may need to live until the end of the function.
10393                    For example, it is used in the declaration of a
10394                    variable which requires destructing at the end of
10395                    the function; then build_vec_delete will need this
10396                    value.  */
10397                 int yes = suspend_momentary ();
10398                 /* Might be a cast. */
10399                 if (TREE_CODE (size) == NOP_EXPR
10400                     && TREE_TYPE (size) == TREE_TYPE (TREE_OPERAND (size, 0)))
10401                   size = TREE_OPERAND (size, 0);
10402
10403                 /* If this involves a template parameter, it will be a
10404                    constant at instantiation time, but we don't know
10405                    what the value is yet.  Even if no template
10406                    parameters are involved, we may an expression that
10407                    is not a constant; we don't even simplify `1 + 2'
10408                    when processing a template.  */
10409                 if (processing_template_decl)
10410                   {
10411                     /* Resolve a qualified reference to an enumerator or
10412                        static const data member of ours.  */
10413                     if (TREE_CODE (size) == SCOPE_REF
10414                         && TREE_OPERAND (size, 0) == current_class_type)
10415                       {
10416                         tree t = lookup_field (current_class_type,
10417                                                TREE_OPERAND (size, 1), 0, 0);
10418                         if (t)
10419                           size = t;
10420                       }
10421
10422                     itype = build_index_type (build_min
10423                       (MINUS_EXPR, sizetype, size, integer_one_node));
10424                     goto dont_grok_size;
10425                   }
10426
10427                 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
10428                     && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
10429                     && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
10430                   {
10431                     cp_error ("size of array `%D' has non-integer type",
10432                               dname);
10433                     size = integer_one_node;
10434                   }
10435                 if (TREE_READONLY_DECL_P (size))
10436                   size = decl_constant_value (size);
10437                 if (pedantic && integer_zerop (size))
10438                   cp_pedwarn ("ANSI C++ forbids zero-size array `%D'", dname);
10439                 if (TREE_CONSTANT (size))
10440                   {
10441                     int old_flag_pedantic_errors = flag_pedantic_errors;
10442                     int old_pedantic = pedantic;
10443                     pedantic = flag_pedantic_errors = 1;
10444                     /* Always give overflow errors on array subscripts.  */
10445                     constant_expression_warning (size);
10446                     pedantic = old_pedantic;
10447                     flag_pedantic_errors = old_flag_pedantic_errors;
10448                     if (INT_CST_LT (size, integer_zero_node))
10449                       {
10450                         cp_error ("size of array `%D' is negative", dname);
10451                         size = integer_one_node;
10452                       }
10453                   }
10454                 else
10455                   {
10456                     if (pedantic)
10457                       {
10458                         if (dname)
10459                           cp_pedwarn ("ANSI C++ forbids variable-size array `%D'",
10460                                       dname);
10461                         else
10462                           cp_pedwarn ("ANSI C++ forbids variable-size array");
10463                       }
10464                   }
10465
10466                 itype
10467                   = fold (build_binary_op (MINUS_EXPR,
10468                                            cp_convert (index_type, size),
10469                                            cp_convert (index_type,
10470                                                        integer_one_node)));
10471                 if (! TREE_CONSTANT (itype))
10472                   itype = variable_size (itype);
10473                 else if (TREE_OVERFLOW (itype))
10474                   {
10475                     error ("overflow in array dimension");
10476                     TREE_OVERFLOW (itype) = 0;
10477                   }
10478
10479                 /* If we're a parm, we need to have a permanent type so
10480                    mangling checks for re-use will work right.  If both the
10481                    element and index types are permanent, the array type
10482                    will be, too.  */
10483                 if (decl_context == PARM
10484                     && allocation_temporary_p () && TREE_PERMANENT (type))
10485                   {
10486                     push_obstacks (&permanent_obstack, &permanent_obstack);
10487                     itype = build_index_type (itype);
10488                     pop_obstacks ();
10489                   }
10490                 else
10491                   itype = build_index_type (itype);
10492
10493               dont_grok_size:
10494                 resume_momentary (yes);
10495               }
10496
10497             type = build_cplus_array_type (type, itype);
10498             ctype = NULL_TREE;
10499           }
10500           break;
10501
10502         case CALL_EXPR:
10503           {
10504             tree arg_types;
10505             int funcdecl_p;
10506             tree inner_parms = TREE_OPERAND (declarator, 1);
10507             tree inner_decl = TREE_OPERAND (declarator, 0);
10508
10509             /* Declaring a function type.
10510                Make sure we have a valid type for the function to return.  */
10511
10512             /* We now know that the TYPE_QUALS don't apply to the
10513                decl, but to its return type.  */
10514             type_quals = TYPE_UNQUALIFIED;
10515
10516             /* Warn about some types functions can't return.  */
10517
10518             if (TREE_CODE (type) == FUNCTION_TYPE)
10519               {
10520                 error ("`%s' declared as function returning a function", name);
10521                 type = integer_type_node;
10522               }
10523             if (TREE_CODE (type) == ARRAY_TYPE)
10524               {
10525                 error ("`%s' declared as function returning an array", name);
10526                 type = integer_type_node;
10527               }
10528
10529             if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
10530               inner_decl = TREE_OPERAND (inner_decl, 1);
10531
10532             if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR) 
10533               inner_decl = dname;
10534
10535             /* Pick up type qualifiers which should be applied to `this'.  */
10536             quals = TREE_OPERAND (declarator, 2);
10537
10538             /* Pick up the exception specifications.  */
10539             raises = TREE_TYPE (declarator);
10540
10541             /* Say it's a definition only for the CALL_EXPR
10542                closest to the identifier.  */
10543             funcdecl_p
10544               = inner_decl 
10545               && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
10546                   || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR 
10547                   || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
10548             
10549             if (ctype == NULL_TREE
10550                 && decl_context == FIELD
10551                 && funcdecl_p
10552                 && (friendp == 0 || dname == current_class_name))
10553               ctype = current_class_type;
10554
10555             if (ctype && return_type == return_conversion)
10556               TYPE_HAS_CONVERSION (ctype) = 1;
10557             if (ctype && constructor_name (ctype) == dname)
10558               {
10559                 /* We are within a class's scope. If our declarator name
10560                    is the same as the class name, and we are defining
10561                    a function, then it is a constructor/destructor, and
10562                    therefore returns a void type.  */
10563
10564                 if (flags == DTOR_FLAG)
10565                   {
10566                     /* ANSI C++ June 5 1992 WP 12.4.1.  A destructor may
10567                        not be declared const or volatile.  A destructor
10568                        may not be static.  */
10569                     if (staticp == 2)
10570                       error ("destructor cannot be static member function");
10571                     if (quals)
10572                       {
10573                         cp_error ("destructors may not be `%s'",
10574                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10575                         quals = NULL_TREE;
10576                       }
10577                     if (decl_context == FIELD)
10578                       {
10579                         if (! member_function_or_else (ctype, current_class_type,
10580                                                        "destructor for alien class `%s' cannot be a member"))
10581                           return void_type_node;
10582                       }
10583                   }
10584                 else            /* It's a constructor.  */
10585                   {
10586                     if (explicitp == 1)
10587                       explicitp = 2;
10588                     /* ANSI C++ June 5 1992 WP 12.1.2.  A constructor may
10589                        not be declared const or volatile.  A constructor may
10590                        not be virtual.  A constructor may not be static.  */
10591                     if (staticp == 2)
10592                       error ("constructor cannot be static member function");
10593                     if (virtualp)
10594                       {
10595                         pedwarn ("constructors cannot be declared virtual");
10596                         virtualp = 0;
10597                       }
10598                     if (quals)
10599                       {
10600                         cp_error ("constructors may not be `%s'",
10601                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10602                         quals = NULL_TREE;
10603                       }
10604                     {
10605                       RID_BIT_TYPE tmp_bits;
10606                       bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
10607                       RIDBIT_RESET (RID_INLINE, tmp_bits);
10608                       RIDBIT_RESET (RID_STATIC, tmp_bits);
10609                       if (RIDBIT_ANY_SET (tmp_bits))
10610                         error ("return value type specifier for constructor ignored");
10611                     }
10612                     type = build_pointer_type (ctype);
10613                     if (decl_context == FIELD
10614                         && IS_SIGNATURE (current_class_type))
10615                       {
10616                         error ("constructor not allowed in signature");
10617                         return void_type_node;
10618                       }                   
10619                     else if (decl_context == FIELD)
10620                       {
10621                         if (! member_function_or_else (ctype, current_class_type,
10622                                                        "constructor for alien class `%s' cannot be member"))
10623                           return void_type_node;
10624                         TYPE_HAS_CONSTRUCTOR (ctype) = 1;
10625                         if (return_type != return_ctor)
10626                           return NULL_TREE;
10627                       }
10628                   }
10629                 if (decl_context == FIELD)
10630                   staticp = 0;
10631               }
10632             else if (friendp)
10633               {
10634                 if (initialized)
10635                   error ("can't initialize friend function `%s'", name);
10636                 if (virtualp)
10637                   {
10638                     /* Cannot be both friend and virtual.  */
10639                     error ("virtual functions cannot be friends");
10640                     RIDBIT_RESET (RID_FRIEND, specbits);
10641                     friendp = 0;
10642                   }
10643                 if (decl_context == NORMAL)
10644                   error ("friend declaration not in class definition");
10645                 if (current_function_decl && funcdef_flag)
10646                   cp_error ("can't define friend function `%s' in a local class definition",
10647                             name);
10648               }
10649
10650             /* Construct the function type and go to the next
10651                inner layer of declarator.  */
10652
10653             declarator = TREE_OPERAND (declarator, 0);
10654
10655             /* FIXME: This is where default args should be fully
10656                processed.  */
10657
10658             arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
10659
10660             if (declarator && flags == DTOR_FLAG)
10661               {
10662                 /* A destructor declared in the body of a class will
10663                    be represented as a BIT_NOT_EXPR.  But, we just
10664                    want the underlying IDENTIFIER.  */
10665                 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
10666                   declarator = TREE_OPERAND (declarator, 0);
10667                 
10668                 if (strict_prototype == 0 && arg_types == NULL_TREE)
10669                   arg_types = void_list_node;
10670                 else if (arg_types == NULL_TREE
10671                          || arg_types != void_list_node)
10672                   {
10673                     cp_error ("destructors may not have parameters");
10674                     arg_types = void_list_node;
10675                     last_function_parms = NULL_TREE;
10676                   }
10677               }
10678
10679             /* ANSI says that `const int foo ();'
10680                does not make the function foo const.  */
10681             type = build_function_type (type, arg_types);
10682
10683             {
10684               tree t;
10685               for (t = arg_types; t; t = TREE_CHAIN (t))
10686                 if (TREE_PURPOSE (t)
10687                     && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10688                   {
10689                     add_defarg_fn (type);
10690                     break;
10691                   }
10692             }
10693           }
10694           break;
10695
10696         case ADDR_EXPR:
10697         case INDIRECT_REF:
10698           /* Filter out pointers-to-references and references-to-references.
10699              We can get these if a TYPE_DECL is used.  */
10700
10701           if (TREE_CODE (type) == REFERENCE_TYPE)
10702             {
10703               error ("cannot declare %s to references",
10704                      TREE_CODE (declarator) == ADDR_EXPR
10705                      ? "references" : "pointers");
10706               declarator = TREE_OPERAND (declarator, 0);
10707               continue;
10708             }
10709
10710           if (TREE_CODE (type) == OFFSET_TYPE
10711               && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10712                   || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10713             {
10714               cp_error ("cannot declare pointer to `%#T' member",
10715                         TREE_TYPE (type));
10716               type = TREE_TYPE (type);
10717             }
10718
10719           /* Merge any constancy or volatility into the target type
10720              for the pointer.  */
10721
10722           /* We now know that the TYPE_QUALS don't apply to the decl,
10723              but to the target of the pointer.  */
10724           type_quals = TYPE_UNQUALIFIED;
10725
10726           if (IS_SIGNATURE (type))
10727             {
10728               if (TREE_CODE (declarator) == ADDR_EXPR)
10729                 {
10730                   if (CLASSTYPE_METHOD_VEC (type) == NULL_TREE
10731                       && TYPE_SIZE (type))
10732                     cp_warning ("empty signature `%T' used in signature reference declaration",
10733                                 type);
10734 #if 0
10735                   type = build_signature_reference_type (type);
10736 #else
10737                   sorry ("signature reference");
10738                   return NULL_TREE;
10739 #endif
10740                 }
10741               else
10742                 {
10743                   if (CLASSTYPE_METHOD_VEC (type) == NULL_TREE
10744                       && TYPE_SIZE (type))
10745                     cp_warning ("empty signature `%T' used in signature pointer declaration",
10746                                 type);
10747                   type = build_signature_pointer_type (type);
10748                 }
10749             }
10750           else if (TREE_CODE (declarator) == ADDR_EXPR)
10751             {
10752               if (TREE_CODE (type) == VOID_TYPE)
10753                 error ("invalid type: `void &'");
10754               else
10755                 type = build_reference_type (type);
10756             }
10757           else if (TREE_CODE (type) == METHOD_TYPE)
10758             type = build_ptrmemfunc_type (build_pointer_type (type));
10759           else
10760             type = build_pointer_type (type);
10761
10762           /* Process a list of type modifier keywords (such as
10763              const or volatile) that were given inside the `*' or `&'.  */
10764
10765           if (TREE_TYPE (declarator))
10766             {
10767               register tree typemodlist;
10768               int erred = 0;
10769
10770               constp = 0;
10771               volatilep = 0;
10772               restrictp = 0;
10773               for (typemodlist = TREE_TYPE (declarator); typemodlist;
10774                    typemodlist = TREE_CHAIN (typemodlist))
10775                 {
10776                   tree qualifier = TREE_VALUE (typemodlist);
10777
10778                   if (qualifier == ridpointers[(int) RID_CONST])
10779                     constp++;
10780                   else if (qualifier == ridpointers[(int) RID_VOLATILE])
10781                     volatilep++;
10782                   else if (qualifier == ridpointers[(int) RID_RESTRICT])
10783                     restrictp++;
10784                   else if (!erred)
10785                     {
10786                       erred = 1;
10787                       error ("invalid type modifier within pointer declarator");
10788                     }
10789                 }
10790               if (constp > 1)
10791                 pedwarn ("duplicate `const'");
10792               if (volatilep > 1)
10793                 pedwarn ("duplicate `volatile'");
10794               if (restrictp > 1)
10795                 pedwarn ("duplicate `restrict'");
10796
10797               type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10798                             | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10799                             | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10800               if (TREE_CODE (declarator) == ADDR_EXPR
10801                   && (constp || volatilep))
10802                 {
10803                   if (constp)
10804                     pedwarn ("discarding `const' applied to a reference");
10805                   if (volatilep)
10806                     pedwarn ("discarding `volatile' applied to a reference");
10807                   type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
10808                 }
10809               type = cp_build_qualified_type (type, type_quals);
10810             }
10811           declarator = TREE_OPERAND (declarator, 0);
10812           ctype = NULL_TREE;
10813           break;
10814
10815         case SCOPE_REF:
10816           {
10817             /* We have converted type names to NULL_TREE if the
10818                name was bogus, or to a _TYPE node, if not.
10819
10820                The variable CTYPE holds the type we will ultimately
10821                resolve to.  The code here just needs to build
10822                up appropriate member types.  */
10823             tree sname = TREE_OPERAND (declarator, 1);
10824             tree t;
10825
10826             /* Destructors can have their visibilities changed as well.  */
10827             if (TREE_CODE (sname) == BIT_NOT_EXPR)
10828               sname = TREE_OPERAND (sname, 0);
10829
10830             if (TREE_COMPLEXITY (declarator) == 0)
10831               /* This needs to be here, in case we are called
10832                  multiple times.  */ ;
10833             else if (TREE_COMPLEXITY (declarator) == -1)
10834               /* Namespace member. */
10835               pop_decl_namespace ();
10836             else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
10837               /* Don't fall out into global scope. Hides real bug? --eichin */ ;
10838             else if (! IS_AGGR_TYPE_CODE
10839                      (TREE_CODE (TREE_OPERAND (declarator, 0))))
10840               ;
10841             else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10842               {
10843                 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10844                    that refer to ctype.  They couldn't be resolved earlier
10845                    because we hadn't pushed into the class yet.
10846                    Example: resolve 'B<T>::type' in
10847                    'B<typename B<T>::type> B<T>::f () { }'.  */
10848                 if (current_template_parms
10849                     && uses_template_parms (type)
10850                     && uses_template_parms (current_class_type))
10851                   {
10852                     tree args = current_template_args ();
10853                     type = tsubst (type, args, /*complain=*/1, NULL_TREE);
10854                   }
10855
10856                 /* This pop_nested_class corresponds to the
10857                    push_nested_class used to push into class scope for
10858                    parsing the argument list of a function decl, in
10859                    qualified_id.  */
10860                 pop_nested_class ();
10861                 TREE_COMPLEXITY (declarator) = current_class_depth;
10862               }
10863             else
10864               my_friendly_abort (16);
10865
10866             if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10867               {
10868                 /* We had a reference to a global decl, or
10869                    perhaps we were given a non-aggregate typedef,
10870                    in which case we cleared this out, and should just
10871                    keep going as though it wasn't there.  */
10872                 declarator = sname;
10873                 continue;
10874               }
10875             ctype = TREE_OPERAND (declarator, 0);
10876
10877             t = ctype;
10878             while (t != NULL_TREE && CLASS_TYPE_P (t)) 
10879               {
10880                 if (CLASSTYPE_TEMPLATE_INFO (t) &&
10881                     !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
10882                   template_count += 1;
10883                 t = TYPE_MAIN_DECL (t);
10884                 if (DECL_LANG_SPECIFIC (t))
10885                   t = DECL_CLASS_CONTEXT (t);
10886                 else
10887                   t = NULL_TREE;
10888               }
10889
10890             if (sname == NULL_TREE)
10891               goto done_scoping;
10892
10893             if (TREE_CODE (sname) == IDENTIFIER_NODE)
10894               {
10895                 /* This is the `standard' use of the scoping operator:
10896                    basetype :: member .  */
10897
10898                 if (ctype == current_class_type)
10899                   {
10900                     /* class A {
10901                          void A::f ();
10902                        };
10903
10904                        Is this ill-formed?  */
10905
10906                     if (pedantic)
10907                       cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
10908                                   ctype, name);
10909                   }
10910                 else if (TREE_CODE (type) == FUNCTION_TYPE)
10911                   {
10912                     if (current_class_type == NULL_TREE
10913                         || friendp)
10914                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10915                                                       TYPE_ARG_TYPES (type));
10916                     else
10917                       {
10918                         cp_error ("cannot declare member function `%T::%s' within `%T'",
10919                                   ctype, name, current_class_type);
10920                         return void_type_node;
10921                       }
10922                   }
10923                 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
10924                          || TYPE_SIZE (complete_type (ctype)) != NULL_TREE)
10925                   {
10926                     /* Have to move this code elsewhere in this function.
10927                        this code is used for i.e., typedef int A::M; M *pm;
10928
10929                        It is?  How? jason 10/2/94 */
10930
10931                     if (current_class_type)
10932                       {
10933                         cp_error ("cannot declare member `%T::%s' within `%T'",
10934                                   ctype, name, current_class_type);
10935                         return void_type_node;
10936                       }
10937                     type = build_offset_type (ctype, type);
10938                   }
10939                 else if (uses_template_parms (ctype))
10940                   {
10941                     if (TREE_CODE (type) == FUNCTION_TYPE)
10942                       type
10943                         = build_cplus_method_type (ctype, TREE_TYPE (type),
10944                                                    TYPE_ARG_TYPES (type));
10945                   }
10946                 else
10947                   {
10948                     cp_error ("structure `%T' not yet defined", ctype);
10949                     return error_mark_node;
10950                   }
10951
10952                 declarator = sname;
10953               }
10954             else if (TREE_CODE (sname) == SCOPE_REF)
10955               my_friendly_abort (17);
10956             else
10957               {
10958               done_scoping:
10959                 declarator = TREE_OPERAND (declarator, 1);
10960                 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10961                   /* In this case, we will deal with it later.  */
10962                   ;
10963                 else
10964                   {
10965                     if (TREE_CODE (type) == FUNCTION_TYPE)
10966                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10967                                                       TYPE_ARG_TYPES (type));
10968                     else
10969                       type = build_offset_type (ctype, type);
10970                   }
10971               }
10972           }
10973           break;
10974
10975         case BIT_NOT_EXPR:
10976           declarator = TREE_OPERAND (declarator, 0);
10977           break;
10978
10979         case RECORD_TYPE:
10980         case UNION_TYPE:
10981         case ENUMERAL_TYPE:
10982           declarator = NULL_TREE;
10983           break;
10984
10985         case ERROR_MARK:
10986           declarator = NULL_TREE;
10987           break;
10988
10989         default:
10990           my_friendly_abort (158);
10991         }
10992     }
10993
10994   /* See the comment for the TREE_LIST case, above.  */
10995   if (inner_attrs)
10996     {
10997       if (! ignore_attrs)
10998         decl_attributes (type, inner_attrs, NULL_TREE);
10999       else if (attrlist)
11000         TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
11001       else
11002         attrlist = build_decl_list (NULL_TREE, inner_attrs);
11003     }
11004
11005   /* Now TYPE has the actual type.  */
11006
11007   if (explicitp == 1)
11008     {
11009       error ("only constructors can be declared `explicit'");
11010       explicitp = 0;
11011     }
11012
11013   if (RIDBIT_SETP (RID_MUTABLE, specbits))
11014     {
11015       if (type_quals & TYPE_QUAL_CONST)
11016         {
11017           error ("const `%s' cannot be declared `mutable'", name);
11018           RIDBIT_RESET (RID_MUTABLE, specbits);
11019         }
11020       else if (staticp)
11021         {
11022           error ("static `%s' cannot be declared `mutable'", name);
11023           RIDBIT_RESET (RID_MUTABLE, specbits);
11024         }
11025     }
11026
11027   if (declarator == NULL_TREE
11028       || TREE_CODE (declarator) == IDENTIFIER_NODE
11029       || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
11030           && (TREE_CODE (type) == FUNCTION_TYPE
11031               || TREE_CODE (type) == METHOD_TYPE)))
11032     /* OK */;
11033   else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11034     {
11035       cp_error ("template-id `%D' used as a declarator", declarator);
11036       declarator = dname;
11037     }
11038   else
11039     /* Unexpected declarator format.  */
11040     my_friendly_abort (990210);
11041
11042   /* If this is declaring a typedef name, return a TYPE_DECL.  */
11043
11044   if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
11045     {
11046       tree decl;
11047
11048       /* Note that the grammar rejects storage classes
11049          in typenames, fields or parameters.  */
11050       if (current_lang_name == lang_name_java)
11051         TYPE_FOR_JAVA (type) = 1;
11052
11053       if (decl_context == FIELD)
11054         {
11055           if (declarator == constructor_name (current_class_type))
11056             cp_pedwarn ("ANSI C++ forbids nested type `%D' with same name as enclosing class",
11057                         declarator);
11058           decl = build_lang_decl (TYPE_DECL, declarator, type);
11059           if (IS_SIGNATURE (current_class_type) && opaque_typedef)
11060             SIGNATURE_HAS_OPAQUE_TYPEDECLS (current_class_type) = 1;
11061         }
11062       else
11063         {
11064           /* Make sure this typedef lives as long as its type,
11065              since it might be used as a template parameter. */
11066           if (type != error_mark_node)
11067             push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
11068           decl = build_decl (TYPE_DECL, declarator, type);
11069           if (type != error_mark_node)
11070             pop_obstacks ();
11071         }
11072
11073       /* If the user declares "struct {...} foo" then `foo' will have
11074          an anonymous name.  Fill that name in now.  Nothing can
11075          refer to it, so nothing needs know about the name change.
11076          The TYPE_NAME field was filled in by build_struct_xref.  */
11077       if (type != error_mark_node
11078           && TYPE_NAME (type)
11079           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
11080           && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type)))
11081         {
11082           tree oldname = TYPE_NAME (type);
11083           tree t;
11084
11085           /* FIXME: This is bogus; we should not be doing this for
11086                     cv-qualified types.  */
11087
11088           /* Replace the anonymous name with the real name everywhere.  */
11089           lookup_tag_reverse (type, declarator);
11090           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
11091             if (TYPE_NAME (t) == oldname)
11092               TYPE_NAME (t) = decl;
11093
11094           if (TYPE_LANG_SPECIFIC (type))
11095             TYPE_WAS_ANONYMOUS (type) = 1;
11096
11097           /* If this is a typedef within a template class, the nested
11098              type is a (non-primary) template.  The name for the
11099              template needs updating as well.  */
11100           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
11101             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)) 
11102               = TYPE_IDENTIFIER (type);
11103
11104           /* XXX Temporarily set the scope. 
11105              When returning, start_decl expects it as NULL_TREE,
11106              and will then then set it using pushdecl. */
11107           my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 980404);
11108           if (current_class_type)
11109             DECL_CONTEXT (decl) = current_class_type;
11110           else
11111             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
11112
11113           DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
11114           DECL_ASSEMBLER_NAME (decl)
11115             = get_identifier (build_overload_name (type, 1, 1));
11116           DECL_CONTEXT (decl) = NULL_TREE;
11117
11118           /* FIXME remangle member functions; member functions of a
11119              type with external linkage have external linkage.  */
11120         }
11121
11122       if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
11123         {
11124           cp_error_at ("typedef name may not be class-qualified", decl);
11125           return NULL_TREE;
11126         }
11127       else if (quals)
11128         {
11129           if (ctype == NULL_TREE)
11130             {
11131               if (TREE_CODE (type) != METHOD_TYPE)
11132                 cp_error_at ("invalid type qualifier for non-method type", decl);
11133               else
11134                 ctype = TYPE_METHOD_BASETYPE (type);
11135             }
11136           if (ctype != NULL_TREE)
11137             grok_method_quals (ctype, decl, quals);
11138         }
11139
11140       if (RIDBIT_SETP (RID_SIGNED, specbits)
11141           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
11142         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
11143
11144       if (RIDBIT_SETP (RID_MUTABLE, specbits))
11145         error ("non-object member `%s' cannot be declared mutable", name);
11146
11147       bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
11148                       inlinep, friendp, raises != NULL_TREE);
11149
11150       if (initialized)
11151         error ("typedef declaration includes an initializer");
11152
11153       return decl;
11154     }
11155
11156   /* Detect the case of an array type of unspecified size
11157      which came, as such, direct from a typedef name.
11158      We must copy the type, so that each identifier gets
11159      a distinct type, so that each identifier's size can be
11160      controlled separately by its own initializer.  */
11161
11162   if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
11163       && TYPE_DOMAIN (type) == NULL_TREE)
11164     {
11165       type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
11166     }
11167
11168   /* If this is a type name (such as, in a cast or sizeof),
11169      compute the type and return it now.  */
11170
11171   if (decl_context == TYPENAME)
11172     {
11173       /* Note that the grammar rejects storage classes
11174          in typenames, fields or parameters.  */
11175       if (type_quals != TYPE_UNQUALIFIED)
11176         {
11177           if (IS_SIGNATURE (type))
11178             error ("type qualifiers specified for signature type");
11179           type_quals = TYPE_UNQUALIFIED;
11180         }
11181
11182       /* Special case: "friend class foo" looks like a TYPENAME context.  */
11183       if (friendp)
11184         {
11185           if (type_quals != TYPE_UNQUALIFIED)
11186             {
11187               cp_error ("type qualifiers specified for friend class declaration");
11188               type_quals = TYPE_UNQUALIFIED;
11189             }
11190           if (inlinep)
11191             {
11192               cp_error ("`inline' specified for friend class declaration");
11193               inlinep = 0;
11194             }
11195
11196           /* Only try to do this stuff if we didn't already give up.  */
11197           if (type != integer_type_node)
11198             {
11199               /* A friendly class?  */
11200               if (current_class_type)
11201                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
11202               else
11203                 error ("trying to make class `%s' a friend of global scope",
11204                        TYPE_NAME_STRING (type));
11205               type = void_type_node;
11206             }
11207         }
11208       else if (quals)
11209         {
11210           tree dummy = build_decl (TYPE_DECL, declarator, type);
11211           if (ctype == NULL_TREE)
11212             {
11213               my_friendly_assert (TREE_CODE (type) == METHOD_TYPE, 159);
11214               ctype = TYPE_METHOD_BASETYPE (type);
11215             }
11216           grok_method_quals (ctype, dummy, quals);
11217           type = TREE_TYPE (dummy);
11218         }
11219
11220       return type;
11221     }
11222   else if (declarator == NULL_TREE && decl_context != PARM
11223            && decl_context != CATCHPARM
11224            && TREE_CODE (type) != UNION_TYPE
11225            && ! bitfield)
11226     {
11227       cp_error ("abstract declarator `%T' used as declaration", type);
11228       declarator = make_anon_name ();
11229     }
11230
11231   /* `void' at top level (not within pointer)
11232      is allowed only in typedefs or type names.
11233      We don't complain about parms either, but that is because
11234      a better error message can be made later.  */
11235
11236   if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
11237     {
11238       if (! declarator)
11239         error ("unnamed variable or field declared void");
11240       else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
11241         {
11242           if (IDENTIFIER_OPNAME_P (declarator))
11243             my_friendly_abort (356);
11244           else
11245             error ("variable or field `%s' declared void", name);
11246         }
11247       else
11248         error ("variable or field declared void");
11249       type = integer_type_node;
11250     }
11251
11252   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
11253      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
11254
11255   if (decl_context == PARM || decl_context == CATCHPARM)
11256     {
11257       if (ctype || in_namespace)
11258         error ("cannot use `::' in parameter declaration");
11259
11260       /* A parameter declared as an array of T is really a pointer to T.
11261          One declared as a function is really a pointer to a function.
11262          One declared as a member is really a pointer to member.  */
11263
11264       if (TREE_CODE (type) == ARRAY_TYPE)
11265         {
11266           /* Transfer const-ness of array into that of type pointed to.  */
11267           type = build_pointer_type (TREE_TYPE (type));
11268           type_quals = TYPE_UNQUALIFIED;
11269         }
11270       else if (TREE_CODE (type) == FUNCTION_TYPE)
11271         type = build_pointer_type (type);
11272       else if (TREE_CODE (type) == OFFSET_TYPE)
11273         type = build_pointer_type (type);
11274       else if (TREE_CODE (type) == VOID_TYPE && declarator)
11275         {
11276           error ("declaration of `%s' as void", name);
11277           return NULL_TREE;
11278         }
11279     }
11280   
11281   {
11282     register tree decl;
11283
11284     if (decl_context == PARM)
11285       {
11286         decl = build_decl (PARM_DECL, declarator, type);
11287
11288         bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
11289                         inlinep, friendp, raises != NULL_TREE);
11290         if (current_class_type
11291             && IS_SIGNATURE (current_class_type))
11292           {
11293             if (inlinep)
11294               error ("parameter of signature member function declared `inline'");
11295             if (RIDBIT_SETP (RID_AUTO, specbits))
11296               error ("parameter of signature member function declared `auto'");
11297             if (RIDBIT_SETP (RID_REGISTER, specbits))
11298               error ("parameter of signature member function declared `register'");
11299           }
11300
11301         /* Compute the type actually passed in the parmlist,
11302            for the case where there is no prototype.
11303            (For example, shorts and chars are passed as ints.)
11304            When there is a prototype, this is overridden later.  */
11305
11306         DECL_ARG_TYPE (decl) = type_promotes_to (type);
11307       }
11308     else if (decl_context == FIELD)
11309       {
11310         if (type == error_mark_node)
11311           {
11312             /* Happens when declaring arrays of sizes which
11313                are error_mark_node, for example.  */
11314             decl = NULL_TREE;
11315           }
11316         else if (in_namespace && !friendp)
11317           {
11318             /* Something like struct S { int N::j; };  */
11319             cp_error ("invalid use of `::'");
11320             decl = NULL_TREE;
11321           }
11322         else if (TREE_CODE (type) == FUNCTION_TYPE)
11323           {
11324             int publicp = 0;
11325             tree function_context;
11326
11327             /* We catch the others as conflicts with the builtin
11328                typedefs.  */
11329             if (friendp && declarator == ridpointers[(int) RID_SIGNED])
11330               {
11331                 cp_error ("function `%D' cannot be declared friend",
11332                           declarator);
11333                 friendp = 0;
11334               }
11335
11336             if (friendp == 0)
11337               {
11338                 if (ctype == NULL_TREE)
11339                   ctype = current_class_type;
11340
11341                 if (ctype == NULL_TREE)
11342                   {
11343                     cp_error ("can't make `%D' into a method -- not in a class",
11344                               declarator);
11345                     return void_type_node;
11346                   }
11347
11348                 /* ``A union may [ ... ] not [ have ] virtual functions.''
11349                    ARM 9.5 */
11350                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
11351                   {
11352                     cp_error ("function `%D' declared virtual inside a union",
11353                               declarator);
11354                     return void_type_node;
11355                   }
11356
11357                 if (declarator == ansi_opname[(int) NEW_EXPR]
11358                     || declarator == ansi_opname[(int) VEC_NEW_EXPR]
11359                     || declarator == ansi_opname[(int) DELETE_EXPR]
11360                     || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
11361                   {
11362                     if (virtualp)
11363                       {
11364                         cp_error ("`%D' cannot be declared virtual, since it is always static",
11365                                   declarator);
11366                         virtualp = 0;
11367                       }
11368                   }
11369                 else if (staticp < 2)
11370                   type = build_cplus_method_type (ctype, TREE_TYPE (type),
11371                                                   TYPE_ARG_TYPES (type));
11372               }
11373
11374             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
11375             function_context = (ctype != NULL_TREE) ? 
11376               hack_decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
11377             publicp = (! friendp || ! staticp)
11378               && function_context == NULL_TREE;
11379             decl = grokfndecl (ctype, type, 
11380                                TREE_CODE (declarator) != TEMPLATE_ID_EXPR
11381                                ? declarator : dname,
11382                                declarator,
11383                                virtualp, flags, quals, raises,
11384                                friendp ? -1 : 0, friendp, publicp, inlinep,
11385                                funcdef_flag, template_count, in_namespace);
11386             if (decl == NULL_TREE)
11387               return decl;
11388 #if 0
11389             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
11390             /* The decl and setting of decl_machine_attr is also turned off.  */
11391             decl = build_decl_attribute_variant (decl, decl_machine_attr);
11392 #endif
11393
11394             /* [class.conv.ctor]
11395
11396                A constructor declared without the function-specifier
11397                explicit that can be called with a single parameter
11398                specifies a conversion from the type of its first
11399                parameter to the type of its class.  Such a constructor
11400                is called a converting constructor.  */
11401             if (explicitp == 2)
11402               DECL_NONCONVERTING_P (decl) = 1;
11403             else if (DECL_CONSTRUCTOR_P (decl))
11404               {
11405                 /* The constructor can be called with exactly one
11406                    parameter if there is at least one parameter, and
11407                    any subsequent parameters have default arguments.
11408                    We don't look at the first parameter, which is
11409                    really just the `this' parameter for the new
11410                    object.  */
11411                 tree arg_types = 
11412                   TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)));
11413
11414                 /* Skip the `in_chrg' argument too, if present.  */
11415                 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (decl)))
11416                   arg_types = TREE_CHAIN (arg_types);
11417
11418                 /* And the `vlist' argument. */
11419                 if (TYPE_USES_PVBASES (DECL_CONTEXT (decl)))
11420                   arg_types = TREE_CHAIN (arg_types);
11421
11422                 if (arg_types == void_list_node
11423                     || (arg_types 
11424                         && TREE_CHAIN (arg_types) 
11425                         && TREE_CHAIN (arg_types) != void_list_node
11426                         && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
11427                   DECL_NONCONVERTING_P (decl) = 1;
11428               }
11429           }
11430         else if (TREE_CODE (type) == METHOD_TYPE)
11431           {
11432             /* We only get here for friend declarations of
11433                members of other classes.  */
11434             /* All method decls are public, so tell grokfndecl to set
11435                TREE_PUBLIC, also.  */
11436             decl = grokfndecl (ctype, type, declarator, declarator,
11437                                virtualp, flags, quals, raises,
11438                                friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
11439                                template_count, in_namespace);
11440             if (decl == NULL_TREE)
11441               return NULL_TREE;
11442           }
11443         else if (!staticp && ! processing_template_decl
11444                  && TYPE_SIZE (complete_type (type)) == NULL_TREE
11445                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
11446           {
11447             if (declarator)
11448               cp_error ("field `%D' has incomplete type", declarator);
11449             else
11450               cp_error ("name `%T' has incomplete type", type);
11451
11452             /* If we're instantiating a template, tell them which
11453                instantiation made the field's type be incomplete.  */
11454             if (current_class_type
11455                 && TYPE_NAME (current_class_type)
11456                 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
11457                 && declspecs && TREE_VALUE (declspecs)
11458                 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
11459               cp_error ("  in instantiation of template `%T'",
11460                         current_class_type);
11461
11462             type = error_mark_node;
11463             decl = NULL_TREE;
11464           }
11465         else
11466           {
11467             if (friendp)
11468               {
11469                 error ("`%s' is neither function nor method; cannot be declared friend",
11470                        IDENTIFIER_POINTER (declarator));
11471                 friendp = 0;
11472               }
11473             decl = NULL_TREE;
11474           }
11475
11476         if (friendp)
11477           {
11478             /* Friends are treated specially.  */
11479             if (ctype == current_class_type)
11480               warning ("member functions are implicitly friends of their class");
11481             else
11482               {
11483                 tree t = NULL_TREE;
11484                 if (decl && DECL_NAME (decl))
11485                   {
11486                     if (template_class_depth (current_class_type) == 0)
11487                       {
11488                         decl 
11489                           = check_explicit_specialization 
11490                           (declarator, decl,
11491                            template_count, 2 * (funcdef_flag != 0) + 4);
11492                         if (decl == error_mark_node)
11493                           return error_mark_node;
11494                       }
11495
11496                     t = do_friend (ctype, declarator, decl,
11497                                    last_function_parms, attrlist, flags, quals,
11498                                    funcdef_flag);
11499                   }
11500                 if (t && funcdef_flag)
11501                   return t;
11502                 
11503                 return void_type_node;
11504               }
11505           }
11506
11507         /* Structure field.  It may not be a function, except for C++ */
11508
11509         if (decl == NULL_TREE)
11510           {
11511             if (initialized)
11512               {
11513                 if (!staticp)
11514                   {
11515                     /* An attempt is being made to initialize a non-static
11516                        member.  But, from [class.mem]:
11517                        
11518                        4 A member-declarator can contain a
11519                        constant-initializer only if it declares a static
11520                        member (_class.static_) of integral or enumeration
11521                        type, see _class.static.data_.  
11522
11523                        This used to be relatively common practice, but
11524                        the rest of the compiler does not correctly
11525                        handle the initialization unless the member is
11526                        static so we make it static below.  */
11527                     cp_pedwarn ("ANSI C++ forbids initialization of member `%D'",
11528                                 declarator);
11529                     cp_pedwarn ("making `%D' static", declarator);
11530                     staticp = 1;
11531                   }
11532
11533                 if (uses_template_parms (type))
11534                   /* We'll check at instantiation time.  */
11535                   ;
11536                 else if (check_static_variable_definition (declarator,
11537                                                            type))
11538                   /* If we just return the declaration, crashes
11539                      will sometimes occur.  We therefore return
11540                      void_type_node, as if this was a friend
11541                      declaration, to cause callers to completely
11542                      ignore this declaration.  */
11543                   return void_type_node;
11544               }
11545
11546             /* 9.2p13 [class.mem] */
11547             if (declarator == constructor_name (current_class_type)
11548                 /* Divergence from the standard:  In extern "C", we
11549                    allow non-static data members here, because C does
11550                    and /usr/include/netinet/in.h uses that.  */
11551                 && (staticp || ! in_system_header))
11552               cp_pedwarn ("ANSI C++ forbids data member `%D' with same name as enclosing class",
11553                           declarator);
11554
11555             if (staticp)
11556               {
11557                 /* C++ allows static class members.
11558                    All other work for this is done by grokfield.
11559                    This VAR_DCL is built by build_lang_field_decl.
11560                    All other VAR_DECLs are built by build_decl.  */
11561                 decl = build_lang_field_decl (VAR_DECL, declarator, type);
11562                 TREE_STATIC (decl) = 1;
11563                 /* In class context, 'static' means public access.  */
11564                 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
11565               }
11566             else
11567               {
11568                 decl = build_lang_field_decl (FIELD_DECL, declarator, type);
11569                 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11570                   {
11571                     DECL_MUTABLE_P (decl) = 1;
11572                     RIDBIT_RESET (RID_MUTABLE, specbits);
11573                   }
11574               }
11575
11576             bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
11577                             inlinep, friendp, raises != NULL_TREE);
11578           }
11579       }
11580     else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
11581       {
11582         tree original_name;
11583         int publicp = 0;
11584
11585         if (! declarator)
11586           return NULL_TREE;
11587
11588         if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11589           original_name = dname;
11590         else
11591           original_name = declarator;
11592
11593         if (RIDBIT_SETP (RID_AUTO, specbits))
11594           error ("storage class `auto' invalid for function `%s'", name);
11595         else if (RIDBIT_SETP (RID_REGISTER, specbits))
11596           error ("storage class `register' invalid for function `%s'", name);
11597
11598         /* Function declaration not at top level.
11599            Storage classes other than `extern' are not allowed
11600            and `extern' makes no difference.  */
11601         if (! toplevel_bindings_p ()
11602             && (RIDBIT_SETP (RID_STATIC, specbits)
11603                 || RIDBIT_SETP (RID_INLINE, specbits))
11604             && pedantic)
11605           {
11606             if (RIDBIT_SETP (RID_STATIC, specbits))
11607               pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
11608             else
11609               pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
11610           }
11611         
11612         if (ctype == NULL_TREE)
11613           {
11614             if (virtualp)
11615               {
11616                 error ("virtual non-class function `%s'", name);
11617                 virtualp = 0;
11618               }
11619           }
11620         else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
11621           type = build_cplus_method_type (ctype, TREE_TYPE (type),
11622                                           TYPE_ARG_TYPES (type));
11623
11624         /* Record presence of `static'.  */
11625         publicp = (ctype != NULL_TREE
11626                    || RIDBIT_SETP (RID_EXTERN, specbits)
11627                    || !RIDBIT_SETP (RID_STATIC, specbits));
11628
11629         decl = grokfndecl (ctype, type, original_name, declarator,
11630                            virtualp, flags, quals, raises,
11631                            1, friendp,
11632                            publicp, inlinep, funcdef_flag, 
11633                            template_count, in_namespace);
11634         if (decl == NULL_TREE)
11635           return NULL_TREE;
11636
11637         if (staticp == 1)
11638           {
11639             int illegal_static = 0;
11640
11641             /* Don't allow a static member function in a class, and forbid
11642                declaring main to be static.  */
11643             if (TREE_CODE (type) == METHOD_TYPE)
11644               {
11645                 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
11646                 illegal_static = 1;
11647               }
11648             else if (current_function_decl)
11649               {
11650                 /* FIXME need arm citation */
11651                 error ("cannot declare static function inside another function");
11652                 illegal_static = 1;
11653               }
11654
11655             if (illegal_static)
11656               {
11657                 staticp = 0;
11658                 RIDBIT_RESET (RID_STATIC, specbits);
11659               }
11660           }
11661       }
11662     else
11663       {
11664         /* It's a variable.  */
11665
11666         /* An uninitialized decl with `extern' is a reference.  */
11667         decl = grokvardecl (type, declarator, &specbits, 
11668                             initialized, 
11669                             (type_quals & TYPE_QUAL_CONST) != 0, 
11670                             in_namespace);
11671         bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11672                         inlinep, friendp, raises != NULL_TREE);
11673
11674         if (ctype)
11675           {
11676             DECL_CONTEXT (decl) = ctype;
11677             if (staticp == 1)
11678               {
11679                 cp_pedwarn ("static member `%D' re-declared as static", decl);
11680                 staticp = 0;
11681                 RIDBIT_RESET (RID_STATIC, specbits);
11682               }
11683             if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11684               {
11685                 cp_error ("static member `%D' declared `register'", decl);
11686                 RIDBIT_RESET (RID_REGISTER, specbits);
11687               }
11688             if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
11689               {
11690                 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
11691                             decl);
11692                 RIDBIT_RESET (RID_EXTERN, specbits);
11693               }
11694           }
11695       }
11696
11697     if (RIDBIT_SETP (RID_MUTABLE, specbits))
11698       {
11699         error ("`%s' cannot be declared mutable", name);
11700       }
11701
11702     /* Record `register' declaration for warnings on &
11703        and in case doing stupid register allocation.  */
11704
11705     if (RIDBIT_SETP (RID_REGISTER, specbits))
11706       DECL_REGISTER (decl) = 1;
11707
11708     if (RIDBIT_SETP (RID_EXTERN, specbits))
11709       DECL_THIS_EXTERN (decl) = 1;
11710
11711     if (RIDBIT_SETP (RID_STATIC, specbits))
11712       DECL_THIS_STATIC (decl) = 1;
11713
11714     /* Record constancy and volatility.  */
11715     /* FIXME: Disallow `restrict' pointer-to-member declarations.  */
11716     c_apply_type_quals_to_decl (type_quals, decl);
11717
11718     return decl;
11719   }
11720 }
11721 \f
11722 /* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11723    An empty exprlist is a parmlist.  An exprlist which
11724    contains only identifiers at the global level
11725    is a parmlist.  Otherwise, it is an exprlist.  */
11726
11727 int
11728 parmlist_is_exprlist (exprs)
11729      tree exprs;
11730 {
11731   if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11732     return 0;
11733
11734   if (toplevel_bindings_p ())
11735     {
11736       /* At the global level, if these are all identifiers,
11737          then it is a parmlist.  */
11738       while (exprs)
11739         {
11740           if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11741             return 1;
11742           exprs = TREE_CHAIN (exprs);
11743         }
11744       return 0;
11745     }
11746   return 1;
11747 }
11748
11749 /* Subroutine of start_function.  Ensure that each of the parameter
11750    types (as listed in PARMS) is complete, as is required for a
11751    function definition.  */
11752
11753 static void
11754 require_complete_types_for_parms (parms)
11755      tree parms;
11756 {
11757   while (parms)
11758     {
11759       tree type = TREE_TYPE (parms);
11760       if (TYPE_SIZE (complete_type (type)) == NULL_TREE)
11761         {
11762           if (DECL_NAME (parms))
11763             error ("parameter `%s' has incomplete type",
11764                    IDENTIFIER_POINTER (DECL_NAME (parms)));
11765           else
11766             error ("parameter has incomplete type");
11767           TREE_TYPE (parms) = error_mark_node;
11768         }
11769       else
11770         layout_decl (parms, 0);
11771
11772       parms = TREE_CHAIN (parms);
11773     }
11774 }
11775
11776 /* Returns DECL if DECL is a local variable (or parameter).  Returns
11777    NULL_TREE otherwise.  */
11778
11779 static tree
11780 local_variable_p (t)
11781      tree t;
11782 {
11783   if ((TREE_CODE (t) == VAR_DECL 
11784        /* A VAR_DECL with a context that is a _TYPE is a static data
11785           member.  */
11786        && !TYPE_P (CP_DECL_CONTEXT (t))
11787        /* Any other non-local variable must be at namespace scope.  */
11788        && TREE_CODE (CP_DECL_CONTEXT (t)) != NAMESPACE_DECL)
11789       || (TREE_CODE (t) == PARM_DECL))
11790     return t;
11791
11792   return NULL_TREE;
11793 }
11794
11795 /* Check that ARG, which is a default-argument expression for a
11796    parameter DECL, is legal.  Returns ARG, or ERROR_MARK_NODE, if
11797    something goes wrong.  DECL may also be a _TYPE node, rather than a
11798    DECL, if there is no DECL available.  */
11799
11800 tree
11801 check_default_argument (decl, arg)
11802      tree decl;
11803      tree arg;
11804 {
11805   tree var;
11806   tree decl_type;
11807
11808   if (TREE_CODE (arg) == DEFAULT_ARG)
11809     /* We get a DEFAULT_ARG when looking at an in-class declaration
11810        with a default argument.  Ignore the argument for now; we'll
11811        deal with it after the class is complete.  */
11812     return arg;
11813
11814   if (processing_template_decl || uses_template_parms (arg))
11815     /* We don't do anything checking until instantiation-time.  Note
11816        that there may be uninstantiated arguments even for an
11817        instantiated function, since default arguments are not
11818        instantiated until they are needed.  */
11819     return arg;
11820
11821   if (TYPE_P (decl))
11822     {
11823       decl_type = decl;
11824       decl = NULL_TREE;
11825     }
11826   else
11827     decl_type = TREE_TYPE (decl);
11828
11829   if (arg == error_mark_node 
11830       || decl == error_mark_node
11831       || TREE_TYPE (arg) == error_mark_node
11832       || decl_type == error_mark_node)
11833     /* Something already went wrong.  There's no need to check
11834        further.  */
11835     return error_mark_node;
11836
11837   /* [dcl.fct.default]
11838      
11839      A default argument expression is implicitly converted to the
11840      parameter type.  */
11841   if (!TREE_TYPE (arg)
11842       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
11843     {
11844       if (decl)
11845         cp_error ("default argument for `%#D' has type `%T'", 
11846                   decl, TREE_TYPE (arg));
11847       else
11848         cp_error ("default argument for paramter of type `%T' has type `%T'",
11849                   decl_type, TREE_TYPE (arg));
11850
11851       return error_mark_node;
11852     }
11853
11854   /* [dcl.fct.default]
11855
11856      Local variables shall not be used in default argument
11857      expressions. 
11858
11859      The keyword `this' shall not be used in a default argument of a
11860      member function.  */
11861   var = search_tree (arg, local_variable_p);
11862   if (var)
11863     {
11864       cp_error ("default argument `%E' uses local variable `%D'",
11865                 arg, var);
11866       return error_mark_node;
11867     }
11868
11869   /* All is well.  */
11870   return arg;
11871 }
11872
11873 /* Decode the list of parameter types for a function type.
11874    Given the list of things declared inside the parens,
11875    return a list of types.
11876
11877    The list we receive can have three kinds of elements:
11878    an IDENTIFIER_NODE for names given without types,
11879    a TREE_LIST node for arguments given as typespecs or names with typespecs,
11880    or void_type_node, to mark the end of an argument list
11881    when additional arguments are not permitted (... was not used).
11882
11883    FUNCDEF_FLAG is nonzero for a function definition, 0 for
11884    a mere declaration.  A nonempty identifier-list gets an error message
11885    when FUNCDEF_FLAG is zero.
11886    If FUNCDEF_FLAG is 1, then parameter types must be complete.
11887    If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
11888
11889    If all elements of the input list contain types,
11890    we return a list of the types.
11891    If all elements contain no type (except perhaps a void_type_node
11892    at the end), we return a null list.
11893    If some have types and some do not, it is an error, and we
11894    return a null list.
11895
11896    Also set last_function_parms to either
11897    a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
11898    A list of names is converted to a chain of PARM_DECLs
11899    by store_parm_decls so that ultimately it is always a chain of decls.
11900
11901    Note that in C++, parameters can take default values.  These default
11902    values are in the TREE_PURPOSE field of the TREE_LIST.  It is
11903    an error to specify default values which are followed by parameters
11904    that have no default values, or an ELLIPSES.  For simplicities sake,
11905    only parameters which are specified with their types can take on
11906    default values.  */
11907
11908 static tree
11909 grokparms (first_parm, funcdef_flag)
11910      tree first_parm;
11911      int funcdef_flag;
11912 {
11913   tree result = NULL_TREE;
11914   tree decls = NULL_TREE;
11915
11916   if (first_parm != NULL_TREE
11917       && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
11918     {
11919       if (! funcdef_flag)
11920         pedwarn ("parameter names (without types) in function declaration");
11921       last_function_parms = first_parm;
11922       return NULL_TREE;
11923     }
11924   else if (first_parm != NULL_TREE
11925            && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
11926            && TREE_CODE (TREE_VALUE (first_parm)) != VOID_TYPE)
11927     my_friendly_abort (145);
11928   else
11929     {
11930       /* Types were specified.  This is a list of declarators
11931          each represented as a TREE_LIST node.  */
11932       register tree parm, chain;
11933       int any_init = 0, any_error = 0;
11934
11935       if (first_parm != NULL_TREE)
11936         {
11937           tree last_result = NULL_TREE;
11938           tree last_decl = NULL_TREE;
11939
11940           for (parm = first_parm; parm != NULL_TREE; parm = chain)
11941             {
11942               tree type = NULL_TREE, list_node = parm;
11943               register tree decl = TREE_VALUE (parm);
11944               tree init = TREE_PURPOSE (parm);
11945
11946               chain = TREE_CHAIN (parm);
11947               /* @@ weak defense against parse errors.  */
11948               if (TREE_CODE (decl) != VOID_TYPE 
11949                   && TREE_CODE (decl) != TREE_LIST)
11950                 {
11951                   /* Give various messages as the need arises.  */
11952                   if (TREE_CODE (decl) == STRING_CST)
11953                     cp_error ("invalid string constant `%E'", decl);
11954                   else if (TREE_CODE (decl) == INTEGER_CST)
11955                     error ("invalid integer constant in parameter list, did you forget to give parameter name?");
11956                   continue;
11957                 }
11958
11959               if (TREE_CODE (decl) != VOID_TYPE)
11960                 {
11961                   decl = grokdeclarator (TREE_VALUE (decl),
11962                                          TREE_PURPOSE (decl),
11963                                          PARM, init != NULL_TREE,
11964                                          NULL_TREE);
11965                   if (! decl || TREE_TYPE (decl) == error_mark_node)
11966                     continue;
11967
11968                   /* Top-level qualifiers on the parameters are
11969                      ignored for function types.  */
11970                   type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
11971
11972                   if (TREE_CODE (type) == VOID_TYPE)
11973                     decl = void_type_node;
11974                   else if (TREE_CODE (type) == METHOD_TYPE)
11975                     {
11976                       if (DECL_NAME (decl))
11977                         /* Cannot use the decl here because
11978                            we don't have DECL_CONTEXT set up yet.  */
11979                         cp_error ("parameter `%D' invalidly declared method type",
11980                                   DECL_NAME (decl));
11981                       else
11982                         error ("parameter invalidly declared method type");
11983                       type = build_pointer_type (type);
11984                       TREE_TYPE (decl) = type;
11985                     }
11986                   else if (TREE_CODE (type) == OFFSET_TYPE)
11987                     {
11988                       if (DECL_NAME (decl))
11989                         cp_error ("parameter `%D' invalidly declared offset type",
11990                                   DECL_NAME (decl));
11991                       else
11992                         error ("parameter invalidly declared offset type");
11993                       type = build_pointer_type (type);
11994                       TREE_TYPE (decl) = type;
11995                     }
11996                   else if (TREE_CODE (type) == RECORD_TYPE
11997                            && TYPE_LANG_SPECIFIC (type)
11998                            && CLASSTYPE_ABSTRACT_VIRTUALS (type))
11999                     {
12000                       abstract_virtuals_error (decl, type);
12001                       any_error = 1;  /* Seems like a good idea. */
12002                     }
12003                   else if (TREE_CODE (type) == RECORD_TYPE
12004                            && TYPE_LANG_SPECIFIC (type)
12005                            && IS_SIGNATURE (type))
12006                     {
12007                       signature_error (decl, type);
12008                       any_error = 1;  /* Seems like a good idea. */
12009                     }
12010                   else if (POINTER_TYPE_P (type))
12011                     {
12012                       tree t = type;
12013                       while (POINTER_TYPE_P (t)
12014                              || (TREE_CODE (t) == ARRAY_TYPE
12015                                  && TYPE_DOMAIN (t) != NULL_TREE))
12016                         t = TREE_TYPE (t);
12017                       if (TREE_CODE (t) == ARRAY_TYPE)
12018                         cp_error ("parameter type `%T' includes %s to array of unknown bound",
12019                                   type,
12020                                   TYPE_PTR_P (type) ? "pointer" : "reference");
12021                     }
12022                 }
12023
12024               if (TREE_CODE (decl) == VOID_TYPE)
12025                 {
12026                   if (result == NULL_TREE)
12027                     {
12028                       result = void_list_node;
12029                       last_result = result;
12030                     }
12031                   else
12032                     {
12033                       TREE_CHAIN (last_result) = void_list_node;
12034                       last_result = void_list_node;
12035                     }
12036                   if (chain
12037                       && (chain != void_list_node || TREE_CHAIN (chain)))
12038                     error ("`void' in parameter list must be entire list");
12039                   break;
12040                 }
12041
12042               /* Since there is a prototype, args are passed in their own types.  */
12043               DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
12044 #ifdef PROMOTE_PROTOTYPES
12045               if ((TREE_CODE (type) == INTEGER_TYPE
12046                    || TREE_CODE (type) == ENUMERAL_TYPE)
12047                   && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
12048                 DECL_ARG_TYPE (decl) = integer_type_node;
12049 #endif
12050               if (!any_error && init)
12051                 {
12052                   any_init++;
12053                   init = check_default_argument (decl, init);
12054                 }
12055               else
12056                 init = NULL_TREE;
12057
12058               if (decls == NULL_TREE)
12059                 {
12060                   decls = decl;
12061                   last_decl = decls;
12062                 }
12063               else
12064                 {
12065                   TREE_CHAIN (last_decl) = decl;
12066                   last_decl = decl;
12067                 }
12068               if (! current_function_decl && TREE_PERMANENT (list_node))
12069                 {
12070                   TREE_PURPOSE (list_node) = init;
12071                   TREE_VALUE (list_node) = type;
12072                   TREE_CHAIN (list_node) = NULL_TREE;
12073                 }
12074               else
12075                 list_node = saveable_tree_cons (init, type, NULL_TREE);
12076               if (result == NULL_TREE)
12077                 {
12078                   result = list_node;
12079                   last_result = result;
12080                 }
12081               else
12082                 {
12083                   TREE_CHAIN (last_result) = list_node;
12084                   last_result = list_node;
12085                 }
12086             }
12087           if (last_result)
12088             TREE_CHAIN (last_result) = NULL_TREE;
12089           /* If there are no parameters, and the function does not end
12090              with `...', then last_decl will be NULL_TREE.  */
12091           if (last_decl != NULL_TREE)
12092             TREE_CHAIN (last_decl) = NULL_TREE;
12093         }
12094     }
12095
12096   last_function_parms = decls;
12097
12098   return result;
12099 }
12100
12101 /* Called from the parser to update an element of TYPE_ARG_TYPES for some
12102    FUNCTION_TYPE with the newly parsed version of its default argument, which
12103    was previously digested as text.  See snarf_defarg et al in lex.c.  */
12104
12105 void
12106 replace_defarg (arg, init)
12107      tree arg, init;
12108 {
12109   if (! processing_template_decl
12110       && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
12111     cp_pedwarn ("invalid type `%T' for default argument to `%T'",
12112                 TREE_TYPE (init), TREE_VALUE (arg));
12113   TREE_PURPOSE (arg) = init;
12114 }
12115 \f
12116 /* Return 1 if D copies its arguments. This is used to test for copy
12117    constructors and copy assignment operators.  */
12118
12119 int
12120 copy_args_p (d)
12121      tree d;
12122 {
12123   tree t = FUNCTION_ARG_CHAIN (d);
12124   if (DECL_CONSTRUCTOR_P (d)
12125       && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (d)))
12126     { 
12127       t = TREE_CHAIN (t);
12128       if (TYPE_USES_PVBASES (DECL_CONTEXT (d)))
12129         t = TREE_CHAIN (t);
12130     }
12131   
12132   if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
12133       && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
12134           == DECL_CLASS_CONTEXT (d))
12135       && (TREE_CHAIN (t) == NULL_TREE
12136           || TREE_CHAIN (t) == void_list_node
12137           || TREE_PURPOSE (TREE_CHAIN (t))))
12138     return 1;
12139   return 0;
12140 }
12141
12142 /* These memoizing functions keep track of special properties which
12143    a class may have.  `grok_ctor_properties' notices whether a class
12144    has a constructor of the form X(X&), and also complains
12145    if the class has a constructor of the form X(X).
12146    `grok_op_properties' takes notice of the various forms of
12147    operator= which are defined, as well as what sorts of type conversion
12148    may apply.  Both functions take a FUNCTION_DECL as an argument.  */
12149
12150 int
12151 grok_ctor_properties (ctype, decl)
12152      tree ctype, decl;
12153 {
12154   tree parmtypes = FUNCTION_ARG_CHAIN (decl);
12155   tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
12156
12157   /* When a type has virtual baseclasses, a magical first int argument is
12158      added to any ctor so we can tell if the class has been initialized
12159      yet.  This could screw things up in this function, so we deliberately
12160      ignore the leading int if we're in that situation.  */
12161   if (TYPE_USES_VIRTUAL_BASECLASSES (ctype)
12162       && !CLASSTYPE_IS_TEMPLATE (ctype))
12163     {
12164       my_friendly_assert (parmtypes
12165                           && TREE_VALUE (parmtypes) == integer_type_node,
12166                           980529);
12167       parmtypes = TREE_CHAIN (parmtypes);
12168       parmtype = TREE_VALUE (parmtypes);
12169     }
12170
12171   if (TYPE_USES_PVBASES (ctype))
12172     {
12173       my_friendly_assert (parmtypes
12174                           && TREE_VALUE (parmtypes) == vlist_type_node,
12175                           980529);
12176       parmtypes = TREE_CHAIN (parmtypes);
12177       parmtype = TREE_VALUE (parmtypes);
12178     }
12179
12180   maybe_vlist_ctor_wrapper (decl, 0);
12181
12182   /* [class.copy]
12183
12184      A non-template constructor for class X is a copy constructor if
12185      its first parameter is of type X&, const X&, volatile X& or const
12186      volatile X&, and either there are no other parameters or else all
12187      other parameters have default arguments.  */
12188   if (TREE_CODE (parmtype) == REFERENCE_TYPE
12189       && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
12190       && (TREE_CHAIN (parmtypes) == NULL_TREE
12191           || TREE_CHAIN (parmtypes) == void_list_node
12192           || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
12193       && !(DECL_TEMPLATE_INSTANTIATION (decl)
12194            && is_member_template (DECL_TI_TEMPLATE (decl))))
12195     {
12196       TYPE_HAS_INIT_REF (ctype) = 1;
12197       if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
12198         TYPE_HAS_CONST_INIT_REF (ctype) = 1;
12199     }
12200   /* [class.copy]
12201
12202      A declaration of a constructor for a class X is ill-formed if its
12203      first parameter is of type (optionally cv-qualified) X and either
12204      there are no other parameters or else all other parameters have
12205      default arguments.  
12206
12207      We *don't* complain about member template instantiations that
12208      have this form, though; they can occur as we try to decide what
12209      constructor to use during overload resolution.  Since overload
12210      resolution will never prefer such a constructor to the
12211      non-template copy constructor (which is either explicitly or
12212      implicitly defined), there's no need to worry about their
12213      existence.  Theoretically, they should never even be
12214      instantiated, but that's hard to forestall.  */
12215   else if (TYPE_MAIN_VARIANT (parmtype) == ctype
12216            && (TREE_CHAIN (parmtypes) == NULL_TREE
12217                || TREE_CHAIN (parmtypes) == void_list_node
12218                || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
12219            && !(DECL_TEMPLATE_INSTANTIATION (decl)
12220                 && is_member_template (DECL_TI_TEMPLATE (decl))))
12221     {
12222       cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
12223                 ctype, ctype);
12224       SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
12225       return 0;
12226     }
12227   else if (TREE_CODE (parmtype) == VOID_TYPE
12228            || TREE_PURPOSE (parmtypes) != NULL_TREE)
12229     TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
12230
12231   return 1;
12232 }
12233
12234 /* An operator with this name can be either unary or binary.  */
12235
12236 static int
12237 ambi_op_p (name)
12238      tree name;
12239 {
12240   return (name == ansi_opname [(int) INDIRECT_REF]
12241           || name == ansi_opname [(int) ADDR_EXPR]
12242           || name == ansi_opname [(int) NEGATE_EXPR]
12243           || name == ansi_opname[(int) POSTINCREMENT_EXPR]
12244           || name == ansi_opname[(int) POSTDECREMENT_EXPR]
12245           || name == ansi_opname [(int) CONVERT_EXPR]);
12246 }
12247
12248 /* An operator with this name can only be unary.  */
12249
12250 static int
12251 unary_op_p (name)
12252      tree name;
12253 {
12254   return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
12255           || name == ansi_opname [(int) BIT_NOT_EXPR]
12256           || name == ansi_opname [(int) COMPONENT_REF]
12257           || IDENTIFIER_TYPENAME_P (name));
12258 }
12259
12260 /* Do a little sanity-checking on how they declared their operator.  */
12261
12262 void
12263 grok_op_properties (decl, virtualp, friendp)
12264      tree decl;
12265      int virtualp, friendp;
12266 {
12267   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
12268   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
12269   tree name = DECL_NAME (decl);
12270
12271   if (current_class_type == NULL_TREE)
12272     friendp = 1;
12273
12274   if (! friendp)
12275     {
12276       /* [class.copy]
12277
12278          A user-declared copy assignment operator X::operator= is a
12279          non-static non-template member function of class X with
12280          exactly one parameter of type X, X&, const X&, volatile X& or
12281          const volatile X&.  */
12282       if (name == ansi_opname[(int) MODIFY_EXPR]
12283           && !(DECL_TEMPLATE_INSTANTIATION (decl)
12284                && is_member_template (DECL_TI_TEMPLATE (decl))))
12285         ;
12286       else if (name == ansi_opname[(int) CALL_EXPR])
12287         TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
12288       else if (name == ansi_opname[(int) ARRAY_REF])
12289         TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
12290       else if (name == ansi_opname[(int) COMPONENT_REF]
12291                || name == ansi_opname[(int) MEMBER_REF])
12292         TYPE_OVERLOADS_ARROW (current_class_type) = 1;
12293       else if (name == ansi_opname[(int) NEW_EXPR])
12294         TYPE_GETS_NEW (current_class_type) |= 1;
12295       else if (name == ansi_opname[(int) DELETE_EXPR])
12296         TYPE_GETS_DELETE (current_class_type) |= 1;
12297       else if (name == ansi_opname[(int) VEC_NEW_EXPR])
12298         TYPE_GETS_NEW (current_class_type) |= 2;
12299       else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
12300         TYPE_GETS_DELETE (current_class_type) |= 2;
12301     }
12302
12303   if (name == ansi_opname[(int) NEW_EXPR]
12304       || name == ansi_opname[(int) VEC_NEW_EXPR])
12305     {
12306       /* When the compiler encounters the definition of A::operator new, it
12307          doesn't look at the class declaration to find out if it's static.  */
12308       if (methodp)
12309         revert_static_member_fn (&decl, NULL, NULL);
12310      
12311       /* Take care of function decl if we had syntax errors.  */
12312       if (argtypes == NULL_TREE)
12313         TREE_TYPE (decl)
12314           = build_function_type (ptr_type_node,
12315                                  hash_tree_chain (integer_type_node,
12316                                                   void_list_node));
12317       else
12318         TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
12319     }
12320   else if (name == ansi_opname[(int) DELETE_EXPR]
12321            || name == ansi_opname[(int) VEC_DELETE_EXPR])
12322     {
12323       if (methodp)
12324         revert_static_member_fn (&decl, NULL, NULL);
12325      
12326       if (argtypes == NULL_TREE)
12327         TREE_TYPE (decl)
12328           = build_function_type (void_type_node,
12329                                  hash_tree_chain (ptr_type_node,
12330                                                   void_list_node));
12331       else
12332         {
12333           TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
12334
12335           if (! friendp && name == ansi_opname[(int) VEC_DELETE_EXPR]
12336               && (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
12337                   != void_list_node))
12338             TYPE_VEC_DELETE_TAKES_SIZE (current_class_type) = 1;
12339         }
12340     }
12341   else
12342     {
12343       /* An operator function must either be a non-static member function
12344          or have at least one parameter of a class, a reference to a class,
12345          an enumeration, or a reference to an enumeration.  13.4.0.6 */
12346       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
12347         {
12348           if (IDENTIFIER_TYPENAME_P (name)
12349               || name == ansi_opname[(int) CALL_EXPR]
12350               || name == ansi_opname[(int) MODIFY_EXPR]
12351               || name == ansi_opname[(int) COMPONENT_REF]
12352               || name == ansi_opname[(int) ARRAY_REF])
12353             cp_error ("`%D' must be a nonstatic member function", decl);
12354           else
12355             {
12356               tree p = argtypes;
12357
12358               if (DECL_STATIC_FUNCTION_P (decl))
12359                 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
12360
12361               if (p)
12362                 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
12363                   {
12364                     tree arg = TREE_VALUE (p);
12365                     if (TREE_CODE (arg) == REFERENCE_TYPE)
12366                       arg = TREE_TYPE (arg);
12367
12368                     /* This lets bad template code slip through.  */
12369                     if (IS_AGGR_TYPE (arg)
12370                         || TREE_CODE (arg) == ENUMERAL_TYPE
12371                         || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
12372                         || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
12373                       goto foundaggr;
12374                   }
12375               cp_error
12376                 ("`%D' must have an argument of class or enumerated type",
12377                  decl);
12378             foundaggr:
12379               ;
12380             }
12381         }
12382       
12383       if (name == ansi_opname[(int) CALL_EXPR])
12384         return;                 /* No restrictions on args. */
12385
12386       if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
12387         {
12388           tree t = TREE_TYPE (name);
12389           if (TREE_CODE (t) == VOID_TYPE)
12390             pedwarn ("void is not a valid type conversion operator");
12391           else if (! friendp)
12392             {
12393               int ref = (TREE_CODE (t) == REFERENCE_TYPE);
12394               const char *what = 0;
12395               if (ref)
12396                 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
12397
12398               if (t == current_class_type)
12399                 what = "the same type";
12400               /* Don't force t to be complete here.  */
12401               else if (IS_AGGR_TYPE (t)
12402                        && TYPE_SIZE (t)
12403                        && DERIVED_FROM_P (t, current_class_type))
12404                 what = "a base class";
12405
12406               if (what)
12407                 warning ("conversion to %s%s will never use a type conversion operator",
12408                          ref ? "a reference to " : "", what);
12409             }
12410         }
12411
12412       if (name == ansi_opname[(int) MODIFY_EXPR])
12413         {
12414           tree parmtype;
12415
12416           if (list_length (argtypes) != 3 && methodp)
12417             {
12418               cp_error ("`%D' must take exactly one argument", decl);
12419               return;
12420             }
12421           parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
12422
12423           if (copy_assignment_arg_p (parmtype, virtualp)
12424               && ! friendp)
12425             {
12426               TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
12427               if (TREE_CODE (parmtype) != REFERENCE_TYPE
12428                   || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
12429                 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
12430             }
12431         }
12432       else if (name == ansi_opname[(int) COND_EXPR])
12433         {
12434           /* 13.4.0.3 */
12435           pedwarn ("ANSI C++ prohibits overloading operator ?:");
12436           if (list_length (argtypes) != 4)
12437             cp_error ("`%D' must take exactly three arguments", decl);
12438         }         
12439       else if (ambi_op_p (name))
12440         {
12441           if (list_length (argtypes) == 2)
12442             /* prefix */;
12443           else if (list_length (argtypes) == 3)
12444             {
12445               if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
12446                    || name == ansi_opname[(int) POSTDECREMENT_EXPR])
12447                   && ! processing_template_decl
12448                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
12449                 {
12450                   if (methodp)
12451                     cp_error ("postfix `%D' must take `int' as its argument",
12452                               decl);
12453                   else
12454                     cp_error
12455                       ("postfix `%D' must take `int' as its second argument",
12456                        decl);
12457                 }
12458             }
12459           else
12460             {
12461               if (methodp)
12462                 cp_error ("`%D' must take either zero or one argument", decl);
12463               else
12464                 cp_error ("`%D' must take either one or two arguments", decl);
12465             }
12466
12467           /* More Effective C++ rule 6.  */
12468           if (warn_ecpp
12469               && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12470                   || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
12471             {
12472               tree arg = TREE_VALUE (argtypes);
12473               tree ret = TREE_TYPE (TREE_TYPE (decl));
12474               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
12475                 arg = TREE_TYPE (arg);
12476               arg = TYPE_MAIN_VARIANT (arg);
12477               if (list_length (argtypes) == 2)
12478                 {
12479                   if (TREE_CODE (ret) != REFERENCE_TYPE
12480                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
12481                                        arg))
12482                     cp_warning ("prefix `%D' should return `%T'", decl,
12483                                 build_reference_type (arg));
12484                 }
12485               else
12486                 {
12487                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
12488                     cp_warning ("postfix `%D' should return `%T'", decl, arg);
12489                 }
12490             }
12491         }
12492       else if (unary_op_p (name))
12493         {
12494           if (list_length (argtypes) != 2)
12495             {
12496               if (methodp)
12497                 cp_error ("`%D' must take `void'", decl);
12498               else
12499                 cp_error ("`%D' must take exactly one argument", decl);
12500             }
12501         }
12502       else /* if (binary_op_p (name)) */
12503         {
12504           if (list_length (argtypes) != 3)
12505             {
12506               if (methodp)
12507                 cp_error ("`%D' must take exactly one argument", decl);
12508               else
12509                 cp_error ("`%D' must take exactly two arguments", decl);
12510             }
12511
12512           /* More Effective C++ rule 7.  */
12513           if (warn_ecpp
12514               && (name == ansi_opname [TRUTH_ANDIF_EXPR]
12515                   || name == ansi_opname [TRUTH_ORIF_EXPR]
12516                   || name == ansi_opname [COMPOUND_EXPR]))
12517             cp_warning ("user-defined `%D' always evaluates both arguments",
12518                         decl);
12519         }
12520
12521       /* Effective C++ rule 23.  */
12522       if (warn_ecpp
12523           && list_length (argtypes) == 3
12524           && (name == ansi_opname [PLUS_EXPR]
12525               || name == ansi_opname [MINUS_EXPR]
12526               || name == ansi_opname [TRUNC_DIV_EXPR]
12527               || name == ansi_opname [MULT_EXPR])
12528           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
12529         cp_warning ("`%D' should return by value", decl);
12530
12531       /* 13.4.0.8 */
12532       if (argtypes)
12533         for (; argtypes != void_list_node ; argtypes = TREE_CHAIN (argtypes))
12534           if (TREE_PURPOSE (argtypes))
12535             {
12536               TREE_PURPOSE (argtypes) = NULL_TREE;
12537               if (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12538                   || name == ansi_opname[(int) POSTDECREMENT_EXPR])
12539                 {
12540                   if (pedantic)
12541                     cp_pedwarn ("`%D' cannot have default arguments", decl);
12542                 }
12543               else
12544                 cp_error ("`%D' cannot have default arguments", decl);
12545             }
12546     }
12547 }
12548 \f
12549 static const char *
12550 tag_name (code)
12551      enum tag_types code;
12552 {
12553   switch (code)
12554     {
12555     case record_type:
12556       return "struct";
12557     case class_type:
12558       return "class";
12559     case union_type:
12560       return "union ";
12561     case enum_type:
12562       return "enum";
12563     case signature_type:
12564       return "signature";
12565     default:
12566       my_friendly_abort (981122);
12567     }
12568 }
12569
12570 /* Get the struct, enum or union (CODE says which) with tag NAME.
12571    Define the tag as a forward-reference if it is not defined.
12572
12573    C++: If a class derivation is given, process it here, and report
12574    an error if multiple derivation declarations are not identical.
12575
12576    If this is a definition, come in through xref_tag and only look in
12577    the current frame for the name (since C++ allows new names in any
12578    scope.)  */
12579
12580 tree
12581 xref_tag (code_type_node, name, globalize)
12582      tree code_type_node;
12583      tree name;
12584      int globalize;
12585 {
12586   enum tag_types tag_code;
12587   enum tree_code code;
12588   int temp = 0;
12589   register tree ref, t;
12590   struct binding_level *b = current_binding_level;
12591   int got_type = 0;
12592   tree attributes = NULL_TREE;
12593   tree context = NULL_TREE;
12594
12595   /* If we are called from the parser, code_type_node will sometimes be a
12596      TREE_LIST.  This indicates that the user wrote
12597      "class __attribute__ ((foo)) bar".  Extract the attributes so we can
12598      use them later.  */
12599   if (TREE_CODE (code_type_node) == TREE_LIST)
12600     {
12601       attributes = TREE_PURPOSE (code_type_node);
12602       code_type_node = TREE_VALUE (code_type_node);
12603     }
12604
12605   tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12606   switch (tag_code)
12607     {
12608     case record_type:
12609     case class_type:
12610     case signature_type:
12611       code = RECORD_TYPE;
12612       break;
12613     case union_type:
12614       code = UNION_TYPE;
12615       break;
12616     case enum_type:
12617       code = ENUMERAL_TYPE;
12618       break;
12619     default:
12620       my_friendly_abort (18);
12621     }
12622
12623   /* If a cross reference is requested, look up the type
12624      already defined for this tag and return it.  */
12625   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
12626     {
12627       t = name;
12628       name = TYPE_IDENTIFIER (t);
12629       got_type = 1;
12630     }
12631   else
12632     t = IDENTIFIER_TYPE_VALUE (name);
12633
12634   if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
12635       && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
12636     t = NULL_TREE;
12637
12638   if (! globalize)
12639     {
12640       /* If we know we are defining this tag, only look it up in
12641          this scope and don't try to find it as a type.  */
12642       ref = lookup_tag (code, name, b, 1);
12643     }
12644   else
12645     {
12646       if (t)
12647         {
12648           /* [dcl.type.elab] If the identifier resolves to a
12649              typedef-name or a template type-parameter, the
12650              elaborated-type-specifier is ill-formed.  */
12651           if (t != TYPE_MAIN_VARIANT (t)
12652               || (CLASS_TYPE_P (t) && TYPE_WAS_ANONYMOUS (t)))
12653             cp_pedwarn ("using typedef-name `%D' after `%s'",
12654                         TYPE_NAME (t), tag_name (tag_code));
12655           else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
12656             cp_error ("using template type parameter `%T' after `%s'",
12657                       t, tag_name (tag_code));
12658
12659           ref = t;
12660         }
12661       else
12662         ref = lookup_tag (code, name, b, 0);
12663           
12664       if (! ref)
12665         {
12666           /* Try finding it as a type declaration.  If that wins,
12667              use it.  */ 
12668           ref = lookup_name (name, 1);
12669
12670           if (ref != NULL_TREE
12671               && processing_template_decl
12672               && DECL_CLASS_TEMPLATE_P (ref)
12673               && template_class_depth (current_class_type) == 0)
12674             /* Since GLOBALIZE is true, we're declaring a global
12675                template, so we want this type.  */
12676             ref = DECL_RESULT (ref);
12677
12678           if (ref && TREE_CODE (ref) == TYPE_DECL
12679               && TREE_CODE (TREE_TYPE (ref)) == code)
12680             ref = TREE_TYPE (ref);
12681           else
12682             ref = NULL_TREE;
12683         }
12684
12685       if (ref && current_class_type 
12686           && template_class_depth (current_class_type) 
12687           && PROCESSING_REAL_TEMPLATE_DECL_P ()) 
12688         {
12689           /* Since GLOBALIZE is non-zero, we are not looking at a
12690              definition of this tag.  Since, in addition, we are currently
12691              processing a (member) template declaration of a template
12692              class, we must be very careful; consider:
12693
12694                template <class X>
12695                struct S1
12696
12697                template <class U>
12698                struct S2
12699                { template <class V>
12700                friend struct S1; };
12701
12702              Here, the S2::S1 declaration should not be confused with the
12703              outer declaration.  In particular, the inner version should
12704              have a template parameter of level 2, not level 1.  This
12705              would be particularly important if the member declaration
12706              were instead:
12707
12708                template <class V = U> friend struct S1;
12709
12710              say, when we should tsubst into `U' when instantiating
12711              S2.  On the other hand, when presented with:
12712
12713                  template <class T>
12714                  struct S1 {
12715                    template <class U>
12716                    struct S2 {};
12717                    template <class U>
12718                    friend struct S2;
12719                  };
12720
12721               we must find the inner binding eventually.  We
12722               accomplish this by making sure that the new type we
12723               create to represent this declaration has the right
12724               TYPE_CONTEXT.  */
12725           context = TYPE_CONTEXT (ref);
12726           ref = NULL_TREE;
12727         }
12728     }
12729
12730   push_obstacks_nochange ();
12731
12732   if (! ref)
12733     {
12734       /* If no such tag is yet defined, create a forward-reference node
12735          and record it as the "definition".
12736          When a real declaration of this type is found,
12737          the forward-reference will be altered into a real type.  */
12738
12739       /* In C++, since these migrate into the global scope, we must
12740          build them on the permanent obstack.  */
12741
12742       temp = allocation_temporary_p ();
12743       if (temp)
12744         end_temporary_allocation ();
12745
12746       if (code == ENUMERAL_TYPE)
12747         {
12748           cp_error ("use of enum `%#D' without previous declaration", name);
12749
12750           ref = make_node (ENUMERAL_TYPE);
12751
12752           /* Give the type a default layout like unsigned int
12753              to avoid crashing if it does not get defined.  */
12754           TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12755           TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
12756           TREE_UNSIGNED (ref) = 1;
12757           TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12758           TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12759           TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12760
12761           /* Enable us to recognize when a type is created in class context.
12762              To do nested classes correctly, this should probably be cleared
12763              out when we leave this classes scope.  Currently this in only
12764              done in `start_enum'.  */
12765
12766           pushtag (name, ref, globalize);
12767         }
12768       else
12769         {
12770           struct binding_level *old_b = class_binding_level;
12771
12772           ref = make_lang_type (code);
12773           TYPE_CONTEXT (ref) = context;
12774
12775           if (tag_code == signature_type)
12776             {
12777               SET_SIGNATURE (ref);
12778               /* Since a signature type will be turned into the type
12779                  of signature tables, it's not only an interface.  */
12780               CLASSTYPE_INTERFACE_ONLY (ref) = 0;
12781               SET_CLASSTYPE_INTERFACE_KNOWN (ref);
12782               /* A signature doesn't have a vtable.  */
12783               CLASSTYPE_VTABLE_NEEDS_WRITING (ref) = 0;
12784             }
12785
12786 #ifdef NONNESTED_CLASSES
12787           /* Class types don't nest the way enums do.  */
12788           class_binding_level = (struct binding_level *)0;
12789 #endif
12790           pushtag (name, ref, globalize);
12791           class_binding_level = old_b;
12792         }
12793     }
12794   else
12795     {
12796       /* If it no longer looks like a nested type, make sure it's
12797          in global scope.  
12798          If it is not an IDENTIFIER, this is not a declaration */
12799       if (b->namespace_p && !class_binding_level
12800           && TREE_CODE (name) == IDENTIFIER_NODE)
12801         {
12802           if (IDENTIFIER_NAMESPACE_VALUE (name) == NULL_TREE)
12803             SET_IDENTIFIER_NAMESPACE_VALUE (name, TYPE_NAME (ref));
12804         }
12805
12806       if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
12807         redeclare_class_template (ref, current_template_parms);
12808     }
12809
12810   /* Until the type is defined, tentatively accept whatever
12811      structure tag the user hands us.  */
12812   if (TYPE_SIZE (ref) == NULL_TREE
12813       && ref != current_class_type
12814       /* Have to check this, in case we have contradictory tag info.  */
12815       && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12816     {
12817       if (tag_code == class_type)
12818         CLASSTYPE_DECLARED_CLASS (ref) = 1;
12819       else if (tag_code == record_type || tag_code == signature_type)
12820         CLASSTYPE_DECLARED_CLASS (ref) = 0;
12821     }
12822
12823   pop_obstacks ();
12824
12825   TREE_TYPE (ref) = attributes;
12826
12827   return ref;
12828 }
12829
12830 tree
12831 xref_tag_from_type (old, id, globalize)
12832      tree old, id;
12833      int globalize;
12834 {
12835   tree code_type_node;
12836
12837   if (TREE_CODE (old) == RECORD_TYPE)
12838     code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12839                       ? class_type_node : record_type_node);
12840   else
12841     code_type_node = union_type_node;
12842
12843   if (id == NULL_TREE)
12844     id = TYPE_IDENTIFIER (old);
12845
12846   return xref_tag (code_type_node, id, globalize);
12847 }
12848
12849 /* REF is a type (named NAME), for which we have just seen some
12850    baseclasses.  BINFO is a list of those baseclasses; the
12851    TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
12852    the base-class.  CODE_TYPE_NODE indicates whether REF is a class,
12853    struct, or union.  */
12854
12855 void
12856 xref_basetypes (code_type_node, name, ref, binfo)
12857      tree code_type_node;
12858      tree name, ref;
12859      tree binfo;
12860 {
12861   /* In the declaration `A : X, Y, ... Z' we mark all the types
12862      (A, X, Y, ..., Z) so we can check for duplicates.  */
12863   tree binfos;
12864   tree base;
12865
12866   int i, len;
12867   enum tag_types tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12868
12869   if (tag_code == union_type)
12870     {
12871       cp_error ("derived union `%T' invalid", ref);
12872       return;
12873     }
12874
12875   len = list_length (binfo);
12876   push_obstacks (TYPE_OBSTACK (ref), TYPE_OBSTACK (ref));
12877
12878   /* First, make sure that any templates in base-classes are
12879      instantiated.  This ensures that if we call ourselves recursively
12880      we do not get confused about which classes are marked and which
12881      are not.  */
12882   for (base = binfo; base; base = TREE_CHAIN (base))
12883     complete_type (TREE_VALUE (base));
12884
12885   SET_CLASSTYPE_MARKED (ref);
12886   BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12887
12888   for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12889     {
12890       /* The base of a derived struct is public by default.  */
12891       int via_public
12892         = (TREE_PURPOSE (binfo) == access_public_node
12893            || TREE_PURPOSE (binfo) == access_public_virtual_node
12894            || (tag_code != class_type
12895                && (TREE_PURPOSE (binfo) == access_default_node
12896                    || TREE_PURPOSE (binfo) == access_default_virtual_node)));
12897       int via_protected
12898         = (TREE_PURPOSE (binfo) == access_protected_node
12899            || TREE_PURPOSE (binfo) == access_protected_virtual_node);
12900       int via_virtual
12901         = (TREE_PURPOSE (binfo) == access_private_virtual_node
12902            || TREE_PURPOSE (binfo) == access_protected_virtual_node
12903            || TREE_PURPOSE (binfo) == access_public_virtual_node
12904            || TREE_PURPOSE (binfo) == access_default_virtual_node);
12905       tree basetype = TREE_VALUE (binfo);
12906       tree base_binfo;
12907
12908       if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12909         basetype = TREE_TYPE (basetype);
12910       if (!basetype
12911           || (TREE_CODE (basetype) != RECORD_TYPE
12912               && TREE_CODE (basetype) != TYPENAME_TYPE
12913               && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
12914               && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
12915         {
12916           cp_error ("base type `%T' fails to be a struct or class type",
12917                     TREE_VALUE (binfo));
12918           continue;
12919         }
12920
12921       GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
12922
12923       /* This code replaces similar code in layout_basetypes.
12924          We put the complete_type first for implicit `typename'.  */
12925       if (TYPE_SIZE (basetype) == NULL_TREE
12926           && ! (current_template_parms && uses_template_parms (basetype)))
12927         {
12928           cp_error ("base class `%T' has incomplete type", basetype);
12929           continue;
12930         }
12931       else
12932         {
12933           if (CLASSTYPE_MARKED (basetype))
12934             {
12935               if (basetype == ref)
12936                 cp_error ("recursive type `%T' undefined", basetype);
12937               else
12938                 cp_error ("duplicate base type `%T' invalid", basetype);
12939               continue;
12940             }
12941
12942           if (TYPE_FOR_JAVA (basetype)
12943               && current_lang_stack == current_lang_base)
12944             TYPE_FOR_JAVA (ref) = 1;
12945
12946           /* Note that the BINFO records which describe individual
12947              inheritances are *not* shared in the lattice!  They
12948              cannot be shared because a given baseclass may be
12949              inherited with different `accessibility' by different
12950              derived classes.  (Each BINFO record describing an
12951              individual inheritance contains flags which say what
12952              the `accessibility' of that particular inheritance is.)  */
12953   
12954           base_binfo 
12955             = make_binfo (integer_zero_node, basetype,
12956                           CLASS_TYPE_P (basetype)
12957                           ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12958                           CLASS_TYPE_P (basetype)
12959                           ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
12960  
12961           TREE_VEC_ELT (binfos, i) = base_binfo;
12962           TREE_VIA_PUBLIC (base_binfo) = via_public;
12963           TREE_VIA_PROTECTED (base_binfo) = via_protected;
12964           TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12965           BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12966
12967           /* We need to unshare the binfos now so that lookups during class
12968              definition work.  */
12969           unshare_base_binfos (base_binfo);
12970
12971           SET_CLASSTYPE_MARKED (basetype);
12972
12973           /* We are free to modify these bits because they are meaningless
12974              at top level, and BASETYPE is a top-level type.  */
12975           if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
12976             {
12977               TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
12978               TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12979               /* The PVBASES flag is never set for templates; we know
12980                  only for instantiations whether the virtual bases are
12981                  polymorphic. */
12982               if (flag_vtable_thunks >= 2 && !CLASSTYPE_IS_TEMPLATE (ref))
12983                 {
12984                   if (via_virtual && TYPE_VIRTUAL_P (basetype))
12985                     TYPE_USES_PVBASES (ref) = 1;
12986                   else if (TYPE_USES_PVBASES (basetype))
12987                     TYPE_USES_PVBASES (ref) = 1;
12988                 }
12989             }
12990
12991           if (CLASS_TYPE_P (basetype))
12992             {
12993               TYPE_GETS_NEW (ref) |= TYPE_GETS_NEW (basetype);
12994               TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12995             }
12996
12997           i += 1;
12998         }
12999     }
13000   if (i)
13001     TREE_VEC_LENGTH (binfos) = i;
13002   else
13003     BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
13004
13005   if (i > 1)
13006     TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
13007   else if (i == 1)
13008     {
13009       tree basetype = BINFO_TYPE (TREE_VEC_ELT (binfos, 0));
13010       
13011       if (CLASS_TYPE_P (basetype))
13012         TYPE_USES_MULTIPLE_INHERITANCE (ref)
13013           = TYPE_USES_MULTIPLE_INHERITANCE (basetype);
13014     }
13015
13016   if (TYPE_USES_MULTIPLE_INHERITANCE (ref))
13017     TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
13018
13019   /* Unmark all the types.  */
13020   while (--i >= 0)
13021     CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
13022   CLEAR_CLASSTYPE_MARKED (ref);
13023
13024   /* Now that we know all the base-classes, set up the list of virtual
13025      bases.  */
13026   CLASSTYPE_VBASECLASSES (ref) = get_vbase_types (ref);
13027
13028   pop_obstacks ();
13029 }
13030   
13031 \f
13032 /* Begin compiling the definition of an enumeration type.
13033    NAME is its name (or null if anonymous).
13034    Returns the type object, as yet incomplete.
13035    Also records info about it so that build_enumerator
13036    may be used to declare the individual values as they are read.  */
13037
13038 tree
13039 start_enum (name)
13040      tree name;
13041 {
13042   register tree enumtype = NULL_TREE;
13043   struct binding_level *b = current_binding_level;
13044
13045   /* We are wasting space here and putting these on the permanent_obstack so
13046      that typeid(local enum) will work correctly. */
13047   push_obstacks (&permanent_obstack, &permanent_obstack);
13048
13049   /* If this is the real definition for a previous forward reference,
13050      fill in the contents in the same object that used to be the
13051      forward reference.  */
13052
13053   if (name != NULL_TREE)
13054     enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
13055
13056   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
13057     cp_error ("multiple definition of `%#T'", enumtype);
13058   else
13059     {
13060       enumtype = make_node (ENUMERAL_TYPE);
13061       pushtag (name, enumtype, 0);
13062     }
13063
13064   if (current_class_type)
13065     TREE_ADDRESSABLE (b->tags) = 1;
13066
13067   /* We don't copy this value because build_enumerator needs to do it.  */
13068   enum_next_value = integer_zero_node;
13069   enum_overflow = 0;
13070
13071   GNU_xref_decl (current_function_decl, enumtype);
13072   return enumtype;
13073 }
13074
13075 /* After processing and defining all the values of an enumeration type,
13076    install their decls in the enumeration type and finish it off.
13077    ENUMTYPE is the type object and VALUES a list of name-value pairs.
13078    Returns ENUMTYPE.  */
13079
13080 tree
13081 finish_enum (enumtype)
13082      tree enumtype;
13083 {
13084   register tree minnode = NULL_TREE, maxnode = NULL_TREE;
13085   /* Calculate the maximum value of any enumerator in this type.  */
13086
13087   tree values = TYPE_VALUES (enumtype);
13088   if (values)
13089     {
13090       tree pair;
13091
13092       for (pair = values; pair; pair = TREE_CHAIN (pair))
13093         {
13094           tree decl;
13095           tree value;
13096
13097           /* The TREE_VALUE is a CONST_DECL for this enumeration
13098              constant.  */
13099           decl = TREE_VALUE (pair);
13100
13101           /* The DECL_INITIAL will be NULL if we are processing a
13102              template declaration and this enumeration constant had no
13103              explicit initializer.  */
13104           value = DECL_INITIAL (decl);
13105           if (value && !processing_template_decl)
13106             {
13107               /* Set the TREE_TYPE for the VALUE as well.  That's so
13108                  that when we call decl_constant_value we get an
13109                  entity of the right type (but with the constant
13110                  value).  Since we shouldn't ever call
13111                  decl_constant_value on a template type, there's no
13112                  reason to do that when processing_template_decl.
13113                  And, if the expression is something like a
13114                  TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
13115                  wreak havoc on the intended type of the expression.  
13116
13117                  Of course, there's also no point in trying to compute
13118                  minimum or maximum values if we're in a template.  */
13119               TREE_TYPE (value) = enumtype;
13120
13121               if (!minnode)
13122                 minnode = maxnode = value;
13123               else if (tree_int_cst_lt (maxnode, value))
13124                 maxnode = value;
13125               else if (tree_int_cst_lt (value, minnode))
13126                 minnode = value;
13127             }
13128
13129           if (processing_template_decl) 
13130             /* If this is just a template, leave the CONST_DECL
13131                alone.  That way tsubst_copy will find CONST_DECLs for
13132                CONST_DECLs, and not INTEGER_CSTs.  */
13133             ;
13134           else
13135             /* In the list we're building up, we want the enumeration
13136                values, not the CONST_DECLs.  */
13137             TREE_VALUE (pair) = value;
13138         }
13139     }
13140   else
13141     maxnode = minnode = integer_zero_node;
13142
13143   TYPE_VALUES (enumtype) = nreverse (values);
13144
13145   if (processing_template_decl)
13146     {
13147       tree scope = current_scope ();
13148       if (scope && TREE_CODE (scope) == FUNCTION_DECL)
13149         add_tree (build_min (TAG_DEFN, enumtype));
13150     }
13151   else
13152     {
13153       int unsignedp = tree_int_cst_sgn (minnode) >= 0;
13154       int lowprec = min_precision (minnode, unsignedp);
13155       int highprec = min_precision (maxnode, unsignedp);
13156       int precision = MAX (lowprec, highprec);
13157       tree tem;
13158
13159       TYPE_SIZE (enumtype) = NULL_TREE;
13160
13161       /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'.  */
13162
13163       TYPE_PRECISION (enumtype) = precision;
13164       if (unsignedp)
13165         fixup_unsigned_type (enumtype);
13166       else
13167         fixup_signed_type (enumtype);
13168
13169       if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
13170         /* Use the width of the narrowest normal C type which is wide
13171            enough.  */ 
13172         TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
13173                                                     (precision, 1));
13174       else
13175         TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
13176
13177       TYPE_SIZE (enumtype) = 0;
13178       layout_type (enumtype);
13179     
13180       /* Fix up all variant types of this enum type.  */
13181       for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
13182            tem = TYPE_NEXT_VARIANT (tem))
13183         {
13184           TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
13185           TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
13186           TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
13187           TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
13188           TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
13189           TYPE_MODE (tem) = TYPE_MODE (enumtype);
13190           TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
13191           TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
13192           TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
13193         }
13194
13195       /* Finish debugging output for this type.  */
13196       rest_of_type_compilation (enumtype, namespace_bindings_p ());
13197     }
13198
13199   /* In start_enum we pushed obstacks.  Here, we must pop them.  */
13200   pop_obstacks ();
13201
13202   return enumtype;
13203 }
13204
13205 /* Build and install a CONST_DECL for an enumeration constant of the
13206    enumeration type TYPE whose NAME and VALUE (if any) are provided.
13207    Assignment of sequential values by default is handled here.  */
13208
13209 tree
13210 build_enumerator (name, value, type)
13211      tree name;
13212      tree value;
13213      tree type;
13214 {
13215   tree decl, result;
13216   tree context;
13217
13218   /* Remove no-op casts from the value.  */
13219   if (value)
13220     STRIP_TYPE_NOPS (value);
13221
13222  if (! processing_template_decl)
13223    {
13224      /* Validate and default VALUE.  */
13225      if (value != NULL_TREE)
13226        {
13227          if (TREE_READONLY_DECL_P (value))
13228            value = decl_constant_value (value);
13229
13230          if (TREE_CODE (value) == INTEGER_CST)
13231            {
13232              value = default_conversion (value);
13233              constant_expression_warning (value);
13234            }
13235          else
13236            {
13237              cp_error ("enumerator value for `%D' not integer constant", name);
13238              value = NULL_TREE;
13239            }
13240        }
13241
13242      /* Default based on previous value.  */
13243      if (value == NULL_TREE && ! processing_template_decl)
13244        {
13245          value = enum_next_value;
13246          if (enum_overflow)
13247            cp_error ("overflow in enumeration values at `%D'", name);
13248        }
13249
13250      /* Remove no-op casts from the value.  */
13251      if (value)
13252        STRIP_TYPE_NOPS (value);
13253 #if 0
13254      /* To fix MAX_VAL enum consts. (bkoz)  */
13255      TREE_TYPE (value) = integer_type_node;
13256 #endif
13257    }
13258
13259  /* We always have to copy here; not all INTEGER_CSTs are unshared.
13260     Even in other cases, we will later (in finish_enum) be setting the
13261     type of VALUE.  */
13262  if (value != NULL_TREE)
13263    value = copy_node (value);
13264
13265   /* C++ associates enums with global, function, or class declarations.  */
13266  
13267  context = current_scope ();
13268  if (context && context == current_class_type)
13269    /* This enum declaration is local to the class.  */
13270    decl = build_lang_field_decl (CONST_DECL, name, type);
13271  else
13272    /* It's a global enum, or it's local to a function.  (Note local to
13273       a function could mean local to a class method.  */
13274    decl = build_decl (CONST_DECL, name, type);
13275
13276  DECL_CONTEXT (decl) = FROB_CONTEXT (context);
13277  DECL_INITIAL (decl) = value;
13278  TREE_READONLY (decl) = 1;
13279
13280  if (context && context == current_class_type)
13281    /* In something like `struct S { enum E { i = 7 }; };' we put `i'
13282       on the TYPE_FIELDS list for `S'.  (That's so that you can say
13283       things like `S::i' later.)  */
13284    finish_member_declaration (decl);
13285  else
13286    {
13287      pushdecl (decl);
13288      GNU_xref_decl (current_function_decl, decl);
13289    }
13290
13291  if (! processing_template_decl)
13292    {
13293      /* Set basis for default for next value.  */
13294      enum_next_value = build_binary_op_nodefault (PLUS_EXPR, value,
13295                                                   integer_one_node, PLUS_EXPR);
13296      enum_overflow = tree_int_cst_lt (enum_next_value, value);
13297    }
13298
13299   result = saveable_tree_cons (name, decl, NULL_TREE);
13300   return result;
13301 }
13302
13303 \f
13304 static int function_depth;
13305
13306 /* Create the FUNCTION_DECL for a function definition.
13307    DECLSPECS and DECLARATOR are the parts of the declaration;
13308    they describe the function's name and the type it returns,
13309    but twisted together in a fashion that parallels the syntax of C.
13310
13311    If PRE_PARSED_P is non-zero then DECLARATOR is really the DECL for
13312    the function we are about to process; DECLSPECS are ignored.  For
13313    example, we set PRE_PARSED_P when processing the definition of
13314    inline function that was defined in-class; the definition is
13315    actually processed when the class is complete.  In this case,
13316    PRE_PARSED_P is 2.  We also set PRE_PARSED_P when instanting the
13317    body of a template function, and when constructing thunk functions
13318    and such; in these cases PRE_PARSED_P is 1.
13319    
13320    This function creates a binding context for the function body
13321    as well as setting up the FUNCTION_DECL in current_function_decl.
13322
13323    Returns 1 on success.  If the DECLARATOR is not suitable for a function
13324    (it defines a datum instead), we return 0, which tells
13325    yyparse to report a parse error.
13326
13327    For C++, we must first check whether that datum makes any sense.
13328    For example, "class A local_a(1,2);" means that variable local_a
13329    is an aggregate of type A, which should have a constructor
13330    applied to it with the argument list [1, 2].
13331
13332    @@ There is currently no way to retrieve the storage
13333    @@ allocated to FUNCTION (or all of its parms) if we return
13334    @@ something we had previously.  */
13335
13336 int
13337 start_function (declspecs, declarator, attrs, pre_parsed_p)
13338      tree declspecs, declarator, attrs;
13339      int pre_parsed_p;
13340 {
13341   tree decl1;
13342   tree ctype = NULL_TREE;
13343   tree fntype;
13344   tree restype;
13345   extern int have_extern_spec;
13346   extern int used_extern_spec;
13347   int doing_friend = 0;
13348
13349   /* Sanity check.  */
13350   my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
13351   my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
13352
13353   /* Assume, until we see it does.  */
13354   current_function_returns_value = 0;
13355   current_function_returns_null = 0;
13356   named_labels = 0;
13357   shadowed_labels = 0;
13358   current_function_assigns_this = 0;
13359   current_function_just_assigned_this = 0;
13360   current_function_parms_stored = 0;
13361   original_result_rtx = NULL_RTX;
13362   base_init_expr = NULL_TREE;
13363   current_base_init_list = NULL_TREE;
13364   current_member_init_list = NULL_TREE;
13365   ctor_label = dtor_label = NULL_TREE;
13366   static_labelno = 0;
13367
13368   clear_temp_name ();
13369
13370   /* This should only be done once on the top most decl.  */
13371   if (have_extern_spec && !used_extern_spec)
13372     {
13373       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
13374       used_extern_spec = 1;
13375     }
13376
13377   if (pre_parsed_p)
13378     {
13379       decl1 = declarator;
13380
13381 #if 0
13382       /* What was this testing for, exactly?  */
13383       if (! DECL_ARGUMENTS (decl1)
13384           && !DECL_STATIC_FUNCTION_P (decl1)
13385           && !DECL_ARTIFICIAL (decl1)
13386           && DECL_CLASS_SCOPE_P (decl1)
13387           && TYPE_IDENTIFIER (DECL_CONTEXT (decl1))
13388           && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (DECL_CONTEXT (decl1))))
13389         {
13390           tree binding = binding_for_name (DECL_NAME (decl1), 
13391                                            current_namespace);
13392           cp_error ("redeclaration of `%#D'", decl1);
13393           if (IDENTIFIER_CLASS_VALUE (DECL_NAME (decl1)))
13394             cp_error_at ("previous declaration here", IDENTIFIER_CLASS_VALUE (DECL_NAME (decl1)));
13395           else if (BINDING_VALUE (binding))
13396             cp_error_at ("previous declaration here", BINDING_VALUE (binding));
13397         }
13398 #endif
13399
13400       fntype = TREE_TYPE (decl1);
13401       if (TREE_CODE (fntype) == METHOD_TYPE)
13402         ctype = TYPE_METHOD_BASETYPE (fntype);
13403
13404       /* ANSI C++ June 5 1992 WP 11.4.5.  A friend function defined in a
13405          class is in the (lexical) scope of the class in which it is
13406          defined.  */
13407       if (!ctype && DECL_FRIEND_P (decl1))
13408         {
13409           ctype = DECL_CLASS_CONTEXT (decl1);
13410
13411           /* CTYPE could be null here if we're dealing with a template;
13412              for example, `inline friend float foo()' inside a template
13413              will have no CTYPE set.  */
13414           if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
13415             ctype = NULL_TREE;
13416           else
13417             doing_friend = 1;
13418         }
13419
13420       last_function_parms = DECL_ARGUMENTS (decl1);
13421       last_function_parm_tags = NULL_TREE;
13422     }
13423   else
13424     {
13425       decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
13426       /* If the declarator is not suitable for a function definition,
13427          cause a syntax error.  */
13428       if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
13429
13430       fntype = TREE_TYPE (decl1);
13431
13432       restype = TREE_TYPE (fntype);
13433       if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
13434         {
13435           cp_error ("semicolon missing after declaration of `%#T'", restype);
13436           shadow_tag (build_expr_list (NULL_TREE, restype));
13437           CLASSTYPE_GOT_SEMICOLON (restype) = 1;
13438           if (TREE_CODE (fntype) == FUNCTION_TYPE)
13439             fntype = build_function_type (integer_type_node,
13440                                           TYPE_ARG_TYPES (fntype));
13441           else
13442             fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
13443                                               integer_type_node,
13444                                               TYPE_ARG_TYPES (fntype));
13445           TREE_TYPE (decl1) = fntype;
13446         }
13447
13448       if (TREE_CODE (fntype) == METHOD_TYPE)
13449         ctype = TYPE_METHOD_BASETYPE (fntype);
13450       else if (DECL_MAIN_P (decl1))
13451         {
13452           /* If this doesn't return integer_type, complain.  */
13453           if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
13454             {
13455               if (pedantic || warn_return_type)
13456                 pedwarn ("return type for `main' changed to `int'");
13457               TREE_TYPE (decl1) = fntype = default_function_type;
13458             }
13459         }
13460     }
13461
13462   /* Warn if function was previously implicitly declared
13463      (but not if we warned then).  */
13464   if (! warn_implicit
13465       && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
13466     cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
13467
13468   announce_function (decl1);
13469
13470   /* Set up current_class_type, and enter the scope of the class, if
13471      appropriate.  */
13472   if (ctype)
13473     push_nested_class (ctype, 1);
13474   else if (DECL_STATIC_FUNCTION_P (decl1))
13475     push_nested_class (DECL_CONTEXT (decl1), 2);
13476
13477   /* Now that we have entered the scope of the class, we must restore
13478      the bindings for any template parameters surrounding DECL1, if it
13479      is an inline member template.  (Order is important; consider the
13480      case where a template parameter has the same name as a field of
13481      the class.)  It is not until after this point that
13482      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
13483   if (pre_parsed_p == 2)
13484     maybe_begin_member_template_processing (decl1);
13485
13486   /* We are now in the scope of the function being defined.  */
13487   current_function_decl = decl1;
13488
13489   /* Save the parm names or decls from this function's declarator
13490      where store_parm_decls will find them.  */
13491   current_function_parms = last_function_parms;
13492   current_function_parm_tags = last_function_parm_tags;
13493
13494   if (! processing_template_decl)
13495     {
13496       /* In a function definition, arg types must be complete.  */
13497       require_complete_types_for_parms (current_function_parms);
13498
13499       if (TYPE_SIZE (complete_type (TREE_TYPE (fntype))) == NULL_TREE)
13500         {
13501           cp_error ("return-type `%#T' is an incomplete type",
13502                     TREE_TYPE (fntype));
13503
13504           /* Make it return void instead, but don't change the
13505              type of the DECL_RESULT, in case we have a named return value.  */
13506           if (ctype)
13507             TREE_TYPE (decl1)
13508               = build_cplus_method_type (build_type_variant (ctype,
13509                                                              TREE_READONLY (decl1),
13510                                                              TREE_SIDE_EFFECTS (decl1)),
13511                                          void_type_node,
13512                                          FUNCTION_ARG_CHAIN (decl1));
13513           else
13514             TREE_TYPE (decl1)
13515               = build_function_type (void_type_node,
13516                                      TYPE_ARG_TYPES (TREE_TYPE (decl1)));
13517           DECL_RESULT (decl1)
13518             = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (TREE_TYPE (fntype)));
13519           TREE_READONLY (DECL_RESULT (decl1))
13520             = CP_TYPE_CONST_P (TREE_TYPE (fntype));
13521           TREE_THIS_VOLATILE (DECL_RESULT (decl1))
13522             = CP_TYPE_VOLATILE_P (TREE_TYPE (fntype));
13523         }
13524
13525       if (TYPE_LANG_SPECIFIC (TREE_TYPE (fntype))
13526           && CLASSTYPE_ABSTRACT_VIRTUALS (TREE_TYPE (fntype)))
13527         abstract_virtuals_error (decl1, TREE_TYPE (fntype));
13528     }
13529
13530   /* Effective C++ rule 15.  See also c_expand_return.  */
13531   if (warn_ecpp
13532       && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
13533       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
13534     cp_warning ("`operator=' should return a reference to `*this'");
13535
13536   /* Make the init_value nonzero so pushdecl knows this is not tentative.
13537      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
13538   DECL_INITIAL (decl1) = error_mark_node;
13539
13540 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
13541   SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
13542 #endif
13543   
13544   /* This function exists in static storage.
13545      (This does not mean `static' in the C sense!)  */
13546   TREE_STATIC (decl1) = 1;
13547
13548   /* We must call push_template_decl after current_class_type is set
13549      up.  (If we are processing inline definitions after exiting a
13550      class scope, current_class_type will be NULL_TREE until set above
13551      by push_nested_class.)  */
13552   if (processing_template_decl)
13553     decl1 = push_template_decl (decl1);
13554
13555   /* Record the decl so that the function name is defined.
13556      If we already have a decl for this name, and it is a FUNCTION_DECL,
13557      use the old decl.  */
13558   if (!processing_template_decl && pre_parsed_p == 0)
13559     {
13560       /* A specialization is not used to guide overload resolution.  */
13561       if ((flag_guiding_decls 
13562            || !DECL_TEMPLATE_SPECIALIZATION (decl1))
13563           && ! DECL_FUNCTION_MEMBER_P (decl1))
13564         decl1 = pushdecl (decl1);
13565       else
13566         {
13567           /* We need to set the DECL_CONTEXT. */
13568           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13569             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13570           /* And make sure we have enough default args.  */
13571           check_default_args (decl1);
13572         }
13573       DECL_MAIN_VARIANT (decl1) = decl1;
13574       fntype = TREE_TYPE (decl1);
13575     }
13576
13577   current_function_decl = decl1;
13578
13579   if (DECL_INTERFACE_KNOWN (decl1))
13580     {
13581       tree ctx = hack_decl_function_context (decl1);
13582
13583       if (DECL_NOT_REALLY_EXTERN (decl1))
13584         DECL_EXTERNAL (decl1) = 0;
13585
13586       if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx) 
13587           && TREE_PUBLIC (ctx))
13588         /* This is a function in a local class in an extern inline
13589            function.  */
13590         comdat_linkage (decl1);
13591     }
13592   /* If this function belongs to an interface, it is public.
13593      If it belongs to someone else's interface, it is also external.
13594      This only affects inlines and template instantiations.  */
13595   else if (interface_unknown == 0
13596            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13597                || flag_alt_external_templates))
13598     {
13599       if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
13600           || processing_template_decl)
13601         {
13602           DECL_EXTERNAL (decl1)
13603             = (interface_only
13604                || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines
13605                    && !DECL_VINDEX (decl1)));
13606
13607           /* For WIN32 we also want to put these in linkonce sections.  */
13608           maybe_make_one_only (decl1);
13609         }
13610       else
13611         DECL_EXTERNAL (decl1) = 0;
13612       DECL_NOT_REALLY_EXTERN (decl1) = 0;
13613       DECL_INTERFACE_KNOWN (decl1) = 1;
13614     }
13615   else if (interface_unknown && interface_only
13616            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13617                || flag_alt_external_templates))
13618     {
13619       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13620          interface, we will have interface_only set but not
13621          interface_known.  In that case, we don't want to use the normal
13622          heuristics because someone will supply a #pragma implementation
13623          elsewhere, and deducing it here would produce a conflict.  */
13624       comdat_linkage (decl1);
13625       DECL_EXTERNAL (decl1) = 0;
13626       DECL_INTERFACE_KNOWN (decl1) = 1;
13627       DECL_DEFER_OUTPUT (decl1) = 1;
13628     }
13629   else
13630     {
13631       /* This is a definition, not a reference.
13632          So clear DECL_EXTERNAL.  */
13633       DECL_EXTERNAL (decl1) = 0;
13634
13635       if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
13636           && ! DECL_INTERFACE_KNOWN (decl1)
13637           /* Don't try to defer nested functions for now.  */
13638           && ! hack_decl_function_context (decl1))
13639         DECL_DEFER_OUTPUT (decl1) = 1;
13640       else
13641         DECL_INTERFACE_KNOWN (decl1) = 1;
13642     }
13643
13644   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1))
13645     {
13646       if (TREE_CODE (fntype) == METHOD_TYPE)
13647         TREE_TYPE (decl1) = fntype
13648           = build_function_type (TREE_TYPE (fntype),
13649                                  TREE_CHAIN (TYPE_ARG_TYPES (fntype)));
13650       current_function_parms = TREE_CHAIN (current_function_parms);
13651       DECL_ARGUMENTS (decl1) = current_function_parms;
13652       ctype = NULL_TREE;
13653     }
13654   restype = TREE_TYPE (fntype);
13655
13656   if (ctype)
13657     {
13658       /* If we're compiling a friend function, neither of the variables
13659          current_class_ptr nor current_class_type will have values.  */
13660       if (! doing_friend)
13661         {
13662           /* We know that this was set up by `grokclassfn'.
13663              We do not wait until `store_parm_decls', since evil
13664              parse errors may never get us to that point.  Here
13665              we keep the consistency between `current_class_type'
13666              and `current_class_ptr'.  */
13667           tree t = current_function_parms;
13668
13669           my_friendly_assert (t != NULL_TREE
13670                               && TREE_CODE (t) == PARM_DECL, 162);
13671
13672           if (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE)
13673             {
13674               int i;
13675
13676               if (! hack_decl_function_context (decl1))
13677                 temporary_allocation ();
13678               i = suspend_momentary ();
13679
13680               /* Normally, build_indirect_ref returns
13681                  current_class_ref whenever current_class_ptr is
13682                  dereferenced.  This time, however, we want it to
13683                  *create* current_class_ref, so we temporarily clear
13684                  current_class_ptr to fool it.  */
13685               current_class_ptr = NULL_TREE;
13686               current_class_ref = build_indirect_ref (t, NULL_PTR);
13687               current_class_ptr = t;
13688
13689               resume_momentary (i);
13690               if (! hack_decl_function_context (decl1))
13691                 end_temporary_allocation ();
13692             }
13693           else
13694             /* We're having a signature pointer here.  */
13695             current_class_ref = current_class_ptr = t;
13696
13697         }
13698     }
13699   else
13700     current_class_ptr = current_class_ref = NULL_TREE;
13701
13702   pushlevel (0);
13703   current_binding_level->parm_flag = 1;
13704
13705   GNU_xref_function (decl1, current_function_parms);
13706
13707   if (attrs)
13708     cplus_decl_attributes (decl1, NULL_TREE, attrs);
13709   
13710   make_function_rtl (decl1);
13711
13712   /* Promote the value to int before returning it.  */
13713   if (C_PROMOTING_INTEGER_TYPE_P (restype))
13714     restype = type_promotes_to (restype);
13715
13716   /* If this fcn was already referenced via a block-scope `extern' decl
13717      (or an implicit decl), propagate certain information about the usage.  */
13718   if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
13719     TREE_ADDRESSABLE (decl1) = 1;
13720
13721   if (DECL_RESULT (decl1) == NULL_TREE)
13722     {
13723       DECL_RESULT (decl1)
13724         = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13725       TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13726       TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
13727     }
13728
13729   /* Allocate further tree nodes temporarily during compilation
13730      of this function only.  Tiemann moved up here from bottom of fn.  */
13731   /* If this is a nested function, then we must continue to allocate RTL
13732      on the permanent obstack in case we need to inline it later.  */
13733   if (! hack_decl_function_context (decl1))
13734     temporary_allocation ();
13735
13736   if (processing_template_decl)
13737     {
13738       ++minimal_parse_mode;
13739       last_tree = DECL_SAVED_TREE (decl1)
13740         = build_nt (EXPR_STMT, void_zero_node);
13741     }
13742
13743   ++function_depth;
13744
13745   if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl1))
13746       && DECL_LANGUAGE (decl1) == lang_cplusplus)
13747     {
13748       dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13749       ctor_label = NULL_TREE;
13750     }
13751   else
13752     {
13753       dtor_label = NULL_TREE;
13754       if (DECL_CONSTRUCTOR_P (decl1))
13755         ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13756     }
13757
13758   return 1;
13759 }
13760 \f
13761 /* Called after store_parm_decls for a function-try-block.  We need to update
13762    last_parm_cleanup_insn so that the base initializers for a constructor
13763    are run within this block, not before it.  */
13764
13765 void
13766 expand_start_early_try_stmts ()
13767 {
13768   expand_start_try_stmts ();
13769   last_parm_cleanup_insn = get_last_insn ();
13770 }
13771
13772 /* Store the parameter declarations into the current function declaration.
13773    This is called after parsing the parameter declarations, before
13774    digesting the body of the function.
13775
13776    Also install to binding contour return value identifier, if any.  */
13777
13778 void
13779 store_parm_decls ()
13780 {
13781   register tree fndecl = current_function_decl;
13782   register tree parm;
13783   int parms_have_cleanups = 0;
13784   tree cleanups = NULL_TREE;
13785
13786   /* This is either a chain of PARM_DECLs (when a prototype is used).  */
13787   tree specparms = current_function_parms;
13788
13789   /* This is a list of types declared among parms in a prototype.  */
13790   tree parmtags = current_function_parm_tags;
13791
13792   /* This is a chain of any other decls that came in among the parm
13793      declarations.  If a parm is declared with  enum {foo, bar} x;
13794      then CONST_DECLs for foo and bar are put here.  */
13795   tree nonparms = NULL_TREE;
13796
13797   if (toplevel_bindings_p ())
13798     fatal ("parse errors have confused me too much");
13799
13800   /* Initialize RTL machinery.  */
13801   init_function_start (fndecl, input_filename, lineno);
13802
13803   /* Create a binding level for the parms.  */
13804   expand_start_bindings (0);
13805
13806   if (specparms != NULL_TREE)
13807     {
13808       /* This case is when the function was defined with an ANSI prototype.
13809          The parms already have decls, so we need not do anything here
13810          except record them as in effect
13811          and complain if any redundant old-style parm decls were written.  */
13812
13813       register tree next;
13814
13815       /* Must clear this because it might contain TYPE_DECLs declared
13816          at class level.  */
13817       storedecls (NULL_TREE);
13818
13819       for (parm = nreverse (specparms); parm; parm = next)
13820         {
13821           next = TREE_CHAIN (parm);
13822           if (TREE_CODE (parm) == PARM_DECL)
13823             {
13824               tree cleanup;
13825               if (DECL_NAME (parm) == NULL_TREE)
13826                 {
13827                   pushdecl (parm);
13828                 }
13829               else if (TREE_CODE (TREE_TYPE (parm)) == VOID_TYPE)
13830                 cp_error ("parameter `%D' declared void", parm);
13831               else
13832                 {
13833                   /* Now fill in DECL_REFERENCE_SLOT for any of the parm decls.
13834                      A parameter is assumed not to have any side effects.
13835                      If this should change for any reason, then this
13836                      will have to wrap the bashed reference type in a save_expr.
13837                      
13838                      Also, if the parameter type is declared to be an X
13839                      and there is an X(X&) constructor, we cannot lay it
13840                      into the stack (any more), so we make this parameter
13841                      look like it is really of reference type.  Functions
13842                      which pass parameters to this function will know to
13843                      create a temporary in their frame, and pass a reference
13844                      to that.  */
13845
13846                   if (TREE_CODE (TREE_TYPE (parm)) == REFERENCE_TYPE
13847                       && TYPE_SIZE (TREE_TYPE (TREE_TYPE (parm))))
13848                     SET_DECL_REFERENCE_SLOT (parm, convert_from_reference (parm));
13849
13850                   pushdecl (parm);
13851                 }
13852               if (! processing_template_decl
13853                   && (cleanup = maybe_build_cleanup (parm), cleanup))
13854                 {
13855                   expand_decl (parm);
13856                   parms_have_cleanups = 1;
13857
13858                   /* Keep track of the cleanups.  */
13859                   cleanups = tree_cons (parm, cleanup, cleanups);
13860                 }
13861             }
13862           else
13863             {
13864               /* If we find an enum constant or a type tag,
13865                  put it aside for the moment.  */
13866               TREE_CHAIN (parm) = NULL_TREE;
13867               nonparms = chainon (nonparms, parm);
13868             }
13869         }
13870
13871       /* Get the decls in their original chain order
13872          and record in the function.  This is all and only the
13873          PARM_DECLs that were pushed into scope by the loop above.  */
13874       DECL_ARGUMENTS (fndecl) = getdecls ();
13875
13876       storetags (chainon (parmtags, gettags ()));
13877     }
13878   else
13879     DECL_ARGUMENTS (fndecl) = NULL_TREE;
13880
13881   /* Now store the final chain of decls for the arguments
13882      as the decl-chain of the current lexical scope.
13883      Put the enumerators in as well, at the front so that
13884      DECL_ARGUMENTS is not modified.  */
13885
13886   storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
13887
13888   /* Declare __FUNCTION__ and __PRETTY_FUNCTION__ for this function.  */
13889   declare_function_name ();
13890
13891   /* Initialize the RTL code for the function.  */
13892   DECL_SAVED_INSNS (fndecl) = NULL_RTX;
13893   if (! processing_template_decl)
13894     expand_function_start (fndecl, parms_have_cleanups);
13895
13896   current_function_parms_stored = 1;
13897
13898   /* If this function is `main', emit a call to `__main'
13899      to run global initializers, etc.  */
13900   if (DECL_MAIN_P (fndecl))
13901     expand_main_function ();
13902
13903   /* Now that we have initialized the parms, we can start their
13904      cleanups.  We cannot do this before, since expand_decl_cleanup
13905      should not be called before the parm can be used.  */
13906   if (cleanups
13907       && ! processing_template_decl)      
13908     {
13909       for (cleanups = nreverse (cleanups); cleanups; cleanups = TREE_CHAIN (cleanups))
13910         {
13911           if (! expand_decl_cleanup (TREE_PURPOSE (cleanups), TREE_VALUE (cleanups)))
13912             cp_error ("parser lost in parsing declaration of `%D'",
13913                       TREE_PURPOSE (cleanups));
13914         }
13915     }
13916
13917   /* Create a binding contour which can be used to catch
13918      cleanup-generated temporaries.  Also, if the return value needs or
13919      has initialization, deal with that now.  */
13920   if (parms_have_cleanups)
13921     {
13922       pushlevel (0);
13923       expand_start_bindings (0);
13924     }
13925
13926   if (! processing_template_decl && flag_exceptions)
13927     {
13928       /* Do the starting of the exception specifications, if we have any.  */
13929       if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13930         expand_start_eh_spec ();
13931     }
13932
13933   last_parm_cleanup_insn = get_last_insn ();
13934   last_dtor_insn = get_last_insn ();
13935 }
13936
13937 /* Bind a name and initialization to the return value of
13938    the current function.  */
13939
13940 void
13941 store_return_init (return_id, init)
13942      tree return_id, init;
13943 {
13944   tree decl = DECL_RESULT (current_function_decl);
13945
13946   if (pedantic)
13947     /* Give this error as many times as there are occurrences,
13948        so that users can use Emacs compilation buffers to find
13949        and fix all such places.  */
13950     pedwarn ("ANSI C++ does not permit named return values");
13951
13952   if (return_id != NULL_TREE)
13953     {
13954       if (DECL_NAME (decl) == NULL_TREE)
13955         {
13956           DECL_NAME (decl) = return_id;
13957           DECL_ASSEMBLER_NAME (decl) = return_id;
13958         }
13959       else
13960         cp_error ("return identifier `%D' already in place", decl);
13961     }
13962
13963   /* Can't let this happen for constructors.  */
13964   if (DECL_CONSTRUCTOR_P (current_function_decl))
13965     {
13966       error ("can't redefine default return value for constructors");
13967       return;
13968     }
13969
13970   /* If we have a named return value, put that in our scope as well.  */
13971   if (DECL_NAME (decl) != NULL_TREE)
13972     {
13973       /* If this named return value comes in a register,
13974          put it in a pseudo-register.  */
13975       if (DECL_REGISTER (decl))
13976         {
13977           original_result_rtx = DECL_RTL (decl);
13978           DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
13979         }
13980
13981       /* Let `cp_finish_decl' know that this initializer is ok.  */
13982       DECL_INITIAL (decl) = init;
13983       pushdecl (decl);
13984
13985       if (minimal_parse_mode)
13986         add_tree (build_min_nt (RETURN_INIT, return_id,
13987                                 copy_to_permanent (init)));
13988       else
13989         cp_finish_decl (decl, init, NULL_TREE, 0, 0);
13990     }
13991 }
13992
13993 \f
13994 /* Emit implicit code for a destructor. This is a subroutine of
13995    finish_function.  */
13996
13997 static void
13998 finish_dtor ()
13999 {
14000   tree binfo = TYPE_BINFO (current_class_type);
14001   tree cond = integer_one_node;
14002   tree exprstmt;
14003   tree in_charge_node = lookup_name (in_charge_identifier, 0);
14004   tree virtual_size;
14005   int ok_to_optimize_dtor = 0;
14006   int empty_dtor = get_last_insn () == last_dtor_insn;
14007   rtx insns, last_parm_insn;
14008  
14009   if (current_function_assigns_this)
14010     cond = build (NE_EXPR, boolean_type_node,
14011                   current_class_ptr, integer_zero_node);
14012   else
14013     {
14014       int n_baseclasses = CLASSTYPE_N_BASECLASSES (current_class_type);
14015
14016       /* If this destructor is empty, then we don't need to check
14017          whether `this' is NULL in some cases.  */
14018       if ((flag_this_is_variable & 1) == 0)
14019         ok_to_optimize_dtor = 1;
14020       else if (empty_dtor)
14021         ok_to_optimize_dtor
14022           = (n_baseclasses == 0
14023              || (n_baseclasses == 1
14024                  && TYPE_HAS_DESTRUCTOR (TYPE_BINFO_BASETYPE (current_class_type, 0))));
14025     }
14026
14027   /* If this has a vlist1 parameter, allocate the corresponding vlist
14028      parameter.  */
14029   if (DECL_DESTRUCTOR_FOR_PVBASE_P (current_function_decl))
14030     {
14031       /* _Vlist __vlist; */
14032       tree vlist;
14033
14034       mark_all_temps_used();
14035       vlist = pushdecl (build_decl (VAR_DECL, vlist_identifier,
14036                                          vlist_type_node));
14037       TREE_USED (vlist) = 1;
14038       DECL_ARTIFICIAL (vlist) = 1;
14039       expand_decl (vlist);
14040       expand_decl_init (vlist);
14041     }
14042
14043   /* These initializations might go inline.  Protect
14044      the binding level of the parms.  */
14045   pushlevel (0);
14046   expand_start_bindings (0);
14047
14048   if (current_function_assigns_this)
14049     {
14050       current_function_assigns_this = 0;
14051       current_function_just_assigned_this = 0;
14052     }
14053
14054   /* Generate the code to call destructor on base class.
14055      If this destructor belongs to a class with virtual
14056      functions, then set the virtual function table
14057      pointer to represent the type of our base class.  */
14058
14059   /* This side-effect makes call to `build_delete' generate the
14060      code we have to have at the end of this destructor.
14061      `build_delete' will set the flag again.  */
14062   TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
14063
14064   /* These are two cases where we cannot delegate deletion.  */
14065   if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)
14066       || TYPE_GETS_REG_DELETE (current_class_type))
14067     exprstmt = build_delete 
14068       (current_class_type, current_class_ref, integer_zero_node,
14069        LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
14070   else
14071     exprstmt = build_delete 
14072       (current_class_type, current_class_ref, in_charge_node,
14073        LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
14074
14075   /* If we did not assign to this, then `this' is non-zero at
14076      the end of a destructor.  As a special optimization, don't
14077      emit test if this is an empty destructor.  If it does nothing,
14078      it does nothing.  If it calls a base destructor, the base
14079      destructor will perform the test.  */
14080
14081   if (exprstmt != error_mark_node
14082       && (TREE_CODE (exprstmt) != NOP_EXPR
14083           || TREE_OPERAND (exprstmt, 0) != integer_zero_node
14084           || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
14085     {
14086       expand_label (dtor_label);
14087       if (cond != integer_one_node)
14088         expand_start_cond (cond, 0);
14089       if (exprstmt != void_zero_node)
14090         /* Don't call `expand_expr_stmt' if we're not going to do
14091            anything, since -Wall will give a diagnostic.  */
14092         expand_expr_stmt (exprstmt);
14093
14094       /* Run destructor on all virtual baseclasses.  */
14095       if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
14096         {
14097           tree vbases = nreverse 
14098             (copy_list (CLASSTYPE_VBASECLASSES (current_class_type)));
14099           expand_start_cond (build (BIT_AND_EXPR, integer_type_node,
14100                                     in_charge_node, integer_two_node), 0);
14101           while (vbases)
14102             {
14103               if (TYPE_NEEDS_DESTRUCTOR (BINFO_TYPE (vbases)))
14104                 {
14105                   tree vb = get_vbase
14106                     (BINFO_TYPE (vbases),
14107                      TYPE_BINFO (current_class_type));
14108
14109                   expand_expr_stmt
14110                     (build_base_dtor_call (current_class_ref, 
14111                                            vb, integer_zero_node));
14112                 }
14113               vbases = TREE_CHAIN (vbases);
14114             }
14115           expand_end_cond ();
14116         }
14117
14118       do_pending_stack_adjust ();
14119       if (cond != integer_one_node)
14120         expand_end_cond ();
14121     }
14122
14123   virtual_size = c_sizeof (current_class_type);
14124
14125   /* At the end, call delete if that's what's requested.  */
14126
14127   /* FDIS sez: At the point of definition of a virtual destructor
14128      (including an implicit definition), non-placement operator
14129      delete shall be looked up in the scope of the destructor's
14130      class and if found shall be accessible and unambiguous.
14131
14132      This is somewhat unclear, but I take it to mean that if the
14133      class only defines placement deletes we don't do anything here.
14134      So we pass LOOKUP_SPECULATIVELY; delete_sanity will complain
14135      for us if they ever try to delete one of these.  */
14136
14137   if (TYPE_GETS_REG_DELETE (current_class_type)
14138       || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
14139     exprstmt = build_op_delete_call
14140       (DELETE_EXPR, current_class_ptr, virtual_size,
14141        LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
14142   else
14143     exprstmt = NULL_TREE;
14144
14145   if (exprstmt)
14146     {
14147       cond = build (BIT_AND_EXPR, integer_type_node,
14148                     in_charge_node, integer_one_node);
14149       expand_start_cond (cond, 0);
14150       expand_expr_stmt (exprstmt);
14151       expand_end_cond ();
14152     }
14153
14154   /* End of destructor.  */
14155   expand_end_bindings (NULL_TREE, getdecls () != NULL_TREE, 0);
14156   poplevel (getdecls () != NULL_TREE, 0, 0);
14157
14158   /* Back to the top of destructor.  */
14159   /* Don't execute destructor code if `this' is NULL.  */
14160
14161   start_sequence ();
14162
14163   /* If we need thunk-style vlists, initialize them if the caller did
14164      not pass them. This requires a new temporary. The generated code
14165      looks like
14166        if (!(__in_charge & 4))
14167          __vlist = __vl.<type> + sizeof(__vl.<type>);
14168        else
14169          __vlist = __vlist1; 
14170   */
14171   if (TYPE_USES_PVBASES (current_class_type))
14172     {
14173       tree vlist = lookup_name (vlist_identifier, 0);
14174       tree vlist1 = lookup_name (get_identifier (VLIST1_NAME), 0);
14175       cond = build (BIT_AND_EXPR, integer_type_node,
14176                     in_charge_node, build_int_2 (4, 0));
14177       cond = build1 (TRUTH_NOT_EXPR, boolean_type_node, cond);
14178       expand_start_cond (cond, 0);
14179       init_vlist (current_class_type);
14180       expand_start_else ();
14181       expand_expr_stmt (build_modify_expr (vlist, NOP_EXPR, vlist1));
14182       expand_end_cond ();
14183     }
14184           
14185   /* If the dtor is empty, and we know there is not possible way we
14186      could use any vtable entries, before they are possibly set by
14187      a base class dtor, we don't have to setup the vtables, as we
14188      know that any base class dtoring will set up any vtables it
14189      needs.  We avoid MI, because one base class dtor can do a
14190      virtual dispatch to an overridden function that would need to
14191      have a non-related vtable set up, we cannot avoid setting up
14192      vtables in that case.  We could change this to see if there is
14193      just one vtable.  */
14194   if (! empty_dtor || TYPE_USES_COMPLEX_INHERITANCE (current_class_type))
14195     {
14196       /* Make all virtual function table pointers in non-virtual base
14197          classes point to CURRENT_CLASS_TYPE's virtual function
14198          tables.  */
14199       expand_direct_vtbls_init (binfo, binfo, 1, 0, current_class_ptr);
14200
14201       if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
14202         expand_indirect_vtbls_init (binfo, current_class_ref, current_class_ptr);
14203     }
14204
14205   if (! ok_to_optimize_dtor)
14206     {
14207       cond = build_binary_op (NE_EXPR,
14208                               current_class_ptr, integer_zero_node);
14209       expand_start_cond (cond, 0);
14210     }
14211
14212   insns = get_insns ();
14213   end_sequence ();
14214
14215   last_parm_insn = get_first_nonparm_insn ();
14216   if (last_parm_insn == NULL_RTX)
14217     last_parm_insn = get_last_insn ();
14218   else
14219     last_parm_insn = previous_insn (last_parm_insn);
14220
14221   emit_insns_after (insns, last_parm_insn);
14222
14223   if (! ok_to_optimize_dtor)
14224     expand_end_cond ();
14225 }
14226
14227 /* Emit implicit code for a constructor. This is a subroutine of
14228    finish_function. CALL_POPLEVEL is the same variable in
14229    finish_function.  */
14230
14231 static void
14232 finish_ctor (call_poplevel)
14233      int call_poplevel;
14234 {
14235   register tree fndecl = current_function_decl;
14236   tree cond = NULL_TREE, thenclause = NULL_TREE;
14237   rtx insns;
14238   tree decls;
14239
14240   /* Allow constructor for a type to get a new instance of the object
14241      using `build_new'.  */
14242   tree abstract_virtuals = CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type);
14243   CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = NULL_TREE;
14244
14245   if (flag_this_is_variable > 0)
14246     {
14247       cond = build_binary_op (EQ_EXPR, current_class_ptr, integer_zero_node);
14248       thenclause = 
14249         build_modify_expr (current_class_ptr, NOP_EXPR,
14250                            build_new (NULL_TREE, current_class_type, 
14251                                       void_type_node, 0));
14252     }
14253
14254   CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = abstract_virtuals;
14255
14256   start_sequence ();
14257
14258   if (flag_this_is_variable > 0)
14259     {
14260       expand_start_cond (cond, 0);
14261       expand_expr_stmt (thenclause);
14262       expand_end_cond ();
14263     }
14264
14265   /* Emit insns from `emit_base_init' which sets up virtual
14266      function table pointer(s).  */
14267   if (base_init_expr)
14268     {
14269       expand_expr_stmt (base_init_expr);
14270       base_init_expr = NULL_TREE;
14271     }
14272
14273   insns = get_insns ();
14274   end_sequence ();
14275
14276   /* This is where the body of the constructor begins.  */
14277
14278   emit_insns_after (insns, last_parm_cleanup_insn);
14279
14280   end_protect_partials ();
14281
14282   /* This is where the body of the constructor ends.  */
14283   expand_label (ctor_label);
14284   ctor_label = NULL_TREE;
14285
14286   if (call_poplevel)
14287     {
14288       decls = getdecls ();
14289       expand_end_bindings (decls, decls != NULL_TREE, 0);
14290       poplevel (decls != NULL_TREE, 1, 0);
14291     }
14292
14293   /* c_expand_return knows to return 'this' from a constructor.  */
14294   c_expand_return (NULL_TREE);
14295
14296   current_function_assigns_this = 0;
14297   current_function_just_assigned_this = 0;
14298 }
14299
14300
14301 /* Finish up a function declaration and compile that function
14302    all the way to assembler language output.  The free the storage
14303    for the function definition.
14304
14305    This is called after parsing the body of the function definition.
14306    LINENO is the current line number.
14307
14308    FLAGS is a bitwise or of the following values: 
14309      1 - CALL_POPLEVEL 
14310        An extra call to poplevel (and expand_end_bindings) must be
14311        made to take care of the binding contour for the base
14312        initializers.  This is only relevant for constructors.
14313      2 - INCLASS_INLINE
14314        We just finished processing the body of an in-class inline
14315        function definition.  (This processing will have taken place
14316        after the class definition is complete.)
14317
14318    NESTED is nonzero if we were in the middle of compiling another function
14319    when we started on this one.  */
14320
14321 void
14322 finish_function (lineno, flags, nested)
14323      int lineno;
14324      int flags;
14325      int nested;
14326 {
14327   register tree fndecl = current_function_decl;
14328   tree fntype, ctype = NULL_TREE;
14329   /* Label to use if this function is supposed to return a value.  */
14330   tree no_return_label = NULL_TREE;
14331   tree decls = NULL_TREE;
14332   int call_poplevel = (flags & 1) != 0;
14333   int inclass_inline = (flags & 2) != 0;
14334   int in_template;
14335
14336   /* When we get some parse errors, we can end up without a
14337      current_function_decl, so cope.  */
14338   if (fndecl == NULL_TREE)
14339     return;
14340
14341   if (function_depth > 1)
14342     nested = 1;
14343
14344   fntype = TREE_TYPE (fndecl);
14345
14346 /*  TREE_READONLY (fndecl) = 1;
14347     This caused &foo to be of type ptr-to-const-function
14348     which then got a warning when stored in a ptr-to-function variable.  */
14349
14350   /* This happens on strange parse errors.  */
14351   if (! current_function_parms_stored)
14352     {
14353       call_poplevel = 0;
14354       store_parm_decls ();
14355     }
14356
14357   if (processing_template_decl)
14358     {
14359       if (DECL_CONSTRUCTOR_P (fndecl) && call_poplevel)
14360         {
14361           decls = getdecls ();
14362           expand_end_bindings (decls, decls != NULL_TREE, 0);
14363           poplevel (decls != NULL_TREE, 0, 0);
14364         }
14365     }
14366   else
14367     {
14368       if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
14369         {
14370           tree ttype = target_type (fntype);
14371           tree parmdecl;
14372
14373           if (IS_AGGR_TYPE (ttype))
14374             /* Let debugger know it should output info for this type.  */
14375             note_debug_info_needed (ttype);
14376
14377           for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
14378             {
14379               ttype = target_type (TREE_TYPE (parmdecl));
14380               if (IS_AGGR_TYPE (ttype))
14381                 /* Let debugger know it should output info for this type.  */
14382                 note_debug_info_needed (ttype);
14383             }
14384         }
14385
14386       /* Clean house because we will need to reorder insns here.  */
14387       do_pending_stack_adjust ();
14388
14389       if (dtor_label)
14390         finish_dtor ();
14391       else if (current_function_assigns_this)
14392         {
14393           /* Does not need to call emit_base_init, because
14394              that is done (if needed) just after assignment to this
14395              is seen.  */
14396
14397           if (DECL_CONSTRUCTOR_P (current_function_decl))
14398             {
14399               end_protect_partials ();
14400               expand_label (ctor_label);
14401               ctor_label = NULL_TREE;
14402
14403               if (call_poplevel)
14404                 {
14405                   decls = getdecls ();
14406                   expand_end_bindings (decls, decls != NULL_TREE, 0);
14407                   poplevel (decls != NULL_TREE, 0, 0);
14408                 }
14409               /* c_expand_return knows to return 'this' from a constructor.  */
14410               c_expand_return (NULL_TREE);
14411             }
14412           else if (TREE_CODE (TREE_TYPE (DECL_RESULT (current_function_decl))) != VOID_TYPE
14413                    && return_label != NULL_RTX)
14414             no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
14415
14416           current_function_assigns_this = 0;
14417           current_function_just_assigned_this = 0;
14418           base_init_expr = NULL_TREE;
14419         }
14420       else if (DECL_CONSTRUCTOR_P (fndecl)
14421                && !DECL_VLIST_CTOR_WRAPPER_P (fndecl))
14422         finish_ctor (call_poplevel);
14423       else if (DECL_MAIN_P (fndecl))
14424         {
14425           /* Make it so that `main' always returns 0 by default.  */
14426 #ifdef VMS
14427           c_expand_return (integer_one_node);
14428 #else
14429           c_expand_return (integer_zero_node);
14430 #endif
14431         }
14432       else if (return_label != NULL_RTX
14433                && current_function_return_value == NULL_TREE
14434                && ! DECL_NAME (DECL_RESULT (current_function_decl)))
14435         no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
14436
14437       if (flag_exceptions)
14438         expand_exception_blocks ();
14439
14440       /* If this function is supposed to return a value, ensure that
14441          we do not fall into the cleanups by mistake.  The end of our
14442          function will look like this:
14443          
14444          user code (may have return stmt somewhere)
14445          goto no_return_label
14446          cleanup_label:
14447          cleanups
14448          goto return_label
14449          no_return_label:
14450          NOTE_INSN_FUNCTION_END
14451          return_label:
14452          things for return
14453          
14454          If the user omits a return stmt in the USER CODE section, we
14455          will have a control path which reaches NOTE_INSN_FUNCTION_END.
14456          Otherwise, we won't.  */
14457       if (no_return_label)
14458         {
14459           DECL_CONTEXT (no_return_label) = fndecl;
14460           DECL_INITIAL (no_return_label) = error_mark_node;
14461           DECL_SOURCE_FILE (no_return_label) = input_filename;
14462           DECL_SOURCE_LINE (no_return_label) = lineno;
14463           expand_goto (no_return_label);
14464         }
14465
14466       if (cleanup_label)
14467         {
14468           /* Remove the binding contour which is used
14469              to catch cleanup-generated temporaries.  */
14470           expand_end_bindings (0, 0, 0);
14471           poplevel (0, 0, 0);
14472
14473           /* Emit label at beginning of cleanup code for parameters.  */
14474           emit_label (cleanup_label);
14475         }
14476
14477       /* Get return value into register if that's where it's supposed to be.  */
14478       if (original_result_rtx)
14479         fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
14480
14481       /* Finish building code that will trigger warnings if users forget
14482          to make their functions return values.  */
14483       if (no_return_label || cleanup_label)
14484         emit_jump (return_label);
14485       if (no_return_label)
14486         {
14487           /* We don't need to call `expand_*_return' here because we
14488              don't need any cleanups here--this path of code is only
14489              for error checking purposes.  */
14490           expand_label (no_return_label);
14491         }
14492
14493       /* Generate rtl for function exit.  */
14494       expand_function_end (input_filename, lineno, 1);
14495     }
14496   
14497   /* If we're processing a template, squirrel away the definition
14498      until we do an instantiation.  */
14499   if (processing_template_decl)
14500     {
14501       --minimal_parse_mode;
14502       DECL_SAVED_TREE (fndecl) = TREE_CHAIN (DECL_SAVED_TREE (fndecl));
14503       /* We have to save this value here in case
14504          maybe_end_member_template_processing decides to pop all the
14505          template parameters.  */
14506       in_template = 1;
14507     }
14508   else
14509     in_template = 0;
14510
14511   /* This must come after expand_function_end because cleanups might
14512      have declarations (from inline functions) that need to go into
14513      this function's blocks.  */
14514   if (current_binding_level->parm_flag != 1)
14515     my_friendly_abort (122);
14516   poplevel (1, 0, 1);
14517
14518   /* If this is a in-class inline definition, we may have to pop the
14519      bindings for the template parameters that we added in
14520      maybe_begin_member_template_processing when start_function was
14521      called.  */
14522   if (inclass_inline)
14523     maybe_end_member_template_processing ();
14524
14525   /* Reset scope for C++: if we were in the scope of a class,
14526      then when we finish this function, we are not longer so.
14527      This cannot be done until we know for sure that no more
14528      class members will ever be referenced in this function
14529      (i.e., calls to destructors).  */
14530   if (current_class_name)
14531     {
14532       ctype = current_class_type;
14533       pop_nested_class ();
14534     }
14535
14536   /* Must mark the RESULT_DECL as being in this function.  */
14537   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
14538
14539   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
14540      to the FUNCTION_DECL node itself.  */
14541   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
14542
14543   if (!in_template)
14544     {
14545       int saved_flag_keep_inline_functions =
14546         flag_keep_inline_functions;
14547
14548       /* So we can tell if jump_optimize sets it to 1.  */
14549       can_reach_end = 0;
14550
14551       if (DECL_CONTEXT (fndecl) != NULL_TREE
14552           && hack_decl_function_context (fndecl))
14553         /* Trick rest_of_compilation into not deferring output of this
14554            function, even if it is inline, since the rtl_obstack for
14555            this function is the function_obstack of the enclosing
14556            function and will be deallocated when the enclosing
14557            function is gone.  See save_tree_status.  */
14558         flag_keep_inline_functions = 1;
14559
14560       /* Run the optimizers and output the assembler code for this
14561          function.  */
14562
14563       if (DECL_ARTIFICIAL (fndecl))
14564         {
14565           /* Do we really *want* to inline this synthesized method?  */
14566
14567           int save_fif = flag_inline_functions;
14568           flag_inline_functions = 1;
14569
14570           /* Turn off DECL_INLINE for the moment so function_cannot_inline_p
14571              will check our size.  */
14572           DECL_INLINE (fndecl) = 0;
14573
14574           rest_of_compilation (fndecl);
14575           flag_inline_functions = save_fif;
14576         }
14577       else
14578         rest_of_compilation (fndecl);
14579
14580       flag_keep_inline_functions = saved_flag_keep_inline_functions;
14581
14582       if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
14583         {
14584           /* Set DECL_EXTERNAL so that assemble_external will be called as
14585              necessary.  We'll clear it again in finish_file.  */
14586           if (! DECL_EXTERNAL (fndecl))
14587             DECL_NOT_REALLY_EXTERN (fndecl) = 1;
14588           DECL_EXTERNAL (fndecl) = 1;
14589           mark_inline_for_output (fndecl);
14590         }
14591
14592       if (ctype && TREE_ASM_WRITTEN (fndecl))
14593         note_debug_info_needed (ctype);
14594
14595       current_function_returns_null |= can_reach_end;
14596
14597       /* Since we don't normally go through c_expand_return for constructors,
14598          this normally gets the wrong value.
14599          Also, named return values have their return codes emitted after
14600          NOTE_INSN_FUNCTION_END, confusing jump.c.  */
14601       if (DECL_CONSTRUCTOR_P (fndecl)
14602           || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
14603         current_function_returns_null = 0;
14604
14605       if (TREE_THIS_VOLATILE (fndecl) && current_function_returns_null)
14606         cp_warning ("`noreturn' function `%D' does return", fndecl);
14607       else if ((warn_return_type || pedantic)
14608                && current_function_returns_null
14609                && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE)
14610         {
14611           /* If this function returns non-void and control can drop through,
14612              complain.  */
14613           cp_warning ("control reaches end of non-void function `%D'", fndecl);
14614         }
14615       /* With just -W, complain only if function returns both with
14616          and without a value.  */
14617       else if (extra_warnings
14618                && current_function_returns_value && current_function_returns_null)
14619         warning ("this function may return with or without a value");
14620     }
14621
14622   --function_depth;
14623
14624   /* Free all the tree nodes making up this function.  */
14625   /* Switch back to allocating nodes permanently
14626      until we start another function.  */
14627   if (! nested)
14628     permanent_allocation (1);
14629
14630   if (DECL_SAVED_INSNS (fndecl) == NULL_RTX)
14631     {
14632       tree t;
14633
14634       /* Stop pointing to the local nodes about to be freed.  */
14635       /* But DECL_INITIAL must remain nonzero so we know this
14636          was an actual function definition.  */
14637       DECL_INITIAL (fndecl) = error_mark_node;
14638       for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
14639         DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
14640     }
14641
14642   if (DECL_STATIC_CONSTRUCTOR (fndecl))
14643     static_ctors = perm_tree_cons (NULL_TREE, fndecl, static_ctors);
14644   if (DECL_STATIC_DESTRUCTOR (fndecl))
14645     static_dtors = perm_tree_cons (NULL_TREE, fndecl, static_dtors);
14646
14647   if (! nested)
14648     {
14649       /* Let the error reporting routines know that we're outside a
14650          function.  For a nested function, this value is used in
14651          pop_cp_function_context and then reset via pop_function_context.  */
14652       current_function_decl = NULL_TREE;
14653     }
14654
14655   named_label_uses = NULL;
14656   current_class_ptr = NULL_TREE;
14657   current_class_ref = NULL_TREE;
14658 }
14659 \f
14660 /* Create the FUNCTION_DECL for a function definition.
14661    DECLSPECS and DECLARATOR are the parts of the declaration;
14662    they describe the return type and the name of the function,
14663    but twisted together in a fashion that parallels the syntax of C.
14664
14665    This function creates a binding context for the function body
14666    as well as setting up the FUNCTION_DECL in current_function_decl.
14667
14668    Returns a FUNCTION_DECL on success.
14669
14670    If the DECLARATOR is not suitable for a function (it defines a datum
14671    instead), we return 0, which tells yyparse to report a parse error.
14672
14673    May return void_type_node indicating that this method is actually
14674    a friend.  See grokfield for more details.
14675
14676    Came here with a `.pushlevel' .
14677
14678    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14679    CHANGES TO CODE IN `grokfield'.  */
14680
14681 tree
14682 start_method (declspecs, declarator, attrlist)
14683      tree declarator, declspecs, attrlist;
14684 {
14685   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
14686                                 attrlist);
14687
14688   /* Something too ugly to handle.  */
14689   if (fndecl == NULL_TREE)
14690     return NULL_TREE;
14691
14692   /* Pass friends other than inline friend functions back.  */
14693   if (fndecl == void_type_node)
14694     return fndecl;
14695
14696   if (TREE_CODE (fndecl) != FUNCTION_DECL)
14697     /* Not a function, tell parser to report parse error.  */
14698     return NULL_TREE;
14699
14700   if (IS_SIGNATURE (current_class_type))
14701     IS_DEFAULT_IMPLEMENTATION (fndecl) = 1;
14702
14703   if (DECL_IN_AGGR_P (fndecl))
14704     {
14705       if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
14706         {
14707           if (DECL_CONTEXT (fndecl) 
14708               && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
14709             cp_error ("`%D' is already defined in class %s", fndecl,
14710                              TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
14711         }
14712       return void_type_node;
14713     }
14714
14715   check_template_shadow (fndecl);
14716
14717   DECL_THIS_INLINE (fndecl) = 1;
14718
14719   if (flag_default_inline)
14720     DECL_INLINE (fndecl) = 1;
14721
14722   /* We process method specializations in finish_struct_1.  */
14723   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
14724     fndecl = push_template_decl (fndecl);
14725
14726   /* We read in the parameters on the maybepermanent_obstack,
14727      but we won't be getting back to them until after we
14728      may have clobbered them.  So the call to preserve_data
14729      will keep them safe.  */
14730   preserve_data ();
14731
14732   if (! DECL_FRIEND_P (fndecl))
14733     {
14734       if (TREE_CHAIN (fndecl))
14735         {
14736           fndecl = copy_node (fndecl);
14737           TREE_CHAIN (fndecl) = NULL_TREE;
14738         }
14739
14740       if (DECL_CONSTRUCTOR_P (fndecl))
14741         {
14742           if (! grok_ctor_properties (current_class_type, fndecl))
14743             return void_type_node;
14744         }
14745       else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
14746         grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
14747     }
14748
14749   cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0, 0);
14750
14751   /* Make a place for the parms */
14752   pushlevel (0);
14753   current_binding_level->parm_flag = 1;
14754   
14755   DECL_IN_AGGR_P (fndecl) = 1;
14756   return fndecl;
14757 }
14758
14759 /* Go through the motions of finishing a function definition.
14760    We don't compile this method until after the whole class has
14761    been processed.
14762
14763    FINISH_METHOD must return something that looks as though it
14764    came from GROKFIELD (since we are defining a method, after all).
14765
14766    This is called after parsing the body of the function definition.
14767    STMTS is the chain of statements that makes up the function body.
14768
14769    DECL is the ..._DECL that `start_method' provided.  */
14770
14771 tree
14772 finish_method (decl)
14773      tree decl;
14774 {
14775   register tree fndecl = decl;
14776   tree old_initial;
14777
14778   register tree link;
14779
14780   if (decl == void_type_node)
14781     return decl;
14782
14783   old_initial = DECL_INITIAL (fndecl);
14784
14785   /* Undo the level for the parms (from start_method).
14786      This is like poplevel, but it causes nothing to be
14787      saved.  Saving information here confuses symbol-table
14788      output routines.  Besides, this information will
14789      be correctly output when this method is actually
14790      compiled.  */
14791
14792   /* Clear out the meanings of the local variables of this level;
14793      also record in each decl which block it belongs to.  */
14794
14795   for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
14796     {
14797       if (DECL_NAME (link) != NULL_TREE)
14798         pop_binding (DECL_NAME (link), link);
14799       my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
14800       DECL_CONTEXT (link) = NULL_TREE;
14801     }
14802
14803   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
14804                       (HOST_WIDE_INT) current_binding_level->level_chain,
14805                       current_binding_level->parm_flag,
14806                       current_binding_level->keep);
14807
14808   poplevel (0, 0, 0);
14809
14810   DECL_INITIAL (fndecl) = old_initial;
14811
14812   /* We used to check if the context of FNDECL was different from
14813      current_class_type as another way to get inside here.  This didn't work
14814      for String.cc in libg++.  */
14815   if (DECL_FRIEND_P (fndecl))
14816     {
14817       CLASSTYPE_INLINE_FRIENDS (current_class_type)
14818         = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
14819       decl = void_type_node;
14820     }
14821
14822   return decl;
14823 }
14824 \f
14825 /* Called when a new struct TYPE is defined.
14826    If this structure or union completes the type of any previous
14827    variable declaration, lay it out and output its rtl.  */
14828
14829 void
14830 hack_incomplete_structures (type)
14831      tree type;
14832 {
14833   tree *list;
14834
14835   if (current_binding_level->incomplete == NULL_TREE)
14836     return;
14837
14838   if (!type) /* Don't do this for class templates.  */
14839     return;
14840
14841   for (list = &current_binding_level->incomplete; *list; )
14842     {
14843       tree decl = TREE_VALUE (*list);
14844       if ((decl && TREE_TYPE (decl) == type)
14845           || (TREE_TYPE (decl)
14846               && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14847               && TREE_TYPE (TREE_TYPE (decl)) == type))
14848         {
14849           int toplevel = toplevel_bindings_p ();
14850           if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14851               && TREE_TYPE (TREE_TYPE (decl)) == type)
14852             layout_type (TREE_TYPE (decl));
14853           layout_decl (decl, 0);
14854           rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
14855           if (! toplevel)
14856             {
14857               tree cleanup;
14858               expand_decl (decl);
14859               cleanup = maybe_build_cleanup (decl);
14860               expand_decl_init (decl);
14861               if (! expand_decl_cleanup (decl, cleanup))
14862                 cp_error ("parser lost in parsing declaration of `%D'",
14863                           decl);
14864             }
14865           *list = TREE_CHAIN (*list);
14866         }
14867       else
14868         list = &TREE_CHAIN (*list);
14869     }
14870 }
14871
14872 /* If DECL is of a type which needs a cleanup, build that cleanup here.
14873    See build_delete for information about AUTO_DELETE.
14874
14875    Don't build these on the momentary obstack; they must live
14876    the life of the binding contour.  */
14877
14878 static tree
14879 maybe_build_cleanup_1 (decl, auto_delete)
14880      tree decl, auto_delete;
14881 {
14882   tree type = TREE_TYPE (decl);
14883   if (type != error_mark_node && TYPE_NEEDS_DESTRUCTOR (type))
14884     {
14885       int temp = 0, flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
14886       tree rval;
14887
14888       if (TREE_CODE (decl) != PARM_DECL)
14889         temp = suspend_momentary ();
14890
14891       if (TREE_CODE (type) == ARRAY_TYPE)
14892         rval = decl;
14893       else
14894         {
14895           mark_addressable (decl);
14896           rval = build_unary_op (ADDR_EXPR, decl, 0);
14897         }
14898
14899       /* Optimize for space over speed here.  */
14900       if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14901           || flag_expensive_optimizations)
14902         flags |= LOOKUP_NONVIRTUAL;
14903
14904       rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
14905
14906       if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14907           && ! TYPE_HAS_DESTRUCTOR (type))
14908         rval = build_compound_expr (expr_tree_cons (NULL_TREE, rval,
14909                                                build_expr_list (NULL_TREE, build_vbase_delete (type, decl))));
14910
14911       if (TREE_CODE (decl) != PARM_DECL)
14912         resume_momentary (temp);
14913
14914       return rval;
14915     }
14916   return 0;
14917 }
14918
14919 /* If DECL is of a type which needs a cleanup, build that cleanup
14920    here.  The cleanup does free the storage with a call to delete.  */
14921
14922 tree
14923 maybe_build_cleanup_and_delete (decl)
14924      tree decl;
14925 {
14926   return maybe_build_cleanup_1 (decl, integer_three_node);
14927 }
14928
14929 /* If DECL is of a type which needs a cleanup, build that cleanup
14930    here.  The cleanup does not free the storage with a call a delete.  */
14931
14932 tree
14933 maybe_build_cleanup (decl)
14934      tree decl;
14935 {
14936   return maybe_build_cleanup_1 (decl, integer_two_node);
14937 }
14938 \f
14939 /* Expand a C++ expression at the statement level.
14940    This is needed to ferret out nodes which have UNKNOWN_TYPE.
14941    The C++ type checker should get all of these out when
14942    expressions are combined with other, type-providing, expressions,
14943    leaving only orphan expressions, such as:
14944
14945    &class::bar;         / / takes its address, but does nothing with it.  */
14946
14947 void
14948 cplus_expand_expr_stmt (exp)
14949      tree exp;
14950 {
14951   if (processing_template_decl)
14952     {
14953       add_tree (build_min_nt (EXPR_STMT, exp));
14954       return;
14955     }
14956
14957   /* Arrange for all temps to disappear.  */
14958   expand_start_target_temps ();
14959
14960   exp = require_complete_type_in_void (exp);
14961   
14962   if (TREE_CODE (exp) == FUNCTION_DECL)
14963     {
14964       cp_warning ("reference, not call, to function `%D'", exp);
14965       warning ("at this point in file");
14966     }
14967
14968 #if 0
14969   /* We should do this eventually, but right now this causes regex.o from
14970      libg++ to miscompile, and tString to core dump.  */
14971   exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
14972 #endif
14973
14974   /* Strip unused implicit INDIRECT_REFs of references.  */
14975   if (TREE_CODE (exp) == INDIRECT_REF
14976       && TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 0))) == REFERENCE_TYPE)
14977     exp = TREE_OPERAND (exp, 0);
14978
14979   /* If we don't do this, we end up down inside expand_expr
14980      trying to do TYPE_MODE on the ERROR_MARK, and really
14981      go outside the bounds of the type.  */
14982   if (exp != error_mark_node)
14983     expand_expr_stmt (break_out_cleanups (exp));
14984
14985   /* Clean up any pending cleanups.  This happens when a function call
14986      returns a cleanup-needing value that nobody uses.  */
14987   expand_end_target_temps ();
14988 }
14989
14990 /* When a stmt has been parsed, this function is called.
14991
14992    Currently, this function only does something within a
14993    constructor's scope: if a stmt has just assigned to this,
14994    and we are in a derived class, we call `emit_base_init'.  */
14995
14996 void
14997 finish_stmt ()
14998 {
14999   extern struct nesting *cond_stack, *loop_stack, *case_stack;
15000
15001   
15002   if (current_function_assigns_this
15003       || ! current_function_just_assigned_this)
15004     return;
15005   if (DECL_CONSTRUCTOR_P (current_function_decl))
15006     {
15007       /* Constructors must wait until we are out of control
15008          zones before calling base constructors.  */
15009       if (cond_stack || loop_stack || case_stack)
15010         return;
15011       expand_expr_stmt (base_init_expr);
15012       check_base_init (current_class_type);
15013     }
15014   current_function_assigns_this = 1;
15015 }
15016
15017 /* Change a static member function definition into a FUNCTION_TYPE, instead
15018    of the METHOD_TYPE that we create when it's originally parsed.
15019
15020    WARNING: DO NOT pass &TREE_TYPE (decl) to FN or &TYPE_ARG_TYPES
15021    (TREE_TYPE (decl)) to ARGTYPES, as doing so will corrupt the types of
15022    other decls.  Either pass the addresses of local variables or NULL.  */
15023
15024 void
15025 revert_static_member_fn (decl, fn, argtypes)
15026      tree *decl, *fn, *argtypes;
15027 {
15028   tree tmp;
15029   tree function = fn ? *fn : TREE_TYPE (*decl);
15030   tree args = argtypes ? *argtypes : TYPE_ARG_TYPES (function);
15031
15032   if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args))) 
15033       != TYPE_UNQUALIFIED)
15034     cp_error ("static member function `%#D' declared with type qualifiers", 
15035               *decl);
15036
15037   args = TREE_CHAIN (args);
15038   tmp = build_function_type (TREE_TYPE (function), args);
15039   tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
15040   tmp = build_exception_variant (tmp,
15041                                  TYPE_RAISES_EXCEPTIONS (function));
15042   TREE_TYPE (*decl) = tmp;
15043   if (DECL_ARGUMENTS (*decl))
15044     DECL_ARGUMENTS (*decl) = TREE_CHAIN (DECL_ARGUMENTS (*decl));
15045   DECL_STATIC_FUNCTION_P (*decl) = 1;
15046   if (fn)
15047     *fn = tmp;
15048   if (argtypes)
15049     *argtypes = args;
15050 }
15051
15052 struct cp_function
15053 {
15054   int returns_value;
15055   int returns_null;
15056   int assigns_this;
15057   int just_assigned_this;
15058   int parms_stored;
15059   int temp_name_counter;
15060   tree named_labels;
15061   struct named_label_list *named_label_uses;
15062   tree shadowed_labels;
15063   tree ctor_label;
15064   tree dtor_label;
15065   rtx last_dtor_insn;
15066   rtx last_parm_cleanup_insn;
15067   tree base_init_list;
15068   tree member_init_list;
15069   tree base_init_expr;
15070   tree current_class_ptr;
15071   tree current_class_ref;
15072   rtx result_rtx;
15073   struct cp_function *next;
15074   struct binding_level *binding_level;
15075   int static_labelno;
15076 };
15077
15078 static struct cp_function *cp_function_chain;
15079
15080 extern int temp_name_counter;
15081
15082 /* Save and reinitialize the variables
15083    used during compilation of a C++ function.  */
15084
15085 void
15086 push_cp_function_context (context)
15087      tree context;
15088 {
15089   struct cp_function *p
15090     = (struct cp_function *) xmalloc (sizeof (struct cp_function));
15091
15092   push_function_context_to (context);
15093
15094   p->next = cp_function_chain;
15095   cp_function_chain = p;
15096
15097   p->named_labels = named_labels;
15098   p->named_label_uses = named_label_uses;
15099   p->shadowed_labels = shadowed_labels;
15100   p->returns_value = current_function_returns_value;
15101   p->returns_null = current_function_returns_null;
15102   p->binding_level = current_binding_level;
15103   p->ctor_label = ctor_label;
15104   p->dtor_label = dtor_label;
15105   p->last_dtor_insn = last_dtor_insn;
15106   p->last_parm_cleanup_insn = last_parm_cleanup_insn;
15107   p->assigns_this = current_function_assigns_this;
15108   p->just_assigned_this = current_function_just_assigned_this;
15109   p->parms_stored = current_function_parms_stored;
15110   p->result_rtx = original_result_rtx;
15111   p->base_init_expr = base_init_expr;
15112   p->temp_name_counter = temp_name_counter;
15113   p->base_init_list = current_base_init_list;
15114   p->member_init_list = current_member_init_list;
15115   p->current_class_ptr = current_class_ptr;
15116   p->current_class_ref = current_class_ref;
15117   p->static_labelno = static_labelno;
15118 }
15119
15120 /* Restore the variables used during compilation of a C++ function.  */
15121
15122 void
15123 pop_cp_function_context (context)
15124      tree context;
15125 {
15126   struct cp_function *p = cp_function_chain;
15127   tree link;
15128
15129   /* Bring back all the labels that were shadowed.  */
15130   for (link = shadowed_labels; link; link = TREE_CHAIN (link))
15131     if (DECL_NAME (TREE_VALUE (link)) != 0)
15132       SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link)),
15133                                   TREE_VALUE (link));
15134
15135   pop_function_context_from (context);
15136
15137   cp_function_chain = p->next;
15138
15139   named_labels = p->named_labels;
15140   named_label_uses = p->named_label_uses;
15141   shadowed_labels = p->shadowed_labels;
15142   current_function_returns_value = p->returns_value;
15143   current_function_returns_null = p->returns_null;
15144   current_binding_level = p->binding_level;
15145   ctor_label = p->ctor_label;
15146   dtor_label = p->dtor_label;
15147   last_dtor_insn = p->last_dtor_insn;
15148   last_parm_cleanup_insn = p->last_parm_cleanup_insn;
15149   current_function_assigns_this = p->assigns_this;
15150   current_function_just_assigned_this = p->just_assigned_this;
15151   current_function_parms_stored = p->parms_stored;
15152   original_result_rtx = p->result_rtx;
15153   base_init_expr = p->base_init_expr;
15154   temp_name_counter = p->temp_name_counter;
15155   current_base_init_list = p->base_init_list;
15156   current_member_init_list = p->member_init_list;
15157   current_class_ptr = p->current_class_ptr;
15158   current_class_ref = p->current_class_ref;
15159   static_labelno = p->static_labelno;
15160
15161   free (p);
15162 }
15163
15164 int
15165 in_function_p ()
15166 {
15167   return function_depth != 0;
15168 }