OSDN Git Service

For gcc:
[pf3gnuchains/gcc-fork.git] / 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
23 /* Process declarations and symbol lookup for C front end.
24    Also constructs types; the standard scalar types at initialization,
25    and structure, union, array and enum types when they are declared.  */
26
27 /* ??? not all decl nodes are given the most useful possible
28    line numbers.  For example, the CONST_DECLs for enum values.  */
29
30 #include "config.h"
31 #include "system.h"
32 #include "tree.h"
33 #include "rtl.h"
34 #include "flags.h"
35 #include "cp-tree.h"
36 #include "decl.h"
37 #include "lex.h"
38 #include <signal.h>
39 #include "obstack.h"
40 #include "defaults.h"
41 #include "output.h"
42 #include "except.h"
43 #include "toplev.h"
44 #include "../hash.h"
45
46 #define obstack_chunk_alloc xmalloc
47 #define obstack_chunk_free free
48
49 extern tree builtin_return_address_fndecl;
50
51 extern struct obstack permanent_obstack;
52 extern struct obstack* saveable_obstack;
53
54 extern int current_class_depth;
55
56 extern tree static_ctors, static_dtors;
57
58 extern int static_labelno;
59
60 extern tree current_namespace;
61 extern tree global_namespace;
62
63 extern void (*print_error_function) PROTO((char *));
64 extern int (*valid_lang_attribute) PROTO ((tree, tree, tree, tree));
65
66 /* Obstack used for remembering local class declarations (like
67    enums and static (const) members.  */
68 #include "stack.h"
69 struct obstack decl_obstack;
70 static struct stack_level *decl_stack;
71
72 #ifndef CHAR_TYPE_SIZE
73 #define CHAR_TYPE_SIZE BITS_PER_UNIT
74 #endif
75
76 #ifndef SHORT_TYPE_SIZE
77 #define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2))
78 #endif
79
80 #ifndef INT_TYPE_SIZE
81 #define INT_TYPE_SIZE BITS_PER_WORD
82 #endif
83
84 #ifndef LONG_TYPE_SIZE
85 #define LONG_TYPE_SIZE BITS_PER_WORD
86 #endif
87
88 #ifndef LONG_LONG_TYPE_SIZE
89 #define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
90 #endif
91
92 #ifndef WCHAR_UNSIGNED
93 #define WCHAR_UNSIGNED 0
94 #endif
95
96 #ifndef FLOAT_TYPE_SIZE
97 #define FLOAT_TYPE_SIZE BITS_PER_WORD
98 #endif
99
100 #ifndef DOUBLE_TYPE_SIZE
101 #define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
102 #endif
103
104 #ifndef LONG_DOUBLE_TYPE_SIZE
105 #define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
106 #endif
107
108 #ifndef BOOL_TYPE_SIZE
109 #ifdef SLOW_BYTE_ACCESS
110 #define BOOL_TYPE_SIZE ((SLOW_BYTE_ACCESS) ? (POINTER_SIZE) : (CHAR_TYPE_SIZE))
111 #else
112 #define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
113 #endif
114 #endif
115
116 /* We let tm.h override the types used here, to handle trivial differences
117    such as the choice of unsigned int or long unsigned int for size_t.
118    When machines start needing nontrivial differences in the size type,
119    it would be best to do something here to figure out automatically
120    from other information what type to use.  */
121
122 #ifndef SIZE_TYPE
123 #define SIZE_TYPE "long unsigned int"
124 #endif
125
126 #ifndef PTRDIFF_TYPE
127 #define PTRDIFF_TYPE "long int"
128 #endif
129
130 #ifndef WCHAR_TYPE
131 #define WCHAR_TYPE "int"
132 #endif
133
134 static tree grokparms                           PROTO((tree, int));
135 static tree lookup_nested_type                  PROTO((tree, tree));
136 static const char *redeclaration_error_message  PROTO((tree, tree));
137
138 static struct stack_level *push_decl_level PROTO((struct stack_level *,
139                                                   struct obstack *));
140 static void push_binding_level PROTO((struct binding_level *, int,
141                                       int));
142 static void pop_binding_level PROTO((void));
143 static void suspend_binding_level PROTO((void));
144 static void resume_binding_level PROTO((struct binding_level *));
145 static struct binding_level *make_binding_level PROTO((void));
146 static void declare_namespace_level PROTO((void));
147 static void signal_catch PROTO((int)) ATTRIBUTE_NORETURN;
148 static void storedecls PROTO((tree));
149 static void require_complete_types_for_parms PROTO((tree));
150 static void push_overloaded_decl_1 PROTO((tree));
151 static int ambi_op_p PROTO((tree));
152 static int unary_op_p PROTO((tree));
153 static tree store_bindings PROTO((tree, tree));
154 static tree lookup_tag_reverse PROTO((tree, tree));
155 static tree obscure_complex_init PROTO((tree, tree));
156 static tree maybe_build_cleanup_1 PROTO((tree, tree));
157 static tree lookup_name_real PROTO((tree, int, int, int));
158 static void warn_extern_redeclared_static PROTO((tree, tree));
159 static void grok_reference_init PROTO((tree, tree, tree));
160 static tree grokfndecl PROTO((tree, tree, tree, tree, int,
161                               enum overload_flags, tree,
162                               tree, int, int, int, int, int, int, tree));
163 static tree grokvardecl PROTO((tree, tree, RID_BIT_TYPE *, int, int, tree));
164 static tree lookup_tag PROTO((enum tree_code, tree,
165                               struct binding_level *, int));
166 static void set_identifier_type_value_with_scope
167         PROTO((tree, tree, struct binding_level *));
168 static void record_builtin_type PROTO((enum rid, const char *, tree));
169 static void record_unknown_type PROTO((tree, const char *));
170 static int member_function_or_else PROTO((tree, tree, const char *));
171 static void bad_specifiers PROTO((tree, const char *, int, int, int, int,
172                                   int));
173 static void lang_print_error_function PROTO((char *));
174 static tree maybe_process_template_type_declaration PROTO((tree, int, struct binding_level*));
175 static void check_for_uninitialized_const_var PROTO((tree));
176 static unsigned long typename_hash PROTO((hash_table_key));
177 static boolean typename_compare PROTO((hash_table_key, hash_table_key));
178 static void push_binding PROTO((tree, tree, struct binding_level*));
179 static int add_binding PROTO((tree, tree));
180 static void pop_binding PROTO((tree, tree));
181 static tree local_variable_p PROTO((tree));
182 static tree find_binding PROTO((tree, tree));
183 static tree select_decl PROTO((tree, int));
184 static tree unqualified_namespace_lookup PROTO((tree, int));
185 static int lookup_flags PROTO((int, int));
186 static tree qualify_lookup PROTO((tree, int));
187 static tree record_builtin_java_type PROTO((const char *, int));
188 static const char *tag_name PROTO((enum tag_types code));
189 static void find_class_binding_level PROTO((void));
190 static struct binding_level *innermost_nonclass_level PROTO((void));
191 static tree poplevel_class PROTO((void));
192 static void warn_about_implicit_typename_lookup PROTO((tree, tree));
193 static int walk_namespaces_r PROTO((tree, walk_namespaces_fn, void *));
194 static int walk_globals_r PROTO((tree, void *));
195
196 #if defined (DEBUG_CP_BINDING_LEVELS)
197 static void indent PROTO((void));
198 #endif
199
200 /* A node which has tree code ERROR_MARK, and whose type is itself.
201    All erroneous expressions are replaced with this node.  All functions
202    that accept nodes as arguments should avoid generating error messages
203    if this node is one of the arguments, since it is undesirable to get
204    multiple error messages from one error in the input.  */
205
206 tree error_mark_node;
207
208 /* Erroneous argument lists can use this *IFF* they do not modify it.  */
209 tree error_mark_list;
210
211 /* INTEGER_TYPE and REAL_TYPE nodes for the standard data types */
212
213 tree short_integer_type_node;
214 tree integer_type_node;
215 tree long_integer_type_node;
216 tree long_long_integer_type_node;
217
218 tree short_unsigned_type_node;
219 tree unsigned_type_node;
220 tree long_unsigned_type_node;
221 tree long_long_unsigned_type_node;
222
223 /* These are used for integer literals that are larger than 
224    a long long.  The largest integer literals we can handle
225    are the width of two HOST_WIDE_INTs.  If two HOST_WIDE_INTs
226    are not larger than the target's long long, then these
227    will never be used. */
228 tree widest_integer_literal_type_node;
229 tree widest_unsigned_literal_type_node;
230
231 tree ptrdiff_type_node;
232
233 tree unsigned_char_type_node;
234 tree signed_char_type_node;
235 tree char_type_node;
236 tree wchar_type_node;
237 tree signed_wchar_type_node;
238 tree unsigned_wchar_type_node;
239
240 tree wchar_decl_node;
241
242 tree float_type_node;
243 tree double_type_node;
244 tree long_double_type_node;
245
246 tree complex_integer_type_node;
247 tree complex_float_type_node;
248 tree complex_double_type_node;
249 tree complex_long_double_type_node;
250
251 tree intQI_type_node;
252 tree intHI_type_node;
253 tree intSI_type_node;
254 tree intDI_type_node;
255 #if HOST_BITS_PER_WIDE_INT >= 64
256 tree intTI_type_node;
257 #endif
258
259 tree unsigned_intQI_type_node;
260 tree unsigned_intHI_type_node;
261 tree unsigned_intSI_type_node;
262 tree unsigned_intDI_type_node;
263 #if HOST_BITS_PER_WIDE_INT >= 64
264 tree unsigned_intTI_type_node;
265 #endif
266
267 tree java_byte_type_node;
268 tree java_short_type_node;
269 tree java_int_type_node;
270 tree java_long_type_node;
271 tree java_float_type_node;
272 tree java_double_type_node;
273 tree java_char_type_node;
274 tree java_boolean_type_node;
275
276 /* A VOID_TYPE node, and the same, packaged in a TREE_LIST.  */
277
278 tree void_type_node, void_list_node;
279 tree void_zero_node;
280
281 /* Nodes for types `void *' and `const void *'.  */
282
283 tree ptr_type_node;
284 tree const_ptr_type_node;
285
286 /* Nodes for types `char *' and `const char *'.  */
287
288 tree string_type_node, const_string_type_node;
289
290 /* Type `char[256]' or something like it.
291    Used when an array of char is needed and the size is irrelevant.  */
292
293 tree char_array_type_node;
294
295 /* Type `int[256]' or something like it.
296    Used when an array of int needed and the size is irrelevant.  */
297
298 tree int_array_type_node;
299
300 /* Type `wchar_t[256]' or something like it.
301    Used when a wide string literal is created.  */
302
303 tree wchar_array_type_node;
304
305 /* The bool data type, and constants */
306 tree boolean_type_node, boolean_true_node, boolean_false_node;
307
308 /* Type `int ()' -- used for implicit declaration of functions.  */
309
310 tree default_function_type;
311
312 /* Function types `double (double)' and `double (double, double)', etc.  */
313
314 static tree double_ftype_double, double_ftype_double_double;
315 static tree int_ftype_int, long_ftype_long;
316 static tree float_ftype_float;
317 static tree ldouble_ftype_ldouble;
318
319 /* Function type `int (const void *, const void *, size_t)' */
320 static tree int_ftype_cptr_cptr_sizet;
321
322 /* C++ extensions */
323 tree vtable_entry_type;
324 tree delta_type_node;
325 #if 0
326 /* Old rtti stuff.  */
327 tree __baselist_desc_type_node;
328 tree __i_desc_type_node, __m_desc_type_node;
329 tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
330 #endif
331 tree __t_desc_type_node;
332 #if 0
333 tree __tp_desc_type_node;
334 #endif
335 tree __access_mode_type_node;
336 tree __bltn_desc_type_node, __user_desc_type_node, __class_desc_type_node;
337 tree __ptr_desc_type_node, __attr_desc_type_node, __func_desc_type_node;
338 tree __ptmf_desc_type_node, __ptmd_desc_type_node;
339 #if 0
340 /* Not needed yet?  May be needed one day?  */
341 tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
342 tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
343 tree __ptmf_desc_array_type, __ptmd_desc_array_type;
344 #endif
345
346 /* Indicates that there is a type value in some namespace, although
347    that is not necessarily in scope at the moment. */
348
349 static tree global_type_node;
350
351 tree class_star_type_node;
352 tree class_type_node, record_type_node, union_type_node, enum_type_node;
353 tree unknown_type_node;
354 tree opaque_type_node, signature_type_node;
355 tree sigtable_entry_type;
356
357 /* Array type `vtable_entry_type[]' */
358 tree vtbl_type_node;
359 tree vtbl_ptr_type_node;
360
361 /* namespace std */
362 tree std_node;
363 int in_std = 0;
364
365 /* Expect only namespace names now. */
366 static int only_namespace_names;
367
368 /* In a destructor, the point at which all derived class destroying
369    has been done, just before any base class destroying will be done.  */
370
371 tree dtor_label;
372
373 /* In a destructor, the last insn emitted after the start of the
374    function and the parms.  */
375
376 static rtx last_dtor_insn;
377
378 /* In a constructor, the last insn emitted after the start of the
379    function and the parms, the exception specification and any
380    function-try-block.  The constructor initializers are emitted after
381    this insn.  */
382
383 static rtx last_parm_cleanup_insn;
384
385 /* In a constructor, the point at which we are ready to return
386    the pointer to the initialized object.  */
387
388 tree ctor_label;
389
390 /* A FUNCTION_DECL which can call `abort'.  Not necessarily the
391    one that the user will declare, but sufficient to be called
392    by routines that want to abort the program.  */
393
394 tree abort_fndecl;
395
396 /* A FUNCTION_DECL for the default `::operator delete'.  */
397
398 tree global_delete_fndecl;
399
400 extern rtx cleanup_label, return_label;
401
402 /* If original DECL_RESULT of current function was a register,
403    but due to being an addressable named return value, would up
404    on the stack, this variable holds the named return value's
405    original location.  */
406 static rtx original_result_rtx;
407
408 /* Sequence of insns which represents base initialization.  */
409 tree base_init_expr;
410
411 /* C++: Keep these around to reduce calls to `get_identifier'.
412    Identifiers for `this' in member functions and the auto-delete
413    parameter for destructors.  */
414 tree this_identifier, in_charge_identifier;
415 tree ctor_identifier, dtor_identifier;
416 /* Used in pointer to member functions, in vtables, and in sigtables.  */
417 tree pfn_identifier, index_identifier, delta_identifier, delta2_identifier;
418 tree pfn_or_delta2_identifier, tag_identifier;
419 tree vt_off_identifier;
420
421 struct named_label_list
422 {
423   struct binding_level *binding_level;
424   tree names_in_scope;
425   tree label_decl;
426   char *filename_o_goto;
427   int lineno_o_goto;
428   struct named_label_list *next;
429 };
430
431 /* A list (chain of TREE_LIST nodes) of named label uses.
432    The TREE_PURPOSE field is the list of variables defined
433    in the label's scope defined at the point of use.
434    The TREE_VALUE field is the LABEL_DECL used.
435    The TREE_TYPE field holds `current_binding_level' at the
436    point of the label's use.
437
438    BWAHAHAAHAHahhahahahaah.  No, no, no, said the little chicken.
439
440    Look at the pretty struct named_label_list. See the pretty struct
441    with the pretty named fields that describe what they do. See the
442    pretty lack of gratuitous casts. Notice the code got a lot cleaner.
443
444    Used only for jumps to as-yet undefined labels, since
445    jumps to defined labels can have their validity checked
446    by stmt.c.  */
447
448 static struct named_label_list *named_label_uses = NULL;
449
450 /* A list of objects which have constructors or destructors
451    which reside in the global scope.  The decl is stored in
452    the TREE_VALUE slot and the initializer is stored
453    in the TREE_PURPOSE slot.  */
454 tree static_aggregates;
455
456 /* -- end of C++ */
457
458 /* Two expressions that are constants with value zero.
459    The first is of type `int', the second of type `void *'.  */
460
461 tree integer_zero_node;
462 tree null_pointer_node;
463
464 /* The value for __null (NULL), namely, a zero of an integer type with
465    the same number of bits as a pointer.  */
466 tree null_node;
467
468 /* A node for the integer constants 1, 2, and 3.  */
469
470 tree integer_one_node, integer_two_node, integer_three_node;
471
472 /* While defining an enum type, this is 1 plus the last enumerator
473    constant value.  */
474
475 static tree enum_next_value;
476
477 /* Nonzero means that there was overflow computing enum_next_value.  */
478
479 static int enum_overflow;
480
481 /* Parsing a function declarator leaves a list of parameter names
482    or a chain or parameter decls here.  */
483
484 tree last_function_parms;
485
486 /* Parsing a function declarator leaves here a chain of structure
487    and enum types declared in the parmlist.  */
488
489 static tree last_function_parm_tags;
490
491 /* After parsing the declarator that starts a function definition,
492    `start_function' puts here the list of parameter names or chain of decls.
493    `store_parm_decls' finds it here.  */
494
495 static tree current_function_parms;
496
497 /* Similar, for last_function_parm_tags.  */
498 static tree current_function_parm_tags;
499
500 /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
501    that have names.  Here so we can clear out their names' definitions
502    at the end of the function.  */
503
504 static tree named_labels;
505
506 /* A list of LABEL_DECLs from outer contexts that are currently shadowed.  */
507
508 static tree shadowed_labels;
509
510 /* The FUNCTION_DECL for the function currently being compiled,
511    or 0 if between functions.  */
512 tree current_function_decl;
513
514 /* Set to 0 at beginning of a function definition, set to 1 if
515    a return statement that specifies a return value is seen.  */
516
517 int current_function_returns_value;
518
519 /* Set to 0 at beginning of a function definition, set to 1 if
520    a return statement with no argument is seen.  */
521
522 int current_function_returns_null;
523
524 /* Set to 0 at beginning of a function definition, and whenever
525    a label (case or named) is defined.  Set to value of expression
526    returned from function when that value can be transformed into
527    a named return value.  */
528
529 tree current_function_return_value;
530
531 /* Nonzero means give `double' the same size as `float'.  */
532
533 extern int flag_short_double;
534
535 /* Nonzero means don't recognize any builtin functions.  */
536
537 extern int flag_no_builtin;
538
539 /* Nonzero means don't recognize the non-ANSI builtin functions.
540    -ansi sets this.  */
541
542 extern int flag_no_nonansi_builtin;
543
544 /* Nonzero means enable obscure ANSI features and disable GNU extensions
545    that might cause ANSI-compliant code to be miscompiled.  */
546
547 extern int flag_ansi;
548
549 /* Nonzero if we want to support huge (> 2^(sizeof(short)*8-1) bytes)
550    objects.  */
551 extern int flag_huge_objects;
552
553 /* Nonzero if we want to conserve space in the .o files.  We do this
554    by putting uninitialized data and runtime initialized data into
555    .common instead of .data at the expense of not flagging multiple
556    definitions.  */
557 extern int flag_conserve_space;
558
559 /* Pointers to the base and current top of the language name stack.  */
560
561 extern tree *current_lang_base, *current_lang_stack;
562 \f
563 /* C and C++ flags are in decl2.c.  */
564
565 /* Set to 0 at beginning of a constructor, set to 1
566    if that function does an allocation before referencing its
567    instance variable.  */
568 static int current_function_assigns_this;
569 int current_function_just_assigned_this;
570
571 /* Set to 0 at beginning of a function.  Set non-zero when
572    store_parm_decls is called.  Don't call store_parm_decls
573    if this flag is non-zero!  */
574 int current_function_parms_stored;
575
576 /* Flag used when debugging spew.c */
577
578 extern int spew_debug;
579
580 /* This is a copy of the class_shadowed list of the previous class binding
581    contour when at global scope.  It's used to reset IDENTIFIER_CLASS_VALUEs
582    when entering another class scope (i.e. a cache miss).  */
583 extern tree previous_class_values;
584
585 /* A expression of value 0 with the same precision as a sizetype
586    node, but signed.  */
587 tree signed_size_zero_node;
588
589 /* The name of the anonymous namespace, throughout this translation
590    unit.  */
591 tree anonymous_namespace_name;
592
593 \f
594 /* Allocate a level of searching.  */
595
596 static
597 struct stack_level *
598 push_decl_level (stack, obstack)
599      struct stack_level *stack;
600      struct obstack *obstack;
601 {
602   struct stack_level tem;
603   tem.prev = stack;
604
605   return push_stack_level (obstack, (char *)&tem, sizeof (tem));
606 }
607 \f
608 /* For each binding contour we allocate a binding_level structure
609    which records the names defined in that contour.
610    Contours include:
611     0) the global one
612     1) one for each function definition,
613        where internal declarations of the parameters appear.
614     2) one for each compound statement,
615        to record its declarations.
616
617    The current meaning of a name can be found by searching the levels
618    from the current one out to the global one.
619
620    Off to the side, may be the class_binding_level.  This exists only
621    to catch class-local declarations.  It is otherwise nonexistent.
622
623    Also there may be binding levels that catch cleanups that must be
624    run when exceptions occur.  Thus, to see whether a name is bound in
625    the current scope, it is not enough to look in the
626    CURRENT_BINDING_LEVEL.  You should use lookup_name_current_level
627    instead.  */
628
629 /* Note that the information in the `names' component of the global contour
630    is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers.  */
631
632 struct binding_level
633   {
634     /* A chain of _DECL nodes for all variables, constants, functions,
635        and typedef types.  These are in the reverse of the order
636        supplied.  There may be OVERLOADs on this list, too, but they
637        are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD.  */
638     tree names;
639
640     /* A list of structure, union and enum definitions, for looking up
641        tag names.
642        It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
643        or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
644        or ENUMERAL_TYPE node.
645
646        C++: the TREE_VALUE nodes can be simple types for
647        component_bindings.  */
648     tree tags;
649
650     /* A list of USING_DECL nodes. */
651     tree usings;
652
653     /* A list of used namespaces. PURPOSE is the namespace,
654        VALUE the common ancestor with this binding_level's namespace. */
655     tree using_directives;
656
657     /* If this binding level is the binding level for a class, then
658        class_shadowed is a TREE_LIST.  The TREE_PURPOSE of each node
659        is the name of an entity bound in the class; the TREE_VALUE is
660        the IDENTIFIER_CLASS_VALUE before we entered the class.  Thus,
661        when leaving class scope, we can restore the
662        IDENTIFIER_CLASS_VALUE by walking this list.  The TREE_TYPE is
663        the DECL bound by this name in the class.  */
664     tree class_shadowed;
665
666     /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
667        is used for all binding levels.  */
668     tree type_shadowed;
669
670     /* For each level (except not the global one),
671        a chain of BLOCK nodes for all the levels
672        that were entered and exited one level down.  */
673     tree blocks;
674
675     /* The BLOCK node for this level, if one has been preallocated.
676        If 0, the BLOCK is allocated (if needed) when the level is popped.  */
677     tree this_block;
678
679     /* The binding level which this one is contained in (inherits from).  */
680     struct binding_level *level_chain;
681
682     /* List of decls in `names' that have incomplete
683        structure or union types.  */
684     tree incomplete;
685
686     /* List of VAR_DECLS saved from a previous for statement.
687        These would be dead in ANSI-conforming code, but might
688        be referenced in ARM-era code.  These are stored in a
689        TREE_LIST; the TREE_VALUE is the actual declaration.  */
690     tree dead_vars_from_for;
691
692     /* 1 for the level that holds the parameters of a function.
693        2 for the level that holds a class declaration.
694        3 for levels that hold parameter declarations.  */
695     unsigned parm_flag : 4;
696
697     /* 1 means make a BLOCK for this level regardless of all else.
698        2 for temporary binding contours created by the compiler.  */
699     unsigned keep : 3;
700
701     /* Nonzero if this level "doesn't exist" for tags.  */
702     unsigned tag_transparent : 1;
703
704     /* Nonzero if this level can safely have additional
705        cleanup-needing variables added to it.  */
706     unsigned more_cleanups_ok : 1;
707     unsigned have_cleanups : 1;
708
709     /* Nonzero if this level is for storing the decls for template
710        parameters and generic decls; these decls will be discarded and
711        replaced with a TEMPLATE_DECL.  */
712     unsigned pseudo_global : 1;
713
714     /* This is set for a namespace binding level.  */
715     unsigned namespace_p : 1;
716
717     /* True if this level is that of a for-statement where we need to
718        worry about ambiguous (ARM or ANSI) scope rules.  */
719     unsigned is_for_scope : 1;
720
721     /* Two bits left for this word.  */
722
723 #if defined(DEBUG_CP_BINDING_LEVELS)
724     /* Binding depth at which this level began.  */
725     unsigned binding_depth;
726 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
727   };
728
729 #define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
730   
731 /* The binding level currently in effect.  */
732
733 static struct binding_level *current_binding_level;
734
735 /* The binding level of the current class, if any.  */
736
737 static struct binding_level *class_binding_level;
738
739 /* A chain of binding_level structures awaiting reuse.  */
740
741 static struct binding_level *free_binding_level;
742
743 /* The outermost binding level, for names of file scope.
744    This is created when the compiler is started and exists
745    through the entire run.  */
746
747 static struct binding_level *global_binding_level;
748
749 /* Binding level structures are initialized by copying this one.  */
750
751 static struct binding_level clear_binding_level;
752
753 /* Nonzero means unconditionally make a BLOCK for the next level pushed.  */
754
755 static int keep_next_level_flag;
756
757 #if defined(DEBUG_CP_BINDING_LEVELS)
758 static int binding_depth = 0;
759 static int is_class_level = 0;
760
761 static void
762 indent ()
763 {
764   register unsigned i;
765
766   for (i = 0; i < binding_depth*2; i++)
767     putc (' ', stderr);
768 }
769 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
770
771 static tree pushdecl_with_scope PROTO((tree, struct binding_level *));
772
773 static void
774 push_binding_level (newlevel, tag_transparent, keep)
775      struct binding_level *newlevel;
776      int tag_transparent, keep;
777 {
778   /* Add this level to the front of the chain (stack) of levels that
779      are active.  */
780   *newlevel = clear_binding_level;
781   newlevel->level_chain = current_binding_level;
782   current_binding_level = newlevel;
783   newlevel->tag_transparent = tag_transparent;
784   newlevel->more_cleanups_ok = 1;
785   newlevel->keep = keep;
786 #if defined(DEBUG_CP_BINDING_LEVELS)
787   newlevel->binding_depth = binding_depth;
788   indent ();
789   fprintf (stderr, "push %s level 0x%08x line %d\n",
790            (is_class_level) ? "class" : "block", newlevel, lineno);
791   is_class_level = 0;
792   binding_depth++;
793 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
794 }
795
796 /* Find the innermost enclosing class scope, and reset
797    CLASS_BINDING_LEVEL appropriately.  */
798
799 static void
800 find_class_binding_level ()
801 {
802   struct binding_level *level = current_binding_level;
803
804   while (level && level->parm_flag != 2)
805     level = level->level_chain;
806   if (level && level->parm_flag == 2)
807     class_binding_level = level;
808   else
809     class_binding_level = 0;
810 }
811
812 static void
813 pop_binding_level ()
814 {
815   if (global_binding_level)
816     {
817       /* Cannot pop a level, if there are none left to pop.  */
818       if (current_binding_level == global_binding_level)
819         my_friendly_abort (123);
820     }
821   /* Pop the current level, and free the structure for reuse.  */
822 #if defined(DEBUG_CP_BINDING_LEVELS)
823   binding_depth--;
824   indent ();
825   fprintf (stderr, "pop  %s level 0x%08x line %d\n",
826           (is_class_level) ? "class" : "block",
827           current_binding_level, lineno);
828   if (is_class_level != (current_binding_level == class_binding_level))
829     {
830       indent ();
831       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
832     }
833   is_class_level = 0;
834 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
835   {
836     register struct binding_level *level = current_binding_level;
837     current_binding_level = current_binding_level->level_chain;
838     level->level_chain = free_binding_level;
839 #if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
840     if (level->binding_depth != binding_depth)
841       abort ();
842 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
843     free_binding_level = level;
844     find_class_binding_level ();
845   }
846 }
847
848 static void
849 suspend_binding_level ()
850 {
851   if (class_binding_level)
852     current_binding_level = class_binding_level;
853
854   if (global_binding_level)
855     {
856       /* Cannot suspend a level, if there are none left to suspend.  */
857       if (current_binding_level == global_binding_level)
858         my_friendly_abort (123);
859     }
860   /* Suspend the current level.  */
861 #if defined(DEBUG_CP_BINDING_LEVELS)
862   binding_depth--;
863   indent ();
864   fprintf (stderr, "suspend  %s level 0x%08x line %d\n",
865           (is_class_level) ? "class" : "block",
866           current_binding_level, lineno);
867   if (is_class_level != (current_binding_level == class_binding_level))
868     {
869       indent ();
870       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
871     }
872   is_class_level = 0;
873 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
874   current_binding_level = current_binding_level->level_chain;
875   find_class_binding_level ();
876 }
877
878 static void
879 resume_binding_level (b)
880      struct binding_level *b;
881 {
882   /* Resuming binding levels is meant only for namespaces,
883      and those cannot nest into classes. */
884   my_friendly_assert(!class_binding_level, 386);
885   /* Also, resuming a non-directly nested namespace is a no-no.  */
886   my_friendly_assert(b->level_chain == current_binding_level, 386);
887   current_binding_level = b;
888 #if defined(DEBUG_CP_BINDING_LEVELS)
889   b->binding_depth = binding_depth;
890   indent ();
891   fprintf (stderr, "resume %s level 0x%08x line %d\n",
892            (is_class_level) ? "class" : "block", b, lineno);
893   is_class_level = 0;
894   binding_depth++;
895 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
896 }
897 \f
898 /* Create a new `struct binding_level'.  */
899
900 static
901 struct binding_level *
902 make_binding_level ()
903 {
904   /* NOSTRICT */
905   return (struct binding_level *) xmalloc (sizeof (struct binding_level));
906 }
907
908 /* Nonzero if we are currently in the global binding level.  */
909
910 int
911 global_bindings_p ()
912 {
913   return current_binding_level == global_binding_level;
914 }
915
916 /* Return the innermost binding level that is not for a class scope.  */
917
918 static struct binding_level *
919 innermost_nonclass_level ()
920 {
921   struct binding_level *b;
922
923   b = current_binding_level;
924   while (b->parm_flag == 2)
925     b = b->level_chain;
926
927   return b;
928 }
929
930 /* Nonzero if we are currently in a toplevel binding level.  This
931    means either the global binding level or a namespace in a toplevel
932    binding level.  Since there are no non-toplevel namespace levels,
933    this really means any namespace or pseudo-global level.  We also
934    include a class whose context is toplevel.  */
935
936 int
937 toplevel_bindings_p ()
938 {
939   struct binding_level *b = innermost_nonclass_level ();
940
941   return b->namespace_p || b->pseudo_global;
942 }
943
944 /* Nonzero if this is a namespace scope, or if we are defining a class
945    which is itself at namespace scope, or whose enclosing class is
946    such a class, etc.  */
947
948 int
949 namespace_bindings_p ()
950 {
951   struct binding_level *b = innermost_nonclass_level ();
952
953   return b->namespace_p;
954 }
955
956 void
957 keep_next_level ()
958 {
959   keep_next_level_flag = 1;
960 }
961
962 /* Nonzero if the current level needs to have a BLOCK made.  */
963
964 int
965 kept_level_p ()
966 {
967   return (current_binding_level->blocks != NULL_TREE
968           || current_binding_level->keep
969           || current_binding_level->names != NULL_TREE
970           || (current_binding_level->tags != NULL_TREE
971               && !current_binding_level->tag_transparent));
972 }
973
974 /* Identify this binding level as a level of parameters.  */
975
976 void
977 declare_parm_level ()
978 {
979   current_binding_level->parm_flag = 1;
980 }
981
982 void
983 declare_pseudo_global_level ()
984 {
985   current_binding_level->pseudo_global = 1;
986 }
987
988 static void
989 declare_namespace_level ()
990 {
991   current_binding_level->namespace_p = 1;
992 }
993
994 int
995 pseudo_global_level_p ()
996 {
997   struct binding_level *b = innermost_nonclass_level ();
998
999   return b->pseudo_global;
1000 }
1001
1002 void
1003 set_class_shadows (shadows)
1004      tree shadows;
1005 {
1006   class_binding_level->class_shadowed = shadows;
1007 }
1008
1009 /* Enter a new binding level.
1010    If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
1011    not for that of tags.  */
1012
1013 void
1014 pushlevel (tag_transparent)
1015      int tag_transparent;
1016 {
1017   register struct binding_level *newlevel = NULL_BINDING_LEVEL;
1018
1019   /* If this is the top level of a function,
1020      just make sure that NAMED_LABELS is 0.
1021      They should have been set to 0 at the end of the previous function.  */
1022
1023   if (current_binding_level == global_binding_level)
1024     my_friendly_assert (named_labels == NULL_TREE, 134);
1025
1026   /* Reuse or create a struct for this binding level.  */
1027
1028 #if defined(DEBUG_CP_BINDING_LEVELS)
1029   if (0)
1030 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1031   if (free_binding_level)
1032 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1033     {
1034       newlevel = free_binding_level;
1035       free_binding_level = free_binding_level->level_chain;
1036     }
1037   else
1038     {
1039       newlevel = make_binding_level ();
1040     }
1041
1042   push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
1043   GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
1044   keep_next_level_flag = 0;
1045 }
1046
1047 void
1048 note_level_for_for ()
1049 {
1050   current_binding_level->is_for_scope = 1;
1051 }
1052
1053 void
1054 pushlevel_temporary (tag_transparent)
1055      int tag_transparent;
1056 {
1057   pushlevel (tag_transparent);
1058   current_binding_level->keep = 2;
1059   clear_last_expr ();
1060
1061   /* Note we don't call push_momentary() here.  Otherwise, it would cause
1062      cleanups to be allocated on the momentary obstack, and they will be
1063      overwritten by the next statement.  */
1064
1065   expand_start_bindings (0);
1066 }
1067
1068 /* For a binding between a name and an entity at a block scope,
1069    this is the `struct binding_level' for the block.  */
1070 #define BINDING_LEVEL(NODE) \
1071    (((struct tree_binding*)NODE)->scope.level)
1072
1073 /* These are currently unused, but permanent, CPLUS_BINDING nodes.
1074    They are kept here because they are allocated from the permanent
1075    obstack and cannot be easily freed.  */
1076 static tree free_binding_nodes;
1077
1078 /* Make DECL the innermost binding for ID.  The LEVEL is the binding
1079    level at which this declaration is being bound.  */
1080
1081 static void
1082 push_binding (id, decl, level)
1083      tree id;
1084      tree decl;
1085      struct binding_level* level;
1086 {
1087   tree binding;
1088
1089   if (!free_binding_nodes)
1090     {
1091       /* There are no free nodes, so we must build one here.  */
1092       push_obstacks_nochange ();
1093       end_temporary_allocation ();
1094       binding = make_node (CPLUS_BINDING);
1095       pop_obstacks ();
1096     }
1097   else
1098     {
1099       /* There are nodes on the free list.  Grab the first one.  */
1100       binding = free_binding_nodes;
1101       
1102       /* And update the free list.  */
1103       free_binding_nodes = TREE_CHAIN (free_binding_nodes);
1104     }
1105
1106   /* Now, fill in the binding information.  */
1107   BINDING_VALUE (binding) = decl;
1108   BINDING_TYPE (binding) = NULL_TREE;
1109   BINDING_LEVEL (binding) = level;
1110   INHERITED_VALUE_BINDING_P (binding) = 0;
1111   LOCAL_BINDING_P (binding) = (level != class_binding_level);
1112
1113   /* And put it on the front of the list of bindings for ID.  */
1114   TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
1115   IDENTIFIER_BINDING (id) = binding;
1116 }
1117
1118 /* ID is already bound in the current scope.  But, DECL is an
1119    additional binding for ID in the same scope.  This is the `struct
1120    stat' hack whereby a non-typedef class-name or enum-name can be
1121    bound at the same level as some other kind of entity.  It's the
1122    responsibility of the caller to check that inserting this name is
1123    legal here.  Returns nonzero if the new binding was successful.  */
1124 static int
1125 add_binding (id, decl)
1126      tree id;
1127      tree decl;
1128 {
1129   tree binding = IDENTIFIER_BINDING (id);
1130   int ok = 1;
1131
1132   if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
1133     /* The new name is the type name.  */
1134     BINDING_TYPE (binding) = decl;
1135   else if (!BINDING_VALUE (binding))
1136     /* This situation arises when push_class_level_binding moves an
1137        inherited type-binding out of the way to make room for a new
1138        value binding.  */
1139     BINDING_VALUE (binding) = decl;
1140   else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
1141            && DECL_ARTIFICIAL (BINDING_VALUE (binding)))
1142     {
1143       /* The old binding was a type name.  It was placed in
1144          BINDING_VALUE because it was thought, at the point it was
1145          declared, to be the only entity with such a name.  Move the
1146          type name into the type slot; it is now hidden by the new
1147          binding.  */
1148       BINDING_TYPE (binding) = BINDING_VALUE (binding);
1149       BINDING_VALUE (binding) = decl;
1150       INHERITED_VALUE_BINDING_P (binding) = 0;
1151     }
1152   else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
1153            && TREE_CODE (decl) == TYPE_DECL
1154            && DECL_NAME (decl) == DECL_NAME (BINDING_VALUE (binding))
1155            && same_type_p (TREE_TYPE (decl),
1156                            TREE_TYPE (BINDING_VALUE (binding))))
1157     /* We have two typedef-names, both naming the same type to have
1158        the same name.  This is OK because of:
1159
1160          [dcl.typedef]
1161
1162          In a given scope, a typedef specifier can be used to redefine
1163          the name of any type declared in that scope to refer to the
1164          type to which it already refers.  */
1165     ok = 0;
1166   else
1167     {
1168       cp_error ("declaration of `%#D'", decl);
1169       cp_error_at ("conflicts with previous declaration `%#D'",
1170                    BINDING_VALUE (binding));
1171       ok = 0;
1172     }
1173
1174   return ok;
1175 }
1176
1177 /* Bind DECL to ID in the current_binding_level.
1178    If PUSH_USING is set in FLAGS, we know that DECL doesn't really belong
1179    to this binding level, that it got here through a using-declaration.  */
1180
1181 void
1182 push_local_binding (id, decl, flags)
1183      tree id;
1184      tree decl;
1185      int flags;
1186 {
1187   struct binding_level *b;
1188
1189   /* Skip over any local classes.  This makes sense if we call
1190      push_local_binding with a friend decl of a local class.  */
1191   b = current_binding_level;
1192   while (b->parm_flag == 2)
1193     b = b->level_chain;
1194
1195   if (lookup_name_current_level (id))
1196     {
1197       /* Supplement the existing binding.  */
1198       if (!add_binding (id, decl))
1199         /* It didn't work.  Something else must be bound at this
1200            level.  Do not add DECL to the list of things to pop
1201            later.  */
1202         return;
1203     }
1204   else
1205     /* Create a new binding.  */
1206     push_binding (id, decl, b);
1207
1208   if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
1209     /* We must put the OVERLOAD into a TREE_LIST since the
1210        TREE_CHAIN of an OVERLOAD is already used.  Similarly for
1211        decls that got here through a using-declaration.  */
1212     decl = build_tree_list (NULL_TREE, decl);
1213
1214   /* And put DECL on the list of things declared by the current
1215      binding level.  */
1216   TREE_CHAIN (decl) = b->names;
1217   b->names = decl;
1218 }
1219
1220 /* Bind DECL to ID in the class_binding_level.  Returns nonzero if the
1221    binding was successful.  */
1222
1223 int
1224 push_class_binding (id, decl)
1225      tree id;
1226      tree decl;
1227 {
1228   int result = 1;
1229   tree binding = IDENTIFIER_BINDING (id);
1230   tree context;
1231
1232   /* Note that we declared this value so that we can issue an error if
1233      this an illegal redeclaration of a name already used for some
1234      other purpose.  */
1235   note_name_declared_in_class (id, decl);
1236
1237   if (binding && BINDING_LEVEL (binding) == class_binding_level)
1238     /* Supplement the existing binding.  */
1239     result = add_binding (id, decl);
1240   else
1241     /* Create a new binding.  */
1242     push_binding (id, decl, class_binding_level);
1243
1244   /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
1245      class-level declaration.  Note that we do not use DECL here
1246      because of the possibility of the `struct stat' hack; if DECL is
1247      a class-name or enum-name we might prefer a field-name, or some
1248      such.  */
1249   IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
1250
1251   /* If this is a binding from a base class, mark it as such.  */
1252   binding = IDENTIFIER_BINDING (id);
1253   if (BINDING_VALUE (binding) == decl && TREE_CODE (decl) != TREE_LIST)
1254     {
1255       /* Any implicit typename must be from a base-class.  The
1256          context for an implicit typename declaration is always
1257          the derived class in which the lookup was done, so the checks
1258          based on the context of DECL below will not trigger.  */
1259       if (TREE_CODE (decl) == TYPE_DECL 
1260           && IMPLICIT_TYPENAME_P (TREE_TYPE (decl)))
1261         INHERITED_VALUE_BINDING_P (binding) = 1;
1262       else
1263         {
1264           if (TREE_CODE (decl) == OVERLOAD)
1265             context = DECL_REAL_CONTEXT (OVL_CURRENT (decl));
1266           else
1267             {
1268               my_friendly_assert (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd',
1269                                   0);
1270               context = DECL_REAL_CONTEXT (decl);
1271             }
1272
1273           if (is_properly_derived_from (current_class_type, context))
1274             INHERITED_VALUE_BINDING_P (binding) = 1;
1275           else
1276             INHERITED_VALUE_BINDING_P (binding) = 0;
1277         }
1278     }
1279   else if (BINDING_VALUE (binding) == decl)
1280     /* We only encounter a TREE_LIST when push_class_decls detects an
1281        ambiguity.  Such an ambiguity can be overridden by a definition
1282        in this class.  */
1283     INHERITED_VALUE_BINDING_P (binding) = 1;
1284
1285   return result;
1286 }
1287
1288 /* Remove the binding for DECL which should be the innermost binding
1289    for ID.  */
1290
1291 static void 
1292 pop_binding (id, decl) 
1293      tree id;
1294      tree decl;
1295 {
1296   tree binding;
1297     
1298   if (id == NULL_TREE)
1299     /* It's easiest to write the loops that call this function without
1300        checking whether or not the entities involved have names.  We
1301        get here for such an entity.  */
1302     return;
1303
1304   /* Get the innermost binding for ID.  */
1305   binding = IDENTIFIER_BINDING (id);
1306
1307   /* The name should be bound.  */
1308   my_friendly_assert (binding != NULL_TREE, 0);
1309
1310   /* The DECL will be either the ordinary binding or the type
1311      binding for this identifier.  Remove that binding.  */
1312   if (BINDING_VALUE (binding) == decl)
1313     BINDING_VALUE (binding) = NULL_TREE;
1314   else if (BINDING_TYPE (binding) == decl)
1315     BINDING_TYPE (binding) = NULL_TREE;
1316   else
1317     my_friendly_abort (0);
1318
1319   if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
1320     {
1321       /* We're completely done with the innermost binding for this
1322          identifier.  Unhook it from the list of bindings.  */
1323       IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
1324
1325       /* And place it on the free list.  */
1326       TREE_CHAIN (binding) = free_binding_nodes;
1327       free_binding_nodes = binding;
1328     }
1329 }
1330
1331 /* Exit a binding level.
1332    Pop the level off, and restore the state of the identifier-decl mappings
1333    that were in effect when this level was entered.
1334
1335    If KEEP == 1, this level had explicit declarations, so
1336    and create a "block" (a BLOCK node) for the level
1337    to record its declarations and subblocks for symbol table output.
1338
1339    If FUNCTIONBODY is nonzero, this level is the body of a function,
1340    so create a block as if KEEP were set and also clear out all
1341    label names.
1342
1343    If REVERSE is nonzero, reverse the order of decls before putting
1344    them into the BLOCK.  */
1345
1346 tree
1347 poplevel (keep, reverse, functionbody)
1348      int keep;
1349      int reverse;
1350      int functionbody;
1351 {
1352   register tree link;
1353   /* The chain of decls was accumulated in reverse order.
1354      Put it into forward order, just for cleanliness.  */
1355   tree decls;
1356   int tmp = functionbody;
1357   int real_functionbody = current_binding_level->keep == 2
1358     ? ((functionbody = 0), tmp) : functionbody;
1359   tree tags = functionbody >= 0 ? current_binding_level->tags : 0;
1360   tree subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1361   tree block = NULL_TREE;
1362   tree decl;
1363   int block_previously_created;
1364   int leaving_for_scope;
1365
1366   if (current_binding_level->parm_flag == 2)
1367     return poplevel_class ();
1368
1369   my_friendly_assert (!current_binding_level->class_shadowed,
1370                       19990414);
1371
1372   /* We used to use KEEP == 2 to indicate that the new block should go
1373      at the beginning of the list of blocks at this binding level,
1374      rather than the end.  This hack is no longer used.  */
1375   my_friendly_assert (keep == 0 || keep == 1, 0);
1376
1377   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1378                       (HOST_WIDE_INT) current_binding_level->level_chain,
1379                       current_binding_level->parm_flag,
1380                       current_binding_level->keep);
1381
1382   if (current_binding_level->keep == 1)
1383     keep = 1;
1384
1385   /* Get the decls in the order they were written.
1386      Usually current_binding_level->names is in reverse order.
1387      But parameter decls were previously put in forward order.  */
1388
1389   if (reverse)
1390     current_binding_level->names
1391       = decls = nreverse (current_binding_level->names);
1392   else
1393     decls = current_binding_level->names;
1394
1395   /* Output any nested inline functions within this block
1396      if they weren't already output.  */
1397
1398   for (decl = decls; decl; decl = TREE_CHAIN (decl))
1399     if (TREE_CODE (decl) == FUNCTION_DECL
1400         && ! TREE_ASM_WRITTEN (decl)
1401         && DECL_INITIAL (decl) != NULL_TREE
1402         && TREE_ADDRESSABLE (decl)
1403         && decl_function_context (decl) == current_function_decl)
1404       {
1405         /* If this decl was copied from a file-scope decl
1406            on account of a block-scope extern decl,
1407            propagate TREE_ADDRESSABLE to the file-scope decl.  */
1408         if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1409           TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1410         else
1411           {
1412             push_function_context ();
1413             output_inline_function (decl);
1414             pop_function_context ();
1415           }
1416       }
1417
1418   /* If there were any declarations or structure tags in that level,
1419      or if this level is a function body,
1420      create a BLOCK to record them for the life of this function.  */
1421
1422   block = NULL_TREE;
1423   block_previously_created = (current_binding_level->this_block != NULL_TREE);
1424   if (block_previously_created)
1425     block = current_binding_level->this_block;
1426   else if (keep == 1 || functionbody)
1427     block = make_node (BLOCK);
1428   if (block != NULL_TREE)
1429     {
1430       if (block_previously_created)
1431         {
1432           if (decls || tags || subblocks)
1433             {
1434               if (BLOCK_VARS (block) || BLOCK_TYPE_TAGS (block))
1435                 warning ("internal compiler error: debugging info corrupted");
1436
1437               BLOCK_VARS (block) = decls;
1438               BLOCK_TYPE_TAGS (block) = tags;
1439
1440               /* We can have previous subblocks and new subblocks when
1441                  doing fixup_gotos with complex cleanups.  We chain the new
1442                  subblocks onto the end of any pre-existing subblocks.  */
1443               BLOCK_SUBBLOCKS (block) = chainon (BLOCK_SUBBLOCKS (block),
1444                                                  subblocks);
1445             }
1446           /* If we created the block earlier on, and we are just
1447              diddling it now, then it already should have a proper
1448              BLOCK_END_NOTE value associated with it.  */
1449         }
1450       else
1451         {
1452           BLOCK_VARS (block) = decls;
1453           BLOCK_TYPE_TAGS (block) = tags;
1454           BLOCK_SUBBLOCKS (block) = subblocks;
1455           /* Otherwise, for a new block, install a new BLOCK_END_NOTE
1456              value.  */ 
1457           remember_end_note (block);
1458         }
1459     }
1460
1461   /* In each subblock, record that this is its superior.  */
1462
1463   if (keep >= 0)
1464     for (link = subblocks; link; link = TREE_CHAIN (link))
1465       BLOCK_SUPERCONTEXT (link) = block;
1466
1467   /* We still support the old for-scope rules, whereby the variables
1468      in a for-init statement were in scope after the for-statement
1469      ended.  We only use the new rules in flag_new_for_scope is
1470      nonzero.  */
1471   leaving_for_scope 
1472     = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1473
1474   /* Remove declarations for all the DECLs in this level.  */
1475   for (link = decls; link; link = TREE_CHAIN (link))
1476     {
1477       if (leaving_for_scope && TREE_CODE (link) == VAR_DECL)
1478         {
1479           tree outer_binding 
1480             = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1481           tree ns_binding;
1482
1483           if (!outer_binding)
1484             ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
1485           else
1486             ns_binding = NULL_TREE;
1487
1488           if (outer_binding 
1489               && (BINDING_LEVEL (outer_binding) 
1490                   == current_binding_level->level_chain))
1491             /* We have something like:
1492                
1493                  int i;
1494                  for (int i; ;);
1495                  
1496                and we are leaving the `for' scope.  There's no reason to
1497                keep the binding of the inner `i' in this case.  */
1498             pop_binding (DECL_NAME (link), link);
1499           else if ((outer_binding 
1500                     && (TREE_CODE (BINDING_VALUE (outer_binding)) 
1501                         == TYPE_DECL))
1502                    || (ns_binding 
1503                        && TREE_CODE (ns_binding) == TYPE_DECL))
1504             /* Here, we have something like:
1505
1506                  typedef int I;
1507
1508                  void f () {
1509                    for (int I; ;);
1510                  }
1511
1512                We must pop the for-scope binding so we know what's a
1513                type and what isn't.  */
1514             pop_binding (DECL_NAME (link), link);
1515           else
1516             {
1517               /* Mark this VAR_DECL as dead so that we can tell we left it
1518                  there only for backward compatibility.  */
1519               DECL_DEAD_FOR_LOCAL (link) = 1;
1520               
1521               /* Keep track of what should of have happenned when we
1522                  popped the binding.  */
1523               if (outer_binding && BINDING_VALUE (outer_binding))
1524                 DECL_SHADOWED_FOR_VAR (link) 
1525                   = BINDING_VALUE (outer_binding);
1526
1527               /* Add it to the list of dead variables in the next
1528                  outermost binding to that we can remove these when we
1529                  leave that binding.  */
1530               current_binding_level->level_chain->dead_vars_from_for
1531                 = tree_cons (NULL_TREE, link,
1532                              current_binding_level->level_chain->
1533                              dead_vars_from_for);
1534
1535               /* Although we don't pop the CPLUS_BINDING, we do clear
1536                  its BINDING_LEVEL since the level is going away now.  */
1537               BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1538                 = 0;
1539             }
1540         }
1541       else 
1542         {
1543           /* Remove the binding.  */
1544           decl = link;
1545           if (TREE_CODE (decl) == TREE_LIST)
1546             decl = TREE_VALUE (decl);
1547           if (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd')
1548             pop_binding (DECL_NAME (decl), decl);
1549           else if (TREE_CODE (decl) == OVERLOAD)
1550             pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
1551           else 
1552             my_friendly_abort (0);
1553         }
1554     }
1555
1556   /* Remove declarations for any `for' variables from inner scopes
1557      that we kept around.  */
1558   for (link = current_binding_level->dead_vars_from_for;
1559        link; link = TREE_CHAIN (link))
1560     pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
1561
1562   /* Restore the IDENTIFIER_TYPE_VALUEs.  */
1563   for (link = current_binding_level->type_shadowed;
1564        link; link = TREE_CHAIN (link))
1565     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
1566   
1567   /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1568      list if a `using' declaration put them there.  The debugging
1569      back-ends won't understand OVERLOAD, so we remove them here.
1570      Because the BLOCK_VARS are (temporarily) shared with
1571      CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1572      popped all the bindings.  */
1573   if (block)
1574     {
1575       tree* d;
1576
1577       for (d = &BLOCK_VARS (block); *d; )
1578         {
1579           if (TREE_CODE (*d) == TREE_LIST)
1580             *d = TREE_CHAIN (*d);
1581           else
1582             d = &TREE_CHAIN (*d);
1583         }
1584     }
1585
1586   /* If the level being exited is the top level of a function,
1587      check over all the labels.  */
1588
1589   if (functionbody)
1590     {
1591       /* If this is the top level block of a function,
1592          the vars are the function's parameters.
1593          Don't leave them in the BLOCK because they are
1594          found in the FUNCTION_DECL instead.  */
1595
1596       BLOCK_VARS (block) = 0;
1597
1598       /* Clear out the definitions of all label names,
1599          since their scopes end here.  */
1600
1601       for (link = named_labels; link; link = TREE_CHAIN (link))
1602         {
1603           register tree label = TREE_VALUE (link);
1604
1605           if (DECL_INITIAL (label) == NULL_TREE)
1606             {
1607               cp_error_at ("label `%D' used but not defined", label);
1608               /* Avoid crashing later.  */
1609               define_label (input_filename, 1, DECL_NAME (label));
1610             }
1611           else if (warn_unused && !TREE_USED (label))
1612             cp_warning_at ("label `%D' defined but not used", label);
1613           SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), NULL_TREE);
1614
1615           /* Put the labels into the "variables" of the
1616              top-level block, so debugger can see them.  */
1617           TREE_CHAIN (label) = BLOCK_VARS (block);
1618           BLOCK_VARS (block) = label;
1619         }
1620
1621       named_labels = NULL_TREE;
1622     }
1623
1624   /* Any uses of undefined labels now operate under constraints
1625      of next binding contour.  */
1626   {
1627     struct binding_level *level_chain;
1628     level_chain = current_binding_level->level_chain;
1629     if (level_chain)
1630       {
1631         struct named_label_list *labels;
1632         for (labels = named_label_uses; labels; labels = labels->next)
1633           if (labels->binding_level == current_binding_level)
1634             {
1635               labels->binding_level = level_chain;
1636               labels->names_in_scope = level_chain->names;
1637             }
1638       }
1639   }
1640
1641   tmp = current_binding_level->keep;
1642
1643   pop_binding_level ();
1644   if (functionbody)
1645     DECL_INITIAL (current_function_decl) = block;
1646   else if (block)
1647     {
1648       if (!block_previously_created)
1649         current_binding_level->blocks
1650           = chainon (current_binding_level->blocks, block);
1651     }
1652   /* If we did not make a block for the level just exited,
1653      any blocks made for inner levels
1654      (since they cannot be recorded as subblocks in that level)
1655      must be carried forward so they will later become subblocks
1656      of something else.  */
1657   else if (subblocks)
1658     current_binding_level->blocks
1659       = chainon (current_binding_level->blocks, subblocks);
1660
1661   /* Take care of compiler's internal binding structures.  */
1662   if (tmp == 2)
1663     {
1664       expand_end_bindings (getdecls (), keep, 1);
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       block = poplevel (keep, reverse, real_functionbody);
1671     }
1672
1673   /* Each and every BLOCK node created here in `poplevel' is important
1674      (e.g. for proper debugging information) so if we created one
1675      earlier, mark it as "used".  */
1676   if (block)
1677     TREE_USED (block) = 1;
1678   return block;
1679 }
1680
1681 /* Delete the node BLOCK from the current binding level.
1682    This is used for the block inside a stmt expr ({...})
1683    so that the block can be reinserted where appropriate.  */
1684
1685 void
1686 delete_block (block)
1687      tree block;
1688 {
1689   tree t;
1690   if (current_binding_level->blocks == block)
1691     current_binding_level->blocks = TREE_CHAIN (block);
1692   for (t = current_binding_level->blocks; t;)
1693     {
1694       if (TREE_CHAIN (t) == block)
1695         TREE_CHAIN (t) = TREE_CHAIN (block);
1696       else
1697         t = TREE_CHAIN (t);
1698     }
1699   TREE_CHAIN (block) = NULL_TREE;
1700   /* Clear TREE_USED which is always set by poplevel.
1701      The flag is set again if insert_block is called.  */
1702   TREE_USED (block) = 0;
1703 }
1704
1705 /* Insert BLOCK at the end of the list of subblocks of the
1706    current binding level.  This is used when a BIND_EXPR is expanded,
1707    to handle the BLOCK node inside the BIND_EXPR.  */
1708
1709 void
1710 insert_block (block)
1711      tree block;
1712 {
1713   TREE_USED (block) = 1;
1714   current_binding_level->blocks
1715     = chainon (current_binding_level->blocks, block);
1716 }
1717
1718 /* Set the BLOCK node for the innermost scope
1719    (the one we are currently in).  */
1720
1721 void
1722 set_block (block)
1723     register tree block;
1724 {
1725   current_binding_level->this_block = block;
1726 }
1727
1728 /* Do a pushlevel for class declarations.  */
1729
1730 void
1731 pushlevel_class ()
1732 {
1733   register struct binding_level *newlevel;
1734
1735   /* Reuse or create a struct for this binding level.  */
1736 #if defined(DEBUG_CP_BINDING_LEVELS)
1737   if (0)
1738 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1739   if (free_binding_level)
1740 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1741     {
1742       newlevel = free_binding_level;
1743       free_binding_level = free_binding_level->level_chain;
1744     }
1745   else
1746     newlevel = make_binding_level ();
1747
1748 #if defined(DEBUG_CP_BINDING_LEVELS)
1749   is_class_level = 1;
1750 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1751
1752   push_binding_level (newlevel, 0, 0);
1753
1754   decl_stack = push_decl_level (decl_stack, &decl_obstack);
1755   class_binding_level = current_binding_level;
1756   class_binding_level->parm_flag = 2;
1757 }
1758
1759 /* ...and a poplevel for class declarations.  */
1760
1761 static tree
1762 poplevel_class ()
1763 {
1764   register struct binding_level *level = class_binding_level;
1765   tree shadowed;
1766
1767   my_friendly_assert (level != 0, 354);
1768   
1769   decl_stack = pop_stack_level (decl_stack);
1770   /* If we're leaving a toplevel class, don't bother to do the setting
1771      of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
1772      shouldn't even be used when current_class_type isn't set, and second,
1773      if we don't touch it here, we're able to use the cache effect if the
1774      next time we're entering a class scope, it is the same class.  */
1775   if (current_class_depth != 1)
1776     {
1777       struct binding_level* b;
1778
1779       /* Clear out our IDENTIFIER_CLASS_VALUEs.  */
1780       for (shadowed = level->class_shadowed;
1781            shadowed;
1782            shadowed = TREE_CHAIN (shadowed))
1783         IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = NULL_TREE;
1784         
1785       /* Find the next enclosing class, and recreate
1786          IDENTIFIER_CLASS_VALUEs appropriate for that class.  */
1787       b = level->level_chain;
1788       while (b && b->parm_flag != 2)
1789         b = b->level_chain;
1790
1791       if (b)
1792         for (shadowed = b->class_shadowed; 
1793              shadowed; 
1794              shadowed = TREE_CHAIN (shadowed))
1795           {
1796             tree t;
1797
1798             t = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
1799             while (t && BINDING_LEVEL (t) != b)
1800               t = TREE_CHAIN (t);
1801       
1802             if (t)
1803               IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) 
1804                 = BINDING_VALUE (t);
1805           }
1806     }
1807   else
1808     /* Remember to save what IDENTIFIER's were bound in this scope so we
1809        can recover from cache misses.  */
1810     {
1811       previous_class_type = current_class_type;
1812       previous_class_values = class_binding_level->class_shadowed;
1813     }
1814   for (shadowed = level->type_shadowed;
1815        shadowed;
1816        shadowed = TREE_CHAIN (shadowed))
1817     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
1818
1819   /* Remove the bindings for all of the class-level declarations.  */
1820   for (shadowed = level->class_shadowed; 
1821        shadowed; 
1822        shadowed = TREE_CHAIN (shadowed))
1823     pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
1824
1825   GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1826                       (HOST_WIDE_INT) class_binding_level->level_chain,
1827                       class_binding_level->parm_flag,
1828                       class_binding_level->keep);
1829
1830   /* Now, pop out of the binding level which we created up in the
1831      `pushlevel_class' routine.  */
1832 #if defined(DEBUG_CP_BINDING_LEVELS)
1833   is_class_level = 1;
1834 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1835
1836   pop_binding_level ();
1837
1838   return NULL_TREE;
1839 }
1840
1841 /* We are entering the scope of a class.  Clear IDENTIFIER_CLASS_VALUE
1842    for any names in enclosing classes.  */
1843
1844 void
1845 clear_identifier_class_values ()
1846 {
1847   tree t;
1848
1849   if (!class_binding_level)
1850     return;
1851
1852   for (t = class_binding_level->class_shadowed;
1853        t;
1854        t = TREE_CHAIN (t))
1855     IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
1856 }
1857
1858 /* Returns non-zero if T is a virtual function table.  */
1859
1860 int
1861 vtable_decl_p (t, data)
1862      tree t;
1863      void *data ATTRIBUTE_UNUSED;
1864 {
1865   return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
1866 }
1867
1868 /* Returns non-zero if T is a TYPE_DECL for a type with virtual
1869    functions.  */
1870
1871 int
1872 vtype_decl_p (t, data)
1873      tree t;
1874      void *data ATTRIBUTE_UNUSED;
1875 {
1876   return (TREE_CODE (t) == TYPE_DECL
1877           && TREE_TYPE (t) != error_mark_node
1878           && TYPE_LANG_SPECIFIC (TREE_TYPE (t))
1879           && CLASSTYPE_VSIZE (TREE_TYPE (t)));
1880 }
1881
1882 /* Returns non-zero if T is a signature table.  */
1883
1884 int 
1885 sigtable_decl_p (t, data)
1886      tree t;
1887      void *data ATTRIBUTE_UNUSED;
1888 {
1889   return (TREE_CODE (t) == VAR_DECL
1890           && TREE_TYPE (t) != error_mark_node
1891           && IS_SIGNATURE (TREE_TYPE (t)));
1892 }
1893
1894 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
1895    itself, calling F for each.  The DATA is passed to F as well.  */
1896
1897 static int
1898 walk_namespaces_r (namespace, f, data)
1899      tree namespace;
1900      walk_namespaces_fn f;
1901      void *data;
1902 {
1903   tree current;
1904   int result = 0;
1905
1906   result |= (*f) (namespace, data);
1907
1908   for (current = NAMESPACE_LEVEL (namespace)->names;
1909        current;
1910        current = TREE_CHAIN (current))
1911     {
1912       if (TREE_CODE (current) != NAMESPACE_DECL
1913           || DECL_NAMESPACE_ALIAS (current))
1914         continue;
1915       if (!DECL_LANG_SPECIFIC (current))
1916         {
1917           /* Hmm. std. */
1918           my_friendly_assert (current == std_node, 393);
1919           continue;
1920         }
1921
1922       /* We found a namespace.  */
1923       result |= walk_namespaces_r (current, f, data);
1924     }
1925
1926   return result;
1927 }
1928
1929 /* Walk all the namespaces, calling F for each.  The DATA is passed to
1930    F as well.  */
1931
1932 int
1933 walk_namespaces (f, data)
1934      walk_namespaces_fn f;
1935      void *data;
1936 {
1937   return walk_namespaces_r (global_namespace, f, data);
1938 }
1939
1940 struct walk_globals_data {
1941   walk_globals_pred p;
1942   walk_globals_fn f;
1943   void *data;
1944 };
1945
1946 /* Walk the global declarations in NAMESPACE.  Whenever one is found
1947    for which P returns non-zero, call F with its address.  If any call
1948    to F returns a non-zero value, return a non-zero value.  */
1949
1950 static int 
1951 walk_globals_r (namespace, data)
1952      tree namespace;
1953      void *data;
1954 {
1955   struct walk_globals_data* wgd = (struct walk_globals_data *) data;
1956   walk_globals_pred p = wgd->p;
1957   walk_globals_fn f = wgd->f;
1958   void *d = wgd->data;
1959   tree *t;
1960   int result = 0;
1961
1962   t = &NAMESPACE_LEVEL (namespace)->names;
1963
1964   while (*t)
1965     {
1966       tree glbl = *t;
1967
1968       if ((*p) (glbl, d))
1969         result |= (*f) (t, d);
1970
1971       /* If F changed *T, then *T still points at the next item to
1972          examine.  */
1973       if (*t == glbl)
1974         t = &TREE_CHAIN (*t);
1975     }
1976
1977   return result;
1978 }
1979
1980 /* Walk the global declarations.  Whenever one is found for which P
1981    returns non-zero, call F with its address.  If any call to F
1982    returns a non-zero value, return a non-zero value.  */
1983
1984 int
1985 walk_globals (p, f, data)
1986      walk_globals_pred p;
1987      walk_globals_fn f;
1988      void *data;
1989 {
1990   struct walk_globals_data wgd;
1991   wgd.p = p;
1992   wgd.f = f;
1993   wgd.data = data;
1994
1995   return walk_namespaces (walk_globals_r, &wgd);
1996 }
1997
1998 /* Call wrapup_globals_declarations for the globals in NAMESPACE.  If
1999    DATA is non-NULL, this is the last time we will call
2000    wrapup_global_declarations for this NAMESPACE.  */
2001
2002 int
2003 wrapup_globals_for_namespace (namespace, data)
2004      tree namespace;
2005      void *data;
2006 {
2007   tree globals = NAMESPACE_LEVEL (namespace)->names;
2008   int len = list_length (globals);
2009   tree *vec = (tree *) alloca (sizeof (tree) * len);
2010   int i;
2011   int result;
2012   tree decl;
2013   int last_time = (data != 0);
2014
2015   if (last_time && namespace == global_namespace)
2016     /* Let compile_file handle the global namespace.  */
2017     return 0;
2018
2019   /* Process the decls in reverse order--earliest first.
2020      Put them into VEC from back to front, then take out from front.  */
2021   
2022   for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
2023     vec[len - i - 1] = decl;
2024   
2025   if (last_time)
2026     {
2027       check_global_declarations (vec, len);
2028       return 0;
2029     }
2030
2031   /* Temporarily mark vtables as external.  That prevents
2032      wrapup_global_declarations from writing them out; we must process
2033      them ourselves in finish_vtable_vardecl.  */
2034   for (i = 0; i < len; ++i)
2035     if (vtable_decl_p (vec[i], /*data=*/0) && !DECL_EXTERNAL (vec[i]))
2036       {
2037         DECL_NOT_REALLY_EXTERN (vec[i]) = 1;
2038         DECL_EXTERNAL (vec[i]) = 1;
2039       }
2040
2041   /* Write out any globals that need to be output.  */
2042   result = wrapup_global_declarations (vec, len);
2043
2044   /* Undo the hack to DECL_EXTERNAL above.  */
2045   for (i = 0; i < len; ++i)
2046     if (vtable_decl_p (vec[i], /*data=*/0)
2047         && DECL_NOT_REALLY_EXTERN (vec[i]))
2048       {
2049         DECL_NOT_REALLY_EXTERN (vec[i]) = 0;
2050         DECL_EXTERNAL (vec[i]) = 0;
2051       }
2052
2053   return result;
2054 }
2055
2056 \f
2057 /* For debugging.  */
2058 static int no_print_functions = 0;
2059 static int no_print_builtins = 0;
2060
2061 void
2062 print_binding_level (lvl)
2063      struct binding_level *lvl;
2064 {
2065   tree t;
2066   int i = 0, len;
2067   fprintf (stderr, " blocks=");
2068   fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
2069   fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
2070            list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
2071   if (lvl->tag_transparent)
2072     fprintf (stderr, " tag-transparent");
2073   if (lvl->more_cleanups_ok)
2074     fprintf (stderr, " more-cleanups-ok");
2075   if (lvl->have_cleanups)
2076     fprintf (stderr, " have-cleanups");
2077   fprintf (stderr, "\n");
2078   if (lvl->names)
2079     {
2080       fprintf (stderr, " names:\t");
2081       /* We can probably fit 3 names to a line?  */
2082       for (t = lvl->names; t; t = TREE_CHAIN (t))
2083         {
2084           if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL)) 
2085             continue;
2086           if (no_print_builtins
2087               && (TREE_CODE (t) == TYPE_DECL)
2088               && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
2089             continue;
2090
2091           /* Function decls tend to have longer names.  */
2092           if (TREE_CODE (t) == FUNCTION_DECL)
2093             len = 3;
2094           else
2095             len = 2;
2096           i += len;
2097           if (i > 6)
2098             {
2099               fprintf (stderr, "\n\t");
2100               i = len;
2101             }
2102           print_node_brief (stderr, "", t, 0);
2103           if (t == error_mark_node)
2104             break;
2105         }
2106       if (i)
2107         fprintf (stderr, "\n");
2108     }
2109   if (lvl->tags)
2110     {
2111       fprintf (stderr, " tags:\t");
2112       i = 0;
2113       for (t = lvl->tags; t; t = TREE_CHAIN (t))
2114         {
2115           if (TREE_PURPOSE (t) == NULL_TREE)
2116             len = 3;
2117           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2118             len = 2;
2119           else
2120             len = 4;
2121           i += len;
2122           if (i > 5)
2123             {
2124               fprintf (stderr, "\n\t");
2125               i = len;
2126             }
2127           if (TREE_PURPOSE (t) == NULL_TREE)
2128             {
2129               print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
2130               fprintf (stderr, ">");
2131             }
2132           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2133             print_node_brief (stderr, "", TREE_VALUE (t), 0);
2134           else
2135             {
2136               print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
2137               print_node_brief (stderr, "", TREE_VALUE (t), 0);
2138               fprintf (stderr, ">");
2139             }
2140         }
2141       if (i)
2142         fprintf (stderr, "\n");
2143     }
2144   if (lvl->class_shadowed)
2145     {
2146       fprintf (stderr, " class-shadowed:");
2147       for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
2148         {
2149           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2150         }
2151       fprintf (stderr, "\n");
2152     }
2153   if (lvl->type_shadowed)
2154     {
2155       fprintf (stderr, " type-shadowed:");
2156       for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
2157         {
2158           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2159         }
2160       fprintf (stderr, "\n");
2161     }
2162 }
2163
2164 void
2165 print_other_binding_stack (stack)
2166      struct binding_level *stack;
2167 {
2168   struct binding_level *level;
2169   for (level = stack; level != global_binding_level; level = level->level_chain)
2170     {
2171       fprintf (stderr, "binding level ");
2172       fprintf (stderr, HOST_PTR_PRINTF, level);
2173       fprintf (stderr, "\n");
2174       print_binding_level (level);
2175     }
2176 }
2177
2178 void
2179 print_binding_stack ()
2180 {
2181   struct binding_level *b;
2182   fprintf (stderr, "current_binding_level=");
2183   fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
2184   fprintf (stderr, "\nclass_binding_level=");
2185   fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
2186   fprintf (stderr, "\nglobal_binding_level=");
2187   fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
2188   fprintf (stderr, "\n");
2189   if (class_binding_level)
2190     {
2191       for (b = class_binding_level; b; b = b->level_chain)
2192         if (b == current_binding_level)
2193           break;
2194       if (b)
2195         b = class_binding_level;
2196       else
2197         b = current_binding_level;
2198     }
2199   else
2200     b = current_binding_level;
2201   print_other_binding_stack (b);
2202   fprintf (stderr, "global:\n");
2203   print_binding_level (global_binding_level);
2204 }
2205
2206 /* Namespace binding access routines: The namespace_bindings field of
2207    the identifier is polymorphic, with three possible values:
2208    NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
2209    indicating the BINDING_VALUE of global_namespace. */
2210
2211 /* Check whether the a binding for the name to scope is known.
2212    Assumes that the bindings of the name are already a list
2213    of bindings. Returns the binding found, or NULL_TREE. */
2214
2215 static tree
2216 find_binding (name, scope)
2217      tree name;
2218      tree scope;
2219 {
2220   tree iter, prev = NULL_TREE;
2221
2222   scope = ORIGINAL_NAMESPACE (scope);
2223   
2224   for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
2225        iter = TREE_CHAIN (iter))
2226     {
2227       my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
2228       if (BINDING_SCOPE (iter) == scope)
2229         {
2230           /* Move binding found to the fron of the list, so
2231              subsequent lookups will find it faster. */
2232           if (prev)
2233             {
2234               TREE_CHAIN (prev) = TREE_CHAIN (iter);
2235               TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
2236               IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
2237             }
2238           return iter;
2239         }
2240       prev = iter;
2241     }
2242   return NULL_TREE;
2243 }
2244
2245 /* Always returns a binding for name in scope. If the
2246    namespace_bindings is not a list, convert it to one first.
2247    If no binding is found, make a new one. */
2248
2249 tree
2250 binding_for_name (name, scope)
2251      tree name;
2252      tree scope;
2253 {
2254   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2255   tree result;
2256
2257   scope = ORIGINAL_NAMESPACE (scope);
2258   
2259   if (b && TREE_CODE (b) != CPLUS_BINDING)
2260     {
2261       /* Get rid of optimization for global scope. */
2262       IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
2263       BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
2264       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2265     }
2266   if (b && (result = find_binding (name, scope)))
2267     return result;
2268   /* Not found, make a new permanent one. */
2269   push_obstacks (&permanent_obstack, &permanent_obstack);
2270   result = make_node (CPLUS_BINDING);
2271   TREE_CHAIN (result) = b;
2272   IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
2273   BINDING_SCOPE (result) = scope;
2274   BINDING_TYPE (result) = NULL_TREE;
2275   BINDING_VALUE (result) = NULL_TREE;
2276   pop_obstacks ();
2277   return result;
2278 }
2279
2280 /* Return the binding value for name in scope, considering that
2281    namespace_binding may or may not be a list of CPLUS_BINDINGS. */
2282
2283 tree
2284 namespace_binding (name, scope)
2285      tree name;
2286      tree scope;
2287 {
2288   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2289   if (b == NULL_TREE)
2290     return NULL_TREE;
2291   if (scope == NULL_TREE)
2292     scope = global_namespace;
2293   if (TREE_CODE (b) != CPLUS_BINDING)
2294     return (scope == global_namespace) ? b : NULL_TREE;
2295   name = find_binding (name,scope);
2296   if (name == NULL_TREE)
2297     return name;
2298   return BINDING_VALUE (name);
2299 }
2300
2301 /* Set the binding value for name in scope. If modifying the binding
2302    of global_namespace is attempted, try to optimize it. */
2303
2304 void
2305 set_namespace_binding (name, scope, val)
2306      tree name;
2307      tree scope;
2308      tree val;
2309 {
2310   tree b;
2311
2312   if (scope == NULL_TREE)
2313     scope = global_namespace;
2314   
2315   if (scope == global_namespace)
2316     {
2317       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2318       if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
2319         {
2320           IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
2321           return;
2322         }
2323     }
2324   b = binding_for_name (name, scope);
2325   BINDING_VALUE (b) = val;
2326 }
2327
2328 /* Push into the scope of the NAME namespace.  If NAME is NULL_TREE, then we
2329    select a name that is unique to this compilation unit.  */
2330
2331 void
2332 push_namespace (name)
2333      tree name;
2334 {
2335   tree d = NULL_TREE;
2336   int need_new = 1;
2337   int implicit_use = 0;
2338   int global = 0;
2339   if (!global_namespace)
2340     {
2341       /* This must be ::. */
2342       my_friendly_assert (name == get_identifier ("::"), 377);
2343       global = 1;
2344     }
2345   else if (!name)
2346     {
2347       /* The name of anonymous namespace is unique for the translation
2348          unit.  */
2349       if (!anonymous_namespace_name)
2350         anonymous_namespace_name = get_file_function_name ('N');
2351       name = anonymous_namespace_name;
2352       d = IDENTIFIER_NAMESPACE_VALUE (name);
2353       if (d)
2354         /* Reopening anonymous namespace.  */
2355         need_new = 0;
2356       implicit_use = 1;
2357     }
2358   else if (current_namespace == global_namespace
2359            && name == DECL_NAME (std_node))
2360     {
2361       in_std++;
2362       return;
2363     }
2364   else
2365     {
2366       /* Check whether this is an extended namespace definition. */
2367       d = IDENTIFIER_NAMESPACE_VALUE (name);
2368       if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
2369         {
2370           need_new = 0;
2371           if (DECL_NAMESPACE_ALIAS (d))
2372             {
2373               cp_error ("namespace alias `%D' not allowed here, assuming `%D'",
2374                         d, DECL_NAMESPACE_ALIAS (d));
2375               d = DECL_NAMESPACE_ALIAS (d);
2376             }
2377         }
2378     }
2379   
2380   if (need_new)
2381     {
2382       /* Make a new namespace, binding the name to it. */
2383       d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2384       /* The global namespace is not pushed, and the global binding
2385          level is set elsewhere.  */
2386       if (!global)
2387         {
2388           d = pushdecl (d);
2389           pushlevel (0);
2390           declare_namespace_level ();
2391           NAMESPACE_LEVEL (d) = current_binding_level;
2392         }
2393     }
2394   else
2395     resume_binding_level (NAMESPACE_LEVEL (d));
2396
2397   if (implicit_use)
2398     do_using_directive (d);
2399   /* Enter the name space. */
2400   current_namespace = d;
2401 }
2402
2403 /* Pop from the scope of the current namespace.  */
2404
2405 void
2406 pop_namespace ()
2407 {
2408   if (current_namespace == global_namespace)
2409     {
2410       my_friendly_assert (in_std>0, 980421);
2411       in_std--;
2412       return;
2413     }
2414   current_namespace = CP_DECL_CONTEXT (current_namespace);
2415   /* The binding level is not popped, as it might be re-opened later.  */
2416   suspend_binding_level ();
2417 }
2418
2419 /* Push into the scope of the namespace NS, even if it is deeply
2420    nested within another namespace.  */
2421
2422 void
2423 push_nested_namespace (ns)
2424      tree ns;
2425 {
2426   if (ns == global_namespace)
2427     push_to_top_level ();
2428   else
2429     {
2430       push_nested_namespace (CP_DECL_CONTEXT (ns));
2431       push_namespace (DECL_NAME (ns));
2432     }
2433 }
2434
2435 /* Pop back from the scope of the namespace NS, which was previously
2436    entered with push_nested_namespace.  */
2437      
2438 void
2439 pop_nested_namespace (ns)
2440      tree ns;
2441 {
2442   while (ns != global_namespace)
2443     {
2444       pop_namespace ();
2445       ns = CP_DECL_CONTEXT (ns);
2446     }
2447
2448   pop_from_top_level ();
2449 }
2450
2451 \f
2452 /* Subroutines for reverting temporarily to top-level for instantiation
2453    of templates and such.  We actually need to clear out the class- and
2454    local-value slots of all identifiers, so that only the global values
2455    are at all visible.  Simply setting current_binding_level to the global
2456    scope isn't enough, because more binding levels may be pushed.  */
2457 struct saved_scope {
2458   struct binding_level *old_binding_level;
2459   tree old_bindings;
2460   tree old_namespace;
2461   struct saved_scope *prev;
2462   tree class_name, class_type;
2463   tree access_specifier;
2464   tree function_decl;
2465   struct binding_level *class_bindings;
2466   tree *lang_base, *lang_stack, lang_name;
2467   int lang_stacksize;
2468   int minimal_parse_mode;
2469   tree last_function_parms;
2470   tree template_parms;
2471   HOST_WIDE_INT processing_template_decl;
2472   tree previous_class_type, previous_class_values;
2473   int processing_specialization;
2474   int processing_explicit_instantiation;
2475   char *class_cache_firstobj;
2476 };
2477 static struct saved_scope *current_saved_scope;
2478
2479 /* A chain of the binding vecs created by store_bindings.  We create a
2480    whole bunch of these during compilation, on permanent_obstack, so we
2481    can't just throw them away.  */
2482 static tree free_binding_vecs;
2483
2484 static tree
2485 store_bindings (names, old_bindings)
2486      tree names, old_bindings;
2487 {
2488   tree t;
2489   for (t = names; t; t = TREE_CHAIN (t))
2490     {
2491       tree binding, t1, id;
2492
2493       if (TREE_CODE (t) == TREE_LIST)
2494         id = TREE_PURPOSE (t);
2495       else
2496         id = DECL_NAME (t);
2497
2498       if (!id 
2499           /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2500              we have no IDENTIFIER_BINDING if we have left the class
2501              scope, but cached the class-level declarations.  */
2502           || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
2503         continue;
2504
2505       for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
2506         if (TREE_VEC_ELT (t1, 0) == id)
2507           goto skip_it;
2508
2509       if (free_binding_vecs)
2510         {
2511           binding = free_binding_vecs;
2512           free_binding_vecs = TREE_CHAIN (free_binding_vecs);
2513         }
2514       else
2515         binding = make_tree_vec (4);
2516
2517       if (id)
2518         {
2519           my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
2520           TREE_VEC_ELT (binding, 0) = id;
2521           TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
2522           TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
2523           TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
2524           IDENTIFIER_BINDING (id) = NULL_TREE;
2525           IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
2526         }
2527       TREE_CHAIN (binding) = old_bindings;
2528       old_bindings = binding;
2529     skip_it:
2530       ;
2531     }
2532   return old_bindings;
2533 }
2534
2535 void
2536 maybe_push_to_top_level (pseudo)
2537      int pseudo;
2538 {
2539   extern int current_lang_stacksize;
2540   struct saved_scope *s
2541     = (struct saved_scope *) xmalloc (sizeof (struct saved_scope));
2542   struct binding_level *b = current_binding_level;
2543   tree old_bindings = NULL_TREE;
2544
2545   push_cp_function_context (NULL_TREE);
2546
2547   if (previous_class_type)
2548     old_bindings = store_bindings (previous_class_values, old_bindings);
2549
2550   /* Have to include global_binding_level, because class-level decls
2551      aren't listed anywhere useful.  */
2552   for (; b; b = b->level_chain)
2553     {
2554       tree t;
2555
2556       /* Template IDs are inserted into the global level. If they were
2557          inserted into namespace level, finish_file wouldn't find them
2558          when doing pending instantiations. Therefore, don't stop at
2559          namespace level, but continue until :: .  */
2560       if (b == global_binding_level || (pseudo && b->pseudo_global))
2561         break;
2562
2563       old_bindings = store_bindings (b->names, old_bindings);
2564       /* We also need to check class_shadowed to save class-level type
2565          bindings, since pushclass doesn't fill in b->names.  */
2566       if (b->parm_flag == 2)
2567         old_bindings = store_bindings (b->class_shadowed, old_bindings);
2568
2569       /* Unwind type-value slots back to top level.  */
2570       for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2571         SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2572     }
2573
2574   s->old_binding_level = current_binding_level;
2575   current_binding_level = b;
2576
2577   s->old_namespace = current_namespace;
2578   s->class_name = current_class_name;
2579   s->class_type = current_class_type;
2580   s->access_specifier = current_access_specifier;
2581   s->function_decl = current_function_decl;
2582   s->class_bindings = class_binding_level;
2583   s->lang_stack = current_lang_stack;
2584   s->lang_base = current_lang_base;
2585   s->lang_stacksize = current_lang_stacksize;
2586   s->lang_name = current_lang_name;
2587   s->minimal_parse_mode = minimal_parse_mode;
2588   s->last_function_parms = last_function_parms;
2589   s->template_parms = current_template_parms;
2590   s->processing_template_decl = processing_template_decl;
2591   s->previous_class_type = previous_class_type;
2592   s->previous_class_values = previous_class_values;
2593   s->class_cache_firstobj = class_cache_firstobj;
2594   s->processing_specialization = processing_specialization;
2595   s->processing_explicit_instantiation = processing_explicit_instantiation;
2596
2597   current_class_name = current_class_type = NULL_TREE;
2598   current_function_decl = NULL_TREE;
2599   class_binding_level = (struct binding_level *)0;
2600   current_lang_stacksize = 10;
2601   current_lang_stack = current_lang_base
2602     = (tree *) xmalloc (current_lang_stacksize * sizeof (tree));
2603   current_lang_name = lang_name_cplusplus;
2604   strict_prototype = strict_prototypes_lang_cplusplus;
2605   named_labels = NULL_TREE;
2606   shadowed_labels = NULL_TREE;
2607   minimal_parse_mode = 0;
2608   previous_class_type = previous_class_values = NULL_TREE;
2609   class_cache_firstobj = 0;
2610   processing_specialization = 0;
2611   processing_explicit_instantiation = 0;
2612   current_template_parms = NULL_TREE;
2613   processing_template_decl = 0;
2614   current_namespace = global_namespace;
2615
2616   s->prev = current_saved_scope;
2617   s->old_bindings = old_bindings;
2618   current_saved_scope = s;
2619
2620   push_obstacks (&permanent_obstack, &permanent_obstack);
2621 }
2622
2623 void
2624 push_to_top_level ()
2625 {
2626   maybe_push_to_top_level (0);
2627 }
2628
2629 void
2630 pop_from_top_level ()
2631 {
2632   extern int current_lang_stacksize;
2633   struct saved_scope *s = current_saved_scope;
2634   tree t;
2635
2636   /* Clear out class-level bindings cache.  */
2637   if (previous_class_type)
2638     invalidate_class_lookup_cache ();
2639
2640   pop_obstacks ();
2641
2642   current_binding_level = s->old_binding_level;
2643   current_saved_scope = s->prev;
2644   for (t = s->old_bindings; t; )
2645     {
2646       tree save = t;
2647       tree id = TREE_VEC_ELT (t, 0);
2648       if (id)
2649         {
2650           SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
2651           IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
2652           IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
2653         }
2654       t = TREE_CHAIN (t);
2655       TREE_CHAIN (save) = free_binding_vecs;
2656       free_binding_vecs = save;
2657     }
2658   current_namespace = s->old_namespace;
2659   current_class_name = s->class_name;
2660   current_class_type = s->class_type;
2661   current_access_specifier = s->access_specifier;
2662   current_function_decl = s->function_decl;
2663   class_binding_level = s->class_bindings;
2664   free (current_lang_base);
2665   current_lang_base = s->lang_base;
2666   current_lang_stack = s->lang_stack;
2667   current_lang_name = s->lang_name;
2668   current_lang_stacksize = s->lang_stacksize;
2669   if (current_lang_name == lang_name_cplusplus)
2670     strict_prototype = strict_prototypes_lang_cplusplus;
2671   else if (current_lang_name == lang_name_c)
2672     strict_prototype = strict_prototypes_lang_c;
2673   minimal_parse_mode = s->minimal_parse_mode;
2674   last_function_parms = s->last_function_parms;
2675   current_template_parms = s->template_parms;
2676   processing_template_decl = s->processing_template_decl;
2677   previous_class_type = s->previous_class_type;
2678   previous_class_values = s->previous_class_values;
2679   processing_specialization = s->processing_specialization;
2680   processing_explicit_instantiation = s->processing_explicit_instantiation;
2681   class_cache_firstobj = s->class_cache_firstobj;
2682
2683   free (s);
2684
2685   pop_cp_function_context (NULL_TREE);
2686 }
2687 \f
2688 /* Push a definition of struct, union or enum tag "name".
2689    into binding_level "b".   "type" should be the type node, 
2690    We assume that the tag "name" is not already defined.
2691
2692    Note that the definition may really be just a forward reference.
2693    In that case, the TYPE_SIZE will be a NULL_TREE.
2694
2695    C++ gratuitously puts all these tags in the name space.  */
2696
2697 /* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2698    record the shadowed value for this binding contour.  TYPE is
2699    the type that ID maps to.  */
2700
2701 static void
2702 set_identifier_type_value_with_scope (id, type, b)
2703      tree id;
2704      tree type;
2705      struct binding_level *b;
2706 {
2707   if (!b->namespace_p)
2708     {
2709       /* Shadow the marker, not the real thing, so that the marker
2710          gets restored later. */
2711       tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
2712       b->type_shadowed
2713         = tree_cons (id, old_type_value, b->type_shadowed);
2714     }
2715   else
2716     {
2717       tree binding = binding_for_name (id, current_namespace);
2718       BINDING_TYPE (binding) = type;
2719       /* Store marker instead of real type. */
2720       type = global_type_node;
2721     }
2722   SET_IDENTIFIER_TYPE_VALUE (id, type);
2723 }
2724
2725 /* As set_identifier_type_value_with_scope, but using current_binding_level.  */
2726
2727 void
2728 set_identifier_type_value (id, type)
2729      tree id;
2730      tree type;
2731 {
2732   set_identifier_type_value_with_scope (id, type, current_binding_level);
2733 }
2734
2735 /* Return the type associated with id. */
2736
2737 tree
2738 identifier_type_value (id)
2739      tree id;
2740 {
2741   /* There is no type with that name, anywhere. */
2742   if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2743     return NULL_TREE;
2744   /* This is not the type marker, but the real thing. */
2745   if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2746     return REAL_IDENTIFIER_TYPE_VALUE (id);
2747   /* Have to search for it. It must be on the global level, now.
2748      Ask lookup_name not to return non-types. */
2749   id = lookup_name_real (id, 2, 1, 0);
2750   if (id)
2751     return TREE_TYPE (id);
2752   return NULL_TREE;
2753 }
2754
2755 /* Pop off extraneous binding levels left over due to syntax errors.
2756
2757    We don't pop past namespaces, as they might be valid.  */
2758
2759 void
2760 pop_everything ()
2761 {
2762 #ifdef DEBUG_CP_BINDING_LEVELS
2763   fprintf (stderr, "XXX entering pop_everything ()\n");
2764 #endif
2765   while (!toplevel_bindings_p ())
2766     {
2767       if (current_binding_level->parm_flag == 2)
2768         pop_nested_class ();
2769       else
2770         poplevel (0, 0, 0);
2771     }
2772 #ifdef DEBUG_CP_BINDING_LEVELS
2773   fprintf (stderr, "XXX leaving pop_everything ()\n");
2774 #endif
2775 }
2776
2777 /* The type TYPE is being declared.  If it is a class template, or a
2778    specialization of a class template, do any processing required and
2779    perform error-checking.  If IS_FRIEND is non-zero, this TYPE is
2780    being declared a friend.  B is the binding level at which this TYPE
2781    should be bound.
2782
2783    Returns the TYPE_DECL for TYPE, which may have been altered by this
2784    processing.  */
2785
2786 static tree 
2787 maybe_process_template_type_declaration (type, globalize, b)
2788      tree type;
2789      int globalize;
2790      struct binding_level* b;
2791 {
2792   tree decl = TYPE_NAME (type);
2793  
2794   if (processing_template_parmlist)
2795     /* You can't declare a new template type in a template parameter
2796        list.  But, you can declare a non-template type:
2797        
2798          template <class A*> struct S;
2799        
2800        is a forward-declaration of `A'.  */
2801     ;
2802   else 
2803     {
2804       maybe_check_template_type (type);
2805
2806       my_friendly_assert (IS_AGGR_TYPE (type) 
2807                           || TREE_CODE (type) == ENUMERAL_TYPE, 0);
2808                           
2809                           
2810       if (processing_template_decl)
2811         {
2812           /* This may change after the call to
2813              push_template_decl_real, but we want the original value.  */
2814           tree name = DECL_NAME (decl);
2815
2816           decl = push_template_decl_real (decl, globalize);
2817           /* If the current binding level is the binding level for the
2818              template parameters (see the comment in
2819              begin_template_parm_list) and the enclosing level is a class
2820              scope, and we're not looking at a friend, push the
2821              declaration of the member class into the class scope.  In the
2822              friend case, push_template_decl will already have put the
2823              friend into global scope, if appropriate.  */
2824           if (TREE_CODE (type) != ENUMERAL_TYPE
2825               && !globalize && b->pseudo_global
2826               && b->level_chain->parm_flag == 2)
2827             {
2828               finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
2829               /* Put this tag on the list of tags for the class, since
2830                  that won't happen below because B is not the class
2831                  binding level, but is instead the pseudo-global level.  */
2832               b->level_chain->tags = 
2833                 saveable_tree_cons (name, type, b->level_chain->tags);
2834               if (TYPE_SIZE (current_class_type) == NULL_TREE)
2835                 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2836             }
2837         }
2838     }
2839
2840   return decl;
2841 }
2842
2843 /* Push a tag name NAME for struct/class/union/enum type TYPE.
2844    Normally put it into the inner-most non-tag-transparent scope,
2845    but if GLOBALIZE is true, put it in the inner-most non-class scope.
2846    The latter is needed for implicit declarations.  */
2847
2848 void
2849 pushtag (name, type, globalize)
2850      tree name, type;
2851      int globalize;
2852 {
2853   register struct binding_level *b;
2854
2855   b = current_binding_level;
2856   while (b->tag_transparent
2857          || (globalize && b->parm_flag == 2))
2858     b = b->level_chain;
2859
2860   if (toplevel_bindings_p ())
2861     b->tags = perm_tree_cons (name, type, b->tags);
2862   else
2863     b->tags = saveable_tree_cons (name, type, b->tags);
2864
2865   if (name)
2866     {
2867       /* Do C++ gratuitous typedefing.  */
2868       if (IDENTIFIER_TYPE_VALUE (name) != type)
2869         {
2870           register tree d = NULL_TREE;
2871           int newdecl = 0, in_class = 0;
2872           tree context;
2873           tree c_decl = NULL_TREE;
2874
2875           context = type ? TYPE_CONTEXT (type) : NULL_TREE;
2876           if (! context)
2877             {
2878               tree cs = current_scope ();
2879
2880               if (! globalize)
2881                 context = cs;
2882               else if (cs != NULL_TREE 
2883                        && TREE_CODE_CLASS (TREE_CODE (cs)) == 't')
2884                 /* When declaring a friend class of a local class, we want
2885                    to inject the newly named class into the scope
2886                    containing the local class, not the namespace scope.  */
2887                 context = hack_decl_function_context (get_type_decl (cs));
2888             }
2889           if (context)
2890             c_decl = TREE_CODE (context) == FUNCTION_DECL
2891               ? context : TYPE_MAIN_DECL (context);
2892
2893           if (!context)
2894             context = current_namespace;
2895
2896           if ((b->pseudo_global && b->level_chain->parm_flag == 2)
2897               || b->parm_flag == 2)
2898             in_class = 1;
2899           else
2900             d = lookup_nested_type (type, c_decl);
2901
2902           if (d == NULL_TREE)
2903             {
2904               newdecl = 1;
2905               d = build_decl (TYPE_DECL, name, type);
2906               if (current_lang_name == lang_name_java)
2907                 TYPE_FOR_JAVA (type) = 1;
2908               SET_DECL_ARTIFICIAL (d);
2909               if (! in_class)
2910                 set_identifier_type_value_with_scope (name, type, b);
2911             }
2912           else
2913             d = TYPE_MAIN_DECL (d);
2914
2915           TYPE_NAME (type) = d;
2916           DECL_CONTEXT (d) = FROB_CONTEXT (context);
2917
2918           d = maybe_process_template_type_declaration (type,
2919                                                        globalize, b);
2920
2921           if (b->parm_flag == 2)
2922             {
2923               if (newdecl && !PROCESSING_REAL_TEMPLATE_DECL_P ())
2924                 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2925                    class.  But if it's a member template class, we
2926                    want the TEMPLATE_DECL, not the TYPE_DECL, so this
2927                    is done later.  */
2928                 finish_member_declaration (d);
2929               else
2930                 pushdecl_class_level (d);
2931             }
2932           else
2933             d = pushdecl_with_scope (d, b);
2934
2935           if (newdecl)
2936             {
2937               if (ANON_AGGRNAME_P (name))
2938                 DECL_IGNORED_P (d) = 1;
2939
2940               TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2941               DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
2942               if (!uses_template_parms (type))
2943                 DECL_ASSEMBLER_NAME (d)
2944                   = get_identifier (build_overload_name (type, 1, 1));
2945             }
2946         }
2947       if (b->parm_flag == 2)
2948         {
2949           if (TYPE_SIZE (current_class_type) == NULL_TREE)
2950             CLASSTYPE_TAGS (current_class_type) = b->tags;
2951         }
2952     }
2953
2954   if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2955     /* Use the canonical TYPE_DECL for this node.  */
2956     TYPE_STUB_DECL (type) = TYPE_NAME (type);
2957   else
2958     {
2959       /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2960          will be the tagged type we just added to the current
2961          binding level.  This fake NULL-named TYPE_DECL node helps
2962          dwarfout.c to know when it needs to output a
2963          representation of a tagged type, and it also gives us a
2964          convenient place to record the "scope start" address for
2965          the tagged type.  */
2966
2967       tree d = build_decl (TYPE_DECL, NULL_TREE, type);
2968       TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2969     }
2970 }
2971
2972 /* Counter used to create anonymous type names.  */
2973
2974 static int anon_cnt = 0;
2975
2976 /* Return an IDENTIFIER which can be used as a name for
2977    anonymous structs and unions.  */
2978
2979 tree
2980 make_anon_name ()
2981 {
2982   char buf[32];
2983
2984   sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2985   return get_identifier (buf);
2986 }
2987
2988 /* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2989    This keeps dbxout from getting confused.  */
2990
2991 void
2992 clear_anon_tags ()
2993 {
2994   register struct binding_level *b;
2995   register tree tags;
2996   static int last_cnt = 0;
2997
2998   /* Fast out if no new anon names were declared.  */
2999   if (last_cnt == anon_cnt)
3000     return;
3001
3002   b = current_binding_level;
3003   while (b->tag_transparent)
3004     b = b->level_chain;
3005   tags = b->tags;
3006   while (tags)
3007     {
3008       /* A NULL purpose means we have already processed all tags
3009          from here to the end of the list.  */
3010       if (TREE_PURPOSE (tags) == NULL_TREE)
3011         break;
3012       if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
3013         TREE_PURPOSE (tags) = NULL_TREE;
3014       tags = TREE_CHAIN (tags);
3015     }
3016   last_cnt = anon_cnt;
3017 }
3018 \f
3019 /* Subroutine of duplicate_decls: return truthvalue of whether
3020    or not types of these decls match.
3021
3022    For C++, we must compare the parameter list so that `int' can match
3023    `int&' in a parameter position, but `int&' is not confused with
3024    `const int&'.  */
3025
3026 int
3027 decls_match (newdecl, olddecl)
3028      tree newdecl, olddecl;
3029 {
3030   int types_match;
3031
3032   if (newdecl == olddecl)
3033     return 1;
3034
3035   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
3036     /* If the two DECLs are not even the same kind of thing, we're not
3037        interested in their types.  */
3038     return 0;
3039
3040   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3041     {
3042       tree f1 = TREE_TYPE (newdecl);
3043       tree f2 = TREE_TYPE (olddecl);
3044       tree p1 = TYPE_ARG_TYPES (f1);
3045       tree p2 = TYPE_ARG_TYPES (f2);
3046
3047       if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl)
3048           && ! (DECL_LANGUAGE (newdecl) == lang_c
3049                 && DECL_LANGUAGE (olddecl) == lang_c))
3050         return 0;
3051
3052       /* When we parse a static member function definition,
3053          we put together a FUNCTION_DECL which thinks its type
3054          is METHOD_TYPE.  Change that to FUNCTION_TYPE, and
3055          proceed.  */
3056       if (TREE_CODE (f1) == METHOD_TYPE && DECL_STATIC_FUNCTION_P (olddecl))
3057         revert_static_member_fn (&newdecl, &f1, &p1);
3058       else if (TREE_CODE (f2) == METHOD_TYPE
3059                && DECL_STATIC_FUNCTION_P (newdecl))
3060         revert_static_member_fn (&olddecl, &f2, &p2);
3061
3062       /* Here we must take care of the case where new default
3063          parameters are specified.  Also, warn if an old
3064          declaration becomes ambiguous because default
3065          parameters may cause the two to be ambiguous.  */
3066       if (TREE_CODE (f1) != TREE_CODE (f2))
3067         {
3068           if (TREE_CODE (f1) == OFFSET_TYPE)
3069             cp_compiler_error ("`%D' redeclared as member function", newdecl);
3070           else
3071             cp_compiler_error ("`%D' redeclared as non-member function", newdecl);
3072           return 0;
3073         }
3074
3075       if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
3076         {
3077           if (! strict_prototypes_lang_c && DECL_LANGUAGE (olddecl) == lang_c
3078               && p2 == NULL_TREE)
3079             {
3080               types_match = self_promoting_args_p (p1);
3081               if (p1 == void_list_node)
3082                 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
3083             }
3084           else if (!strict_prototypes_lang_c && DECL_LANGUAGE (olddecl)==lang_c
3085                    && DECL_LANGUAGE (newdecl) == lang_c && p1 == NULL_TREE)
3086             {
3087               types_match = self_promoting_args_p (p2);
3088               TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
3089             }
3090           else
3091             types_match = compparms (p1, p2);
3092         }
3093       else
3094         types_match = 0;
3095     }
3096   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3097     {
3098       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3099                                 DECL_TEMPLATE_PARMS (olddecl)))
3100         return 0;
3101       
3102       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3103         types_match = 1;
3104       else
3105         types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
3106                                    DECL_TEMPLATE_RESULT (newdecl));
3107     }
3108   else
3109     {
3110       if (TREE_TYPE (newdecl) == error_mark_node)
3111         types_match = TREE_TYPE (olddecl) == error_mark_node;
3112       else if (TREE_TYPE (olddecl) == NULL_TREE)
3113         types_match = TREE_TYPE (newdecl) == NULL_TREE;
3114       else if (TREE_TYPE (newdecl) == NULL_TREE)
3115         types_match = 0;
3116       else
3117         types_match = comptypes (TREE_TYPE (newdecl),
3118                                  TREE_TYPE (olddecl),
3119                                  COMPARE_REDECLARATION);
3120     }
3121
3122   return types_match;
3123 }
3124
3125 /* If NEWDECL is `static' and an `extern' was seen previously,
3126    warn about it.  (OLDDECL may be NULL_TREE; NAME contains
3127    information about previous usage as an `extern'.)
3128
3129    Note that this does not apply to the C++ case of declaring
3130    a variable `extern const' and then later `const'.
3131
3132    Don't complain about built-in functions, since they are beyond
3133    the user's control.  */
3134
3135 static void
3136 warn_extern_redeclared_static (newdecl, olddecl)
3137      tree newdecl, olddecl;
3138 {
3139   tree name;
3140
3141   static const char *explicit_extern_static_warning
3142     = "`%D' was declared `extern' and later `static'";
3143   static const char *implicit_extern_static_warning
3144     = "`%D' was declared implicitly `extern' and later `static'";
3145
3146   if (TREE_CODE (newdecl) == TYPE_DECL)
3147     return;
3148
3149   name = DECL_ASSEMBLER_NAME (newdecl);
3150   if (TREE_PUBLIC (name) && DECL_THIS_STATIC (newdecl))
3151     {
3152       /* It's okay to redeclare an ANSI built-in function as static,
3153          or to declare a non-ANSI built-in function as anything.  */
3154       if (! (TREE_CODE (newdecl) == FUNCTION_DECL
3155              && olddecl != NULL_TREE
3156              && TREE_CODE (olddecl) == FUNCTION_DECL
3157              && (DECL_BUILT_IN (olddecl)
3158                  || DECL_BUILT_IN_NONANSI (olddecl))))
3159         {
3160           cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
3161                       ? implicit_extern_static_warning
3162                       : explicit_extern_static_warning, newdecl);
3163           if (olddecl != NULL_TREE)
3164             cp_pedwarn_at ("previous declaration of `%D'", olddecl);
3165         }
3166     }
3167 }
3168
3169 /* Handle when a new declaration NEWDECL has the same name as an old
3170    one OLDDECL in the same binding contour.  Prints an error message
3171    if appropriate.
3172
3173    If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
3174    Otherwise, return 0.  */
3175
3176 int
3177 duplicate_decls (newdecl, olddecl)
3178      tree newdecl, olddecl;
3179 {
3180   extern struct obstack permanent_obstack;
3181   unsigned olddecl_uid = DECL_UID (olddecl);
3182   int olddecl_friend = 0, types_match = 0;
3183   int new_defines_function = 0;
3184
3185   if (newdecl == olddecl)
3186     return 1;
3187
3188   types_match = decls_match (newdecl, olddecl);
3189
3190   /* If either the type of the new decl or the type of the old decl is an
3191      error_mark_node, then that implies that we have already issued an
3192      error (earlier) for some bogus type specification, and in that case,
3193      it is rather pointless to harass the user with yet more error message
3194      about the same declaration, so just pretend the types match here.  */
3195   if (TREE_TYPE (newdecl) == error_mark_node
3196       || TREE_TYPE (olddecl) == error_mark_node)
3197     types_match = 1;
3198  
3199   /* Check for redeclaration and other discrepancies. */
3200   if (TREE_CODE (olddecl) == FUNCTION_DECL
3201       && DECL_ARTIFICIAL (olddecl)
3202       && (DECL_BUILT_IN (olddecl) || DECL_BUILT_IN_NONANSI (olddecl)))
3203     {
3204       /* If you declare a built-in or predefined function name as static,
3205          the old definition is overridden, but optionally warn this was a
3206          bad choice of name.  Ditto for overloads.  */
3207       if (! TREE_PUBLIC (newdecl)
3208           || (TREE_CODE (newdecl) == FUNCTION_DECL
3209               && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl)))
3210         {
3211           if (warn_shadow)
3212             cp_warning ("shadowing %s function `%#D'",
3213                         DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3214                         olddecl);
3215           /* Discard the old built-in function.  */
3216           return 0;
3217         }
3218       else if (! types_match)
3219         {
3220           if (TREE_CODE (newdecl) != FUNCTION_DECL)
3221             {
3222               /* If the built-in is not ansi, then programs can override
3223                  it even globally without an error.  */
3224               if (! DECL_BUILT_IN (olddecl))
3225                 cp_warning ("library function `%#D' redeclared as non-function `%#D'",
3226                             olddecl, newdecl);
3227               else
3228                 {
3229                   cp_error ("declaration of `%#D'", newdecl);
3230                   cp_error ("conflicts with built-in declaration `%#D'",
3231                             olddecl);
3232                 }
3233               return 0;
3234             }
3235
3236           cp_warning ("declaration of `%#D'", newdecl);
3237           cp_warning ("conflicts with built-in declaration `%#D'",
3238                       olddecl);
3239         }
3240     }
3241   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
3242     {
3243       if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
3244            && TREE_CODE (newdecl) != TYPE_DECL
3245            && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
3246                  && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
3247           || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
3248               && TREE_CODE (olddecl) != TYPE_DECL
3249               && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
3250                     && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
3251                         == TYPE_DECL))))
3252         {
3253           /* We do nothing special here, because C++ does such nasty
3254              things with TYPE_DECLs.  Instead, just let the TYPE_DECL
3255              get shadowed, and know that if we need to find a TYPE_DECL
3256              for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3257              slot of the identifier.  */
3258           return 0;
3259         }
3260
3261       if ((TREE_CODE (newdecl) == FUNCTION_DECL
3262            && DECL_FUNCTION_TEMPLATE_P (olddecl))
3263           || (TREE_CODE (olddecl) == FUNCTION_DECL
3264               && DECL_FUNCTION_TEMPLATE_P (newdecl)))
3265         return 0;
3266
3267       cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
3268       if (TREE_CODE (olddecl) == TREE_LIST)
3269         olddecl = TREE_VALUE (olddecl);
3270       cp_error_at ("previous declaration of `%#D'", olddecl);
3271
3272       /* New decl is completely inconsistent with the old one =>
3273          tell caller to replace the old one.  */
3274
3275       return 0;
3276     }
3277   else if (!types_match)
3278     {
3279       if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl))
3280         /* These are certainly not duplicate declarations; they're
3281            from different scopes.  */
3282         return 0;
3283
3284       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3285         {
3286           /* The name of a class template may not be declared to refer to
3287              any other template, class, function, object, namespace, value,
3288              or type in the same scope.  */
3289           if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
3290               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3291             {
3292               cp_error ("declaration of template `%#D'", newdecl);
3293               cp_error_at ("conflicts with previous declaration `%#D'",
3294                            olddecl);
3295             }
3296           else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
3297                    && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3298                    && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
3299                                  TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
3300                    && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3301                                            DECL_TEMPLATE_PARMS (olddecl)))
3302             {
3303               cp_error ("new declaration `%#D'", newdecl);
3304               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3305             }
3306           return 0;
3307         }
3308       if (TREE_CODE (newdecl) == FUNCTION_DECL)
3309         {
3310           if (DECL_LANGUAGE (newdecl) == lang_c
3311               && DECL_LANGUAGE (olddecl) == lang_c)
3312             {
3313               cp_error ("declaration of C function `%#D' conflicts with",
3314                         newdecl);
3315               cp_error_at ("previous declaration `%#D' here", olddecl);
3316             }
3317           else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3318                               TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3319             {
3320               cp_error ("new declaration `%#D'", newdecl);
3321               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3322             }
3323           else
3324             return 0;
3325         }
3326
3327       /* Already complained about this, so don't do so again.  */
3328       else if (current_class_type == NULL_TREE
3329           || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3330         {
3331           cp_error ("conflicting types for `%#D'", newdecl);
3332           cp_error_at ("previous declaration as `%#D'", olddecl);
3333         }
3334     }
3335   else if (TREE_CODE (newdecl) == FUNCTION_DECL 
3336             && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3337                  && (!DECL_TEMPLATE_INFO (newdecl)
3338                      || (DECL_TI_TEMPLATE (newdecl) 
3339                          != DECL_TI_TEMPLATE (olddecl))))
3340                 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3341                     && (!DECL_TEMPLATE_INFO (olddecl)
3342                         || (DECL_TI_TEMPLATE (olddecl) 
3343                             != DECL_TI_TEMPLATE (newdecl))))))
3344     /* It's OK to have a template specialization and a non-template
3345        with the same type, or to have specializations of two
3346        different templates with the same type.  Note that if one is a
3347        specialization, and the other is an instantiation of the same
3348        template, that we do not exit at this point.  That situation
3349        can occur if we instantiate a template class, and then
3350        specialize one of its methods.  This situation is legal, but
3351        the declarations must be merged in the usual way.  */
3352     return 0;
3353   else if (TREE_CODE (newdecl) == FUNCTION_DECL 
3354            && ((DECL_TEMPLATE_INSTANTIATION (olddecl) 
3355                 && !DECL_USE_TEMPLATE (newdecl))
3356                || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3357                    && !DECL_USE_TEMPLATE (olddecl))))
3358     /* One of the declarations is a template instantiation, and the
3359        other is not a template at all.  That's OK.  */
3360     return 0;
3361   else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3362            && DECL_NAMESPACE_ALIAS (newdecl)
3363            && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3364     /* Redeclaration of namespace alias, ignore it. */
3365     return 1;
3366   else
3367     {
3368       const char *errmsg = redeclaration_error_message (newdecl, olddecl);
3369       if (errmsg)
3370         {
3371           cp_error (errmsg, newdecl);
3372           if (DECL_NAME (olddecl) != NULL_TREE)
3373             cp_error_at ((DECL_INITIAL (olddecl)
3374                           && namespace_bindings_p ())
3375                          ? "`%#D' previously defined here"
3376                          : "`%#D' previously declared here", olddecl);
3377         }
3378       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3379                && DECL_INITIAL (olddecl) != NULL_TREE
3380                && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3381                && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3382         {
3383           /* Prototype decl follows defn w/o prototype.  */
3384           cp_warning_at ("prototype for `%#D'", newdecl);
3385           cp_warning_at ("follows non-prototype definition here", olddecl);
3386         }
3387       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3388                && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
3389         {
3390           /* extern "C" int foo ();
3391              int foo () { bar (); }
3392              is OK.  */
3393           if (current_lang_stack == current_lang_base)
3394             DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3395           else
3396             {
3397               cp_error_at ("previous declaration of `%#D' with %L linkage",
3398                            olddecl, DECL_LANGUAGE (olddecl));
3399               cp_error ("conflicts with new declaration with %L linkage",
3400                         DECL_LANGUAGE (newdecl));
3401             }
3402         }
3403
3404       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
3405         ;
3406       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
3407         {
3408           tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3409           tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3410           int i = 1;
3411
3412           if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3413             t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
3414         
3415           for (; t1 && t1 != void_list_node;
3416                t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3417             if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3418               {
3419                 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3420                                            TREE_PURPOSE (t2)))
3421                   {
3422                     if (pedantic)
3423                       {
3424                         cp_pedwarn ("default argument given for parameter %d of `%#D'",
3425                                     i, newdecl);
3426                         cp_pedwarn_at ("after previous specification in `%#D'",
3427                                        olddecl);
3428                       }
3429                   }
3430                 else
3431                   {
3432                     cp_error ("default argument given for parameter %d of `%#D'",
3433                               i, newdecl);
3434                     cp_error_at ("after previous specification in `%#D'",
3435                                  olddecl);
3436                   }
3437               }
3438
3439           if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
3440               && TREE_ADDRESSABLE (olddecl) && warn_inline)
3441             {
3442               cp_warning ("`%#D' was used before it was declared inline",
3443                           newdecl);
3444               cp_warning_at ("previous non-inline declaration here",
3445                              olddecl);
3446             }
3447         }
3448     }
3449
3450   /* If new decl is `static' and an `extern' was seen previously,
3451      warn about it.  */
3452   warn_extern_redeclared_static (newdecl, olddecl);
3453
3454   /* We have committed to returning 1 at this point.  */
3455   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3456     {
3457       /* Now that functions must hold information normally held
3458          by field decls, there is extra work to do so that
3459          declaration information does not get destroyed during
3460          definition.  */
3461       if (DECL_VINDEX (olddecl))
3462         DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
3463       if (DECL_CONTEXT (olddecl))
3464         DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
3465       if (DECL_CLASS_CONTEXT (olddecl))
3466         DECL_CLASS_CONTEXT (newdecl) = DECL_CLASS_CONTEXT (olddecl);
3467       if (DECL_PENDING_INLINE_INFO (newdecl) == (struct pending_inline *)0)
3468         DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
3469       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3470       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
3471       DECL_ABSTRACT_VIRTUAL_P (newdecl) |= DECL_ABSTRACT_VIRTUAL_P (olddecl);
3472       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
3473       DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
3474       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
3475       
3476       /* Optionally warn about more than one declaration for the same
3477          name, but don't warn about a function declaration followed by a
3478          definition.  */
3479       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3480           && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3481           /* Don't warn about extern decl followed by definition. */
3482           && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3483           /* Don't warn about friends, let add_friend take care of it. */
3484           && ! DECL_FRIEND_P (newdecl))
3485         {
3486           cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3487           cp_warning_at ("previous declaration of `%D'", olddecl);
3488         }
3489     }
3490
3491   /* Deal with C++: must preserve virtual function table size.  */
3492   if (TREE_CODE (olddecl) == TYPE_DECL)
3493     {
3494       register tree newtype = TREE_TYPE (newdecl);
3495       register tree oldtype = TREE_TYPE (olddecl);
3496
3497       if (newtype != error_mark_node && oldtype != error_mark_node
3498           && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3499         {
3500           CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3501           CLASSTYPE_FRIEND_CLASSES (newtype)
3502             = CLASSTYPE_FRIEND_CLASSES (oldtype);
3503         }
3504     }
3505
3506   /* Copy all the DECL_... slots specified in the new decl
3507      except for any that we copy here from the old type.  */
3508   DECL_MACHINE_ATTRIBUTES (newdecl) 
3509     = merge_machine_decl_attributes (olddecl, newdecl);
3510
3511   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3512     {
3513       if (! duplicate_decls (DECL_TEMPLATE_RESULT (newdecl),
3514                              DECL_TEMPLATE_RESULT (olddecl)))
3515         cp_error ("invalid redeclaration of %D", newdecl);
3516       TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
3517       DECL_TEMPLATE_SPECIALIZATIONS (olddecl) 
3518         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3519                    DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
3520  
3521       return 1;
3522     }
3523     
3524   if (types_match)
3525     {
3526       /* Automatically handles default parameters.  */
3527       tree oldtype = TREE_TYPE (olddecl);
3528       tree newtype;
3529
3530       /* Make sure we put the new type in the same obstack as the old one.  */
3531       if (oldtype)
3532         push_obstacks (TYPE_OBSTACK (oldtype), TYPE_OBSTACK (oldtype));
3533       else
3534         {
3535           push_obstacks_nochange ();
3536           end_temporary_allocation ();
3537         }
3538
3539       /* Merge the data types specified in the two decls.  */
3540       newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3541
3542       if (TREE_CODE (newdecl) == VAR_DECL)
3543         DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3544       /* Do this after calling `common_type' so that default
3545          parameters don't confuse us.  */
3546       else if (TREE_CODE (newdecl) == FUNCTION_DECL
3547           && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3548               != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3549         {
3550           TREE_TYPE (newdecl) = build_exception_variant (newtype,
3551                                                          TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
3552           TREE_TYPE (olddecl) = build_exception_variant (newtype,
3553                                                          TYPE_RAISES_EXCEPTIONS (oldtype));
3554
3555           if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3556               && DECL_SOURCE_LINE (olddecl) != 0
3557               && flag_exceptions
3558               && ! compexcepttypes (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
3559             {
3560               cp_pedwarn ("declaration of `%D' throws different exceptions",
3561                         newdecl);
3562               cp_pedwarn_at ("previous declaration here", olddecl);
3563             }
3564         }
3565       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3566
3567       /* Lay the type out, unless already done.  */
3568       if (! same_type_p (newtype, oldtype)
3569           && TREE_TYPE (newdecl) != error_mark_node
3570           && !(processing_template_decl && uses_template_parms (newdecl)))
3571         layout_type (TREE_TYPE (newdecl));
3572
3573       if ((TREE_CODE (newdecl) == VAR_DECL
3574            || TREE_CODE (newdecl) == PARM_DECL
3575            || TREE_CODE (newdecl) == RESULT_DECL
3576            || TREE_CODE (newdecl) == FIELD_DECL
3577            || TREE_CODE (newdecl) == TYPE_DECL)
3578           && !(processing_template_decl && uses_template_parms (newdecl)))
3579         layout_decl (newdecl, 0);
3580
3581       /* Merge the type qualifiers.  */
3582       if (TREE_READONLY (newdecl))
3583         TREE_READONLY (olddecl) = 1;
3584       if (TREE_THIS_VOLATILE (newdecl))
3585         TREE_THIS_VOLATILE (olddecl) = 1;
3586
3587       /* Merge the initialization information.  */
3588       if (DECL_INITIAL (newdecl) == NULL_TREE
3589           && DECL_INITIAL (olddecl) != NULL_TREE)
3590         {
3591           DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3592           DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3593           DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
3594           if (DECL_LANG_SPECIFIC (newdecl)
3595               && DECL_LANG_SPECIFIC (olddecl))
3596             DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
3597         }
3598
3599       /* Merge the section attribute.
3600          We want to issue an error if the sections conflict but that must be
3601          done later in decl_attributes since we are called before attributes
3602          are assigned.  */
3603       if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3604         DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3605
3606       /* Keep the old rtl since we can safely use it, unless it's the
3607          call to abort() used for abstract virtuals.  */
3608       if ((DECL_LANG_SPECIFIC (olddecl)
3609            && !DECL_ABSTRACT_VIRTUAL_P (olddecl))
3610           || DECL_RTL (olddecl) != DECL_RTL (abort_fndecl))
3611         DECL_RTL (newdecl) = DECL_RTL (olddecl);
3612
3613       pop_obstacks ();
3614     }
3615   /* If cannot merge, then use the new type and qualifiers,
3616      and don't preserve the old rtl.  */
3617   else
3618     {
3619       /* Clean out any memory we had of the old declaration.  */
3620       tree oldstatic = value_member (olddecl, static_aggregates);
3621       if (oldstatic)
3622         TREE_VALUE (oldstatic) = error_mark_node;
3623
3624       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3625       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3626       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3627       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3628     }
3629
3630   /* Merge the storage class information.  */
3631   DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
3632   DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
3633   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3634   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3635   if (! DECL_EXTERNAL (olddecl))
3636     DECL_EXTERNAL (newdecl) = 0;
3637   
3638   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
3639     {
3640       DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3641       DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
3642       DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
3643       DECL_TEMPLATE_INSTANTIATED (newdecl) 
3644         |= DECL_TEMPLATE_INSTANTIATED (olddecl);
3645       /* Don't really know how much of the language-specific
3646          values we should copy from old to new.  */
3647       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3648       DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3649       DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
3650       DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3651       olddecl_friend = DECL_FRIEND_P (olddecl);
3652
3653       /* Only functions have DECL_BEFRIENDING_CLASSES.  */
3654       if (TREE_CODE (newdecl) == FUNCTION_DECL
3655           || DECL_FUNCTION_TEMPLATE_P (newdecl))
3656         DECL_BEFRIENDING_CLASSES (newdecl)
3657           = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3658                      DECL_BEFRIENDING_CLASSES (olddecl));
3659     }
3660
3661   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3662     {
3663       if (DECL_TEMPLATE_INSTANTIATION (olddecl) 
3664           && !DECL_TEMPLATE_INSTANTIATION (newdecl)) 
3665         {
3666           /* If newdecl is not a specialization, then it is not a
3667              template-related function at all.  And that means that we
3668              shoud have exited above, returning 0.  */
3669           my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3670                               0);
3671
3672           if (TREE_USED (olddecl)) 
3673             /* From [temp.expl.spec]:
3674                
3675                If a template, a member template or the member of a class
3676                template is explicitly specialized then that
3677                specialization shall be declared before the first use of
3678                that specialization that would cause an implicit
3679                instantiation to take place, in every translation unit in
3680                which such a use occurs.  */
3681             cp_error ("explicit specialization of %D after first use", 
3682                       olddecl);
3683
3684           SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3685         }
3686       DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3687
3688       /* If either decl says `inline', this fn is inline, unless its
3689          definition was passed already.  */
3690       if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3691         DECL_INLINE (olddecl) = 1;
3692       DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3693
3694       if (! types_match)
3695         {
3696           DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3697           DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3698           DECL_RTL (olddecl) = DECL_RTL (newdecl);
3699         }
3700       if (! types_match || new_defines_function)
3701         {
3702           /* These need to be copied so that the names are available.  */
3703           DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3704           DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
3705         }
3706       if (new_defines_function)
3707         /* If defining a function declared with other language
3708            linkage, use the previously declared language linkage.  */
3709         DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3710       else
3711         {
3712           /* If redeclaring a builtin function, and not a definition,
3713              it stays built in.  */
3714           if (DECL_BUILT_IN (olddecl))
3715             {
3716               DECL_BUILT_IN (newdecl) = 1;
3717               DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
3718               /* If we're keeping the built-in definition, keep the rtl,
3719                  regardless of declaration matches.  */
3720               DECL_RTL (newdecl) = DECL_RTL (olddecl);
3721             }
3722           else
3723             DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
3724
3725           DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
3726           if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
3727             /* Previously saved insns go together with
3728                the function's previous definition.  */
3729             DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3730           /* Don't clear out the arguments if we're redefining a function.  */
3731           if (DECL_ARGUMENTS (olddecl))
3732             DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3733         }
3734       if (DECL_LANG_SPECIFIC (olddecl))
3735         DECL_MAIN_VARIANT (newdecl) = DECL_MAIN_VARIANT (olddecl);
3736     }
3737
3738   if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3739     {
3740       NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3741     }
3742
3743   /* Now preserve various other info from the definition.  */
3744   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3745   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3746   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
3747   DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
3748
3749   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3750     {
3751       int function_size;
3752       struct lang_decl *ol = DECL_LANG_SPECIFIC (olddecl);
3753       struct lang_decl *nl = DECL_LANG_SPECIFIC (newdecl);
3754
3755       function_size = sizeof (struct tree_decl);
3756
3757       bcopy ((char *) newdecl + sizeof (struct tree_common),
3758              (char *) olddecl + sizeof (struct tree_common),
3759              function_size - sizeof (struct tree_common));
3760
3761       /* Can we safely free the storage used by newdecl?  */
3762
3763 #define ROUND(x) ((x + obstack_alignment_mask (&permanent_obstack)) \
3764                   & ~ obstack_alignment_mask (&permanent_obstack))
3765
3766       if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3767         {
3768           /* If newdecl is a template instantiation, it is possible that
3769              the following sequence of events has occurred:
3770
3771              o A friend function was declared in a class template.  The
3772              class template was instantiated.  
3773
3774              o The instantiation of the friend declaration was 
3775              recorded on the instantiation list, and is newdecl.  
3776
3777              o Later, however, instantiate_class_template called pushdecl
3778              on the newdecl to perform name injection.  But, pushdecl in
3779              turn called duplicate_decls when it discovered that another
3780              declaration of a global function with the same name already
3781              existed. 
3782
3783              o Here, in duplicate_decls, we decided to clobber newdecl.
3784
3785              If we're going to do that, we'd better make sure that
3786              olddecl, and not newdecl, is on the list of
3787              instantiations so that if we try to do the instantiation
3788              again we won't get the clobbered declaration.  */
3789
3790           tree tmpl = DECL_TI_TEMPLATE (newdecl); 
3791           tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); 
3792
3793           for (; decls; decls = TREE_CHAIN (decls))
3794             if (TREE_VALUE (decls) == newdecl)
3795               TREE_VALUE (decls) = olddecl;
3796         }
3797
3798       if (((char *)newdecl + ROUND (function_size) == (char *)nl
3799            && ((char *)newdecl + ROUND (function_size)
3800                + ROUND (sizeof (struct lang_decl))
3801                == obstack_next_free (&permanent_obstack)))
3802           || ((char *)newdecl + ROUND (function_size)
3803               == obstack_next_free (&permanent_obstack)))
3804         {
3805           DECL_MAIN_VARIANT (newdecl) = olddecl;
3806           DECL_LANG_SPECIFIC (olddecl) = ol;
3807           bcopy ((char *)nl, (char *)ol, sizeof (struct lang_decl));
3808
3809           obstack_free (&permanent_obstack, newdecl);
3810         }
3811       else if (LANG_DECL_PERMANENT (ol) && ol != nl)
3812         {
3813           if (DECL_MAIN_VARIANT (olddecl) == olddecl)
3814             {
3815               /* Save these lang_decls that would otherwise be lost.  */
3816               extern tree free_lang_decl_chain;
3817               tree free_lang_decl = (tree) ol;
3818
3819               if (DECL_LANG_SPECIFIC (olddecl) == ol)
3820                 abort ();
3821
3822               TREE_CHAIN (free_lang_decl) = free_lang_decl_chain;
3823               free_lang_decl_chain = free_lang_decl;
3824             }
3825           else
3826             {
3827               /* Storage leak.  */;
3828             }
3829         }
3830     }
3831   else
3832     {
3833       bcopy ((char *) newdecl + sizeof (struct tree_common),
3834              (char *) olddecl + sizeof (struct tree_common),
3835              sizeof (struct tree_decl) - sizeof (struct tree_common)
3836              + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3837     }
3838
3839   DECL_UID (olddecl) = olddecl_uid;
3840   if (olddecl_friend)
3841     DECL_FRIEND_P (olddecl) = 1;
3842
3843   /* NEWDECL contains the merged attribute lists.
3844      Update OLDDECL to be the same.  */
3845   DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3846
3847   return 1;
3848 }
3849
3850 /* Record a decl-node X as belonging to the current lexical scope.
3851    Check for errors (such as an incompatible declaration for the same
3852    name already seen in the same scope).
3853
3854    Returns either X or an old decl for the same name.
3855    If an old decl is returned, it may have been smashed
3856    to agree with what X says.  */
3857
3858 tree
3859 pushdecl (x)
3860      tree x;
3861 {
3862   register tree t;
3863   register tree name = DECL_ASSEMBLER_NAME (x);
3864   int need_new_binding = 1;
3865
3866   if (DECL_TEMPLATE_PARM_P (x))
3867     /* Template parameters have no context; they are not X::T even
3868        when declared within a class or namespace.  */
3869     ;
3870   else
3871     {
3872       if (current_function_decl && x != current_function_decl
3873           /* A local declaration for a function doesn't constitute
3874              nesting.  */
3875           && (TREE_CODE (x) != FUNCTION_DECL || DECL_INITIAL (x))
3876           /* Don't change DECL_CONTEXT of virtual methods.  */
3877           && (TREE_CODE (x) != FUNCTION_DECL || !DECL_VIRTUAL_P (x))
3878           && !DECL_CONTEXT (x))
3879         DECL_CONTEXT (x) = current_function_decl;
3880       if (!DECL_CONTEXT (x))
3881         DECL_CONTEXT (x) = FROB_CONTEXT (current_namespace);
3882     }
3883
3884   /* Type are looked up using the DECL_NAME, as that is what the rest of the
3885      compiler wants to use.  */
3886   if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
3887       || TREE_CODE (x) == NAMESPACE_DECL)
3888     name = DECL_NAME (x);
3889
3890   if (name)
3891     {
3892 #if 0
3893       /* Not needed...see below.  */
3894       char *file;
3895       int line;
3896 #endif
3897       if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3898         name = TREE_OPERAND (name, 0);
3899       
3900       /* Namespace-scoped variables are not found in the current level. */
3901       if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x))
3902         t = namespace_binding (name, DECL_CONTEXT (x));
3903       else
3904         t = lookup_name_current_level (name);
3905       if (t == error_mark_node)
3906         {
3907           /* error_mark_node is 0 for a while during initialization!  */
3908           t = NULL_TREE;
3909           cp_error_at ("`%#D' used prior to declaration", x);
3910         }
3911
3912       else if (t != NULL_TREE)
3913         {
3914 #if 0
3915           /* This is turned off until I have time to do it right (bpk).  */
3916           /* With the code below that uses it...  */
3917           file = DECL_SOURCE_FILE (t);
3918           line = DECL_SOURCE_LINE (t);
3919 #endif
3920           if (TREE_CODE (t) == PARM_DECL)
3921             {
3922               if (DECL_CONTEXT (t) == NULL_TREE)
3923                 fatal ("parse errors have confused me too much");
3924
3925               /* Check for duplicate params.  */
3926               if (duplicate_decls (x, t))
3927                 return t;
3928             }
3929           else if (((TREE_CODE (x) == FUNCTION_DECL && DECL_LANGUAGE (x) == lang_c)
3930                     || DECL_FUNCTION_TEMPLATE_P (x))
3931                    && is_overloaded_fn (t))
3932             /* Don't do anything just yet. */;
3933           else if (t == wchar_decl_node)
3934             {
3935               if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
3936                 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
3937
3938               /* Throw away the redeclaration.  */
3939               return t;
3940             }
3941           else if (TREE_CODE (t) != TREE_CODE (x))
3942             {
3943               if (duplicate_decls (x, t))
3944                 return t;
3945             }
3946           else if (duplicate_decls (x, t))
3947             {
3948 #if 0
3949               /* This is turned off until I have time to do it right (bpk).  */
3950
3951               /* Also warn if they did a prototype with `static' on it, but
3952                  then later left the `static' off.  */
3953               if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
3954                 {
3955                   if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3956                     return t;
3957
3958                   if (extra_warnings)
3959                     {
3960                       cp_warning ("`static' missing from declaration of `%D'",
3961                                   t);
3962                       warning_with_file_and_line (file, line,
3963                                                   "previous declaration of `%s'",
3964                                                   decl_as_string (t, 0));
3965                     }
3966
3967                   /* Now fix things so it'll do what they expect.  */
3968                   if (current_function_decl)
3969                     TREE_PUBLIC (current_function_decl) = 0;
3970                 }
3971               /* Due to interference in memory reclamation (X may be
3972                  obstack-deallocated at this point), we must guard against
3973                  one really special case.  [jason: This should be handled
3974                  by start_function]  */
3975               if (current_function_decl == x)
3976                 current_function_decl = t;
3977 #endif
3978               if (TREE_CODE (t) == TYPE_DECL)
3979                 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
3980               else if (TREE_CODE (t) == FUNCTION_DECL)
3981                 check_default_args (t);
3982
3983               return t;
3984             }
3985           else if (DECL_MAIN_P (x))
3986             {
3987               /* A redeclaration of main, but not a duplicate of the
3988                  previous one. 
3989
3990                  [basic.start.main]
3991
3992                  This function shall not be overloaded.  */
3993               cp_error_at ("invalid redeclaration of `%D'", t);
3994               cp_error ("as `%D'", x);
3995               /* We don't try to push this declaration since that
3996                  causes a crash.  */
3997               return x;
3998             }
3999         }
4000
4001       check_template_shadow (x);
4002
4003       /* If this is a function conjured up by the backend, massage it
4004          so it looks friendly.  */
4005       if (TREE_CODE (x) == FUNCTION_DECL
4006           && ! DECL_LANG_SPECIFIC (x))
4007         {
4008           retrofit_lang_decl (x);
4009           DECL_LANGUAGE (x) = lang_c;
4010         }
4011
4012       if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_FUNCTION_MEMBER_P (x))
4013         {
4014           t = push_overloaded_decl (x, PUSH_LOCAL);
4015           if (t != x || DECL_LANGUAGE (x) == lang_c)
4016             return t;
4017           if (!namespace_bindings_p ())
4018             /* We do not need to create a binding for this name;
4019                push_overloaded_decl will have already done so if
4020                necessary.  */
4021             need_new_binding = 0;
4022         }
4023       else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
4024         return push_overloaded_decl (x, PUSH_GLOBAL);
4025
4026       /* If declaring a type as a typedef, copy the type (unless we're
4027          at line 0), and install this TYPE_DECL as the new type's typedef
4028          name.  See the extensive comment in ../c-decl.c (pushdecl). */
4029       if (TREE_CODE (x) == TYPE_DECL)
4030         {
4031           tree type = TREE_TYPE (x);
4032           if (DECL_SOURCE_LINE (x) == 0)
4033             {
4034               if (TYPE_NAME (type) == 0)
4035                 TYPE_NAME (type) = x;
4036             }
4037           else if (type != error_mark_node && TYPE_NAME (type) != x
4038                    /* We don't want to copy the type when all we're
4039                       doing is making a TYPE_DECL for the purposes of
4040                       inlining.  */
4041                    && (!TYPE_NAME (type) 
4042                        || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
4043             {
4044               push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
4045
4046               DECL_ORIGINAL_TYPE (x) = type;
4047               type = build_type_copy (type);
4048               TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
4049               TYPE_NAME (type) = x;
4050               TREE_TYPE (x) = type;
4051
4052               pop_obstacks ();
4053             }
4054
4055           if (type != error_mark_node
4056               && TYPE_NAME (type)
4057               && TYPE_IDENTIFIER (type))
4058             set_identifier_type_value_with_scope (DECL_NAME (x), type, 
4059                                                   current_binding_level);
4060
4061         }
4062
4063       /* Multiple external decls of the same identifier ought to match.
4064
4065          We get warnings about inline functions where they are defined.
4066          We get warnings about other functions from push_overloaded_decl.
4067          
4068          Avoid duplicate warnings where they are used.  */
4069       if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
4070         {
4071           tree decl;
4072
4073           if (IDENTIFIER_NAMESPACE_VALUE (name) != NULL_TREE
4074               && (DECL_EXTERNAL (IDENTIFIER_NAMESPACE_VALUE (name))
4075                   || TREE_PUBLIC (IDENTIFIER_NAMESPACE_VALUE (name))))
4076             decl = IDENTIFIER_NAMESPACE_VALUE (name);
4077           else
4078             decl = NULL_TREE;
4079
4080           if (decl
4081               /* If different sort of thing, we already gave an error.  */
4082               && TREE_CODE (decl) == TREE_CODE (x)
4083               && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
4084             {
4085               cp_pedwarn ("type mismatch with previous external decl", x);
4086               cp_pedwarn_at ("previous external decl of `%#D'", decl);
4087             }
4088         }
4089
4090       /* This name is new in its binding level.
4091          Install the new declaration and return it.  */
4092       if (namespace_bindings_p ())
4093         {
4094           /* Install a global value.  */
4095
4096           /* If the first global decl has external linkage,
4097              warn if we later see static one.  */
4098           if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
4099             TREE_PUBLIC (name) = 1;
4100
4101           if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
4102                 && t != NULL_TREE))
4103             {
4104               if (TREE_CODE (x) == FUNCTION_DECL)
4105                 my_friendly_assert 
4106                   ((IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
4107                   || (IDENTIFIER_GLOBAL_VALUE (name) == x), 378);
4108               SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
4109             }
4110
4111           /* Don't forget if the function was used via an implicit decl.  */
4112           if (IDENTIFIER_IMPLICIT_DECL (name)
4113               && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
4114             TREE_USED (x) = 1;
4115
4116           /* Don't forget if its address was taken in that way.  */
4117           if (IDENTIFIER_IMPLICIT_DECL (name)
4118               && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
4119             TREE_ADDRESSABLE (x) = 1;
4120
4121           /* Warn about mismatches against previous implicit decl.  */
4122           if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
4123               /* If this real decl matches the implicit, don't complain.  */
4124               && ! (TREE_CODE (x) == FUNCTION_DECL
4125                     && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
4126             cp_warning
4127               ("`%D' was previously implicitly declared to return `int'", x);
4128
4129           /* If new decl is `static' and an `extern' was seen previously,
4130              warn about it.  */
4131           if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
4132             warn_extern_redeclared_static (x, t);
4133         }
4134       else
4135         {
4136           /* Here to install a non-global value.  */
4137           tree oldlocal = IDENTIFIER_VALUE (name);
4138           tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
4139
4140           if (need_new_binding)
4141             {
4142               push_local_binding (name, x, 0);
4143               /* Because push_local_binding will hook X on to the
4144                  current_binding_level's name list, we don't want to
4145                  do that again below.  */
4146               need_new_binding = 0;
4147             }
4148
4149           /* If this is a TYPE_DECL, push it into the type value slot.  */
4150           if (TREE_CODE (x) == TYPE_DECL)
4151             set_identifier_type_value_with_scope (name, TREE_TYPE (x), 
4152                                                   current_binding_level);
4153
4154           /* Clear out any TYPE_DECL shadowed by a namespace so that
4155              we won't think this is a type.  The C struct hack doesn't
4156              go through namespaces.  */
4157           if (TREE_CODE (x) == NAMESPACE_DECL)
4158             set_identifier_type_value_with_scope (name, NULL_TREE, 
4159                                                   current_binding_level);
4160
4161           /* If this is an extern function declaration, see if we
4162              have a global definition or declaration for the function.  */
4163           if (oldlocal == NULL_TREE
4164               && DECL_EXTERNAL (x)
4165               && oldglobal != NULL_TREE
4166               && TREE_CODE (x) == FUNCTION_DECL
4167               && TREE_CODE (oldglobal) == FUNCTION_DECL)
4168             {
4169               /* We have one.  Their types must agree.  */
4170               if (decls_match (x, oldglobal))
4171                 /* OK */;
4172               else
4173                 {
4174                   cp_warning ("extern declaration of `%#D' doesn't match", x);
4175                   cp_warning_at ("global declaration `%#D'", oldglobal);
4176                 }
4177             }
4178           /* If we have a local external declaration,
4179              and no file-scope declaration has yet been seen,
4180              then if we later have a file-scope decl it must not be static.  */
4181           if (oldlocal == NULL_TREE
4182               && oldglobal == NULL_TREE
4183               && DECL_EXTERNAL (x)
4184               && TREE_PUBLIC (x))
4185             TREE_PUBLIC (name) = 1;
4186
4187           if (DECL_FROM_INLINE (x))
4188             /* Inline decls shadow nothing.  */;
4189
4190           /* Warn if shadowing an argument at the top level of the body.  */
4191           else if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
4192               && TREE_CODE (oldlocal) == PARM_DECL
4193               && TREE_CODE (x) != PARM_DECL)
4194             {
4195               /* Go to where the parms should be and see if we
4196                  find them there.  */
4197               struct binding_level *b = current_binding_level->level_chain;
4198
4199               if (cleanup_label)
4200                 b = b->level_chain;
4201
4202               /* ARM $8.3 */
4203               if (b->parm_flag == 1)
4204                 cp_error ("declaration of `%#D' shadows a parameter", name);
4205             }
4206           else if (warn_shadow && oldlocal != NULL_TREE
4207                    && current_binding_level->is_for_scope
4208                    && !DECL_DEAD_FOR_LOCAL (oldlocal))
4209             {
4210               warning ("variable `%s' shadows local",
4211                        IDENTIFIER_POINTER (name));
4212               cp_warning_at ("  this is the shadowed declaration", oldlocal);
4213             }              
4214           /* Maybe warn if shadowing something else.  */
4215           else if (warn_shadow && !DECL_EXTERNAL (x)
4216                    /* No shadow warnings for internally generated vars.  */
4217                    && ! DECL_ARTIFICIAL (x)
4218                    /* No shadow warnings for vars made for inlining.  */
4219                    && ! DECL_FROM_INLINE (x))
4220             {
4221               const char *warnstring = NULL;
4222
4223               if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
4224                 warnstring = "declaration of `%s' shadows a parameter";
4225               else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
4226                        && current_class_ptr
4227                        && !TREE_STATIC (name))
4228                 warnstring = "declaration of `%s' shadows a member of `this'";
4229               else if (oldlocal != NULL_TREE)
4230                 warnstring = "declaration of `%s' shadows previous local";
4231               else if (oldglobal != NULL_TREE)
4232                 /* XXX shadow warnings in outer-more namespaces */
4233                 warnstring = "declaration of `%s' shadows global declaration";
4234
4235               if (warnstring)
4236                 warning (warnstring, IDENTIFIER_POINTER (name));
4237             }
4238         }
4239
4240       if (TREE_CODE (x) == FUNCTION_DECL)
4241         check_default_args (x);
4242
4243       /* Keep count of variables in this level with incomplete type.  */
4244       if (TREE_CODE (x) == VAR_DECL
4245           && TREE_TYPE (x) != error_mark_node
4246           && ((TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
4247                && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
4248               /* RTTI TD entries are created while defining the type_info.  */
4249               || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
4250                   && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
4251         current_binding_level->incomplete 
4252           = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
4253     }
4254
4255   if (need_new_binding)
4256     {
4257       /* Put decls on list in reverse order.
4258          We will reverse them later if necessary.  */
4259       TREE_CHAIN (x) = current_binding_level->names;
4260       current_binding_level->names = x;
4261       if (current_binding_level == global_binding_level
4262           && !TREE_PERMANENT (x))
4263         my_friendly_abort (124);
4264     }
4265
4266   return x;
4267 }
4268
4269 /* Same as pushdecl, but define X in binding-level LEVEL.  We rely on the
4270    caller to set DECL_CONTEXT properly.  */
4271
4272 static tree
4273 pushdecl_with_scope (x, level)
4274      tree x;
4275      struct binding_level *level;
4276 {
4277   register struct binding_level *b;
4278   tree function_decl = current_function_decl;
4279
4280   current_function_decl = NULL_TREE;
4281   if (level->parm_flag == 2)
4282     {
4283       b = class_binding_level;
4284       class_binding_level = level;
4285       pushdecl_class_level (x);
4286       class_binding_level = b;
4287     }
4288   else
4289     {
4290       b = current_binding_level;
4291       current_binding_level = level;
4292       x = pushdecl (x);
4293       current_binding_level = b;
4294     }
4295   current_function_decl = function_decl;
4296   return x;
4297 }
4298
4299 /* Like pushdecl, only it places X in the current namespace,
4300    if appropriate.  */
4301
4302 tree
4303 pushdecl_namespace_level (x)
4304      tree x;
4305 {
4306   register struct binding_level *b = current_binding_level;
4307   register tree t;
4308
4309   t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
4310
4311   /* Now, the type_shadowed stack may screw us.  Munge it so it does
4312      what we want.  */
4313   if (TREE_CODE (x) == TYPE_DECL)
4314     {
4315       tree name = DECL_NAME (x);
4316       tree newval;
4317       tree *ptr = (tree *)0;
4318       for (; b != global_binding_level; b = b->level_chain)
4319         {
4320           tree shadowed = b->type_shadowed;
4321           for (; shadowed; shadowed = TREE_CHAIN (shadowed))
4322             if (TREE_PURPOSE (shadowed) == name)
4323               {
4324                 ptr = &TREE_VALUE (shadowed);
4325                 /* Can't break out of the loop here because sometimes
4326                    a binding level will have duplicate bindings for
4327                    PT names.  It's gross, but I haven't time to fix it.  */
4328               }
4329         }
4330       newval = TREE_TYPE (x);
4331       if (ptr == (tree *)0)
4332         {
4333           /* @@ This shouldn't be needed.  My test case "zstring.cc" trips
4334              up here if this is changed to an assertion.  --KR  */
4335           SET_IDENTIFIER_TYPE_VALUE (name, newval);
4336         }
4337       else
4338         {
4339           *ptr = newval;
4340         }
4341     }
4342   return t;
4343 }
4344
4345 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4346    if appropriate.  */
4347
4348 tree
4349 pushdecl_top_level (x)
4350      tree x;
4351 {
4352   tree cur_namespace = current_namespace;
4353   current_namespace = global_namespace;
4354   x = pushdecl_namespace_level (x);
4355   current_namespace = cur_namespace;
4356   return x;
4357 }
4358
4359 /* Make the declaration of X appear in CLASS scope.  */
4360
4361 void
4362 pushdecl_class_level (x)
4363      tree x;
4364 {
4365   /* Don't use DECL_ASSEMBLER_NAME here!  Everything that looks in class
4366      scope looks for the pre-mangled name.  */
4367   register tree name;
4368
4369   if (TREE_CODE (x) == OVERLOAD)
4370     x = OVL_CURRENT (x);
4371   name = DECL_NAME (x);
4372
4373   if (name)
4374     {
4375       push_class_level_binding (name, x);
4376       if (TREE_CODE (x) == TYPE_DECL)
4377         set_identifier_type_value (name, TREE_TYPE (x));
4378     }
4379   else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
4380     {
4381       tree f;
4382
4383       for (f = TYPE_FIELDS (TREE_TYPE (x));
4384            f;
4385            f = TREE_CHAIN (f))
4386         pushdecl_class_level (f);
4387     }
4388 }
4389
4390 #if 0
4391 /* This function is used to push the mangled decls for nested types into
4392    the appropriate scope.  Previously pushdecl_top_level was used, but that
4393    is incorrect for members of local classes.  */
4394
4395 void
4396 pushdecl_nonclass_level (x)
4397      tree x;
4398 {
4399   struct binding_level *b = current_binding_level;
4400
4401   my_friendly_assert (b->parm_flag != 2, 180);
4402
4403 #if 0
4404   /* Get out of template binding levels */
4405   while (b->pseudo_global)
4406     b = b->level_chain;
4407 #endif
4408
4409   pushdecl_with_scope (x, b);
4410 }
4411 #endif
4412
4413 /* Make the declaration(s) of X appear in CLASS scope
4414    under the name NAME.  */
4415
4416 void
4417 push_class_level_binding (name, x)
4418      tree name;
4419      tree x;
4420 {
4421   tree binding;
4422   /* The class_binding_level will be NULL if x is a template 
4423      parameter name in a member template.  */
4424   if (!class_binding_level)
4425     return;
4426
4427   /* Make sure that this new member does not have the same name
4428      as a template parameter.  */
4429   if (TYPE_BEING_DEFINED (current_class_type))
4430     check_template_shadow (x);
4431
4432   /* If this declaration shadows a declaration from an enclosing
4433      class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4434      we leave this class.  Record the shadowed declaration here.  */
4435   binding = IDENTIFIER_BINDING (name);
4436   if (binding 
4437       && ((TREE_CODE (x) == OVERLOAD
4438            && BINDING_VALUE (binding)
4439            && is_overloaded_fn (BINDING_VALUE (binding)))
4440           || INHERITED_VALUE_BINDING_P (binding)))
4441     {
4442       tree shadow;
4443       tree old_decl;
4444
4445       /* If the old binding was from a base class, and was for a tag
4446          name, slide it over to make room for the new binding.  The
4447          old binding is still visible if explicitly qualified with a
4448          class-key.  */
4449       if (INHERITED_VALUE_BINDING_P (binding)
4450           && BINDING_VALUE (binding)
4451           && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
4452           && DECL_ARTIFICIAL (BINDING_VALUE (binding))
4453           && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
4454         {
4455           old_decl = BINDING_TYPE (binding);
4456           BINDING_TYPE (binding) = BINDING_VALUE (binding);
4457           BINDING_VALUE (binding) = NULL_TREE;
4458           INHERITED_VALUE_BINDING_P (binding) = 0;
4459         }
4460       else
4461         old_decl = BINDING_VALUE (binding);
4462
4463       /* There was already a binding for X containing fewer
4464          functions than are named in X.  Find the previous
4465          declaration of X on the class-shadowed list, and update it.  */
4466       for (shadow = class_binding_level->class_shadowed;
4467            shadow;
4468            shadow = TREE_CHAIN (shadow))
4469         if (TREE_PURPOSE (shadow) == name
4470             && TREE_TYPE (shadow) == old_decl)
4471           {
4472             BINDING_VALUE (binding) = x;
4473             INHERITED_VALUE_BINDING_P (binding) = 0;
4474             TREE_TYPE (shadow) = x;
4475             return;
4476           }
4477     }
4478
4479   /* If we didn't replace an existing binding, put the binding on the
4480      stack of bindings for the identifier, and update
4481      IDENTIFIER_CLASS_VALUE.  */
4482   if (push_class_binding (name, x))
4483     {
4484       push_cache_obstack ();
4485       class_binding_level->class_shadowed
4486         = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
4487                      class_binding_level->class_shadowed);
4488       pop_obstacks ();
4489       /* Record the value we are binding NAME to so that we can know
4490          what to pop later.  */
4491       TREE_TYPE (class_binding_level->class_shadowed) = x;
4492     }
4493 }
4494
4495 /* Insert another USING_DECL into the current binding level,
4496    returning this declaration. If this is a redeclaration,
4497    do nothing and return NULL_TREE.  */
4498
4499 tree
4500 push_using_decl (scope, name)
4501      tree scope;
4502      tree name;
4503 {
4504   tree decl;
4505   
4506   my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4507   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4508   for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4509     if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4510       break;
4511   if (decl)
4512     return NULL_TREE;
4513   decl = build_lang_decl (USING_DECL, name, void_type_node);
4514   DECL_INITIAL (decl) = scope;
4515   TREE_CHAIN (decl) = current_binding_level->usings;
4516   current_binding_level->usings = decl;
4517   return decl;
4518 }
4519
4520 /* Add namespace to using_directives. Return NULL_TREE if nothing was
4521    changed (i.e. there was already a directive), or the fresh
4522    TREE_LIST otherwise.  */
4523
4524 tree
4525 push_using_directive (used)
4526      tree used;
4527 {
4528   tree ud = current_binding_level->using_directives;
4529   tree iter, ancestor;
4530   
4531   /* Check if we already have this. */
4532   if (purpose_member (used, ud) != NULL_TREE)
4533     return NULL_TREE;
4534
4535   /* Recursively add all namespaces used. */
4536   for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4537     push_using_directive (TREE_PURPOSE (iter));
4538
4539   ancestor = namespace_ancestor (current_decl_namespace (), used);
4540   ud = current_binding_level->using_directives;
4541   ud = perm_tree_cons (used, ancestor, ud);
4542   current_binding_level->using_directives = ud;
4543   return ud;
4544 }
4545
4546 /* DECL is a FUNCTION_DECL for a non-member function, which may have
4547    other definitions already in place.  We get around this by making
4548    the value of the identifier point to a list of all the things that
4549    want to be referenced by that name.  It is then up to the users of
4550    that name to decide what to do with that list.
4551
4552    DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its DECL_RESULT
4553    slot.  It is dealt with the same way.
4554
4555    FLAGS is a bitwise-or of the following values:
4556      PUSH_LOCAL: Bind DECL in the current scope, rather than at
4557                  namespace scope.
4558      PUSH_USING: DECL is being pushed as the result of a using
4559                  declaration. 
4560
4561    The value returned may be a previous declaration if we guessed wrong
4562    about what language DECL should belong to (C or C++).  Otherwise,
4563    it's always DECL (and never something that's not a _DECL).  */
4564
4565 tree
4566 push_overloaded_decl (decl, flags)
4567      tree decl;
4568      int flags;
4569 {
4570   tree name = DECL_NAME (decl);
4571   tree old;
4572   tree new_binding;
4573   int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
4574
4575   if (doing_global)
4576     {
4577       old = namespace_binding (name, DECL_CONTEXT (decl));
4578       if (old && TREE_CODE (old) == FUNCTION_DECL
4579           && DECL_ARTIFICIAL (old)
4580           && (DECL_BUILT_IN (old) || DECL_BUILT_IN_NONANSI (old)))
4581         {
4582           if (duplicate_decls (decl, old))
4583             return old;
4584           old = NULL_TREE;
4585         }
4586     }
4587   else
4588     old = lookup_name_current_level (name);
4589
4590   if (old)
4591     {
4592       if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
4593         {
4594           tree t = TREE_TYPE (old);
4595           if (IS_AGGR_TYPE (t) && warn_shadow
4596               && (! DECL_IN_SYSTEM_HEADER (decl)
4597                   || ! DECL_IN_SYSTEM_HEADER (old)))
4598             cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
4599           old = NULL_TREE;
4600         }
4601       else if (is_overloaded_fn (old))
4602         {
4603           tree tmp;
4604           
4605           for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
4606             {
4607               tree fn = OVL_CURRENT (tmp);
4608
4609               if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4610                   && !(flags & PUSH_USING)
4611                   && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4612                                 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4613                 cp_error ("`%#D' conflicts with previous using declaration `%#D'",
4614                           decl, fn);
4615               
4616               if (duplicate_decls (decl, fn))
4617                 return fn;
4618             }
4619         }
4620       else
4621         {
4622           cp_error_at ("previous non-function declaration `%#D'", old);
4623           cp_error ("conflicts with function declaration `%#D'", decl);
4624           return decl;
4625         }
4626     }
4627
4628   if (old || TREE_CODE (decl) == TEMPLATE_DECL)
4629     {
4630       if (old && TREE_CODE (old) != OVERLOAD)
4631         new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4632       else
4633         new_binding = ovl_cons (decl, old);
4634       if (flags & PUSH_USING)
4635         OVL_USED (new_binding) = 1;
4636     }
4637   else
4638     /* NAME is not ambiguous.  */
4639     new_binding = decl;
4640
4641   if (doing_global)
4642     set_namespace_binding (name, current_namespace, new_binding);
4643   else
4644     {
4645       /* We only create an OVERLOAD if there was a previous binding at
4646          this level, or if decl is a template. In the former case, we
4647          need to remove the old binding and replace it with the new
4648          binding.  We must also run through the NAMES on the binding
4649          level where the name was bound to update the chain.  */
4650
4651       if (TREE_CODE (new_binding) == OVERLOAD && old)
4652         {
4653           tree *d;
4654           
4655           for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4656                *d;
4657                d = &TREE_CHAIN (*d))
4658             if (*d == old
4659                 || (TREE_CODE (*d) == TREE_LIST
4660                     && TREE_VALUE (*d) == old))
4661               {
4662                 if (TREE_CODE (*d) == TREE_LIST)
4663                   /* Just replace the old binding with the new.  */
4664                   TREE_VALUE (*d) = new_binding;
4665                 else
4666                   /* Build a TREE_LIST to wrap the OVERLOAD.  */
4667                   *d = build_tree_list (NULL_TREE, new_binding);
4668
4669                 /* And update the CPLUS_BINDING node.  */
4670                 BINDING_VALUE (IDENTIFIER_BINDING (name))
4671                   = new_binding;
4672                 return decl;
4673               }
4674
4675           /* We should always find a previous binding in this case.  */
4676           my_friendly_abort (0);
4677         }
4678
4679       /* Install the new binding.  */
4680       push_local_binding (name, new_binding, flags);
4681     }
4682
4683   return decl;
4684 }
4685 \f
4686 /* Generate an implicit declaration for identifier FUNCTIONID
4687    as a function of type int ().  Print a warning if appropriate.  */
4688
4689 tree
4690 implicitly_declare (functionid)
4691      tree functionid;
4692 {
4693   register tree decl;
4694   int temp = allocation_temporary_p ();
4695
4696   push_obstacks_nochange ();
4697
4698   /* Save the decl permanently so we can warn if definition follows.
4699      In ANSI C, warn_implicit is usually false, so the saves little space.
4700      But in C++, it's usually true, hence the extra code.  */
4701   if (temp && (! warn_implicit || toplevel_bindings_p ()))
4702     end_temporary_allocation ();
4703
4704   /* We used to reuse an old implicit decl here,
4705      but this loses with inline functions because it can clobber
4706      the saved decl chains.  */
4707   decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4708
4709   DECL_EXTERNAL (decl) = 1;
4710   TREE_PUBLIC (decl) = 1;
4711
4712   /* ANSI standard says implicit declarations are in the innermost block.
4713      So we record the decl in the standard fashion.  */
4714   pushdecl (decl);
4715   rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4716
4717   if (warn_implicit
4718       /* Only one warning per identifier.  */
4719       && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4720     {
4721       cp_pedwarn ("implicit declaration of function `%#D'", decl);
4722     }
4723
4724   SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4725
4726   pop_obstacks ();
4727
4728   return decl;
4729 }
4730
4731 /* Return zero if the declaration NEWDECL is valid
4732    when the declaration OLDDECL (assumed to be for the same name)
4733    has already been seen.
4734    Otherwise return an error message format string with a %s
4735    where the identifier should go.  */
4736
4737 static const char *
4738 redeclaration_error_message (newdecl, olddecl)
4739      tree newdecl, olddecl;
4740 {
4741   if (TREE_CODE (newdecl) == TYPE_DECL)
4742     {
4743       /* Because C++ can put things into name space for free,
4744          constructs like "typedef struct foo { ... } foo"
4745          would look like an erroneous redeclaration.  */
4746       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
4747         return 0;
4748       else
4749         return "redefinition of `%#D'";
4750     }
4751   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4752     {
4753       /* If this is a pure function, its olddecl will actually be
4754          the original initialization to `0' (which we force to call
4755          abort()).  Don't complain about redefinition in this case.  */
4756       if (DECL_LANG_SPECIFIC (olddecl) && DECL_ABSTRACT_VIRTUAL_P (olddecl))
4757         return 0;
4758
4759       /* If both functions come from different namespaces, this is not
4760          a redeclaration - this is a conflict with a used function. */
4761       if (DECL_NAMESPACE_SCOPE_P (olddecl)
4762           && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
4763         return "`%D' conflicts with used function";
4764
4765       /* We'll complain about linkage mismatches in
4766          warn_extern_redeclared_static.  */
4767
4768       /* Defining the same name twice is no good.  */
4769       if (DECL_INITIAL (olddecl) != NULL_TREE
4770           && DECL_INITIAL (newdecl) != NULL_TREE)
4771         {
4772           if (DECL_NAME (olddecl) == NULL_TREE)
4773             return "`%#D' not declared in class";
4774           else
4775             return "redefinition of `%#D'";
4776         }
4777       return 0;
4778     }
4779   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4780     {
4781       if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
4782            && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4783            && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4784           || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
4785               && TYPE_SIZE (TREE_TYPE (newdecl))
4786               && TYPE_SIZE (TREE_TYPE (olddecl))))
4787         return "redefinition of `%#D'";
4788       return 0;
4789     }
4790   else if (toplevel_bindings_p ())
4791     {
4792       /* Objects declared at top level:  */
4793       /* If at least one is a reference, it's ok.  */
4794       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
4795         return 0;
4796       /* Reject two definitions.  */
4797       return "redefinition of `%#D'";
4798     }
4799   else
4800     {
4801       /* Objects declared with block scope:  */
4802       /* Reject two definitions, and reject a definition
4803          together with an external reference.  */
4804       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
4805         return "redeclaration of `%#D'";
4806       return 0;
4807     }
4808 }
4809 \f
4810 /* Get the LABEL_DECL corresponding to identifier ID as a label.
4811    Create one if none exists so far for the current function.
4812    This function is called for both label definitions and label references.  */
4813
4814 tree
4815 lookup_label (id)
4816      tree id;
4817 {
4818   register tree decl = IDENTIFIER_LABEL_VALUE (id);
4819
4820   if (current_function_decl == NULL_TREE)
4821     {
4822       error ("label `%s' referenced outside of any function",
4823              IDENTIFIER_POINTER (id));
4824       return NULL_TREE;
4825     }
4826
4827   if ((decl == NULL_TREE
4828       || DECL_SOURCE_LINE (decl) == 0)
4829       && (named_label_uses == NULL
4830           || named_label_uses->names_in_scope != current_binding_level->names
4831           || named_label_uses->label_decl != decl))
4832     {
4833       struct named_label_list *new_ent;
4834       new_ent
4835         = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
4836       new_ent->label_decl = decl;
4837       new_ent->names_in_scope = current_binding_level->names;
4838       new_ent->binding_level = current_binding_level;
4839       new_ent->lineno_o_goto = lineno;
4840       new_ent->filename_o_goto = input_filename;
4841       new_ent->next = named_label_uses;
4842       named_label_uses = new_ent;
4843     }
4844
4845   /* Use a label already defined or ref'd with this name.  */
4846   if (decl != NULL_TREE)
4847     {
4848       /* But not if it is inherited and wasn't declared to be inheritable.  */
4849       if (DECL_CONTEXT (decl) != current_function_decl
4850           && ! C_DECLARED_LABEL_FLAG (decl))
4851         return shadow_label (id);
4852       return decl;
4853     }
4854
4855   decl = build_decl (LABEL_DECL, id, void_type_node);
4856
4857   /* Make sure every label has an rtx.  */
4858   label_rtx (decl);
4859
4860   /* A label not explicitly declared must be local to where it's ref'd.  */
4861   DECL_CONTEXT (decl) = current_function_decl;
4862
4863   DECL_MODE (decl) = VOIDmode;
4864
4865   /* Say where one reference is to the label,
4866      for the sake of the error if it is not defined.  */
4867   DECL_SOURCE_LINE (decl) = lineno;
4868   DECL_SOURCE_FILE (decl) = input_filename;
4869
4870   SET_IDENTIFIER_LABEL_VALUE (id, decl);
4871
4872   named_labels = tree_cons (NULL_TREE, decl, named_labels);
4873   named_label_uses->label_decl = decl;
4874
4875   return decl;
4876 }
4877
4878 /* Make a label named NAME in the current function,
4879    shadowing silently any that may be inherited from containing functions
4880    or containing scopes.
4881
4882    Note that valid use, if the label being shadowed
4883    comes from another scope in the same function,
4884    requires calling declare_nonlocal_label right away.  */
4885
4886 tree
4887 shadow_label (name)
4888      tree name;
4889 {
4890   register tree decl = IDENTIFIER_LABEL_VALUE (name);
4891
4892   if (decl != NULL_TREE)
4893     {
4894       shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
4895       SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE);
4896     }
4897
4898   return lookup_label (name);
4899 }
4900
4901 /* Define a label, specifying the location in the source file.
4902    Return the LABEL_DECL node for the label, if the definition is valid.
4903    Otherwise return 0.  */
4904
4905 tree
4906 define_label (filename, line, name)
4907      char *filename;
4908      int line;
4909      tree name;
4910 {
4911   tree decl;
4912
4913   if (minimal_parse_mode)
4914     {
4915       push_obstacks (&permanent_obstack, &permanent_obstack);
4916       decl = build_decl (LABEL_DECL, name, void_type_node);
4917       pop_obstacks ();
4918       DECL_SOURCE_LINE (decl) = line;
4919       DECL_SOURCE_FILE (decl) = filename;
4920       add_tree (decl);
4921       return decl;
4922     }
4923
4924   decl = lookup_label (name);
4925
4926   /* After labels, make any new cleanups go into their
4927      own new (temporary) binding contour.  */
4928   current_binding_level->more_cleanups_ok = 0;
4929
4930   /* If label with this name is known from an outer context, shadow it.  */
4931   if (decl != NULL_TREE && DECL_CONTEXT (decl) != current_function_decl)
4932     {
4933       shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
4934       SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE);
4935       decl = lookup_label (name);
4936     }
4937
4938   if (name == get_identifier ("wchar_t"))
4939     cp_pedwarn ("label named wchar_t");
4940
4941   if (DECL_INITIAL (decl) != NULL_TREE)
4942     {
4943       cp_error ("duplicate label `%D'", decl);
4944       return 0;
4945     }
4946   else
4947     {
4948       struct named_label_list *uses, *prev;
4949       int identified = 0;
4950
4951       /* Mark label as having been defined.  */
4952       DECL_INITIAL (decl) = error_mark_node;
4953       /* Say where in the source.  */
4954       DECL_SOURCE_FILE (decl) = filename;
4955       DECL_SOURCE_LINE (decl) = line;
4956
4957       prev = NULL;
4958       uses = named_label_uses;
4959       while (uses != NULL)
4960         if (uses->label_decl == decl)
4961           {
4962             struct binding_level *b = current_binding_level;
4963             while (b)
4964               {
4965                 tree new_decls = b->names;
4966                 tree old_decls = (b == uses->binding_level)
4967                                   ? uses->names_in_scope : NULL_TREE;
4968                 while (new_decls != old_decls)
4969                   {
4970                     if (TREE_CODE (new_decls) == VAR_DECL
4971                         /* Don't complain about crossing initialization
4972                            of internal entities.  They can't be accessed,
4973                            and they should be cleaned up
4974                            by the time we get to the label.  */
4975                         && ! DECL_ARTIFICIAL (new_decls)
4976                         && !(DECL_INITIAL (new_decls) == NULL_TREE
4977                              && pod_type_p (TREE_TYPE (new_decls))))
4978                       {
4979                         /* This is really only important if we're crossing
4980                            an initialization.  The POD stuff is just
4981                            pedantry; why should it matter if the class
4982                            contains a field of pointer to member type?  */
4983                         int problem = (DECL_INITIAL (new_decls)
4984                                        || (TYPE_NEEDS_CONSTRUCTING
4985                                            (TREE_TYPE (new_decls))));
4986
4987                         if (! identified)
4988                           {
4989                             if (problem)
4990                               {
4991                                 cp_error ("jump to label `%D'", decl);
4992                                 error_with_file_and_line
4993                                   (uses->filename_o_goto,
4994                                    uses->lineno_o_goto, "  from here");
4995                               }
4996                             else
4997                               {
4998                                 cp_pedwarn ("jump to label `%D'", decl);
4999                                 pedwarn_with_file_and_line
5000                                   (uses->filename_o_goto,
5001                                    uses->lineno_o_goto, "  from here");
5002                               }
5003                             identified = 1;
5004                         }
5005
5006                         if (problem)
5007                           cp_error_at ("  crosses initialization of `%#D'",
5008                                        new_decls);
5009                         else
5010                           cp_pedwarn_at ("  enters scope of non-POD `%#D'",
5011                                          new_decls);
5012                       }
5013                     new_decls = TREE_CHAIN (new_decls);
5014                   }
5015                 if (b == uses->binding_level)
5016                   break;
5017                 b = b->level_chain;
5018               }
5019
5020             if (prev != NULL)
5021               prev->next = uses->next;
5022             else
5023               named_label_uses = uses->next;
5024
5025             uses = uses->next;
5026           }
5027         else
5028           {
5029             prev = uses;
5030             uses = uses->next;
5031           }
5032       current_function_return_value = NULL_TREE;
5033       return decl;
5034     }
5035 }
5036
5037 struct cp_switch
5038 {
5039   struct binding_level *level;
5040   struct cp_switch *next;
5041 };
5042
5043 static struct cp_switch *switch_stack;
5044
5045 void
5046 push_switch ()
5047 {
5048   struct cp_switch *p
5049     = (struct cp_switch *) oballoc (sizeof (struct cp_switch));
5050   p->level = current_binding_level;
5051   p->next = switch_stack;
5052   switch_stack = p;
5053 }
5054
5055 void
5056 pop_switch ()
5057 {
5058   switch_stack = switch_stack->next;
5059 }
5060
5061 /* Same, but for CASE labels.  If DECL is NULL_TREE, it's the default.  */
5062 /* XXX Note decl is never actually used. (bpk) */
5063
5064 void
5065 define_case_label ()
5066 {
5067   tree cleanup = last_cleanup_this_contour ();
5068   struct binding_level *b = current_binding_level;
5069   int identified = 0;
5070
5071   if (cleanup)
5072     {
5073       static int explained = 0;
5074       cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
5075       warning ("where case label appears here");
5076       if (!explained)
5077         {
5078           warning ("(enclose actions of previous case statements requiring");
5079           warning ("destructors in their own binding contours.)");
5080           explained = 1;
5081         }
5082     }
5083
5084   for (; b && b != switch_stack->level; b = b->level_chain)
5085     {
5086       tree new_decls = b->names;
5087       for (; new_decls; new_decls = TREE_CHAIN (new_decls))
5088         {
5089           if (TREE_CODE (new_decls) == VAR_DECL
5090               /* Don't complain about crossing initialization
5091                  of internal entities.  They can't be accessed,
5092                  and they should be cleaned up
5093                  by the time we get to the label.  */
5094               && ! DECL_ARTIFICIAL (new_decls)
5095               && ((DECL_INITIAL (new_decls) != NULL_TREE
5096                    && DECL_INITIAL (new_decls) != error_mark_node)
5097                   || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
5098             {
5099               if (! identified)
5100                 error ("jump to case label");
5101               identified = 1;
5102               cp_error_at ("  crosses initialization of `%#D'",
5103                            new_decls);
5104             }
5105         }
5106     }
5107
5108   /* After labels, make any new cleanups go into their
5109      own new (temporary) binding contour.  */
5110
5111   current_binding_level->more_cleanups_ok = 0;
5112   current_function_return_value = NULL_TREE;
5113 }
5114 \f
5115 /* Return the list of declarations of the current level.
5116    Note that this list is in reverse order unless/until
5117    you nreverse it; and when you do nreverse it, you must
5118    store the result back using `storedecls' or you will lose.  */
5119
5120 tree
5121 getdecls ()
5122 {
5123   return current_binding_level->names;
5124 }
5125
5126 /* Return the list of type-tags (for structs, etc) of the current level.  */
5127
5128 tree
5129 gettags ()
5130 {
5131   return current_binding_level->tags;
5132 }
5133
5134 /* Store the list of declarations of the current level.
5135    This is done for the parameter declarations of a function being defined,
5136    after they are modified in the light of any missing parameters.  */
5137
5138 static void
5139 storedecls (decls)
5140      tree decls;
5141 {
5142   current_binding_level->names = decls;
5143 }
5144
5145 /* Similarly, store the list of tags of the current level.  */
5146
5147 void
5148 storetags (tags)
5149      tree tags;
5150 {
5151   current_binding_level->tags = tags;
5152 }
5153 \f
5154 /* Given NAME, an IDENTIFIER_NODE,
5155    return the structure (or union or enum) definition for that name.
5156    Searches binding levels from BINDING_LEVEL up to the global level.
5157    If THISLEVEL_ONLY is nonzero, searches only the specified context
5158    (but skips any tag-transparent contexts to find one that is
5159    meaningful for tags).
5160    FORM says which kind of type the caller wants;
5161    it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
5162    If the wrong kind of type is found, and it's not a template, an error is
5163    reported.  */
5164
5165 static tree
5166 lookup_tag (form, name, binding_level, thislevel_only)
5167      enum tree_code form;
5168      tree name;
5169      struct binding_level *binding_level;
5170      int thislevel_only;
5171 {
5172   register struct binding_level *level;
5173   /* Non-zero if, we should look past a pseudo-global level, even if
5174      THISLEVEL_ONLY.  */
5175   int allow_pseudo_global = 1;
5176
5177   for (level = binding_level; level; level = level->level_chain)
5178     {
5179       register tree tail;
5180       if (ANON_AGGRNAME_P (name))
5181         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5182           {
5183             /* There's no need for error checking here, because
5184                anon names are unique throughout the compilation.  */
5185             if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
5186               return TREE_VALUE (tail);
5187           }
5188       else if (level->namespace_p)
5189         /* Do namespace lookup. */
5190         for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
5191           {
5192             tree old = binding_for_name (name, tail);
5193
5194             /* If we just skipped past a pseudo global level, even
5195                though THISLEVEL_ONLY, and we find a template class
5196                declaration, then we use the _TYPE node for the
5197                template.  See the example below.  */
5198             if (thislevel_only && !allow_pseudo_global
5199                 && old && BINDING_VALUE (old) 
5200                 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
5201               old = TREE_TYPE (BINDING_VALUE (old));
5202             else 
5203               old = BINDING_TYPE (old);
5204
5205             /* If it has an original type, it is a typedef, and we
5206                should not return it.  */
5207             if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
5208               old = NULL_TREE;
5209             if (old && TREE_CODE (old) != form
5210                 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
5211               {
5212                 cp_error ("`%#D' redeclared as %C", old, form);
5213                 return NULL_TREE;
5214               }
5215             if (old)
5216               return old;
5217             if (thislevel_only || tail == global_namespace)
5218               return NULL_TREE;
5219           }
5220       else
5221         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5222           {
5223             if (TREE_PURPOSE (tail) == name)
5224               {
5225                 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
5226                 /* Should tighten this up; it'll probably permit
5227                    UNION_TYPE and a struct template, for example.  */
5228                 if (code != form
5229                     && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
5230                   {
5231                     /* Definition isn't the kind we were looking for.  */
5232                     cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
5233                               form);
5234                     return NULL_TREE;
5235                   }
5236                 return TREE_VALUE (tail);
5237               }
5238           }
5239       if (thislevel_only && ! level->tag_transparent)
5240         {
5241           if (level->pseudo_global && allow_pseudo_global)
5242             {
5243               /* We must deal with cases like this:
5244                  
5245                    template <class T> struct S;
5246                    template <class T> struct S {};
5247                    
5248                  When looking up `S', for the second declaration, we
5249                  would like to find the first declaration.  But, we
5250                  are in the pseudo-global level created for the
5251                  template parameters, rather than the (surrounding)
5252                  namespace level.  Thus, we keep going one more level,
5253                  even though THISLEVEL_ONLY is non-zero.  */
5254               allow_pseudo_global = 0;
5255               continue;
5256             }
5257           else
5258             return NULL_TREE;
5259         }
5260     }
5261   return NULL_TREE;
5262 }
5263
5264 #if 0
5265 void
5266 set_current_level_tags_transparency (tags_transparent)
5267      int tags_transparent;
5268 {
5269   current_binding_level->tag_transparent = tags_transparent;
5270 }
5271 #endif
5272
5273 /* Given a type, find the tag that was defined for it and return the tag name.
5274    Otherwise return 0.  However, the value can never be 0
5275    in the cases in which this is used.
5276
5277    C++: If NAME is non-zero, this is the new name to install.  This is
5278    done when replacing anonymous tags with real tag names.  */
5279
5280 static tree
5281 lookup_tag_reverse (type, name)
5282      tree type;
5283      tree name;
5284 {
5285   register struct binding_level *level;
5286
5287   for (level = current_binding_level; level; level = level->level_chain)
5288     {
5289       register tree tail;
5290       for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5291         {
5292           if (TREE_VALUE (tail) == type)
5293             {
5294               if (name)
5295                 TREE_PURPOSE (tail) = name;
5296               return TREE_PURPOSE (tail);
5297             }
5298         }
5299     }
5300   return NULL_TREE;
5301 }
5302 \f
5303 /* Lookup TYPE in CONTEXT (a chain of nested types or a FUNCTION_DECL).
5304    Return the type value, or NULL_TREE if not found.  */
5305
5306 static tree
5307 lookup_nested_type (type, context)
5308      tree type;
5309      tree context;
5310 {
5311   if (context == NULL_TREE)
5312     return NULL_TREE;
5313   while (context)
5314     {
5315       switch (TREE_CODE (context))
5316         {
5317         case TYPE_DECL:
5318           {
5319             tree ctype = TREE_TYPE (context);
5320             tree match = value_member (type, CLASSTYPE_TAGS (ctype));
5321             if (match)
5322               return TREE_VALUE (match);
5323             context = DECL_CONTEXT (context);
5324
5325             /* When we have a nested class whose member functions have
5326                local types (e.g., a set of enums), we'll arrive here
5327                with the DECL_CONTEXT as the actual RECORD_TYPE node for
5328                the enclosing class.  Instead, we want to make sure we
5329                come back in here with the TYPE_DECL, not the RECORD_TYPE.  */
5330             if (context && TREE_CODE (context) == RECORD_TYPE)
5331               context = TREE_CHAIN (context);
5332           }
5333           break;
5334         case FUNCTION_DECL:
5335           if (TYPE_NAME (type) && TYPE_IDENTIFIER (type))
5336             return lookup_name (TYPE_IDENTIFIER (type), 1);
5337           return NULL_TREE;
5338         default:
5339           my_friendly_abort (12);
5340         }
5341     }
5342   return NULL_TREE;
5343 }
5344
5345 /* Look up NAME in the NAMESPACE.  */
5346
5347 tree
5348 lookup_namespace_name (namespace, name)
5349      tree namespace, name;
5350 {
5351   struct tree_binding _b;
5352   tree val;
5353   tree template_id = NULL_TREE;
5354
5355   my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
5356
5357   if (TREE_CODE (name) == NAMESPACE_DECL)
5358     /* This happens for A::B<int> when B is a namespace. */
5359     return name;
5360   else if (TREE_CODE (name) == TEMPLATE_DECL)
5361     {
5362       /* This happens for A::B where B is a template, and there are no
5363          template arguments.  */
5364       cp_error ("invalid use of `%D'", name);
5365       return error_mark_node;
5366     }
5367
5368   namespace = ORIGINAL_NAMESPACE (namespace);
5369
5370   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5371     {
5372       template_id = name;
5373       name = TREE_OPERAND (name, 0);
5374       if (TREE_CODE (name) == OVERLOAD)
5375         name = DECL_NAME (OVL_CURRENT (name));
5376       else if (TREE_CODE_CLASS (TREE_CODE (name)) == 'd')
5377         name = DECL_NAME (name);
5378     }
5379
5380   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
5381   
5382   val = binding_init (&_b);
5383   if (!qualified_lookup_using_namespace (name, namespace, val, 0))
5384     return error_mark_node;
5385
5386   if (BINDING_VALUE (val))
5387     {
5388       val = BINDING_VALUE (val);
5389
5390       if (template_id)
5391         {
5392           if (DECL_CLASS_TEMPLATE_P (val))
5393             val = lookup_template_class (val, 
5394                                          TREE_OPERAND (template_id, 1),
5395                                          /*in_decl=*/NULL_TREE,
5396                                          /*context=*/NULL_TREE,
5397                                          /*entering_scope=*/0);
5398           else if (DECL_FUNCTION_TEMPLATE_P (val)
5399                    || TREE_CODE (val) == OVERLOAD)
5400             val = lookup_template_function (val, 
5401                                             TREE_OPERAND (template_id, 1));
5402           else
5403             {
5404               cp_error ("`%D::%D' is not a template",
5405                         namespace, name);
5406               return error_mark_node;
5407             }
5408         }
5409
5410       /* If we have a single function from a using decl, pull it out.  */
5411       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5412         val = OVL_FUNCTION (val);
5413       return val;
5414     }
5415
5416   cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
5417   return error_mark_node;
5418 }
5419
5420 /* Hash a TYPENAME_TYPE.  K is really of type `tree'.  */
5421
5422 static unsigned long
5423 typename_hash (k)
5424      hash_table_key k;
5425 {
5426   unsigned long hash;
5427   tree t;
5428
5429   t = (tree) k;
5430   hash = (((unsigned long) TYPE_CONTEXT (t))
5431           ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5432
5433   return hash;
5434 }
5435
5436 /* Compare two TYPENAME_TYPEs.  K1 and K2 are really of type `tree'.  */
5437
5438 static boolean
5439 typename_compare (k1, k2)
5440      hash_table_key k1;
5441      hash_table_key k2;
5442 {
5443   tree t1;
5444   tree t2;
5445   tree d1;
5446   tree d2;
5447
5448   t1 = (tree) k1;
5449   t2 = (tree) k2;
5450   d1 = TYPE_NAME (t1);
5451   d2 = TYPE_NAME (t2);
5452   
5453   return (DECL_NAME (d1) == DECL_NAME (d2)
5454           && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
5455           && ((TREE_TYPE (t1) != NULL_TREE) 
5456               == (TREE_TYPE (t2) != NULL_TREE))
5457           && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5458           && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5459 }
5460
5461 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
5462    the type of `T', NAME is the IDENTIFIER_NODE for `t'.  If BASE_TYPE
5463    is non-NULL, this type is being created by the implicit typename
5464    extension, and BASE_TYPE is a type named `t' in some base class of
5465    `T' which depends on template parameters.  
5466
5467    Returns the new TYPENAME_TYPE.  */
5468
5469 tree
5470 build_typename_type (context, name, fullname, base_type)
5471      tree context;
5472      tree name;
5473      tree fullname;
5474      tree base_type;
5475 {
5476   tree t;
5477   tree d;
5478   struct hash_entry* e;
5479
5480   static struct hash_table ht;
5481
5482   push_obstacks (&permanent_obstack, &permanent_obstack);
5483
5484   if (!ht.table
5485       && !hash_table_init (&ht, &hash_newfunc, &typename_hash, 
5486                            &typename_compare))
5487     fatal ("virtual memory exhausted");
5488
5489   /* The FULLNAME needs to exist for the life of the hash table, i.e.,
5490      for the entire compilation.  */
5491   if (!TREE_PERMANENT (fullname))
5492     fullname = copy_to_permanent (fullname);
5493
5494   /* Build the TYPENAME_TYPE.  */
5495   t = make_lang_type (TYPENAME_TYPE);
5496   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5497   TYPENAME_TYPE_FULLNAME (t) = fullname;
5498   TREE_TYPE (t) = base_type;
5499
5500   /* Build the corresponding TYPE_DECL.  */
5501   d = build_decl (TYPE_DECL, name, t);
5502   TYPE_NAME (TREE_TYPE (d)) = d;
5503   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5504   DECL_CONTEXT (d) = FROB_CONTEXT (context);
5505   DECL_ARTIFICIAL (d) = 1;
5506
5507   /* See if we already have this type.  */
5508   e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5509   if (e)
5510     {
5511       /* This will free not only TREE_TYPE, but the lang-specific data
5512          and the TYPE_DECL as well.  */
5513       obstack_free (&permanent_obstack, t);
5514       t = (tree) e->key;
5515     }
5516   else
5517     /* Insert the type into the table.  */
5518     hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5519
5520   pop_obstacks ();
5521
5522   return t;
5523 }
5524
5525 tree
5526 make_typename_type (context, name)
5527      tree context, name;
5528 {
5529   tree fullname;
5530
5531   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
5532     {
5533       if (!(TYPE_LANG_SPECIFIC (name) 
5534             && (CLASSTYPE_IS_TEMPLATE (name) 
5535                 || CLASSTYPE_USE_TEMPLATE (name))))
5536         name = TYPE_IDENTIFIER (name);
5537       else
5538         /* Create a TEMPLATE_ID_EXPR for the type.  */
5539         name = build_nt (TEMPLATE_ID_EXPR,
5540                          CLASSTYPE_TI_TEMPLATE (name),
5541                          CLASSTYPE_TI_ARGS (name));
5542     }
5543   else if (TREE_CODE (name) == TYPE_DECL)
5544     name = DECL_NAME (name);
5545
5546   fullname = name;
5547
5548   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5549     {
5550       name = TREE_OPERAND (name, 0);
5551       if (TREE_CODE (name) == TEMPLATE_DECL)
5552         name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5553     }
5554   if (TREE_CODE (name) != IDENTIFIER_NODE)
5555     my_friendly_abort (2000);
5556
5557   if (TREE_CODE (context) == NAMESPACE_DECL)
5558     {
5559       /* We can get here from typename_sub0 in the explicit_template_type
5560          expansion.  Just fail.  */
5561       cp_error ("no class template named `%#T' in `%#T'",
5562                 name, context);
5563       return error_mark_node;
5564     }
5565
5566   if (! uses_template_parms (context)
5567       || currently_open_class (context))
5568     {
5569       if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5570         {
5571           tree tmpl = NULL_TREE;
5572           if (IS_AGGR_TYPE (context))
5573             tmpl = lookup_field (context, name, 0, 0);
5574           if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5575             {
5576               cp_error ("no class template named `%#T' in `%#T'",
5577                         name, context);
5578               return error_mark_node;
5579             }
5580
5581           return lookup_template_class (tmpl, 
5582                                         TREE_OPERAND (fullname, 1),
5583                                         NULL_TREE, context, 
5584                                         /*entering_scope=*/0);
5585         }
5586       else
5587         {
5588           tree t;
5589           
5590           if (!IS_AGGR_TYPE (context))
5591             {
5592               cp_error ("no type named `%#T' in `%#T'", name, context);
5593               return error_mark_node;
5594             }
5595
5596           t = lookup_field (context, name, 0, 1);
5597           if (t)
5598             return TREE_TYPE (t);
5599         }
5600     }
5601
5602   /* If the CONTEXT is not a template type, then either the field is
5603      there now or its never going to be.  */
5604   if (!uses_template_parms (context))
5605     {
5606       cp_error ("no type named `%#T' in `%#T'", name, context);
5607       return error_mark_node;
5608     }
5609     
5610   
5611   return build_typename_type (context, name, fullname,  NULL_TREE);
5612 }
5613
5614 /* Select the right _DECL from multiple choices. */
5615
5616 static tree
5617 select_decl (binding, flags)
5618      tree binding;
5619      int flags;
5620 {
5621   tree val;
5622   val = BINDING_VALUE (binding);
5623   if (LOOKUP_NAMESPACES_ONLY (flags))
5624     {
5625       /* We are not interested in types. */
5626       if (val && TREE_CODE (val) == NAMESPACE_DECL)
5627         return val;
5628       return NULL_TREE;
5629     }
5630   
5631   /* If we could have a type and
5632      we have nothing or we need a type and have none.  */
5633   if (BINDING_TYPE (binding)
5634       && (!val || ((flags & LOOKUP_PREFER_TYPES)
5635                    && TREE_CODE (val) != TYPE_DECL)))
5636     val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5637   /* Don't return non-types if we really prefer types. */
5638   else if (val && LOOKUP_TYPES_ONLY (flags)  && TREE_CODE (val) != TYPE_DECL
5639            && (TREE_CODE (val) != TEMPLATE_DECL
5640                || !DECL_CLASS_TEMPLATE_P (val)))
5641     val = NULL_TREE;
5642
5643   return val;
5644 }
5645
5646 /* Unscoped lookup of a global, iterate over namespaces, considering
5647    using namespace statements. */
5648
5649 static tree
5650 unqualified_namespace_lookup (name, flags)
5651      tree name;
5652      int flags;
5653 {
5654   struct tree_binding _binding;
5655   tree b = binding_init (&_binding);
5656   tree initial = current_decl_namespace();
5657   tree scope = initial;
5658   tree siter;
5659   struct binding_level *level;
5660   tree val = NULL_TREE;
5661
5662   while (!val)
5663     {
5664       val = binding_for_name (name, scope);
5665
5666       /* Initialize binding for this context. */
5667       BINDING_VALUE (b) = BINDING_VALUE (val);
5668       BINDING_TYPE (b) = BINDING_TYPE (val);
5669
5670       /* Add all _DECLs seen through local using-directives. */
5671       for (level = current_binding_level; 
5672            !level->namespace_p;
5673            level = level->level_chain)
5674         if (!lookup_using_namespace (name, b, level->using_directives,
5675                                      scope, flags))
5676           /* Give up because of error. */
5677           return error_mark_node;
5678
5679       /* Add all _DECLs seen through global using-directives. */
5680       /* XXX local and global using lists should work equally. */
5681       siter = initial;
5682       while (1)
5683         {
5684           if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter), 
5685                                        scope, flags))
5686             /* Give up because of error. */
5687             return error_mark_node;
5688           if (siter == scope) break;
5689           siter = CP_DECL_CONTEXT (siter);
5690         }
5691
5692       val = select_decl (b, flags);
5693       if (scope == global_namespace)
5694         break;
5695       scope = CP_DECL_CONTEXT (scope);
5696     }
5697   return val;
5698 }
5699
5700 /* Combine prefer_type and namespaces_only into flags.  */
5701
5702 static int
5703 lookup_flags (prefer_type, namespaces_only)
5704   int prefer_type, namespaces_only;
5705 {
5706   if (namespaces_only)
5707     return LOOKUP_PREFER_NAMESPACES;
5708   if (prefer_type > 1)
5709     return LOOKUP_PREFER_TYPES;
5710   if (prefer_type > 0)
5711     return LOOKUP_PREFER_BOTH;
5712   return 0;
5713 }
5714
5715 /* Given a lookup that returned VAL, use FLAGS to decide if we want to
5716    ignore it or not.  Subroutine of lookup_name_real.  */
5717
5718 static tree
5719 qualify_lookup (val, flags)
5720      tree val;
5721      int flags;
5722 {
5723   if (val == NULL_TREE)
5724     return val;
5725   if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5726     return val;
5727   if ((flags & LOOKUP_PREFER_TYPES)
5728       && (TREE_CODE (val) == TYPE_DECL
5729           || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5730               && DECL_CLASS_TEMPLATE_P (val))))
5731     return val;
5732   if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
5733     return NULL_TREE;
5734   return val;
5735 }
5736
5737 /* Any other BINDING overrides an implicit TYPENAME.  Warn about
5738    that.  */
5739
5740 static void
5741 warn_about_implicit_typename_lookup (typename, binding)
5742      tree typename;
5743      tree binding;
5744 {
5745   tree subtype = TREE_TYPE (TREE_TYPE (typename));
5746   tree name = DECL_NAME (typename);
5747
5748   if (! (TREE_CODE (binding) == TEMPLATE_DECL
5749          && CLASSTYPE_TEMPLATE_INFO (subtype)
5750          && CLASSTYPE_TI_TEMPLATE (subtype) == binding)
5751       && ! (TREE_CODE (binding) == TYPE_DECL
5752             && same_type_p (TREE_TYPE (binding), subtype)))
5753     {
5754       cp_warning ("lookup of `%D' finds `%#D'", 
5755                   name, binding);
5756       cp_warning ("  instead of `%D' from dependent base class",
5757                   typename);
5758       cp_warning ("  (use `typename %T::%D' if that's what you meant)",
5759                   constructor_name (current_class_type), name);
5760     }
5761 }
5762
5763 /* Look up NAME in the current binding level and its superiors in the
5764    namespace of variables, functions and typedefs.  Return a ..._DECL
5765    node of some kind representing its definition if there is only one
5766    such declaration, or return a TREE_LIST with all the overloaded
5767    definitions if there are many, or return 0 if it is undefined.
5768
5769    If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5770    If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
5771    If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
5772    Otherwise we prefer non-TYPE_DECLs.  
5773
5774    If NONCLASS is non-zero, we don't look for the NAME in class scope,
5775    using IDENTIFIER_CLASS_VALUE.  */
5776
5777 static tree
5778 lookup_name_real (name, prefer_type, nonclass, namespaces_only)
5779      tree name;
5780      int prefer_type, nonclass, namespaces_only;
5781 {
5782   tree t;
5783   tree val = NULL_TREE;
5784   int yylex = 0;
5785   tree from_obj = NULL_TREE;
5786   int flags;
5787   int val_is_implicit_typename = 0;
5788
5789   /* Hack: copy flag set by parser, if set. */
5790   if (only_namespace_names)
5791     namespaces_only = 1;
5792
5793   if (prefer_type == -2)
5794     {
5795       extern int looking_for_typename;
5796       tree type = NULL_TREE;
5797
5798       yylex = 1;
5799       prefer_type = looking_for_typename;
5800
5801       flags = lookup_flags (prefer_type, namespaces_only);
5802       /* If the next thing is '<', class templates are types. */
5803       if (looking_for_template)
5804         flags |= LOOKUP_TEMPLATES_EXPECTED;
5805
5806       /* std:: becomes :: for now.  */
5807       if (got_scope == std_node)
5808         got_scope = void_type_node;
5809
5810       if (got_scope)
5811         type = got_scope;
5812       else if (got_object != error_mark_node)
5813         type = got_object;
5814       
5815       if (type)
5816         {
5817           if (type == error_mark_node)
5818             return error_mark_node;
5819           if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5820             type = TREE_TYPE (type);
5821
5822           if (TYPE_P (type))
5823             type = complete_type (type);
5824
5825           if (TREE_CODE (type) == VOID_TYPE)
5826             type = global_namespace;
5827           if (TREE_CODE (type) == NAMESPACE_DECL)
5828             {
5829               struct tree_binding b;
5830               val = binding_init (&b);
5831               if (!qualified_lookup_using_namespace (name, type, val, flags))
5832                 return NULL_TREE;
5833               val = select_decl (val, flags);
5834             }
5835           else if (! IS_AGGR_TYPE (type)
5836                    || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5837                    || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
5838                    || TREE_CODE (type) == TYPENAME_TYPE)
5839             /* Someone else will give an error about this if needed.  */
5840             val = NULL_TREE;
5841           else if (type == current_class_type)
5842             val = IDENTIFIER_CLASS_VALUE (name);
5843           else
5844             val = lookup_member (type, name, 0, prefer_type);
5845         }
5846       else
5847         val = NULL_TREE;
5848
5849       if (got_scope)
5850         goto done;
5851       else if (got_object && val)
5852         from_obj = val;
5853     }
5854   else
5855     {
5856       flags = lookup_flags (prefer_type, namespaces_only);
5857       /* If we're not parsing, we need to complain. */
5858       flags |= LOOKUP_COMPLAIN;
5859     }
5860
5861   /* First, look in non-namespace scopes.  */
5862   for (t = IDENTIFIER_BINDING (name); t; t = TREE_CHAIN (t))
5863     {
5864       tree binding;
5865
5866       if (!LOCAL_BINDING_P (t) && nonclass)
5867         /* We're not looking for class-scoped bindings, so keep going.  */
5868         continue;
5869       
5870       /* If this is the kind of thing we're looking for, we're done.  */
5871       if (qualify_lookup (BINDING_VALUE (t), flags))
5872         binding = BINDING_VALUE (t);
5873       else if ((flags & LOOKUP_PREFER_TYPES) 
5874                && qualify_lookup (BINDING_TYPE (t), flags))
5875         binding = BINDING_TYPE (t);
5876       else
5877         binding = NULL_TREE;
5878
5879       if (binding
5880           && (!val || !(TREE_CODE (binding) == TYPE_DECL
5881                         && IMPLICIT_TYPENAME_P (TREE_TYPE (binding)))))
5882         {
5883           if (val_is_implicit_typename && !yylex)
5884             warn_about_implicit_typename_lookup (val, binding);
5885           val = binding;
5886           val_is_implicit_typename 
5887             = (TREE_CODE (val) == TYPE_DECL
5888                && IMPLICIT_TYPENAME_P (TREE_TYPE (val)));
5889           if (!val_is_implicit_typename)
5890             break;
5891         }
5892     }
5893
5894   /* Now lookup in namespace scopes.  */
5895   if (!val || val_is_implicit_typename)
5896     {
5897       t = unqualified_namespace_lookup (name, flags);
5898       if (t)
5899         {
5900           if (val_is_implicit_typename && !yylex)
5901             warn_about_implicit_typename_lookup (val, t);
5902           val = t;
5903         }
5904     }
5905
5906  done:
5907   if (val)
5908     {
5909       /* This should only warn about types used in qualified-ids.  */
5910       if (from_obj && from_obj != val)
5911         {
5912           if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
5913               && TREE_CODE (val) == TYPE_DECL
5914               && TREE_TYPE (from_obj) != TREE_TYPE (val))
5915             {
5916               cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
5917                           name, got_object, TREE_TYPE (from_obj));
5918               cp_pedwarn ("  does not match lookup in the current scope (`%#T')",
5919                           TREE_TYPE (val));
5920             }
5921
5922           /* We don't change val to from_obj if got_object depends on
5923              template parms because that breaks implicit typename for
5924              destructor calls.  */
5925           if (! uses_template_parms (got_object))
5926             val = from_obj;
5927         }
5928
5929       /* If we have a single function from a using decl, pull it out.  */
5930       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5931         val = OVL_FUNCTION (val);
5932     }
5933   else if (from_obj)
5934     val = from_obj;
5935
5936   return val;
5937 }
5938
5939 tree
5940 lookup_name_nonclass (name)
5941      tree name;
5942 {
5943   return lookup_name_real (name, 0, 1, 0);
5944 }
5945
5946 tree
5947 lookup_function_nonclass (name, args)
5948      tree name;
5949      tree args;
5950 {
5951   return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
5952 }
5953
5954 tree
5955 lookup_name_namespace_only (name)
5956      tree name;
5957 {
5958   /* type-or-namespace, nonclass, namespace_only */
5959   return lookup_name_real (name, 1, 1, 1);
5960 }
5961
5962 tree
5963 lookup_name (name, prefer_type)
5964      tree name;
5965      int prefer_type;
5966 {
5967   return lookup_name_real (name, prefer_type, 0, 0);
5968 }
5969
5970 /* Similar to `lookup_name' but look only in the innermost non-class
5971    binding level.  */
5972
5973 tree
5974 lookup_name_current_level (name)
5975      tree name;
5976 {
5977   struct binding_level *b;
5978   tree t = NULL_TREE;
5979
5980   b = current_binding_level;
5981   while (b->parm_flag == 2)
5982     b = b->level_chain;
5983
5984   if (b->namespace_p)
5985     {
5986       t =  IDENTIFIER_NAMESPACE_VALUE (name);
5987
5988       /* extern "C" function() */
5989       if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
5990         t = TREE_VALUE (t);
5991     }
5992   else if (IDENTIFIER_BINDING (name) 
5993            && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
5994     {
5995       while (1)
5996         {
5997           if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
5998             return IDENTIFIER_VALUE (name);
5999           
6000           if (b->keep == 2)
6001             b = b->level_chain;
6002           else
6003             break;
6004         }
6005     }
6006
6007   return t;
6008 }
6009
6010 /* Like lookup_name_current_level, but for types.  */
6011
6012 tree
6013 lookup_type_current_level (name)
6014      tree name;
6015 {
6016   register tree t = NULL_TREE;
6017
6018   my_friendly_assert (! current_binding_level->namespace_p, 980716);
6019
6020   if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
6021       && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
6022     {
6023       struct binding_level *b = current_binding_level;
6024       while (1)
6025         {
6026           if (purpose_member (name, b->type_shadowed))
6027             return REAL_IDENTIFIER_TYPE_VALUE (name);
6028           if (b->keep == 2)
6029             b = b->level_chain;
6030           else
6031             break;
6032         }
6033     }
6034
6035   return t;
6036 }
6037
6038 void
6039 begin_only_namespace_names ()
6040 {
6041   only_namespace_names = 1;
6042 }
6043
6044 void
6045 end_only_namespace_names ()
6046 {
6047   only_namespace_names = 0;
6048 }
6049 \f
6050 /* Arrange for the user to get a source line number, even when the
6051    compiler is going down in flames, so that she at least has a
6052    chance of working around problems in the compiler.  We used to
6053    call error(), but that let the segmentation fault continue
6054    through; now, it's much more passive by asking them to send the
6055    maintainers mail about the problem.  */
6056
6057 static void
6058 signal_catch (sig)
6059      int sig ATTRIBUTE_UNUSED;
6060 {
6061   signal (SIGSEGV, SIG_DFL);
6062 #ifdef SIGIOT
6063   signal (SIGIOT, SIG_DFL);
6064 #endif
6065 #ifdef SIGILL
6066   signal (SIGILL, SIG_DFL);
6067 #endif
6068 #ifdef SIGABRT
6069   signal (SIGABRT, SIG_DFL);
6070 #endif
6071 #ifdef SIGBUS
6072   signal (SIGBUS, SIG_DFL);
6073 #endif
6074   my_friendly_abort (0);
6075 }
6076
6077 #if 0
6078 /* Unused -- brendan 970107 */
6079 /* Array for holding types considered "built-in".  These types
6080    are output in the module in which `main' is defined.  */
6081 static tree *builtin_type_tdescs_arr;
6082 static int builtin_type_tdescs_len, builtin_type_tdescs_max;
6083 #endif
6084
6085 /* Push the declarations of builtin types into the namespace.
6086    RID_INDEX, if < RID_MAX is the index of the builtin type
6087    in the array RID_POINTERS.  NAME is the name used when looking
6088    up the builtin type.  TYPE is the _TYPE node for the builtin type.  */
6089
6090 static void
6091 record_builtin_type (rid_index, name, type)
6092      enum rid rid_index;
6093      const char *name;
6094      tree type;
6095 {
6096   tree rname = NULL_TREE, tname = NULL_TREE;
6097   tree tdecl = NULL_TREE;
6098
6099   if ((int) rid_index < (int) RID_MAX)
6100     rname = ridpointers[(int) rid_index];
6101   if (name)
6102     tname = get_identifier (name);
6103
6104   TYPE_BUILT_IN (type) = 1;
6105   
6106   if (tname)
6107     {
6108       tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
6109       set_identifier_type_value (tname, NULL_TREE);
6110       if ((int) rid_index < (int) RID_MAX)
6111         /* Built-in types live in the global namespace. */
6112         SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
6113     }
6114   if (rname != NULL_TREE)
6115     {
6116       if (tname != NULL_TREE)
6117         {
6118           set_identifier_type_value (rname, NULL_TREE);
6119           SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
6120         }
6121       else
6122         {
6123           tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
6124           set_identifier_type_value (rname, NULL_TREE);
6125         }
6126     }
6127 }
6128
6129 /* Record one of the standard Java types.
6130  * Declare it as having the given NAME.
6131  * If SIZE > 0, it is the size of one of the integral types;
6132  * otherwise it is the negative of the size of one of the other types.  */
6133
6134 static tree
6135 record_builtin_java_type (name, size)
6136      const char *name;
6137      int size;
6138 {
6139   tree type, decl;
6140   if (size > 0)
6141     type = make_signed_type (size);
6142   else if (size > -32)
6143     { /* "__java_char" or ""__java_boolean". */
6144       type = make_unsigned_type (-size);
6145       /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
6146     }
6147   else
6148     { /* "__java_float" or ""__java_double". */
6149       type = make_node (REAL_TYPE);
6150       TYPE_PRECISION (type) = - size;
6151       layout_type (type);
6152     }
6153   record_builtin_type (RID_MAX, name, type);
6154   decl = TYPE_NAME (type);
6155
6156   /* Suppress generate debug symbol entries for these types,
6157      since for normal C++ they are just clutter.
6158      However, push_lang_context undoes this if extern "Java" is seen. */
6159   DECL_IGNORED_P (decl) = 1;
6160
6161   TYPE_FOR_JAVA (type) = 1;
6162   return type;
6163 }
6164
6165 /* Push a type into the namespace so that the back-ends ignore it. */
6166
6167 static void
6168 record_unknown_type (type, name)
6169      tree type;
6170      const char *name;
6171 {
6172   tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
6173   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
6174   DECL_IGNORED_P (decl) = 1;
6175   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6176   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
6177   TYPE_ALIGN (type) = 1;
6178   TYPE_MODE (type) = TYPE_MODE (void_type_node);
6179
6180
6181 /* Push overloaded decl, in global scope, with one argument so it
6182    can be used as a callback from define_function.  */
6183
6184 static void
6185 push_overloaded_decl_1 (x)
6186      tree x;
6187 {
6188   push_overloaded_decl (x, PUSH_GLOBAL);
6189 }
6190
6191 #ifdef __GNUC__
6192 __inline
6193 #endif
6194 tree
6195 auto_function (name, type, code)
6196      tree name, type;
6197      enum built_in_function code;
6198 {
6199   return define_function
6200     (IDENTIFIER_POINTER (name), type, code, push_overloaded_decl_1,
6201      IDENTIFIER_POINTER (build_decl_overload (name, TYPE_ARG_TYPES (type),
6202                                               0)));
6203 }
6204
6205 /* Create the predefined scalar types of C,
6206    and some nodes representing standard constants (0, 1, (void *)0).
6207    Initialize the global binding level.
6208    Make definitions for built-in primitive functions.  */
6209
6210 void
6211 init_decl_processing ()
6212 {
6213   register tree endlink, int_endlink, double_endlink, unsigned_endlink;
6214   tree fields[20];
6215   /* Data type of memcpy.  */
6216   tree memcpy_ftype, strlen_ftype;
6217   int wchar_type_size;
6218   tree temp;
6219   tree array_domain_type;
6220   tree vb_off_identifier = NULL_TREE;
6221   /* Function type `char *(char *, char *)' and similar ones */
6222   tree string_ftype_ptr_ptr, int_ftype_string_string;
6223   tree sizetype_endlink;
6224   tree ptr_ftype, ptr_ftype_unsigned, ptr_ftype_sizetype;
6225   tree void_ftype, void_ftype_int, void_ftype_ptr;
6226
6227   /* Have to make these distinct before we try using them.  */
6228   lang_name_cplusplus = get_identifier ("C++");
6229   lang_name_c = get_identifier ("C");
6230   lang_name_java = get_identifier ("Java");
6231
6232   /* Enter the global namespace. */
6233   my_friendly_assert (global_namespace == NULL_TREE, 375);
6234   my_friendly_assert (current_lang_name == NULL_TREE, 375);
6235   current_lang_name = lang_name_cplusplus;
6236   push_namespace (get_identifier ("::"));
6237   global_namespace = current_namespace;
6238   current_lang_name = NULL_TREE;
6239
6240   if (flag_strict_prototype == 2)
6241     flag_strict_prototype = pedantic;
6242   if (! flag_permissive && ! pedantic)
6243     flag_pedantic_errors = 1;
6244
6245   strict_prototypes_lang_c = flag_strict_prototype;
6246
6247   /* Initially, C.  */
6248   current_lang_name = lang_name_c;
6249
6250   current_function_decl = NULL_TREE;
6251   named_labels = NULL_TREE;
6252   named_label_uses = NULL;
6253   current_binding_level = NULL_BINDING_LEVEL;
6254   free_binding_level = NULL_BINDING_LEVEL;
6255
6256   /* Because most segmentation signals can be traced back into user
6257      code, catch them and at least give the user a chance of working
6258      around compiler bugs.  */
6259   signal (SIGSEGV, signal_catch);
6260
6261   /* We will also catch aborts in the back-end through signal_catch and
6262      give the user a chance to see where the error might be, and to defeat
6263      aborts in the back-end when there have been errors previously in their
6264      code.  */
6265 #ifdef SIGIOT
6266   signal (SIGIOT, signal_catch);
6267 #endif
6268 #ifdef SIGILL
6269   signal (SIGILL, signal_catch);
6270 #endif
6271 #ifdef SIGABRT
6272   signal (SIGABRT, signal_catch);
6273 #endif
6274 #ifdef SIGBUS
6275   signal (SIGBUS, signal_catch);
6276 #endif
6277
6278   gcc_obstack_init (&decl_obstack);
6279
6280   /* Must lay these out before anything else gets laid out.  */
6281   error_mark_node = make_node (ERROR_MARK);
6282   TREE_PERMANENT (error_mark_node) = 1;
6283   TREE_TYPE (error_mark_node) = error_mark_node;
6284   error_mark_list = build_tree_list (error_mark_node, error_mark_node);
6285   TREE_TYPE (error_mark_list) = error_mark_node;
6286
6287   /* Make the binding_level structure for global names.  */
6288   pushlevel (0);
6289   global_binding_level = current_binding_level;
6290   /* The global level is the namespace level of ::.  */
6291   NAMESPACE_LEVEL (global_namespace) = global_binding_level;
6292   declare_namespace_level ();
6293
6294   this_identifier = get_identifier (THIS_NAME);
6295   in_charge_identifier = get_identifier (IN_CHARGE_NAME);
6296   ctor_identifier = get_identifier (CTOR_NAME);
6297   dtor_identifier = get_identifier (DTOR_NAME);
6298   pfn_identifier = get_identifier (VTABLE_PFN_NAME);
6299   index_identifier = get_identifier (VTABLE_INDEX_NAME);
6300   delta_identifier = get_identifier (VTABLE_DELTA_NAME);
6301   delta2_identifier = get_identifier (VTABLE_DELTA2_NAME);
6302   pfn_or_delta2_identifier = get_identifier ("__pfn_or_delta2");
6303   if (flag_handle_signatures)
6304     {
6305       tag_identifier = get_identifier (SIGTABLE_TAG_NAME);
6306       vb_off_identifier = get_identifier (SIGTABLE_VB_OFF_NAME);
6307       vt_off_identifier = get_identifier (SIGTABLE_VT_OFF_NAME);
6308     }
6309
6310   /* Define `int' and `char' first so that dbx will output them first.  */
6311
6312   integer_type_node = make_signed_type (INT_TYPE_SIZE);
6313   record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
6314
6315   /* Define `char', which is like either `signed char' or `unsigned char'
6316      but not the same as either.  */
6317
6318   char_type_node
6319     = (flag_signed_char
6320        ? make_signed_type (CHAR_TYPE_SIZE)
6321        : make_unsigned_type (CHAR_TYPE_SIZE));
6322   record_builtin_type (RID_CHAR, "char", char_type_node);
6323
6324   /* `signed' is the same as `int' */
6325   record_builtin_type (RID_SIGNED, NULL_PTR, integer_type_node);
6326   
6327   long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
6328   record_builtin_type (RID_LONG, "long int", long_integer_type_node);
6329
6330   unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
6331   record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
6332
6333   long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
6334   record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
6335   record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
6336
6337   long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
6338   record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
6339
6340   long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
6341   record_builtin_type (RID_MAX, "long long unsigned int",
6342                        long_long_unsigned_type_node);
6343   record_builtin_type (RID_MAX, "long long unsigned",
6344                        long_long_unsigned_type_node);
6345
6346   short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
6347   record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
6348   short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
6349   record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
6350   record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
6351
6352   /* `unsigned long' is the standard type for sizeof.
6353      Note that stddef.h uses `unsigned long',
6354      and this must agree, even if long and int are the same size.  */
6355   set_sizetype
6356     (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
6357
6358   ptrdiff_type_node
6359     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
6360
6361   /* Define both `signed char' and `unsigned char'.  */
6362   signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
6363   record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
6364   unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
6365   record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
6366
6367   /* Create the widest literal types. */
6368   widest_integer_literal_type_node = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
6369   pushdecl (build_decl (TYPE_DECL, NULL_TREE, 
6370                         widest_integer_literal_type_node));
6371
6372   widest_unsigned_literal_type_node = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
6373   pushdecl (build_decl (TYPE_DECL, NULL_TREE, 
6374                         widest_unsigned_literal_type_node));
6375
6376   /* These are types that type_for_size and type_for_mode use.  */
6377   intQI_type_node = make_signed_type (GET_MODE_BITSIZE (QImode));
6378   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
6379   intHI_type_node = make_signed_type (GET_MODE_BITSIZE (HImode));
6380   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
6381   intSI_type_node = make_signed_type (GET_MODE_BITSIZE (SImode));
6382   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
6383   intDI_type_node = make_signed_type (GET_MODE_BITSIZE (DImode));
6384   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
6385 #if HOST_BITS_PER_WIDE_INT >= 64
6386   intTI_type_node = make_signed_type (GET_MODE_BITSIZE (TImode));
6387   pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
6388 #endif
6389   unsigned_intQI_type_node = make_unsigned_type (GET_MODE_BITSIZE (QImode));
6390   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
6391   unsigned_intHI_type_node = make_unsigned_type (GET_MODE_BITSIZE (HImode));
6392   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
6393   unsigned_intSI_type_node = make_unsigned_type (GET_MODE_BITSIZE (SImode));
6394   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
6395   unsigned_intDI_type_node = make_unsigned_type (GET_MODE_BITSIZE (DImode));
6396   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
6397 #if HOST_BITS_PER_WIDE_INT >= 64
6398   unsigned_intTI_type_node = make_unsigned_type (GET_MODE_BITSIZE (TImode));
6399   pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
6400 #endif
6401
6402   float_type_node = make_node (REAL_TYPE);
6403   TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
6404   record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
6405   layout_type (float_type_node);
6406
6407   double_type_node = make_node (REAL_TYPE);
6408   if (flag_short_double)
6409     TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
6410   else
6411     TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
6412   record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
6413   layout_type (double_type_node);
6414
6415   long_double_type_node = make_node (REAL_TYPE);
6416   TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
6417   record_builtin_type (RID_MAX, "long double", long_double_type_node);
6418   layout_type (long_double_type_node);
6419
6420   complex_integer_type_node = make_node (COMPLEX_TYPE);
6421   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
6422                         complex_integer_type_node));
6423   TREE_TYPE (complex_integer_type_node) = integer_type_node;
6424   layout_type (complex_integer_type_node);
6425
6426   complex_float_type_node = make_node (COMPLEX_TYPE);
6427   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
6428                         complex_float_type_node));
6429   TREE_TYPE (complex_float_type_node) = float_type_node;
6430   layout_type (complex_float_type_node);
6431
6432   complex_double_type_node = make_node (COMPLEX_TYPE);
6433   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
6434                         complex_double_type_node));
6435   TREE_TYPE (complex_double_type_node) = double_type_node;
6436   layout_type (complex_double_type_node);
6437
6438   complex_long_double_type_node = make_node (COMPLEX_TYPE);
6439   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
6440                         complex_long_double_type_node));
6441   TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
6442   layout_type (complex_long_double_type_node);
6443
6444   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6445   java_short_type_node = record_builtin_java_type ("__java_short", 16);
6446   java_int_type_node = record_builtin_java_type ("__java_int", 32);
6447   java_long_type_node = record_builtin_java_type ("__java_long", 64);
6448   java_float_type_node = record_builtin_java_type ("__java_float", -32);
6449   java_double_type_node = record_builtin_java_type ("__java_double", -64);
6450   java_char_type_node = record_builtin_java_type ("__java_char", -16);
6451   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
6452
6453   integer_zero_node = build_int_2 (0, 0);
6454   TREE_TYPE (integer_zero_node) = integer_type_node;
6455   integer_one_node = build_int_2 (1, 0);
6456   TREE_TYPE (integer_one_node) = integer_type_node;
6457   integer_two_node = build_int_2 (2, 0);
6458   TREE_TYPE (integer_two_node) = integer_type_node;
6459   integer_three_node = build_int_2 (3, 0);
6460   TREE_TYPE (integer_three_node) = integer_type_node;
6461
6462   boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6463   TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
6464   TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6465   TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6466   TYPE_PRECISION (boolean_type_node) = 1;
6467   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6468   boolean_false_node = build_int_2 (0, 0);
6469   TREE_TYPE (boolean_false_node) = boolean_type_node;
6470   boolean_true_node = build_int_2 (1, 0);
6471   TREE_TYPE (boolean_true_node) = boolean_type_node;
6472
6473   /* These are needed by stor-layout.c.  */
6474   size_zero_node = size_int (0);
6475   size_one_node = size_int (1);
6476
6477   signed_size_zero_node = build_int_2 (0, 0);
6478   TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6479
6480   void_type_node = make_node (VOID_TYPE);
6481   record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
6482   layout_type (void_type_node); /* Uses integer_zero_node.  */
6483   void_list_node = build_tree_list (NULL_TREE, void_type_node);
6484   TREE_PARMLIST (void_list_node) = 1;
6485
6486   null_pointer_node = build_int_2 (0, 0);
6487   TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
6488   layout_type (TREE_TYPE (null_pointer_node));
6489      
6490   /* Used for expressions that do nothing, but are not errors.  */
6491   void_zero_node = build_int_2 (0, 0);
6492   TREE_TYPE (void_zero_node) = void_type_node;
6493
6494   string_type_node = build_pointer_type (char_type_node);
6495   const_string_type_node
6496     = build_pointer_type (build_qualified_type (char_type_node, 
6497                                                 TYPE_QUAL_CONST));
6498 #if 0
6499   record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6500 #endif
6501
6502   /* Make a type to be the domain of a few array types
6503      whose domains don't really matter.
6504      200 is small enough that it always fits in size_t
6505      and large enough that it can hold most function names for the
6506      initializations of __FUNCTION__ and __PRETTY_FUNCTION__.  */
6507   array_domain_type = build_index_type (build_int_2 (200, 0));
6508
6509   /* Make a type for arrays of characters.
6510      With luck nothing will ever really depend on the length of this
6511      array type.  */
6512   char_array_type_node
6513     = build_array_type (char_type_node, array_domain_type);
6514   /* Likewise for arrays of ints.  */
6515   int_array_type_node
6516     = build_array_type (integer_type_node, array_domain_type);
6517
6518   /* This is just some anonymous class type.  Nobody should ever
6519      need to look inside this envelope.  */
6520   class_star_type_node = build_pointer_type (make_lang_type (RECORD_TYPE));
6521
6522   default_function_type
6523     = build_function_type (integer_type_node, NULL_TREE);
6524
6525   ptr_type_node = build_pointer_type (void_type_node);
6526   const_ptr_type_node
6527     = build_pointer_type (build_qualified_type (void_type_node,
6528                                                 TYPE_QUAL_CONST)); 
6529 #if 0
6530   record_builtin_type (RID_MAX, NULL_PTR, ptr_type_node);
6531 #endif
6532   endlink = void_list_node;
6533   int_endlink = tree_cons (NULL_TREE, integer_type_node, endlink);
6534   double_endlink = tree_cons (NULL_TREE, double_type_node, endlink);
6535   unsigned_endlink = tree_cons (NULL_TREE, unsigned_type_node, endlink);
6536
6537   ptr_ftype = build_function_type (ptr_type_node, NULL_TREE);
6538   ptr_ftype_unsigned = build_function_type (ptr_type_node, unsigned_endlink);
6539   sizetype_endlink = tree_cons (NULL_TREE, sizetype, endlink);
6540   /* We realloc here because sizetype could be int or unsigned.  S'ok.  */
6541   ptr_ftype_sizetype = build_function_type (ptr_type_node, sizetype_endlink);
6542
6543   void_ftype = build_function_type (void_type_node, endlink);
6544   void_ftype_int = build_function_type (void_type_node, int_endlink);
6545   void_ftype_ptr
6546     = build_function_type (void_type_node,
6547                            tree_cons (NULL_TREE, ptr_type_node, endlink));
6548   void_ftype_ptr
6549     = build_exception_variant (void_ftype_ptr,
6550                                tree_cons (NULL_TREE, NULL_TREE, NULL_TREE));
6551
6552   float_ftype_float
6553     = build_function_type (float_type_node,
6554                            tree_cons (NULL_TREE, float_type_node, endlink));
6555
6556   double_ftype_double
6557     = build_function_type (double_type_node, double_endlink);
6558
6559   ldouble_ftype_ldouble
6560     = build_function_type (long_double_type_node,
6561                            tree_cons (NULL_TREE, long_double_type_node,
6562                                       endlink));
6563
6564   double_ftype_double_double
6565     = build_function_type (double_type_node,
6566                            tree_cons (NULL_TREE, double_type_node,
6567                                       double_endlink));
6568
6569   int_ftype_int
6570     = build_function_type (integer_type_node, int_endlink);
6571
6572   long_ftype_long
6573     = build_function_type (long_integer_type_node,
6574                            tree_cons (NULL_TREE, long_integer_type_node,
6575                                       endlink));
6576
6577   int_ftype_cptr_cptr_sizet
6578     = build_function_type (integer_type_node,
6579                            tree_cons (NULL_TREE, const_ptr_type_node,
6580                                       tree_cons (NULL_TREE, const_ptr_type_node,
6581                                                  tree_cons (NULL_TREE,
6582                                                             sizetype,
6583                                                             endlink))));
6584
6585   string_ftype_ptr_ptr          /* strcpy prototype */
6586     = build_function_type (string_type_node,
6587                            tree_cons (NULL_TREE, string_type_node,
6588                                       tree_cons (NULL_TREE,
6589                                                  const_string_type_node,
6590                                                  endlink)));
6591
6592   int_ftype_string_string       /* strcmp prototype */
6593     = build_function_type (integer_type_node,
6594                            tree_cons (NULL_TREE, const_string_type_node,
6595                                       tree_cons (NULL_TREE,
6596                                                  const_string_type_node,
6597                                                  endlink)));
6598
6599   strlen_ftype          /* strlen prototype */
6600     = build_function_type (sizetype,
6601                            tree_cons (NULL_TREE, const_string_type_node,
6602                                       endlink));
6603
6604   memcpy_ftype  /* memcpy prototype */
6605     = build_function_type (ptr_type_node,
6606                            tree_cons (NULL_TREE, ptr_type_node,
6607                                       tree_cons (NULL_TREE, const_ptr_type_node,
6608                                                  sizetype_endlink)));
6609
6610   if (flag_huge_objects)
6611     delta_type_node = long_integer_type_node;
6612   else
6613     delta_type_node = short_integer_type_node;
6614
6615   builtin_function ("__builtin_constant_p", default_function_type,
6616                     BUILT_IN_CONSTANT_P, NULL_PTR);
6617
6618   builtin_return_address_fndecl
6619     = builtin_function ("__builtin_return_address", ptr_ftype_unsigned,
6620                         BUILT_IN_RETURN_ADDRESS, NULL_PTR);
6621
6622   builtin_function ("__builtin_frame_address", ptr_ftype_unsigned,
6623                     BUILT_IN_FRAME_ADDRESS, NULL_PTR);
6624
6625   builtin_function ("__builtin_alloca", ptr_ftype_sizetype,
6626                     BUILT_IN_ALLOCA, "alloca");
6627   builtin_function ("__builtin_ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
6628   /* Define alloca, ffs as builtins.
6629      Declare _exit just to mark it as volatile.  */
6630   if (! flag_no_builtin && !flag_no_nonansi_builtin)
6631     {
6632       temp = builtin_function ("alloca", ptr_ftype_sizetype,
6633                                BUILT_IN_ALLOCA, NULL_PTR);
6634       /* Suppress error if redefined as a non-function.  */
6635       DECL_BUILT_IN_NONANSI (temp) = 1;
6636       temp = builtin_function ("ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
6637       /* Suppress error if redefined as a non-function.  */
6638       DECL_BUILT_IN_NONANSI (temp) = 1;
6639       temp = builtin_function ("_exit", void_ftype_int,
6640                                NOT_BUILT_IN, NULL_PTR);
6641       TREE_THIS_VOLATILE (temp) = 1;
6642       TREE_SIDE_EFFECTS (temp) = 1;
6643       /* Suppress error if redefined as a non-function.  */
6644       DECL_BUILT_IN_NONANSI (temp) = 1;
6645     }
6646
6647   builtin_function ("__builtin_abs", int_ftype_int, BUILT_IN_ABS, NULL_PTR);
6648   builtin_function ("__builtin_fabsf", float_ftype_float, BUILT_IN_FABS,
6649                     NULL_PTR);
6650   builtin_function ("__builtin_fabs", double_ftype_double, BUILT_IN_FABS,
6651                     NULL_PTR);
6652   builtin_function ("__builtin_fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
6653                     NULL_PTR);
6654   builtin_function ("__builtin_labs", long_ftype_long,
6655                     BUILT_IN_LABS, NULL_PTR);
6656   builtin_function ("__builtin_saveregs", ptr_ftype,
6657                     BUILT_IN_SAVEREGS, NULL_PTR);
6658   builtin_function ("__builtin_classify_type", default_function_type,
6659                     BUILT_IN_CLASSIFY_TYPE, NULL_PTR);
6660   builtin_function ("__builtin_next_arg", ptr_ftype,
6661                     BUILT_IN_NEXT_ARG, NULL_PTR);
6662   builtin_function ("__builtin_args_info", int_ftype_int,
6663                     BUILT_IN_ARGS_INFO, NULL_PTR);
6664   builtin_function ("__builtin_setjmp",
6665                     build_function_type (integer_type_node,
6666                                          tree_cons (NULL_TREE, ptr_type_node,
6667                                                     endlink)),
6668                     BUILT_IN_SETJMP, NULL_PTR);
6669   builtin_function ("__builtin_longjmp",
6670                     build_function_type (integer_type_node,
6671                                          tree_cons (NULL_TREE, ptr_type_node,
6672                                                     tree_cons (NULL_TREE,
6673                                                                integer_type_node,
6674                                                                endlink))),
6675                     BUILT_IN_LONGJMP, NULL_PTR);
6676
6677   /* Untyped call and return.  */
6678   builtin_function ("__builtin_apply_args", ptr_ftype,
6679                     BUILT_IN_APPLY_ARGS, NULL_PTR);
6680
6681   temp = tree_cons (NULL_TREE,
6682                     build_pointer_type (build_function_type (void_type_node,
6683                                                              NULL_TREE)),
6684                     tree_cons (NULL_TREE, ptr_ftype_sizetype, NULL_TREE));
6685   builtin_function ("__builtin_apply",
6686                     build_function_type (ptr_type_node, temp),
6687                     BUILT_IN_APPLY, NULL_PTR);
6688   builtin_function ("__builtin_return", void_ftype_ptr,
6689                     BUILT_IN_RETURN, NULL_PTR);
6690
6691   /* Currently under experimentation.  */
6692   builtin_function ("__builtin_memcpy", memcpy_ftype,
6693                     BUILT_IN_MEMCPY, "memcpy");
6694   builtin_function ("__builtin_memcmp", int_ftype_cptr_cptr_sizet,
6695                     BUILT_IN_MEMCMP, "memcmp");
6696   builtin_function ("__builtin_strcmp", int_ftype_string_string,
6697                     BUILT_IN_STRCMP, "strcmp");
6698   builtin_function ("__builtin_strcpy", string_ftype_ptr_ptr,
6699                     BUILT_IN_STRCPY, "strcpy");
6700   builtin_function ("__builtin_strlen", strlen_ftype,
6701                     BUILT_IN_STRLEN, "strlen");
6702   builtin_function ("__builtin_sqrtf", float_ftype_float, 
6703                     BUILT_IN_FSQRT, "sqrtf");
6704   builtin_function ("__builtin_fsqrt", double_ftype_double,
6705                     BUILT_IN_FSQRT, NULL_PTR);
6706   builtin_function ("__builtin_sqrtl", ldouble_ftype_ldouble, 
6707                     BUILT_IN_FSQRT, "sqrtl");
6708   builtin_function ("__builtin_sinf", float_ftype_float, 
6709                     BUILT_IN_SIN, "sinf");
6710   builtin_function ("__builtin_sin", double_ftype_double, 
6711                     BUILT_IN_SIN, "sin");
6712   builtin_function ("__builtin_sinl", ldouble_ftype_ldouble, 
6713                     BUILT_IN_SIN, "sinl");
6714   builtin_function ("__builtin_cosf", float_ftype_float, 
6715                     BUILT_IN_COS, "cosf");
6716   builtin_function ("__builtin_cos", double_ftype_double, 
6717                     BUILT_IN_COS, "cos");
6718   builtin_function ("__builtin_cosl", ldouble_ftype_ldouble, 
6719                     BUILT_IN_COS, "cosl");
6720
6721   if (!flag_no_builtin)
6722     {
6723       builtin_function ("abs", int_ftype_int, BUILT_IN_ABS, NULL_PTR);
6724       builtin_function ("fabs", double_ftype_double, BUILT_IN_FABS, NULL_PTR);
6725       builtin_function ("labs", long_ftype_long, BUILT_IN_LABS, NULL_PTR);
6726       builtin_function ("fabsf", float_ftype_float, BUILT_IN_FABS, NULL_PTR);
6727       builtin_function ("fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
6728                         NULL_PTR);
6729       builtin_function ("memcpy", memcpy_ftype, BUILT_IN_MEMCPY, NULL_PTR);
6730       builtin_function ("memcmp", int_ftype_cptr_cptr_sizet, BUILT_IN_MEMCMP,
6731                         NULL_PTR);
6732       builtin_function ("strcmp", int_ftype_string_string, BUILT_IN_STRCMP,
6733                         NULL_PTR);
6734       builtin_function ("strcpy", string_ftype_ptr_ptr, BUILT_IN_STRCPY,
6735                         NULL_PTR);
6736       builtin_function ("strlen", strlen_ftype, BUILT_IN_STRLEN, NULL_PTR);
6737       builtin_function ("sqrtf", float_ftype_float, BUILT_IN_FSQRT, NULL_PTR);
6738       builtin_function ("sqrt", double_ftype_double, BUILT_IN_FSQRT, NULL_PTR);
6739       builtin_function ("sqrtl", ldouble_ftype_ldouble, BUILT_IN_FSQRT,
6740                         NULL_PTR);
6741       builtin_function ("sinf", float_ftype_float, BUILT_IN_SIN, NULL_PTR);
6742       builtin_function ("sin", double_ftype_double, BUILT_IN_SIN, NULL_PTR);
6743       builtin_function ("sinl", ldouble_ftype_ldouble, BUILT_IN_SIN, NULL_PTR);
6744       builtin_function ("cosf", float_ftype_float, BUILT_IN_COS, NULL_PTR);
6745       builtin_function ("cos", double_ftype_double, BUILT_IN_COS, NULL_PTR);
6746       builtin_function ("cosl", ldouble_ftype_ldouble, BUILT_IN_COS, NULL_PTR);
6747
6748       /* Declare these functions volatile
6749          to avoid spurious "control drops through" warnings.  */
6750       temp = builtin_function ("abort", void_ftype,
6751                                NOT_BUILT_IN, NULL_PTR);
6752       TREE_THIS_VOLATILE (temp) = 1;
6753       TREE_SIDE_EFFECTS (temp) = 1;
6754       /* Well, these are actually ANSI, but we can't set DECL_BUILT_IN on
6755          them...  */
6756       DECL_BUILT_IN_NONANSI (temp) = 1;
6757       temp = builtin_function ("exit", void_ftype_int,
6758                                NOT_BUILT_IN, NULL_PTR);
6759       TREE_THIS_VOLATILE (temp) = 1;
6760       TREE_SIDE_EFFECTS (temp) = 1;
6761       DECL_BUILT_IN_NONANSI (temp) = 1;
6762     }
6763
6764 #if 0
6765   /* Support for these has not been written in either expand_builtin
6766      or build_function_call.  */
6767   builtin_function ("__builtin_div", default_ftype, BUILT_IN_DIV, NULL_PTR);
6768   builtin_function ("__builtin_ldiv", default_ftype, BUILT_IN_LDIV, NULL_PTR);
6769   builtin_function ("__builtin_ffloor", double_ftype_double, BUILT_IN_FFLOOR,
6770                     NULL_PTR);
6771   builtin_function ("__builtin_fceil", double_ftype_double, BUILT_IN_FCEIL,
6772                     NULL_PTR);
6773   builtin_function ("__builtin_fmod", double_ftype_double_double,
6774                     BUILT_IN_FMOD, NULL_PTR);
6775   builtin_function ("__builtin_frem", double_ftype_double_double,
6776                     BUILT_IN_FREM, NULL_PTR);
6777   builtin_function ("__builtin_memset", ptr_ftype_ptr_int_int,
6778                     BUILT_IN_MEMSET, NULL_PTR);
6779   builtin_function ("__builtin_getexp", double_ftype_double, BUILT_IN_GETEXP,
6780                     NULL_PTR);
6781   builtin_function ("__builtin_getman", double_ftype_double, BUILT_IN_GETMAN,
6782                     NULL_PTR);
6783 #endif
6784
6785   /* C++ extensions */
6786
6787   unknown_type_node = make_node (UNKNOWN_TYPE);
6788   record_unknown_type (unknown_type_node, "unknown type");
6789
6790   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
6791   TREE_TYPE (unknown_type_node) = unknown_type_node;
6792
6793   TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
6794
6795   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6796      result.  */
6797   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6798   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6799
6800   /* This is for handling opaque types in signatures.  */
6801   opaque_type_node = copy_node (ptr_type_node);
6802   TYPE_MAIN_VARIANT (opaque_type_node) = opaque_type_node;
6803   record_builtin_type (RID_MAX, 0, opaque_type_node);
6804
6805   /* This is special for C++ so functions can be overloaded.  */
6806   wchar_type_node
6807     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (WCHAR_TYPE)));
6808   wchar_type_size = TYPE_PRECISION (wchar_type_node);
6809   signed_wchar_type_node = make_signed_type (wchar_type_size);
6810   unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
6811   wchar_type_node
6812     = TREE_UNSIGNED (wchar_type_node)
6813       ? unsigned_wchar_type_node
6814       : signed_wchar_type_node;
6815   record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
6816
6817   /* Artificial declaration of wchar_t -- can be bashed */
6818   wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
6819                                 wchar_type_node);
6820   pushdecl (wchar_decl_node);
6821
6822   /* This is for wide string constants.  */
6823   wchar_array_type_node
6824     = build_array_type (wchar_type_node, array_domain_type);
6825
6826   if (flag_vtable_thunks)
6827     {
6828       /* Make sure we get a unique function type, so we can give
6829          its pointer type a name.  (This wins for gdb.) */
6830       tree vfunc_type = make_node (FUNCTION_TYPE);
6831       TREE_TYPE (vfunc_type) = integer_type_node;
6832       TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6833       layout_type (vfunc_type);
6834
6835       vtable_entry_type = build_pointer_type (vfunc_type);
6836     }
6837   else
6838     {
6839       vtable_entry_type = make_lang_type (RECORD_TYPE);
6840       fields[0] = build_lang_field_decl (FIELD_DECL, delta_identifier,
6841                                          delta_type_node);
6842       fields[1] = build_lang_field_decl (FIELD_DECL, index_identifier,
6843                                          delta_type_node);
6844       fields[2] = build_lang_field_decl (FIELD_DECL, pfn_identifier,
6845                                          ptr_type_node);
6846       finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6847                            double_type_node);
6848
6849       /* Make this part of an invisible union.  */
6850       fields[3] = copy_node (fields[2]);
6851       TREE_TYPE (fields[3]) = delta_type_node;
6852       DECL_NAME (fields[3]) = delta2_identifier;
6853       DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6854       DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
6855       TREE_UNSIGNED (fields[3]) = 0;
6856       TREE_CHAIN (fields[2]) = fields[3];
6857       vtable_entry_type = build_qualified_type (vtable_entry_type,
6858                                                 TYPE_QUAL_CONST);
6859     }
6860   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
6861
6862   vtbl_type_node
6863     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
6864   layout_type (vtbl_type_node);
6865   vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
6866   record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
6867   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6868   layout_type (vtbl_ptr_type_node);
6869   record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
6870
6871   /* Simplify life by making a "sigtable_entry_type".  Give its
6872      fields names so that the debugger can use them.  */
6873
6874   if (flag_handle_signatures)
6875     {
6876       sigtable_entry_type = make_lang_type (RECORD_TYPE);
6877       fields[0] = build_lang_field_decl (FIELD_DECL, tag_identifier,
6878                                          delta_type_node);
6879       fields[1] = build_lang_field_decl (FIELD_DECL, vb_off_identifier,
6880                                          delta_type_node);
6881       fields[2] = build_lang_field_decl (FIELD_DECL, delta_identifier,
6882                                          delta_type_node);
6883       fields[3] = build_lang_field_decl (FIELD_DECL, index_identifier,
6884                                          delta_type_node);
6885       fields[4] = build_lang_field_decl (FIELD_DECL, pfn_identifier,
6886                                          ptr_type_node);
6887
6888       /* Set the alignment to the max of the alignment of ptr_type_node and
6889          delta_type_node.  Double alignment wastes a word on the Sparc.  */
6890       finish_builtin_type (sigtable_entry_type, SIGTABLE_PTR_TYPE, fields, 4,
6891                            (TYPE_ALIGN (ptr_type_node) > TYPE_ALIGN (delta_type_node))
6892                            ? ptr_type_node
6893                            : delta_type_node);
6894
6895       /* Make this part of an invisible union.  */
6896       fields[5] = copy_node (fields[4]);
6897       TREE_TYPE (fields[5]) = delta_type_node;
6898       DECL_NAME (fields[5]) = vt_off_identifier;
6899       DECL_MODE (fields[5]) = TYPE_MODE (delta_type_node);
6900       DECL_SIZE (fields[5]) = TYPE_SIZE (delta_type_node);
6901       TREE_UNSIGNED (fields[5]) = 0;
6902       TREE_CHAIN (fields[4]) = fields[5];
6903
6904       sigtable_entry_type = build_qualified_type (sigtable_entry_type, 
6905                                                   TYPE_QUAL_CONST);
6906       record_builtin_type (RID_MAX, SIGTABLE_PTR_TYPE, sigtable_entry_type);
6907     }
6908
6909   std_node = build_decl (NAMESPACE_DECL, 
6910                          get_identifier (flag_honor_std ? "fake std":"std"),
6911                          void_type_node);
6912   pushdecl (std_node);
6913
6914   global_type_node = make_node (LANG_TYPE);
6915   record_unknown_type (global_type_node, "global type");
6916
6917   /* Now, C++.  */
6918   current_lang_name = lang_name_cplusplus;
6919
6920   {
6921     tree bad_alloc_type_node, newtype, deltype;
6922     if (flag_honor_std)
6923       push_namespace (get_identifier ("std"));
6924     bad_alloc_type_node = xref_tag
6925       (class_type_node, get_identifier ("bad_alloc"), 1);
6926     if (flag_honor_std)
6927       pop_namespace ();
6928     newtype = build_exception_variant
6929       (ptr_ftype_sizetype, build_tree_list (NULL_TREE, bad_alloc_type_node));
6930     deltype = build_exception_variant
6931       (void_ftype_ptr, build_tree_list (NULL_TREE, NULL_TREE));
6932     auto_function (ansi_opname[(int) NEW_EXPR], newtype, NOT_BUILT_IN);
6933     auto_function (ansi_opname[(int) VEC_NEW_EXPR], newtype, NOT_BUILT_IN);
6934     global_delete_fndecl
6935       = auto_function (ansi_opname[(int) DELETE_EXPR], deltype, NOT_BUILT_IN);
6936     auto_function (ansi_opname[(int) VEC_DELETE_EXPR], deltype, NOT_BUILT_IN);
6937   }
6938
6939   abort_fndecl
6940     = define_function ("__pure_virtual", void_ftype,
6941                        NOT_BUILT_IN, 0, 0);
6942
6943   /* Perform other language dependent initializations.  */
6944   init_class_processing ();
6945   init_init_processing ();
6946   init_search_processing ();
6947   if (flag_rtti)
6948     init_rtti_processing ();
6949
6950   if (flag_exceptions)
6951     init_exception_processing ();
6952   if (flag_no_inline)
6953     {
6954       flag_inline_functions = 0;
6955     }
6956
6957   if (! supports_one_only ())
6958     flag_weak = 0;
6959
6960   /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__.  */
6961   declare_function_name ();
6962
6963   /* Prepare to check format strings against argument lists.  */
6964   init_function_format_info ();
6965
6966   /* Show we use EH for cleanups.  */
6967   using_eh_for_cleanups ();
6968
6969   print_error_function = lang_print_error_function;
6970   lang_get_alias_set = &c_get_alias_set;
6971   valid_lang_attribute = cp_valid_lang_attribute;
6972
6973   /* Maintain consistency.  Perhaps we should just complain if they
6974      say -fwritable-strings?  */
6975   if (flag_writable_strings)
6976     flag_const_strings = 0;
6977 }
6978
6979 /* Function to print any language-specific context for an error message.  */
6980
6981 static void
6982 lang_print_error_function (file)
6983      char *file;
6984 {
6985   default_print_error_function (file);
6986   maybe_print_template_context ();
6987 }
6988
6989 /* Make a definition for a builtin function named NAME and whose data type
6990    is TYPE.  TYPE should be a function type with argument types.
6991    FUNCTION_CODE tells later passes how to compile calls to this function.
6992    See tree.h for its possible values.
6993
6994    If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6995    the name to be called if we can't opencode the function.  */
6996
6997 tree
6998 define_function (name, type, function_code, pfn, library_name)
6999      const char *name;
7000      tree type;
7001      enum built_in_function function_code;
7002      void (*pfn) PROTO((tree));
7003      const char *library_name;
7004 {
7005   tree decl = build_lang_decl (FUNCTION_DECL, get_identifier (name), type);
7006   DECL_EXTERNAL (decl) = 1;
7007   TREE_PUBLIC (decl) = 1;
7008   DECL_ARTIFICIAL (decl) = 1;
7009
7010   my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
7011   DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
7012
7013   /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
7014      we cannot change DECL_ASSEMBLER_NAME until we have installed this
7015      function in the namespace.  */
7016   if (pfn) (*pfn) (decl);
7017   if (library_name)
7018     DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
7019   make_function_rtl (decl);
7020   if (function_code != NOT_BUILT_IN)
7021     {
7022       DECL_BUILT_IN (decl) = 1;
7023       DECL_FUNCTION_CODE (decl) = function_code;
7024     }
7025   return decl;
7026 }
7027 \f
7028 /* When we call finish_struct for an anonymous union, we create
7029    default copy constructors and such.  But, an anonymous union
7030    shouldn't have such things; this function undoes the damage to the
7031    anonymous union type T.
7032
7033    (The reason that we create the synthesized methods is that we don't
7034    distinguish `union { int i; }' from `typedef union { int i; } U'.
7035    The first is an anonymous union; the second is just an ordinary
7036    union type.)  */
7037
7038 void
7039 fixup_anonymous_aggr (t)
7040      tree t;
7041 {
7042   tree *q;
7043
7044   /* Wipe out memory of synthesized methods */
7045   TYPE_HAS_CONSTRUCTOR (t) = 0;
7046   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
7047   TYPE_HAS_INIT_REF (t) = 0;
7048   TYPE_HAS_CONST_INIT_REF (t) = 0;
7049   TYPE_HAS_ASSIGN_REF (t) = 0;
7050   TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
7051
7052   /* Splice the implicitly generated functions out of the TYPE_METHODS
7053      list.  */
7054   q = &TYPE_METHODS (t);
7055   while (*q)
7056     {
7057       if (DECL_ARTIFICIAL (*q))
7058         *q = TREE_CHAIN (*q);
7059       else
7060         q = &TREE_CHAIN (*q);
7061     }
7062
7063   /* ANSI C++ June 5 1992 WP 9.5.3.  Anonymous unions may not have
7064      function members.  */
7065   if (TYPE_METHODS (t))
7066     error ("an anonymous union cannot have function members");
7067 }
7068
7069 /* Make sure that a declaration with no declarator is well-formed, i.e.
7070    just defines a tagged type or anonymous union.
7071
7072    Returns the type defined, if any.  */
7073
7074 tree
7075 check_tag_decl (declspecs)
7076      tree declspecs;
7077 {
7078   int found_type = 0;
7079   tree ob_modifier = NULL_TREE;
7080   register tree link;
7081   register tree t = NULL_TREE;
7082
7083   for (link = declspecs; link; link = TREE_CHAIN (link))
7084     {
7085       register tree value = TREE_VALUE (link);
7086
7087       if (TYPE_P (value))
7088         {
7089           ++found_type;
7090
7091           if (IS_AGGR_TYPE (value) || TREE_CODE (value) == ENUMERAL_TYPE)
7092             {
7093               my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
7094               t = value;
7095             }
7096         }
7097       else if (value == ridpointers[(int) RID_FRIEND])
7098         {
7099           if (current_class_type == NULL_TREE
7100               || current_scope () != current_class_type)
7101             ob_modifier = value;
7102         }
7103       else if (value == ridpointers[(int) RID_STATIC]
7104                || value == ridpointers[(int) RID_EXTERN]
7105                || value == ridpointers[(int) RID_AUTO]
7106                || value == ridpointers[(int) RID_REGISTER]
7107                || value == ridpointers[(int) RID_INLINE]
7108                || value == ridpointers[(int) RID_VIRTUAL]
7109                || value == ridpointers[(int) RID_CONST]
7110                || value == ridpointers[(int) RID_VOLATILE]
7111                || value == ridpointers[(int) RID_EXPLICIT])
7112         ob_modifier = value;
7113     }
7114
7115   if (found_type > 1)
7116     error ("multiple types in one declaration");
7117
7118   /* Inside a class, we might be in a friend or access declaration.
7119      Until we have a good way of detecting the latter, don't warn.  */
7120   if (t == NULL_TREE && ! current_class_type)
7121     pedwarn ("declaration does not declare anything");
7122
7123   /* Check for an anonymous union.  We're careful
7124      accessing TYPE_IDENTIFIER because some built-in types, like
7125      pointer-to-member types, do not have TYPE_NAME.  */
7126   else if (t && IS_AGGR_TYPE_CODE (TREE_CODE (t))
7127            && TYPE_NAME (t)
7128            && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
7129     {
7130       /* Anonymous unions are objects, so they can have specifiers.  */;
7131       SET_ANON_AGGR_TYPE_P (t);
7132
7133       if (TREE_CODE (t) != UNION_TYPE && pedantic && ! in_system_header)
7134         pedwarn ("ISO C++ prohibits anonymous structs");
7135     }
7136
7137   else if (ob_modifier)
7138     {
7139       if (ob_modifier == ridpointers[(int) RID_INLINE]
7140           || ob_modifier == ridpointers[(int) RID_VIRTUAL])
7141         cp_error ("`%D' can only be specified for functions", ob_modifier);
7142       else if (ob_modifier == ridpointers[(int) RID_FRIEND])
7143         cp_error ("`%D' can only be specified inside a class", ob_modifier);
7144       else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
7145         cp_error ("`%D' can only be specified for constructors",
7146                   ob_modifier);
7147       else
7148         cp_error ("`%D' can only be specified for objects and functions",
7149                   ob_modifier);
7150     }
7151
7152   return t;
7153 }
7154
7155 /* Called when a declaration is seen that contains no names to declare.
7156    If its type is a reference to a structure, union or enum inherited
7157    from a containing scope, shadow that tag name for the current scope
7158    with a forward reference.
7159    If its type defines a new named structure or union
7160    or defines an enum, it is valid but we need not do anything here.
7161    Otherwise, it is an error.
7162
7163    C++: may have to grok the declspecs to learn about static,
7164    complain for anonymous unions.  */
7165
7166 void
7167 shadow_tag (declspecs)
7168      tree declspecs;
7169 {
7170   tree t = check_tag_decl (declspecs);
7171
7172   if (t)
7173     maybe_process_partial_specialization (t);
7174
7175   /* This is where the variables in an anonymous union are
7176      declared.  An anonymous union declaration looks like:
7177      union { ... } ;
7178      because there is no declarator after the union, the parser
7179      sends that declaration here.  */
7180   if (t && ANON_AGGR_TYPE_P (t))
7181     {
7182       fixup_anonymous_aggr (t);
7183
7184       if (TYPE_FIELDS (t))
7185         {
7186           tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
7187                                       NULL_TREE);
7188           finish_anon_union (decl);
7189         }
7190     }
7191 }
7192 \f
7193 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
7194
7195 tree
7196 groktypename (typename)
7197      tree typename;
7198 {
7199   if (TREE_CODE (typename) != TREE_LIST)
7200     return typename;
7201   return grokdeclarator (TREE_VALUE (typename),
7202                          TREE_PURPOSE (typename),
7203                          TYPENAME, 0, NULL_TREE);
7204 }
7205
7206 /* Decode a declarator in an ordinary declaration or data definition.
7207    This is called as soon as the type information and variable name
7208    have been parsed, before parsing the initializer if any.
7209    Here we create the ..._DECL node, fill in its type,
7210    and put it on the list of decls for the current context.
7211    The ..._DECL node is returned as the value.
7212
7213    Exception: for arrays where the length is not specified,
7214    the type is left null, to be filled in by `cp_finish_decl'.
7215
7216    Function definitions do not come here; they go to start_function
7217    instead.  However, external and forward declarations of functions
7218    do go through here.  Structure field declarations are done by
7219    grokfield and not through here.  */
7220
7221 /* Set this to zero to debug not using the temporary obstack
7222    to parse initializers.  */
7223 int debug_temp_inits = 1;
7224
7225 tree
7226 start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
7227      tree declarator, declspecs;
7228      int initialized;
7229      tree attributes, prefix_attributes;
7230 {
7231   register tree decl;
7232   register tree type, tem;
7233   tree context;
7234   extern int have_extern_spec;
7235   extern int used_extern_spec;
7236   tree attrlist;
7237
7238 #if 0
7239   /* See code below that used this.  */
7240   int init_written = initialized;
7241 #endif
7242
7243   /* This should only be done once on the top most decl.  */
7244   if (have_extern_spec && !used_extern_spec)
7245     {
7246       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
7247                                   declspecs);
7248       used_extern_spec = 1;
7249     }
7250
7251   if (attributes || prefix_attributes)
7252     attrlist = build_scratch_list (attributes, prefix_attributes);
7253   else
7254     attrlist = NULL_TREE;
7255
7256   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
7257                          attrlist);
7258                          
7259   if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
7260     return NULL_TREE;
7261
7262   type = TREE_TYPE (decl);
7263
7264   if (type == error_mark_node)
7265     return NULL_TREE;
7266
7267   /* Don't lose if destructors must be executed at file-level.  */
7268   if (! processing_template_decl && TREE_STATIC (decl)
7269       && TYPE_NEEDS_DESTRUCTOR (complete_type (type))
7270       && !TREE_PERMANENT (decl))
7271     {
7272       push_obstacks (&permanent_obstack, &permanent_obstack);
7273       decl = copy_node (decl);
7274       if (TREE_CODE (type) == ARRAY_TYPE)
7275         {
7276           tree itype = TYPE_DOMAIN (type);
7277           if (itype && ! TREE_PERMANENT (itype))
7278             {
7279               itype = build_index_type (copy_to_permanent (TYPE_MAX_VALUE (itype)));
7280               type = build_cplus_array_type (TREE_TYPE (type), itype);
7281               TREE_TYPE (decl) = type;
7282             }
7283         }
7284       pop_obstacks ();
7285     }
7286
7287   context
7288     = (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
7289       ? DECL_CLASS_CONTEXT (decl)
7290       : DECL_CONTEXT (decl);
7291
7292   if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
7293       && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
7294     {
7295       /* When parsing the initializer, lookup should use the object's
7296          namespace. */
7297       push_decl_namespace (context);
7298     }
7299
7300   /* We are only interested in class contexts, later. */
7301   if (context && TREE_CODE (context) == NAMESPACE_DECL)
7302     context = NULL_TREE;
7303
7304   if (initialized)
7305     /* Is it valid for this decl to have an initializer at all?
7306        If not, set INITIALIZED to zero, which will indirectly
7307        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
7308     switch (TREE_CODE (decl))
7309       {
7310       case TYPE_DECL:
7311         /* typedef foo = bar  means give foo the same type as bar.
7312            We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
7313            Any other case of an initialization in a TYPE_DECL is an error.  */
7314         if (pedantic || list_length (declspecs) > 1)
7315           {
7316             cp_error ("typedef `%D' is initialized", decl);
7317             initialized = 0;
7318           }
7319         break;
7320
7321       case FUNCTION_DECL:
7322         cp_error ("function `%#D' is initialized like a variable", decl);
7323         initialized = 0;
7324         break;
7325
7326       default:
7327         break;
7328       }
7329
7330   if (initialized)
7331     {
7332       if (! toplevel_bindings_p ()
7333           && DECL_EXTERNAL (decl))
7334         cp_warning ("declaration of `%#D' has `extern' and is initialized",
7335                     decl);
7336       DECL_EXTERNAL (decl) = 0;
7337       if (toplevel_bindings_p ())
7338         TREE_STATIC (decl) = 1;
7339
7340       /* Tell `pushdecl' this is an initialized decl
7341          even though we don't yet have the initializer expression.
7342          Also tell `cp_finish_decl' it may store the real initializer.  */
7343       DECL_INITIAL (decl) = error_mark_node;
7344     }
7345
7346   if (context && TYPE_SIZE (complete_type (context)) != NULL_TREE)
7347     {
7348       push_nested_class (context, 2);
7349
7350       if (TREE_CODE (decl) == VAR_DECL)
7351         {
7352           tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
7353           if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
7354             cp_error ("`%#D' is not a static member of `%#T'", decl, context);
7355           else
7356             {
7357               if (DECL_CONTEXT (field) != context)
7358                 {
7359                   cp_pedwarn ("ANSI C++ does not permit `%T::%D' to be defined as `%T::%D'",
7360                               DECL_CONTEXT (field), DECL_NAME (decl),
7361                               context, DECL_NAME (decl));
7362                   DECL_CONTEXT (decl) = DECL_CONTEXT (field);
7363                 }
7364               /* Static data member are tricky; an in-class initialization
7365                  still doesn't provide a definition, so the in-class
7366                  declaration will have DECL_EXTERNAL set, but will have an
7367                  initialization.  Thus, duplicate_decls won't warn
7368                  about this situation, and so we check here.  */
7369               if (DECL_INITIAL (decl) && DECL_INITIAL (field))
7370                 cp_error ("duplicate initialization of %D", decl);
7371               if (duplicate_decls (decl, field))
7372                 decl = field;
7373             }
7374         }
7375       else
7376         {
7377           tree field = check_classfn (context, decl);
7378           if (field && duplicate_decls (decl, field))
7379             decl = field;
7380         }
7381
7382       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
7383       DECL_IN_AGGR_P (decl) = 0;
7384       if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl)) 
7385           || CLASSTYPE_USE_TEMPLATE (context))
7386         {
7387           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
7388           /* [temp.expl.spec] An explicit specialization of a static data
7389              member of a template is a definition if the declaration
7390              includes an initializer; otherwise, it is a declaration.
7391
7392              We check for processing_specialization so this only applies
7393              to the new specialization syntax.  */
7394           if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
7395             DECL_EXTERNAL (decl) = 1;
7396         }
7397
7398       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
7399         cp_pedwarn ("declaration of `%#D' outside of class is not definition",
7400                     decl);
7401     }
7402
7403 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
7404   SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
7405 #endif
7406   
7407   /* Set attributes here so if duplicate decl, will have proper attributes.  */
7408   cplus_decl_attributes (decl, attributes, prefix_attributes);
7409
7410   /* Add this decl to the current binding level, but not if it
7411      comes from another scope, e.g. a static member variable.
7412      TEM may equal DECL or it may be a previous decl of the same name.  */
7413   
7414   if ((TREE_CODE (decl) != PARM_DECL && DECL_CONTEXT (decl) != NULL_TREE 
7415        /* Definitions of namespace members outside their namespace are
7416           possible. */
7417        && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
7418       || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
7419       || TREE_CODE (type) == LANG_TYPE
7420       /* The declaration of template specializations does not affect
7421          the functions available for overload resolution, so we do not
7422          call pushdecl.  */
7423       || (TREE_CODE (decl) == FUNCTION_DECL
7424           && DECL_TEMPLATE_SPECIALIZATION (decl)))
7425     tem = decl;
7426   else
7427     tem = pushdecl (decl);
7428
7429   if (processing_template_decl)
7430     {
7431       if (! current_function_decl)
7432         tem = push_template_decl (tem);
7433       else if (minimal_parse_mode)
7434         DECL_VINDEX (tem)
7435             = build_min_nt (DECL_STMT, copy_to_permanent (declarator),
7436                             copy_to_permanent (declspecs),
7437                             NULL_TREE);
7438     }
7439
7440
7441 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7442   /* Tell the back-end to use or not use .common as appropriate.  If we say
7443      -fconserve-space, we want this to save .data space, at the expense of
7444      wrong semantics.  If we say -fno-conserve-space, we want this to
7445      produce errors about redefs; to do this we force variables into the
7446      data segment.  */
7447   DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
7448 #endif
7449   
7450   if (! processing_template_decl)
7451     start_decl_1 (tem);
7452
7453   /* Corresponding pop_obstacks is done in `cp_finish_decl'.  */
7454   push_obstacks_nochange ();
7455
7456 #if 0
7457   /* We have no way of knowing whether the initializer will need to be
7458      evaluated at run-time or not until we've parsed it, so let's just put
7459      it in the permanent obstack.  (jason) */
7460   if (init_written
7461       && ! (TREE_CODE (tem) == PARM_DECL
7462             || (TREE_READONLY (tem)
7463                 && (TREE_CODE (tem) == VAR_DECL
7464                     || TREE_CODE (tem) == FIELD_DECL))))
7465     {
7466       /* When parsing and digesting the initializer,
7467          use temporary storage.  Do this even if we will ignore the value.  */
7468       if (toplevel_bindings_p () && debug_temp_inits)
7469         {
7470           if (processing_template_decl
7471               || TYPE_NEEDS_CONSTRUCTING (type)
7472               || TREE_CODE (type) == REFERENCE_TYPE)
7473             /* In this case, the initializer must lay down in permanent
7474                storage, since it will be saved until `finish_file' is run.   */
7475             ;
7476           else
7477             temporary_allocation ();
7478         }
7479     }
7480 #endif
7481
7482   return tem;
7483 }
7484
7485 void
7486 start_decl_1 (decl)
7487      tree decl;
7488 {
7489   tree type = TREE_TYPE (decl);
7490   int initialized = (DECL_INITIAL (decl) != NULL_TREE);
7491
7492   if (type == error_mark_node)
7493     return;
7494
7495   /* If this type of object needs a cleanup, and control may
7496      jump past it, make a new binding level so that it is cleaned
7497      up only when it is initialized first.  */
7498   if (TYPE_NEEDS_DESTRUCTOR (type)
7499       && current_binding_level->more_cleanups_ok == 0)
7500     pushlevel_temporary (1);
7501
7502   if (initialized)
7503     /* Is it valid for this decl to have an initializer at all?
7504        If not, set INITIALIZED to zero, which will indirectly
7505        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
7506     {
7507       /* Don't allow initializations for incomplete types except for
7508          arrays which might be completed by the initialization.  */
7509       if (TYPE_SIZE (complete_type (type)) != NULL_TREE)
7510         ;                       /* A complete type is ok.  */
7511       else if (TREE_CODE (type) != ARRAY_TYPE)
7512         {
7513           cp_error ("variable `%#D' has initializer but incomplete type",
7514                     decl);
7515           initialized = 0;
7516           type = TREE_TYPE (decl) = error_mark_node;
7517         }
7518       else if (TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
7519         {
7520           if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
7521             cp_error ("elements of array `%#D' have incomplete type", decl);
7522           /* else we already gave an error in start_decl.  */
7523           initialized = 0;
7524         }
7525     }
7526
7527   if (!initialized
7528       && TREE_CODE (decl) != TYPE_DECL
7529       && TREE_CODE (decl) != TEMPLATE_DECL
7530       && IS_AGGR_TYPE (type) && ! DECL_EXTERNAL (decl))
7531     {
7532       if ((! processing_template_decl || ! uses_template_parms (type))
7533           && TYPE_SIZE (complete_type (type)) == NULL_TREE)
7534         {
7535           cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
7536                  decl);
7537           /* Change the type so that assemble_variable will give
7538              DECL an rtl we can live with: (mem (const_int 0)).  */
7539           type = TREE_TYPE (decl) = error_mark_node;
7540         }
7541       else
7542         {
7543           /* If any base type in the hierarchy of TYPE needs a constructor,
7544              then we set initialized to 1.  This way any nodes which are
7545              created for the purposes of initializing this aggregate
7546              will live as long as it does.  This is necessary for global
7547              aggregates which do not have their initializers processed until
7548              the end of the file.  */
7549           initialized = TYPE_NEEDS_CONSTRUCTING (type);
7550         }
7551     }
7552
7553 #if 0
7554   /* We don't do this yet for GNU C++.  */
7555   /* For a local variable, define the RTL now.  */
7556   if (! toplevel_bindings_p ()
7557       /* But not if this is a duplicate decl
7558          and we preserved the rtl from the previous one
7559          (which may or may not happen).  */
7560       && DECL_RTL (tem) == NULL_RTX)
7561     {
7562       if (TYPE_SIZE (TREE_TYPE (tem)) != NULL_TREE)
7563         expand_decl (tem);
7564       else if (TREE_CODE (TREE_TYPE (tem)) == ARRAY_TYPE
7565                && DECL_INITIAL (tem) != NULL_TREE)
7566         expand_decl (tem);
7567     }
7568 #endif
7569
7570   if (! initialized)
7571     DECL_INITIAL (decl) = NULL_TREE;
7572 }
7573
7574 /* Handle initialization of references.
7575    These three arguments are from `cp_finish_decl', and have the
7576    same meaning here that they do there.
7577
7578    Quotes on semantics can be found in ARM 8.4.3.  */
7579
7580 static void
7581 grok_reference_init (decl, type, init)
7582      tree decl, type, init;
7583 {
7584   tree tmp;
7585
7586   if (init == NULL_TREE)
7587     {
7588       if ((DECL_LANG_SPECIFIC (decl) == 0
7589            || DECL_IN_AGGR_P (decl) == 0)
7590           && ! DECL_THIS_EXTERN (decl))
7591         {
7592           cp_error ("`%D' declared as reference but not initialized", decl);
7593           if (TREE_CODE (decl) == VAR_DECL)
7594             SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
7595         }
7596       return;
7597     }
7598
7599   if (init == error_mark_node)
7600     return;
7601
7602   if (TREE_CODE (type) == REFERENCE_TYPE
7603       && TREE_CODE (init) == CONSTRUCTOR)
7604     {
7605       cp_error ("ANSI C++ forbids use of initializer list to initialize reference `%D'", decl);
7606       return;
7607     }
7608
7609   if (TREE_CODE (init) == TREE_LIST)
7610     init = build_compound_expr (init);
7611
7612   if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
7613     init = convert_from_reference (init);
7614
7615   if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
7616       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
7617     {
7618       /* Note: default conversion is only called in very special cases.  */
7619       init = default_conversion (init);
7620     }
7621
7622   tmp = convert_to_reference
7623     (type, init, CONV_IMPLICIT,
7624      LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
7625
7626   if (tmp == error_mark_node)
7627     goto fail;
7628   else if (tmp != NULL_TREE)
7629     {
7630       init = tmp;
7631       DECL_INITIAL (decl) = save_expr (init);
7632     }
7633   else
7634     {
7635       cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
7636       goto fail;
7637     }
7638
7639   /* ?? Can this be optimized in some cases to
7640      hand back the DECL_INITIAL slot??  */
7641   if (TYPE_SIZE (TREE_TYPE (type)))
7642     {
7643       init = convert_from_reference (decl);
7644       if (TREE_PERMANENT (decl))
7645         init = copy_to_permanent (init);
7646       SET_DECL_REFERENCE_SLOT (decl, init);
7647     }
7648
7649   if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
7650     {
7651       expand_static_init (decl, DECL_INITIAL (decl));
7652       DECL_INITIAL (decl) = NULL_TREE;
7653     }
7654   return;
7655
7656  fail:
7657   if (TREE_CODE (decl) == VAR_DECL)
7658     SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
7659   return;
7660 }
7661
7662 /* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7663    mucking with forces it does not comprehend (i.e. initialization with a
7664    constructor).  If we are at global scope and won't go into COMMON, fill
7665    it in with a dummy CONSTRUCTOR to force the variable into .data;
7666    otherwise we can use error_mark_node.  */
7667
7668 static tree
7669 obscure_complex_init (decl, init)
7670      tree decl, init;
7671 {
7672   if (! flag_no_inline && TREE_STATIC (decl))
7673     {
7674       if (extract_init (decl, init))
7675         return NULL_TREE;
7676     }
7677
7678 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7679   if (toplevel_bindings_p () && ! DECL_COMMON (decl))
7680     DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7681                                  NULL_TREE);
7682   else
7683 #endif
7684     DECL_INITIAL (decl) = error_mark_node;
7685
7686   return init;
7687 }
7688
7689 /* Issue an error message if DECL is an uninitialized const variable.  */
7690
7691 static void
7692 check_for_uninitialized_const_var (decl)
7693      tree decl;
7694 {
7695   tree type = TREE_TYPE (decl);
7696
7697   /* ``Unless explicitly declared extern, a const object does not have
7698      external linkage and must be initialized. ($8.4; $12.1)'' ARM
7699      7.1.6 */
7700   if (TREE_CODE (decl) == VAR_DECL
7701       && TREE_CODE (type) != REFERENCE_TYPE
7702       && CP_TYPE_CONST_P (type)
7703       && !TYPE_NEEDS_CONSTRUCTING (type)
7704       && !DECL_INITIAL (decl))
7705     cp_error ("uninitialized const `%D'", decl);
7706 }
7707
7708 /* Finish processing of a declaration;
7709    install its line number and initial value.
7710    If the length of an array type is not known before,
7711    it must be determined now, from the initial value, or it is an error.
7712
7713    Call `pop_obstacks' iff NEED_POP is nonzero.
7714
7715    For C++, `cp_finish_decl' must be fairly evasive:  it must keep initializers
7716    for aggregates that have constructors alive on the permanent obstack,
7717    so that the global initializing functions can be written at the end.
7718
7719    INIT0 holds the value of an initializer that should be allowed to escape
7720    the normal rules.
7721
7722    FLAGS is LOOKUP_ONLYCONVERTING is the = init syntax was used, else 0
7723    if the (init) syntax was used.
7724
7725    For functions that take default parameters, DECL points to its
7726    "maximal" instantiation.  `cp_finish_decl' must then also declared its
7727    subsequently lower and lower forms of instantiation, checking for
7728    ambiguity as it goes.  This can be sped up later.  */
7729
7730 void
7731 cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
7732      tree decl, init;
7733      tree asmspec_tree;
7734      int need_pop;
7735      int flags;
7736 {
7737   register tree type;
7738   tree cleanup = NULL_TREE, ttype = NULL_TREE;
7739   int was_incomplete;
7740   int temporary = allocation_temporary_p ();
7741   char *asmspec = NULL;
7742   int was_readonly = 0;
7743   int already_used = 0;
7744   tree core_type;
7745
7746   /* If this is 0, then we did not change obstacks.  */
7747   if (! decl)
7748     {
7749       if (init)
7750         error ("assignment (not initialization) in declaration");
7751       return;
7752     }
7753
7754   /* If a name was specified, get the string.  */
7755   if (asmspec_tree)
7756       asmspec = TREE_STRING_POINTER (asmspec_tree);
7757
7758   if (init && TREE_CODE (init) == NAMESPACE_DECL)
7759     {
7760       cp_error ("Cannot initialize `%D' to namespace `%D'",
7761                 decl, init);
7762       init = NULL_TREE;
7763     }
7764
7765   if (current_class_type
7766       && DECL_REAL_CONTEXT (decl) == current_class_type
7767       && TYPE_BEING_DEFINED (current_class_type)
7768       && (DECL_INITIAL (decl) || init))
7769     DECL_DEFINED_IN_CLASS_P (decl) = 1;
7770
7771   if (TREE_CODE (decl) == VAR_DECL 
7772       && DECL_CONTEXT (decl)
7773       && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
7774       && DECL_CONTEXT (decl) != current_namespace
7775       && init)
7776     {
7777       /* Leave the namespace of the object. */
7778       pop_decl_namespace ();
7779     }
7780
7781   /* If the type of the thing we are declaring either has
7782      a constructor, or has a virtual function table pointer,
7783      AND its initialization was accepted by `start_decl',
7784      then we stayed on the permanent obstack through the
7785      declaration, otherwise, changed obstacks as GCC would.  */
7786
7787   type = TREE_TYPE (decl);
7788
7789   if (type == error_mark_node)
7790     {
7791       if (toplevel_bindings_p () && temporary)
7792         end_temporary_allocation ();
7793
7794       return;
7795     }
7796
7797   if (TYPE_HAS_MUTABLE_P (type))
7798     TREE_READONLY (decl) = 0;
7799   
7800   if (processing_template_decl)
7801     {
7802       if (init && DECL_INITIAL (decl))
7803         DECL_INITIAL (decl) = init;
7804       if (minimal_parse_mode && ! DECL_ARTIFICIAL (decl))
7805         {
7806           tree stmt = DECL_VINDEX (decl);
7807           /* If the decl is declaring a member of a local class (in a
7808              template function), the DECL_VINDEX will either be NULL,
7809              or it will be an actual virtual function index, not a
7810              DECL_STMT.  */
7811           if (stmt != NULL_TREE && TREE_CODE (stmt) == DECL_STMT)
7812             {
7813               DECL_VINDEX (decl) = NULL_TREE;
7814               TREE_OPERAND (stmt, 2) = copy_to_permanent (init);
7815               add_tree (stmt);
7816             }
7817         }
7818
7819       goto finish_end0;
7820     }
7821
7822   /* Take care of TYPE_DECLs up front.  */
7823   if (TREE_CODE (decl) == TYPE_DECL)
7824     {
7825       if (init && DECL_INITIAL (decl))
7826         {
7827           /* typedef foo = bar; store the type of bar as the type of foo.  */
7828           TREE_TYPE (decl) = type = TREE_TYPE (init);
7829           DECL_INITIAL (decl) = init = NULL_TREE;
7830         }
7831       if (type != error_mark_node
7832           && IS_AGGR_TYPE (type) && DECL_NAME (decl))
7833         {
7834           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7835             cp_warning ("shadowing previous type declaration of `%#D'", decl);
7836           set_identifier_type_value (DECL_NAME (decl), type);
7837           CLASSTYPE_GOT_SEMICOLON (type) = 1;
7838         }
7839       GNU_xref_decl (current_function_decl, decl);
7840
7841       /* If we have installed this as the canonical typedef for this
7842          type, and that type has not been defined yet, delay emitting
7843          the debug information for it, as we will emit it later.  */
7844       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7845           && TYPE_SIZE (TREE_TYPE (decl)) == NULL_TREE)
7846         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7847
7848       rest_of_decl_compilation (decl, NULL_PTR,
7849                                 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
7850       goto finish_end;
7851     }
7852
7853   if (TREE_CODE (decl) != FUNCTION_DECL)
7854     ttype = target_type (type);
7855
7856   if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
7857       && TYPE_NEEDS_CONSTRUCTING (type))
7858     {
7859       /* Currently, GNU C++ puts constants in text space, making them
7860          impossible to initialize.  In the future, one would hope for
7861          an operating system which understood the difference between
7862          initialization and the running of a program.  */
7863       was_readonly = 1;
7864       TREE_READONLY (decl) = 0;
7865     }
7866
7867   if (TREE_CODE (decl) == FIELD_DECL)
7868     {
7869       if (init && init != error_mark_node)
7870         my_friendly_assert (TREE_PERMANENT (init), 147);
7871
7872       if (asmspec)
7873         {
7874           /* This must override the asm specifier which was placed
7875              by grokclassfn.  Lay this out fresh.  */
7876           DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
7877           DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7878           make_decl_rtl (decl, asmspec, 0);
7879         }
7880     }
7881   /* If `start_decl' didn't like having an initialization, ignore it now.  */
7882   else if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7883     init = NULL_TREE;
7884   else if (DECL_EXTERNAL (decl))
7885     ;
7886   else if (TREE_CODE (type) == REFERENCE_TYPE
7887            || (TYPE_LANG_SPECIFIC (type) && IS_SIGNATURE_REFERENCE (type)))
7888     {
7889       if (TREE_STATIC (decl))
7890         make_decl_rtl (decl, NULL_PTR,
7891                        toplevel_bindings_p ()
7892                        || pseudo_global_level_p ());
7893       grok_reference_init (decl, type, init);
7894       init = NULL_TREE;
7895     }
7896
7897   /* Check for certain invalid initializations.  */
7898   if (init)
7899     {
7900       if (TYPE_SIZE (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
7901         {
7902           cp_error ("variable-sized object `%D' may not be initialized", decl);
7903           init = NULL_TREE;
7904         }
7905       if (TREE_CODE (type) == ARRAY_TYPE
7906           && !TYPE_SIZE (complete_type (TREE_TYPE (type))))
7907         {
7908           cp_error ("elements of array `%#D' have incomplete type", decl);
7909           init = NULL_TREE;
7910         }
7911     }
7912
7913   GNU_xref_decl (current_function_decl, decl);
7914
7915   core_type = type;
7916   while (TREE_CODE (core_type) == ARRAY_TYPE)
7917     core_type = TREE_TYPE (core_type);
7918   
7919   if (TREE_CODE (decl) == FIELD_DECL)
7920     ;
7921   else if (TREE_CODE (decl) == CONST_DECL)
7922     {
7923       my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7924
7925       DECL_INITIAL (decl) = init;
7926
7927       /* This will keep us from needing to worry about our obstacks.  */
7928       my_friendly_assert (init != NULL_TREE, 149);
7929       init = NULL_TREE;
7930     }
7931   else if (init)
7932     {
7933       if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7934         {
7935           if (TREE_CODE (type) == ARRAY_TYPE)
7936             init = digest_init (type, init, (tree *) 0);
7937           else if (TREE_CODE (init) == CONSTRUCTOR
7938                    && TREE_HAS_CONSTRUCTOR (init))
7939             {
7940               if (TYPE_NON_AGGREGATE_CLASS (type))
7941                 {
7942                   cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7943                             decl);
7944                   init = error_mark_node;
7945                 }
7946               else
7947                 goto dont_use_constructor;
7948             }
7949         }
7950       else
7951         {
7952         dont_use_constructor:
7953           if (TREE_CODE (init) != TREE_VEC)
7954             init = store_init_value (decl, init);
7955         }
7956
7957       if (init)
7958         /* We must hide the initializer so that expand_decl
7959            won't try to do something it does not understand.  */
7960         init = obscure_complex_init (decl, init);
7961     }
7962   else if (DECL_EXTERNAL (decl))
7963     ;
7964   else if (TREE_CODE_CLASS (TREE_CODE (type)) == 't'
7965            && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7966     {
7967       if (! TYPE_NEEDS_CONSTRUCTING (core_type))
7968         {
7969           if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
7970             cp_error ("structure `%D' with uninitialized const members", decl);
7971           if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
7972             cp_error ("structure `%D' with uninitialized reference members",
7973                       decl);
7974         }
7975
7976       check_for_uninitialized_const_var (decl);
7977
7978       if (TYPE_SIZE (type) != NULL_TREE
7979           && TYPE_NEEDS_CONSTRUCTING (type))
7980         init = obscure_complex_init (decl, NULL_TREE);
7981
7982     }
7983   else
7984     check_for_uninitialized_const_var (decl);
7985   
7986   /* For top-level declaration, the initial value was read in
7987      the temporary obstack.  MAXINDEX, rtl, etc. to be made below
7988      must go in the permanent obstack; but don't discard the
7989      temporary data yet.  */
7990
7991   if (toplevel_bindings_p () && temporary)
7992     end_temporary_allocation ();
7993
7994   /* Deduce size of array from initialization, if not already known.  */
7995
7996   if (TREE_CODE (type) == ARRAY_TYPE
7997       && TYPE_DOMAIN (type) == NULL_TREE
7998       && TREE_CODE (decl) != TYPE_DECL)
7999     {
8000       int do_default
8001         = (TREE_STATIC (decl)
8002            /* Even if pedantic, an external linkage array
8003               may have incomplete type at first.  */
8004            ? pedantic && ! DECL_EXTERNAL (decl)
8005            : !DECL_EXTERNAL (decl));
8006       tree initializer = init ? init : DECL_INITIAL (decl);
8007       int failure = complete_array_type (type, initializer, do_default);
8008
8009       if (failure == 1)
8010         cp_error ("initializer fails to determine size of `%D'", decl);
8011
8012       if (failure == 2)
8013         {
8014           if (do_default)
8015             cp_error ("array size missing in `%D'", decl);
8016           /* If a `static' var's size isn't known, make it extern as
8017              well as static, so it does not get allocated.  If it's not
8018              `static', then don't mark it extern; finish_incomplete_decl
8019              will give it a default size and it will get allocated.  */
8020           else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
8021             DECL_EXTERNAL (decl) = 1;
8022         }
8023
8024       if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
8025           && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
8026                               integer_zero_node))
8027         cp_error ("zero-size array `%D'", decl);
8028
8029       layout_decl (decl, 0);
8030     }
8031
8032   if (TREE_CODE (decl) == VAR_DECL)
8033     {
8034       if (DECL_SIZE (decl) == NULL_TREE
8035           && TYPE_SIZE (complete_type (TREE_TYPE (decl))) != NULL_TREE)
8036         layout_decl (decl, 0);
8037
8038       if (TREE_STATIC (decl) && DECL_SIZE (decl) == NULL_TREE)
8039         {
8040           /* A static variable with an incomplete type:
8041              that is an error if it is initialized.
8042              Otherwise, let it through, but if it is not `extern'
8043              then it may cause an error message later.  */
8044           if (DECL_INITIAL (decl) != NULL_TREE)
8045             cp_error ("storage size of `%D' isn't known", decl);
8046           init = NULL_TREE;
8047         }
8048       else if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
8049         {
8050           /* An automatic variable with an incomplete type: that is an error.
8051              Don't talk about array types here, since we took care of that
8052              message in grokdeclarator.  */
8053           cp_error ("storage size of `%D' isn't known", decl);
8054           TREE_TYPE (decl) = error_mark_node;
8055         }
8056       else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
8057         /* Let debugger know it should output info for this type.  */
8058         note_debug_info_needed (ttype);
8059
8060       if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
8061         note_debug_info_needed (DECL_CONTEXT (decl));
8062
8063       if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
8064           && DECL_SIZE (decl) != NULL_TREE
8065           && ! TREE_CONSTANT (DECL_SIZE (decl)))
8066         {
8067           if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
8068             constant_expression_warning (DECL_SIZE (decl));
8069           else
8070             cp_error ("storage size of `%D' isn't constant", decl);
8071         }
8072
8073       if (! DECL_EXTERNAL (decl) && TYPE_NEEDS_DESTRUCTOR (type)
8074           /* Cleanups for static variables are handled by `finish_file'.  */
8075           && ! TREE_STATIC (decl))
8076         {
8077           int yes = suspend_momentary ();
8078           cleanup = maybe_build_cleanup (decl);
8079           resume_momentary (yes);
8080         }
8081     }
8082   /* PARM_DECLs get cleanups, too.  */
8083   else if (TREE_CODE (decl) == PARM_DECL && TYPE_NEEDS_DESTRUCTOR (type))
8084     {
8085       if (temporary)
8086         end_temporary_allocation ();
8087       cleanup = maybe_build_cleanup (decl);
8088       if (temporary)
8089         resume_temporary_allocation ();
8090     }
8091
8092   /* Output the assembler code and/or RTL code for variables and functions,
8093      unless the type is an undefined structure or union.
8094      If not, it will get done when the type is completed.  */
8095
8096   was_incomplete = (DECL_SIZE (decl) == NULL_TREE);
8097
8098   if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
8099       || TREE_CODE (decl) == RESULT_DECL)
8100     {
8101       /* ??? FIXME: What about nested classes?  */
8102       int toplev = toplevel_bindings_p () || pseudo_global_level_p ();
8103       int was_temp
8104         = (TREE_STATIC (decl) && TYPE_NEEDS_DESTRUCTOR (type)
8105            && allocation_temporary_p ());
8106
8107       if (was_temp)
8108         end_temporary_allocation ();
8109
8110       /* Static data in a function with comdat linkage also has comdat
8111          linkage.  */
8112       if (TREE_CODE (decl) == VAR_DECL
8113           && TREE_STATIC (decl)
8114           /* Don't mess with __FUNCTION__.  */
8115           && ! TREE_ASM_WRITTEN (decl)
8116           && current_function_decl
8117           && DECL_CONTEXT (decl) == current_function_decl
8118           && (DECL_THIS_INLINE (current_function_decl)
8119               || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
8120           && TREE_PUBLIC (current_function_decl))
8121         {
8122           /* Rather than try to get this right with inlining, we suppress
8123              inlining of such functions.  */
8124           current_function_cannot_inline
8125             = "function with static variable cannot be inline";
8126
8127           /* If flag_weak, we don't need to mess with this, as we can just
8128              make the function weak, and let it refer to its unique local
8129              copy.  This works because we don't allow the function to be
8130              inlined.  */
8131           if (! flag_weak)
8132             {
8133               if (DECL_INTERFACE_KNOWN (current_function_decl))
8134                 {
8135                   TREE_PUBLIC (decl) = 1;
8136                   DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
8137                 }
8138               else if (DECL_INITIAL (decl) == NULL_TREE
8139                        || DECL_INITIAL (decl) == error_mark_node)
8140                 {
8141                   TREE_PUBLIC (decl) = 1;
8142                   DECL_COMMON (decl) = 1;
8143                 }
8144               /* else we lose. We can only do this if we can use common,
8145                  which we can't if it has been initialized.  */
8146
8147               if (TREE_PUBLIC (decl))
8148                 DECL_ASSEMBLER_NAME (decl)
8149                   = build_static_name (current_function_decl, DECL_NAME (decl));
8150               else if (! DECL_ARTIFICIAL (decl))
8151                 {
8152                   cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
8153                   cp_warning_at ("  you can work around this by removing the initializer", decl);
8154                 }
8155             }
8156         }
8157
8158       else if (TREE_CODE (decl) == VAR_DECL
8159                && DECL_LANG_SPECIFIC (decl)
8160                && DECL_COMDAT (decl))
8161         /* Set it up again; we might have set DECL_INITIAL since the
8162            last time.  */
8163         comdat_linkage (decl);
8164
8165       if (TREE_CODE (decl) == VAR_DECL && DECL_VIRTUAL_P (decl))
8166         make_decl_rtl (decl, NULL_PTR, toplev);
8167       else if (TREE_CODE (decl) == VAR_DECL
8168                && TREE_READONLY (decl)
8169                && DECL_INITIAL (decl) != NULL_TREE
8170                && DECL_INITIAL (decl) != error_mark_node
8171                && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
8172         {
8173           DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
8174
8175           if (asmspec)
8176             DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
8177
8178           if (! toplev
8179               && TREE_STATIC (decl)
8180               && ! TREE_SIDE_EFFECTS (decl)
8181               && ! TREE_PUBLIC (decl)
8182               && ! DECL_EXTERNAL (decl)
8183               && ! TYPE_NEEDS_DESTRUCTOR (type)
8184               && DECL_MODE (decl) != BLKmode)
8185             {
8186               /* If this variable is really a constant, then fill its DECL_RTL
8187                  slot with something which won't take up storage.
8188                  If something later should take its address, we can always give
8189                  it legitimate RTL at that time.  */
8190               DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
8191               store_expr (DECL_INITIAL (decl), DECL_RTL (decl), 0);
8192               TREE_ASM_WRITTEN (decl) = 1;
8193             }
8194           else if (toplev && ! TREE_PUBLIC (decl))
8195             {
8196               /* If this is a static const, change its apparent linkage
8197                  if it belongs to a #pragma interface.  */
8198               if (!interface_unknown)
8199                 {
8200                   TREE_PUBLIC (decl) = 1;
8201                   DECL_EXTERNAL (decl) = interface_only;
8202                 }
8203               make_decl_rtl (decl, asmspec, toplev);
8204             }
8205           else
8206             rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
8207         }
8208       else if (TREE_CODE (decl) == VAR_DECL
8209                && DECL_LANG_SPECIFIC (decl)
8210                && DECL_IN_AGGR_P (decl))
8211         {
8212           if (TREE_STATIC (decl))
8213             {
8214               if (init == NULL_TREE
8215 #ifdef DEFAULT_STATIC_DEFS
8216                   /* If this code is dead, then users must
8217                      explicitly declare static member variables
8218                      outside the class def'n as well.  */
8219                   && TYPE_NEEDS_CONSTRUCTING (type)
8220 #endif
8221                   )
8222                 {
8223                   DECL_EXTERNAL (decl) = 1;
8224                   make_decl_rtl (decl, asmspec, 1);
8225                 }
8226               else
8227                 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
8228             }
8229           else
8230             /* Just a constant field.  Should not need any rtl.  */
8231             goto finish_end0;
8232         }
8233       else
8234         rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
8235
8236       if (was_temp)
8237         resume_temporary_allocation ();
8238
8239       if (type != error_mark_node
8240           && TYPE_LANG_SPECIFIC (core_type)
8241           && CLASSTYPE_ABSTRACT_VIRTUALS (core_type))
8242         abstract_virtuals_error (decl, core_type);
8243       else if ((TREE_CODE (type) == FUNCTION_TYPE
8244                 || TREE_CODE (type) == METHOD_TYPE)
8245                && TYPE_LANG_SPECIFIC (TREE_TYPE (type))
8246                && CLASSTYPE_ABSTRACT_VIRTUALS (TREE_TYPE (type)))
8247         abstract_virtuals_error (decl, TREE_TYPE (type));
8248
8249       if (TYPE_LANG_SPECIFIC (core_type) && IS_SIGNATURE (core_type))
8250         signature_error (decl, core_type);
8251       else if ((TREE_CODE (type) == FUNCTION_TYPE
8252                 || TREE_CODE (type) == METHOD_TYPE)
8253                && TYPE_LANG_SPECIFIC (TREE_TYPE (type))
8254                && IS_SIGNATURE (TREE_TYPE (type)))
8255         signature_error (decl, TREE_TYPE (type));
8256
8257       if (TREE_CODE (decl) == FUNCTION_DECL)
8258         ;
8259       else if (DECL_EXTERNAL (decl)
8260                && ! (DECL_LANG_SPECIFIC (decl)
8261                      && DECL_NOT_REALLY_EXTERN (decl)))
8262         {
8263           if (init)
8264             DECL_INITIAL (decl) = init;
8265         }
8266       else if (TREE_STATIC (decl) && type != error_mark_node)
8267         {
8268           /* Cleanups for static variables are handled by `finish_file'.  */
8269           if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
8270               || TYPE_NEEDS_DESTRUCTOR (type))
8271             expand_static_init (decl, init);
8272         }
8273       else if (! toplev)
8274         {
8275           /* This is a declared decl which must live until the
8276              end of the binding contour.  It may need a cleanup.  */
8277
8278           /* Recompute the RTL of a local array now
8279              if it used to be an incomplete type.  */
8280           if (was_incomplete && ! TREE_STATIC (decl))
8281             {
8282               /* If we used it already as memory, it must stay in memory.  */
8283               TREE_ADDRESSABLE (decl) = TREE_USED (decl);
8284               /* If it's still incomplete now, no init will save it.  */
8285               if (DECL_SIZE (decl) == NULL_TREE)
8286                 DECL_INITIAL (decl) = NULL_TREE;
8287               expand_decl (decl);
8288             }
8289           else if (! TREE_ASM_WRITTEN (decl)
8290                    && (TYPE_SIZE (type) != NULL_TREE
8291                        || TREE_CODE (type) == ARRAY_TYPE))
8292             {
8293               /* Do this here, because we did not expand this decl's
8294                  rtl in start_decl.  */
8295               if (DECL_RTL (decl) == NULL_RTX)
8296                 expand_decl (decl);
8297               else if (cleanup)
8298                 {
8299                   /* XXX: Why don't we use decl here?  */
8300                   /* Ans: Because it was already expanded? */
8301                   if (! expand_decl_cleanup (NULL_TREE, cleanup))
8302                     cp_error ("parser lost in parsing declaration of `%D'",
8303                               decl);
8304                   /* Cleanup used up here.  */
8305                   cleanup = NULL_TREE;
8306                 }
8307             }
8308
8309           if (current_binding_level->is_for_scope)
8310             {
8311               struct binding_level *outer 
8312                 = current_binding_level->level_chain;
8313
8314               /* Check to see if the same name is already bound at
8315                  the outer level, either because it was directly declared,
8316                  or because a dead for-decl got preserved.  In either case,
8317                  the code would not have been valid under the ARM
8318                  scope rules, so clear is_for_scope for the
8319                  current_binding_level.
8320
8321                  Otherwise, we need to preserve the temp slot for decl
8322                  to last into the outer binding level.  */
8323
8324               tree outer_binding 
8325                 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
8326               
8327               if (outer_binding && BINDING_LEVEL (outer_binding) == outer
8328                   && (TREE_CODE (BINDING_VALUE (outer_binding)) 
8329                       == VAR_DECL)
8330                   && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
8331                 {
8332                   BINDING_VALUE (outer_binding)
8333                     = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
8334                   current_binding_level->is_for_scope = 0;
8335                 }
8336               else if (DECL_IN_MEMORY_P (decl))
8337                 preserve_temp_slots (DECL_RTL (decl));
8338             }
8339
8340           expand_start_target_temps ();
8341
8342           if (DECL_SIZE (decl) && type != error_mark_node)
8343             {
8344               /* Compute and store the initial value.  */
8345               expand_decl_init (decl);
8346               already_used = TREE_USED (decl) || TREE_USED (type);
8347
8348               if (init || TYPE_NEEDS_CONSTRUCTING (type))
8349                 {
8350                   emit_line_note (DECL_SOURCE_FILE (decl),
8351                                   DECL_SOURCE_LINE (decl));
8352                   expand_aggr_init (decl, init, flags);
8353                 }
8354
8355               /* Set this to 0 so we can tell whether an aggregate which
8356                  was initialized was ever used.  Don't do this if it has a
8357                  destructor, so we don't complain about the 'resource
8358                  allocation is initialization' idiom.  */
8359               /* Now set attribute((unused)) on types so decls of
8360                  that type will be marked used. (see TREE_USED, above.) 
8361                  This avoids the warning problems this particular code
8362                  tried to work around. */
8363
8364               if (TYPE_NEEDS_CONSTRUCTING (type)
8365                   && ! already_used
8366                   && cleanup == NULL_TREE
8367                   && DECL_NAME (decl))
8368                 TREE_USED (decl) = 0;
8369
8370               if (already_used)
8371                 TREE_USED (decl) = 1;
8372             }
8373
8374           /* Cleanup any temporaries needed for the initial value.  */
8375           expand_end_target_temps ();
8376
8377           if (DECL_SIZE (decl) && type != error_mark_node)
8378             {
8379               /* Store the cleanup, if there was one.  */
8380               if (cleanup)
8381                 {
8382                   if (! expand_decl_cleanup (decl, cleanup))
8383                     cp_error ("parser lost in parsing declaration of `%D'",
8384                               decl);
8385                 }
8386             }
8387         }
8388     finish_end0:
8389
8390       /* Undo call to `pushclass' that was done in `start_decl'
8391          due to initialization of qualified member variable.
8392          I.e., Foo::x = 10;  */
8393       {
8394         tree context = DECL_REAL_CONTEXT (decl);
8395         if (context
8396             && TREE_CODE_CLASS (TREE_CODE (context)) == 't'
8397             && (TREE_CODE (decl) == VAR_DECL
8398                 /* We also have a pushclass done that we need to undo here
8399                    if we're at top level and declare a method.  */
8400                 || TREE_CODE (decl) == FUNCTION_DECL)
8401             /* If size hasn't been set, we're still defining it,
8402                and therefore inside the class body; don't pop
8403                the binding level..  */
8404             && TYPE_SIZE (context) != NULL_TREE
8405             && context == current_class_type)
8406           pop_nested_class ();
8407       }
8408     }
8409
8410  finish_end:
8411
8412   /* If requested, warn about definitions of large data objects.  */
8413
8414   if (warn_larger_than
8415       && ! processing_template_decl
8416       && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
8417       && !DECL_EXTERNAL (decl))
8418     {
8419       register tree decl_size = DECL_SIZE (decl);
8420
8421       if (decl_size && TREE_CODE (decl_size) == INTEGER_CST)
8422         {
8423           unsigned units = TREE_INT_CST_LOW (decl_size) / BITS_PER_UNIT;
8424
8425           if (units > larger_than_size)
8426             warning_with_decl (decl, "size of `%s' is %u bytes", units);
8427         }
8428     }
8429
8430   if (need_pop)
8431     {
8432       /* Resume permanent allocation, if not within a function.  */
8433       /* The corresponding push_obstacks_nochange is in start_decl,
8434          start_method, groktypename, and in grokfield.  */
8435       pop_obstacks ();
8436     }
8437
8438   if (was_readonly)
8439     TREE_READONLY (decl) = 1;
8440 }
8441
8442 /* This is here for a midend callback from c-common.c */
8443
8444 void
8445 finish_decl (decl, init, asmspec_tree)
8446      tree decl, init;
8447      tree asmspec_tree;
8448 {
8449   cp_finish_decl (decl, init, asmspec_tree, 1, 0);
8450 }
8451
8452 void
8453 expand_static_init (decl, init)
8454      tree decl;
8455      tree init;
8456 {
8457   tree oldstatic = value_member (decl, static_aggregates);
8458
8459   if (oldstatic)
8460     {
8461       if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
8462         cp_error ("multiple initializations given for `%D'", decl);
8463     }
8464   else if (! toplevel_bindings_p ())
8465     {
8466       /* Emit code to perform this initialization but once.  */
8467       tree temp;
8468
8469       /* Remember this information until end of file.  */
8470       push_obstacks (&permanent_obstack, &permanent_obstack);
8471
8472       /* Emit code to perform this initialization but once.  This code
8473          looks like:
8474
8475            static int temp = 0;
8476            if (!temp) {
8477              // Do initialization.
8478              temp = 1;
8479              // Register variable for destruction at end of program.
8480            }
8481
8482          Note that the `temp' variable is only set to 1 *after* the
8483          initialization is complete.  This ensures that an exception,
8484          thrown during the construction, will cause the variable to
8485          reinitialized when we pass through this code again, as per:
8486          
8487            [stmt.dcl]
8488
8489            If the initialization exits by throwing an exception, the
8490            initialization is not complete, so it will be tried again
8491            the next time control enters the declaration.
8492
8493          In theory, this process should be thread-safe, too; multiple
8494          threads should not be able to initialize the variable more
8495          than once.  We don't yet attempt to ensure thread-safety.  */
8496       temp = get_temp_name (integer_type_node, 1);
8497       rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
8498
8499       /* Begin the conditional initialization.  */
8500       expand_start_cond (build_binary_op (EQ_EXPR, temp,
8501                                           integer_zero_node), 0);
8502       expand_start_target_temps ();
8503
8504       /* Do the initialization itself.  */
8505       if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
8506           || (init && TREE_CODE (init) == TREE_LIST))
8507         {
8508           expand_aggr_init (decl, init, 0);
8509           do_pending_stack_adjust ();
8510         }
8511       else if (init)
8512         expand_assignment (decl, init, 0, 0);
8513
8514       /* Set TEMP to 1.  */
8515       expand_assignment (temp, integer_one_node, 0, 0);
8516
8517       /* Cleanup any temporaries needed for the initial value.  If
8518          destroying one of the temporaries causes an exception to be
8519          thrown, then the object itself has still been fully
8520          constructed.  */
8521       expand_end_target_temps ();
8522
8523       /* Use atexit to register a function for destroying this static
8524          variable.  */
8525       if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
8526         {
8527           tree cleanup, fcall;
8528           static tree Atexit = 0;
8529           int saved_flag_access_control;
8530
8531           if (Atexit == 0)
8532             {
8533               tree atexit_fndecl, PFV, pfvlist;
8534               /* Remember this information until end of file.  */
8535               push_obstacks (&permanent_obstack, &permanent_obstack);
8536               PFV = build_pointer_type (build_function_type
8537                                         (void_type_node, void_list_node));
8538
8539               pfvlist = tree_cons (NULL_TREE, PFV, void_list_node);
8540
8541               push_lang_context (lang_name_c);
8542               /* Note that we do not call pushdecl for this function;
8543                  there's no reason that this declaration should be
8544                  accessible to anyone.  */
8545               atexit_fndecl
8546                 = define_function ("atexit",
8547                                    build_function_type (void_type_node,
8548                                                         pfvlist),
8549                                    NOT_BUILT_IN, 
8550                                    /*pfn=*/0,
8551                                    NULL_PTR);
8552               mark_used (atexit_fndecl);
8553               Atexit = default_conversion (atexit_fndecl);
8554               pop_lang_context ();
8555               pop_obstacks ();
8556             }
8557               
8558           /* Call build_cleanup before we enter the anonymous function
8559              so that any access checks will be done relative to the
8560              current scope, rather than the scope of the anonymous
8561              function.  */
8562           build_cleanup (decl);
8563
8564           /* Now start the function.  */
8565           cleanup = start_anon_func ();
8566
8567           /* Now, recompute the cleanup.  It may contain SAVE_EXPRs
8568              that refer to the original function, rather than the
8569              anonymous one.  That will make the back-end think that
8570              nested functions are in use, which causes confusion.  */
8571           saved_flag_access_control = flag_access_control;
8572           flag_access_control = 0;
8573           fcall = build_cleanup (decl);
8574           flag_access_control = saved_flag_access_control;
8575
8576           /* Finish off the function.  */
8577           expand_expr_stmt (fcall);
8578           end_anon_func ();
8579
8580           /* Call atexit with the cleanup function.  */
8581           mark_addressable (cleanup);
8582           cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
8583           fcall = build_function_call (Atexit, 
8584                                        expr_tree_cons (NULL_TREE, 
8585                                                        cleanup, 
8586                                                        NULL_TREE));
8587           expand_expr_stmt (fcall);
8588         }
8589
8590       expand_end_cond ();
8591       /* Resume old (possibly temporary) allocation.  */
8592       pop_obstacks ();
8593     }
8594   else
8595     {
8596       /* This code takes into account memory allocation policy of
8597          `start_decl'.  Namely, if TYPE_NEEDS_CONSTRUCTING does not
8598          hold for this object, then we must make permanent the storage
8599          currently in the temporary obstack.  */
8600       if (!TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
8601         preserve_initializer ();
8602       static_aggregates = perm_tree_cons (init, decl, static_aggregates);
8603     }
8604 }
8605 \f
8606 /* Make TYPE a complete type based on INITIAL_VALUE.
8607    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8608    2 if there was no information (in which case assume 0 if DO_DEFAULT).  */
8609
8610 int
8611 complete_array_type (type, initial_value, do_default)
8612      tree type, initial_value;
8613      int do_default;
8614 {
8615   register tree maxindex = NULL_TREE;
8616   int value = 0;
8617   
8618   /* Allocate on the same obstack as TYPE.  */
8619   push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8620   
8621   if (initial_value)
8622     {
8623       /* Note MAXINDEX  is really the maximum index,
8624          one less than the size.  */
8625       if (TREE_CODE (initial_value) == STRING_CST)
8626         {
8627           int eltsize
8628             = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8629           maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8630                                    / eltsize) - 1, 0);
8631         }
8632       else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8633         {
8634           tree elts = CONSTRUCTOR_ELTS (initial_value);
8635           maxindex = size_binop (MINUS_EXPR, integer_zero_node, size_one_node);
8636           for (; elts; elts = TREE_CHAIN (elts))
8637             {
8638               if (TREE_PURPOSE (elts))
8639                 maxindex = TREE_PURPOSE (elts);
8640               else
8641                 maxindex = size_binop (PLUS_EXPR, maxindex, size_one_node);
8642             }
8643           maxindex = copy_node (maxindex);
8644         }
8645       else
8646         {
8647           /* Make an error message unless that happened already.  */
8648           if (initial_value != error_mark_node)
8649             value = 1;
8650           else
8651             initial_value = NULL_TREE;
8652
8653           /* Prevent further error messages.  */
8654           maxindex = build_int_2 (0, 0);
8655         }
8656     }
8657
8658   if (!maxindex)
8659     {
8660       if (do_default)
8661         maxindex = build_int_2 (0, 0);
8662       value = 2;
8663     }
8664
8665   if (maxindex)
8666     {
8667       tree itype;
8668       tree domain;
8669
8670       domain = build_index_type (maxindex);
8671       TYPE_DOMAIN (type) = domain;
8672
8673       if (! TREE_TYPE (maxindex))
8674         TREE_TYPE (maxindex) = domain;
8675       if (initial_value)
8676         itype = TREE_TYPE (initial_value);
8677       else
8678         itype = NULL;
8679       if (itype && !TYPE_DOMAIN (itype))
8680         TYPE_DOMAIN (itype) = domain;
8681       /* The type of the main variant should never be used for arrays
8682          of different sizes.  It should only ever be completed with the
8683          size of the array.  */
8684       if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
8685         TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
8686     }
8687
8688   pop_obstacks();
8689   
8690   /* Lay out the type now that we can get the real answer.  */
8691
8692   layout_type (type);
8693
8694   return value;
8695 }
8696 \f
8697 /* Return zero if something is declared to be a member of type
8698    CTYPE when in the context of CUR_TYPE.  STRING is the error
8699    message to print in that case.  Otherwise, quietly return 1.  */
8700
8701 static int
8702 member_function_or_else (ctype, cur_type, string)
8703      tree ctype, cur_type;
8704      const char *string;
8705 {
8706   if (ctype && ctype != cur_type)
8707     {
8708       error (string, TYPE_NAME_STRING (ctype));
8709       return 0;
8710     }
8711   return 1;
8712 }
8713 \f
8714 /* Subroutine of `grokdeclarator'.  */
8715
8716 /* Generate errors possibly applicable for a given set of specifiers.
8717    This is for ARM $7.1.2.  */
8718
8719 static void
8720 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8721      tree object;
8722      const char *type;
8723      int virtualp, quals, friendp, raises, inlinep;
8724 {
8725   if (virtualp)
8726     cp_error ("`%D' declared as a `virtual' %s", object, type);
8727   if (inlinep)
8728     cp_error ("`%D' declared as an `inline' %s", object, type);
8729   if (quals)
8730     cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
8731               object, type);
8732   if (friendp)
8733     cp_error_at ("invalid friend declaration", object);
8734   if (raises)
8735     cp_error_at ("invalid exception specifications", object);
8736 }
8737
8738 /* CTYPE is class type, or null if non-class.
8739    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8740    or METHOD_TYPE.
8741    DECLARATOR is the function's name.
8742    VIRTUALP is truthvalue of whether the function is virtual or not.
8743    FLAGS are to be passed through to `grokclassfn'.
8744    QUALS are qualifiers indicating whether the function is `const'
8745    or `volatile'.
8746    RAISES is a list of exceptions that this function can raise.
8747    CHECK is 1 if we must find this method in CTYPE, 0 if we should
8748    not look, and -1 if we should not call `grokclassfn' at all.  
8749
8750    Returns `NULL_TREE' if something goes wrong, after issuing
8751    applicable error messages.  */
8752
8753 static tree
8754 grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
8755             raises, check, friendp, publicp, inlinep, funcdef_flag,
8756             template_count, in_namespace)
8757      tree ctype, type;
8758      tree declarator;
8759      tree orig_declarator;
8760      int virtualp;
8761      enum overload_flags flags;
8762      tree quals, raises;
8763      int check, friendp, publicp, inlinep, funcdef_flag, template_count;
8764      tree in_namespace;
8765 {
8766   tree cname, decl;
8767   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8768   int has_default_arg = 0;
8769   tree t;
8770
8771   if (ctype)
8772     cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8773       ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8774   else
8775     cname = NULL_TREE;
8776
8777   if (raises)
8778     {
8779       type = build_exception_variant (type, raises);
8780     }
8781
8782   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8783   /* Propagate volatile out from type to decl. */
8784   if (TYPE_VOLATILE (type))
8785     TREE_THIS_VOLATILE (decl) = 1;
8786
8787   /* If this decl has namespace scope, set that up.  */
8788   if (in_namespace)
8789     set_decl_namespace (decl, in_namespace, friendp);
8790   else if (publicp && ! ctype)
8791     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8792
8793   /* `main' and builtins have implicit 'C' linkage.  */
8794   if ((MAIN_NAME_P (declarator)
8795        || (IDENTIFIER_LENGTH (declarator) > 10
8796            && IDENTIFIER_POINTER (declarator)[0] == '_'
8797            && IDENTIFIER_POINTER (declarator)[1] == '_'
8798            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8799       && current_lang_name == lang_name_cplusplus
8800       && ctype == NULL_TREE
8801       /* NULL_TREE means global namespace.  */
8802       && DECL_CONTEXT (decl) == NULL_TREE)
8803     DECL_LANGUAGE (decl) = lang_c;
8804
8805   /* Should probably propagate const out from type to decl I bet (mrs).  */
8806   if (staticp)
8807     {
8808       DECL_STATIC_FUNCTION_P (decl) = 1;
8809       DECL_CONTEXT (decl) = ctype;
8810     }
8811
8812   if (ctype)
8813     DECL_CLASS_CONTEXT (decl) = ctype;
8814
8815   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8816     {
8817       if (processing_template_decl)
8818         error ("cannot declare `main' to be a template");
8819       if (inlinep)
8820         error ("cannot declare `main' to be inline");
8821       else if (! publicp)
8822         error ("cannot declare `main' to be static");
8823       inlinep = 0;
8824       publicp = 1;
8825     }
8826
8827   /* Members of anonymous types and local classes have no linkage; make
8828      them internal.  */
8829   if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
8830                 || hack_decl_function_context (TYPE_MAIN_DECL (ctype))))
8831     publicp = 0;
8832
8833   if (publicp)
8834     {
8835       /* [basic.link]: A name with no linkage (notably, the name of a class
8836          or enumeration declared in a local scope) shall not be used to
8837          declare an entity with linkage.
8838
8839          Only check this for public decls for now.  */
8840       t = no_linkage_check (TREE_TYPE (decl));
8841       if (t)
8842         {
8843           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8844             {
8845               if (DECL_LANGUAGE (decl) == lang_c)
8846                 /* Allow this; it's pretty common in C.  */;
8847               else
8848                 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8849                             decl);
8850             }
8851           else
8852             cp_pedwarn ("non-local function `%#D' uses local type `%T'",
8853                         decl, t);
8854         }
8855     }
8856
8857   TREE_PUBLIC (decl) = publicp;
8858   if (! publicp)
8859     {
8860       DECL_INTERFACE_KNOWN (decl) = 1;
8861       DECL_NOT_REALLY_EXTERN (decl) = 1;
8862     }
8863
8864   if (inlinep)
8865     DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8866
8867   DECL_EXTERNAL (decl) = 1;
8868   if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8869     {
8870       cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8871                 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8872       quals = NULL_TREE;
8873     }
8874
8875   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8876     grok_op_properties (decl, virtualp, check < 0);
8877
8878   if (ctype && hack_decl_function_context (decl))
8879     DECL_NO_STATIC_CHAIN (decl) = 1;
8880
8881   for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8882     if (TREE_PURPOSE (t)
8883         && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8884       {
8885         has_default_arg = 1;
8886         break;
8887       }
8888
8889   if (friendp
8890       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8891     {
8892       if (funcdef_flag)
8893         cp_error
8894           ("defining explicit specialization `%D' in friend declaration",
8895            orig_declarator);
8896       else
8897         {
8898           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8899             {
8900               /* Something like `template <class T> friend void f<T>()'.  */
8901               cp_error ("template-id `%D' in declaration of primary template", 
8902                         orig_declarator);
8903               return NULL_TREE;
8904             }
8905
8906
8907           /* A friend declaration of the form friend void f<>().  Record
8908              the information in the TEMPLATE_ID_EXPR.  */
8909           SET_DECL_IMPLICIT_INSTANTIATION (decl);
8910           DECL_TEMPLATE_INFO (decl)
8911             = perm_tree_cons (TREE_OPERAND (orig_declarator, 0),
8912                               TREE_OPERAND (orig_declarator, 1),
8913                               NULL_TREE);
8914
8915           if (has_default_arg)
8916             {
8917               cp_error ("default arguments are not allowed in declaration of friend template specialization `%D'",
8918                         decl);
8919               return NULL_TREE;
8920             }
8921
8922           if (inlinep)
8923             {
8924               cp_error ("`inline' is not allowed in declaration of friend template specialization `%D'", 
8925                         decl);
8926               return NULL_TREE;
8927             }
8928         }
8929     }
8930
8931   if (has_default_arg)
8932     add_defarg_fn (decl);
8933
8934   /* Plain overloading: will not be grok'd by grokclassfn.  */
8935   if (! ctype && ! processing_template_decl
8936       && DECL_LANGUAGE (decl) != lang_c
8937       && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
8938     set_mangled_name_for_decl (decl);
8939
8940   if (funcdef_flag)
8941     /* Make the init_value nonzero so pushdecl knows this is not
8942        tentative.  error_mark_node is replaced later with the BLOCK.  */
8943     DECL_INITIAL (decl) = error_mark_node;
8944
8945   /* Caller will do the rest of this.  */
8946   if (check < 0)
8947     return decl;
8948
8949   if (check && funcdef_flag)
8950     DECL_INITIAL (decl) = error_mark_node;
8951
8952   if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
8953     {
8954       tree tmp;
8955       /* Just handle constructors here.  We could do this
8956          inside the following if stmt, but I think
8957          that the code is more legible by breaking this
8958          case out.  See comments below for what each of
8959          the following calls is supposed to do.  */
8960       DECL_CONSTRUCTOR_P (decl) = 1;
8961
8962       grokclassfn (ctype, decl, flags, quals);
8963
8964       decl = check_explicit_specialization (orig_declarator, decl,
8965                                             template_count, 
8966                                             2 * (funcdef_flag != 0) + 
8967                                             4 * (friendp != 0));
8968       if (decl == error_mark_node)
8969         return NULL_TREE;
8970
8971       if ((! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8972           && check)
8973         {
8974           tmp = check_classfn (ctype, decl);
8975
8976           if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8977             tmp = DECL_TEMPLATE_RESULT(tmp);
8978
8979           if (tmp && DECL_ARTIFICIAL (tmp))
8980             cp_error ("definition of implicitly-declared `%D'", tmp);
8981           if (tmp && duplicate_decls (decl, tmp))
8982             return tmp;
8983         }
8984       if (! grok_ctor_properties (ctype, decl))
8985         return NULL_TREE;
8986     }
8987   else
8988     {
8989       tree tmp;
8990
8991       /* Function gets the ugly name, field gets the nice one.
8992          This call may change the type of the function (because
8993          of default parameters)!  */
8994       if (ctype != NULL_TREE)
8995         grokclassfn (ctype, decl, flags, quals);
8996
8997       decl = check_explicit_specialization (orig_declarator, decl,
8998                                             template_count, 
8999                                             2 * (funcdef_flag != 0) + 
9000                                             4 * (friendp != 0));
9001       if (decl == error_mark_node)
9002         return NULL_TREE;
9003
9004       if (ctype != NULL_TREE
9005           && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
9006           && check)
9007         {
9008           tmp = check_classfn (ctype, decl);
9009
9010           if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
9011             tmp = DECL_TEMPLATE_RESULT (tmp);
9012               
9013           if (tmp && DECL_STATIC_FUNCTION_P (tmp)
9014               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
9015             {
9016               /* Remove the `this' parm added by grokclassfn.
9017                  XXX Isn't this done in start_function, too?  */
9018               revert_static_member_fn (&decl, NULL, NULL);
9019               last_function_parms = TREE_CHAIN (last_function_parms);
9020             }
9021           if (tmp && DECL_ARTIFICIAL (tmp))
9022             cp_error ("definition of implicitly-declared `%D'", tmp);
9023           if (tmp)
9024             {
9025               /* Attempt to merge the declarations.  This can fail, in
9026                  the case of some illegal specialization declarations.  */
9027               if (!duplicate_decls (decl, tmp))
9028                 cp_error ("no `%#D' member function declared in class `%T'",
9029                           decl, ctype);
9030               return tmp;
9031             }
9032         }
9033
9034       if (ctype == NULL_TREE || check)
9035         return decl;
9036
9037       if (virtualp)
9038         {
9039           DECL_VIRTUAL_P (decl) = 1;
9040           if (DECL_VINDEX (decl) == NULL_TREE)
9041             DECL_VINDEX (decl) = error_mark_node;
9042           IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
9043         }
9044     }
9045   return decl;
9046 }
9047
9048 static tree
9049 grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
9050      tree type;
9051      tree declarator;
9052      RID_BIT_TYPE *specbits_in;
9053      int initialized;
9054      int constp;
9055      tree in_namespace;
9056 {
9057   tree decl;
9058   RID_BIT_TYPE specbits;
9059
9060   specbits = *specbits_in;
9061
9062   if (TREE_CODE (type) == OFFSET_TYPE)
9063     {
9064       /* If you declare a static member so that it
9065          can be initialized, the code will reach here.  */
9066       tree basetype = TYPE_OFFSET_BASETYPE (type);
9067       type = TREE_TYPE (type);
9068       decl = build_lang_field_decl (VAR_DECL, declarator, type);
9069       DECL_CONTEXT (decl) = basetype;
9070       DECL_CLASS_CONTEXT (decl) = basetype;
9071       DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
9072     }
9073   else
9074     {
9075       tree context;
9076
9077       if (in_namespace)
9078         context = in_namespace;
9079       else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
9080         context = current_namespace;
9081       else
9082         context = NULL_TREE;
9083
9084       decl = build_decl (VAR_DECL, declarator, complete_type (type));
9085
9086       if (context)
9087         set_decl_namespace (decl, context, 0);
9088
9089       context = DECL_CONTEXT (decl);
9090       if (declarator && context && current_lang_name != lang_name_c)
9091         DECL_ASSEMBLER_NAME (decl) = build_static_name (context, declarator);
9092     }
9093
9094   if (in_namespace)
9095     set_decl_namespace (decl, in_namespace, 0);
9096
9097   if (RIDBIT_SETP (RID_EXTERN, specbits))
9098     {
9099       DECL_THIS_EXTERN (decl) = 1;
9100       DECL_EXTERNAL (decl) = !initialized;
9101     }
9102
9103   /* In class context, static means one per class,
9104      public access, and static storage.  */
9105   if (DECL_CLASS_SCOPE_P (decl))
9106     {
9107       TREE_PUBLIC (decl) = 1;
9108       TREE_STATIC (decl) = 1;
9109       DECL_EXTERNAL (decl) = 0;
9110     }
9111   /* At top level, either `static' or no s.c. makes a definition
9112      (perhaps tentative), and absence of `static' makes it public.  */
9113   else if (toplevel_bindings_p ())
9114     {
9115       TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
9116                             && (DECL_THIS_EXTERN (decl) || ! constp));
9117       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
9118     }
9119   /* Not at top level, only `static' makes a static definition.  */
9120   else
9121     {
9122       TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
9123       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
9124     }
9125
9126   if (TREE_PUBLIC (decl))
9127     {
9128       /* [basic.link]: A name with no linkage (notably, the name of a class
9129          or enumeration declared in a local scope) shall not be used to
9130          declare an entity with linkage.
9131
9132          Only check this for public decls for now.  */
9133       tree t = no_linkage_check (TREE_TYPE (decl));
9134       if (t)
9135         {
9136           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
9137             /* Ignore for now; `enum { foo } e' is pretty common.  */;
9138           else
9139             cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
9140                         decl, t);
9141         }
9142     }
9143
9144   return decl;
9145 }
9146
9147 /* Create and return a canonical pointer to member function type, for
9148    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
9149
9150 tree
9151 build_ptrmemfunc_type (type)
9152      tree type;
9153 {
9154   tree fields[4];
9155   tree t;
9156   tree u;
9157
9158   /* If a canonical type already exists for this type, use it.  We use
9159      this method instead of type_hash_canon, because it only does a
9160      simple equality check on the list of field members.  */
9161
9162   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
9163     return t;
9164
9165   push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
9166
9167   u = make_lang_type (UNION_TYPE);
9168   SET_IS_AGGR_TYPE (u, 0);
9169   fields[0] = build_lang_field_decl (FIELD_DECL, pfn_identifier, type);
9170   fields[1] = build_lang_field_decl (FIELD_DECL, delta2_identifier,
9171                                      delta_type_node);
9172   finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
9173   TYPE_NAME (u) = NULL_TREE;
9174
9175   t = make_lang_type (RECORD_TYPE);
9176
9177   /* Let the front-end know this is a pointer to member function...  */
9178   TYPE_PTRMEMFUNC_FLAG (t) = 1;
9179   /* ... and not really an aggregate.  */
9180   SET_IS_AGGR_TYPE (t, 0);
9181
9182   fields[0] = build_lang_field_decl (FIELD_DECL, delta_identifier,
9183                                      delta_type_node);
9184   fields[1] = build_lang_field_decl (FIELD_DECL, index_identifier,
9185                                      delta_type_node);
9186   fields[2] = build_lang_field_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
9187   finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
9188
9189   pop_obstacks ();
9190
9191   /* Zap out the name so that the back-end will give us the debugging
9192      information for this anonymous RECORD_TYPE.  */
9193   TYPE_NAME (t) = NULL_TREE;
9194
9195   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
9196
9197   /* Seems to be wanted.  */
9198   CLASSTYPE_GOT_SEMICOLON (t) = 1;
9199   return t;
9200 }
9201
9202 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9203    Check to see that the definition is valid.  Issue appropriate error
9204    messages.  Return 1 if the definition is particularly bad, or 0
9205    otherwise.  */
9206
9207 int
9208 check_static_variable_definition (decl, type)
9209      tree decl;
9210      tree type;
9211 {
9212   /* Motion 10 at San Diego: If a static const integral data member is
9213      initialized with an integral constant expression, the initializer
9214      may appear either in the declaration (within the class), or in
9215      the definition, but not both.  If it appears in the class, the
9216      member is a member constant.  The file-scope definition is always
9217      required.  */
9218   if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
9219     {
9220       cp_error ("in-class initialization of static data member of non-integral type `%T'", 
9221                 type);
9222       /* If we just return the declaration, crashes will sometimes
9223          occur.  We therefore return void_type_node, as if this was a
9224          friend declaration, to cause callers to completely ignore
9225          this declaration.  */
9226       return 1;
9227     }
9228   else if (!CP_TYPE_CONST_P (type))
9229     cp_error ("ANSI C++ forbids in-class initialization of non-const static member `%D'",
9230               decl);
9231   else if (pedantic && !INTEGRAL_TYPE_P (type))
9232     cp_pedwarn ("ANSI C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
9233
9234   return 0;
9235 }
9236
9237 /* Given declspecs and a declarator,
9238    determine the name and type of the object declared
9239    and construct a ..._DECL node for it.
9240    (In one case we can return a ..._TYPE node instead.
9241     For invalid input we sometimes return 0.)
9242
9243    DECLSPECS is a chain of tree_list nodes whose value fields
9244     are the storage classes and type specifiers.
9245
9246    DECL_CONTEXT says which syntactic context this declaration is in:
9247      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
9248      FUNCDEF for a function definition.  Like NORMAL but a few different
9249       error messages in each case.  Return value may be zero meaning
9250       this definition is too screwy to try to parse.
9251      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
9252       handle member functions (which have FIELD context).
9253       Return value may be zero meaning this definition is too screwy to
9254       try to parse.
9255      PARM for a parameter declaration (either within a function prototype
9256       or before a function body).  Make a PARM_DECL, or return void_type_node.
9257      CATCHPARM for a parameter declaration before a catch clause.
9258      TYPENAME if for a typename (in a cast or sizeof).
9259       Don't make a DECL node; just return the ..._TYPE node.
9260      FIELD for a struct or union field; make a FIELD_DECL.
9261      BITFIELD for a field with specified width.
9262    INITIALIZED is 1 if the decl has an initializer.
9263
9264    ATTRLIST is a TREE_LIST node with prefix attributes in TREE_VALUE and
9265    normal attributes in TREE_PURPOSE, or NULL_TREE.
9266
9267    In the TYPENAME case, DECLARATOR is really an absolute declarator.
9268    It may also be so in the PARM case, for a prototype where the
9269    argument type is specified but not the name.
9270
9271    This function is where the complicated C meanings of `static'
9272    and `extern' are interpreted.
9273
9274    For C++, if there is any monkey business to do, the function which
9275    calls this one must do it, i.e., prepending instance variables,
9276    renaming overloaded function names, etc.
9277
9278    Note that for this C++, it is an error to define a method within a class
9279    which does not belong to that class.
9280
9281    Except in the case where SCOPE_REFs are implicitly known (such as
9282    methods within a class being redundantly qualified),
9283    declarations which involve SCOPE_REFs are returned as SCOPE_REFs
9284    (class_name::decl_name).  The caller must also deal with this.
9285
9286    If a constructor or destructor is seen, and the context is FIELD,
9287    then the type gains the attribute TREE_HAS_x.  If such a declaration
9288    is erroneous, NULL_TREE is returned.
9289
9290    QUALS is used only for FUNCDEF and MEMFUNCDEF cases.  For a member
9291    function, these are the qualifiers to give to the `this' pointer.
9292
9293    May return void_type_node if the declarator turned out to be a friend.
9294    See grokfield for details.  */
9295
9296 enum return_types { return_normal, return_ctor, return_dtor, return_conversion };
9297
9298 tree
9299 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
9300      tree declspecs;
9301      tree declarator;
9302      enum decl_context decl_context;
9303      int initialized;
9304      tree attrlist;
9305 {
9306   RID_BIT_TYPE specbits;
9307   int nclasses = 0;
9308   tree spec;
9309   tree type = NULL_TREE;
9310   int longlong = 0;
9311   int constp;
9312   int restrictp;
9313   int volatilep;
9314   int type_quals;
9315   int virtualp, explicitp, friendp, inlinep, staticp;
9316   int explicit_int = 0;
9317   int explicit_char = 0;
9318   int defaulted_int = 0;
9319   int opaque_typedef = 0;
9320   tree typedef_decl = NULL_TREE;
9321   char *name;
9322   tree typedef_type = NULL_TREE;
9323   int funcdef_flag = 0;
9324   enum tree_code innermost_code = ERROR_MARK;
9325   int bitfield = 0;
9326 #if 0
9327   /* See the code below that used this.  */
9328   tree decl_machine_attr = NULL_TREE;
9329 #endif
9330   /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
9331      All FIELD_DECLs we build here have `init' put into their DECL_INITIAL.  */
9332   tree init = NULL_TREE;
9333
9334   /* Keep track of what sort of function is being processed
9335      so that we can warn about default return values, or explicit
9336      return values which do not match prescribed defaults.  */
9337   enum return_types return_type = return_normal;
9338
9339   tree dname = NULL_TREE;
9340   tree ctype = current_class_type;
9341   tree ctor_return_type = NULL_TREE;
9342   enum overload_flags flags = NO_SPECIAL;
9343   tree quals = NULL_TREE;
9344   tree raises = NULL_TREE;
9345   int template_count = 0;
9346   tree in_namespace = NULL_TREE;
9347   tree inner_attrs;
9348   int ignore_attrs;
9349
9350   RIDBIT_RESET_ALL (specbits);
9351   if (decl_context == FUNCDEF)
9352     funcdef_flag = 1, decl_context = NORMAL;
9353   else if (decl_context == MEMFUNCDEF)
9354     funcdef_flag = -1, decl_context = FIELD;
9355   else if (decl_context == BITFIELD)
9356     bitfield = 1, decl_context = FIELD;
9357
9358   /* Look inside a declarator for the name being declared
9359      and get it as a string, for an error message.  */
9360   {
9361     tree *next = &declarator;
9362     register tree decl;
9363     name = NULL;
9364
9365     while (next && *next)
9366       {
9367         decl = *next;
9368         switch (TREE_CODE (decl))
9369           {
9370           case TREE_LIST:
9371             /* For attributes.  */
9372             next = &TREE_VALUE (decl);
9373             break;
9374
9375           case COND_EXPR:
9376             ctype = NULL_TREE;
9377             next = &TREE_OPERAND (decl, 0);
9378             break;
9379
9380           case BIT_NOT_EXPR:    /* For C++ destructors!  */
9381             {
9382               tree name = TREE_OPERAND (decl, 0);
9383               tree rename = NULL_TREE;
9384
9385               my_friendly_assert (flags == NO_SPECIAL, 152);
9386               flags = DTOR_FLAG;
9387               return_type = return_dtor;
9388               if (TREE_CODE (name) == TYPE_DECL)
9389                 TREE_OPERAND (decl, 0) = name = constructor_name (name);
9390               my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
9391               if (ctype == NULL_TREE)
9392                 {
9393                   if (current_class_type == NULL_TREE)
9394                     {
9395                       error ("destructors must be member functions");
9396                       flags = NO_SPECIAL;
9397                     }
9398                   else
9399                     {
9400                       tree t = constructor_name (current_class_name);
9401                       if (t != name)
9402                         rename = t;
9403                     }
9404                 }
9405               else
9406                 {
9407                   tree t = constructor_name (ctype);
9408                   if (t != name)
9409                     rename = t;
9410                 }
9411
9412               if (rename)
9413                 {
9414                   cp_error ("destructor `%T' must match class name `%T'",
9415                             name, rename);
9416                   TREE_OPERAND (decl, 0) = rename;
9417                 }
9418               next = &name;
9419             }
9420             break;
9421
9422           case ADDR_EXPR:       /* C++ reference declaration */
9423             /* Fall through. */
9424           case ARRAY_REF:
9425           case INDIRECT_REF:
9426             ctype = NULL_TREE;
9427             innermost_code = TREE_CODE (decl);
9428             next = &TREE_OPERAND (decl, 0);
9429             break;
9430
9431           case CALL_EXPR:
9432             if (parmlist_is_exprlist (TREE_OPERAND (decl, 1)))
9433               {
9434                 /* This is actually a variable declaration using
9435                    constructor syntax.  We need to call start_decl and
9436                    cp_finish_decl so we can get the variable
9437                    initialized...  */
9438
9439                 tree attributes, prefix_attributes;
9440
9441                 *next = TREE_OPERAND (decl, 0);
9442                 init = TREE_OPERAND (decl, 1);
9443
9444                 if (attrlist)
9445                   {
9446                     attributes = TREE_PURPOSE (attrlist);
9447                     prefix_attributes = TREE_VALUE (attrlist);
9448                   }
9449                 else
9450                   {
9451                     attributes = NULL_TREE;
9452                     prefix_attributes = NULL_TREE;
9453                   }
9454
9455                 decl = start_decl (declarator, declspecs, 1,
9456                                    attributes, prefix_attributes);
9457                 if (decl)
9458                   {
9459                     /* Look for __unused__ attribute */
9460                     if (TREE_USED (TREE_TYPE (decl)))
9461                       TREE_USED (decl) = 1;
9462                     finish_decl (decl, init, NULL_TREE);
9463                   }
9464                 else
9465                   cp_error ("invalid declarator");
9466                 return 0;
9467               }
9468             innermost_code = TREE_CODE (decl);
9469             if (decl_context == FIELD && ctype == NULL_TREE)
9470               ctype = current_class_type;
9471             if (ctype
9472                 && TREE_OPERAND (decl, 0)
9473                 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
9474                     && ((DECL_NAME (TREE_OPERAND (decl, 0))
9475                          == constructor_name_full (ctype))
9476                         || (DECL_NAME (TREE_OPERAND (decl, 0))
9477                             == constructor_name (ctype)))))
9478               TREE_OPERAND (decl, 0) = constructor_name (ctype);
9479             next = &TREE_OPERAND (decl, 0);
9480             decl = *next;
9481             if (ctype != NULL_TREE
9482                 && decl != NULL_TREE && flags != DTOR_FLAG
9483                 && decl == constructor_name (ctype))
9484               {
9485                 return_type = return_ctor;
9486                 ctor_return_type = ctype;
9487               }
9488             ctype = NULL_TREE;
9489             break;
9490             
9491           case TEMPLATE_ID_EXPR:
9492               {
9493                 tree fns = TREE_OPERAND (decl, 0);
9494
9495                 if (TREE_CODE (fns) == LOOKUP_EXPR)
9496                   fns = TREE_OPERAND (fns, 0);
9497
9498                 dname = fns;
9499                 if (TREE_CODE (dname) == COMPONENT_REF)
9500                   dname = TREE_OPERAND (dname, 1);
9501                 if (TREE_CODE (dname) != IDENTIFIER_NODE)
9502                   {
9503                     my_friendly_assert (is_overloaded_fn (dname),
9504                                         19990331);
9505                     dname = DECL_NAME (get_first_fn (dname));
9506                   }
9507               }
9508           /* Fall through. */
9509
9510           case IDENTIFIER_NODE:
9511             if (TREE_CODE (decl) == IDENTIFIER_NODE)
9512               dname = decl;
9513
9514             next = 0;
9515
9516             if (is_rid (dname))
9517               {
9518                 cp_error ("declarator-id missing; using reserved word `%D'",
9519                           dname);
9520                 name = IDENTIFIER_POINTER (dname);
9521               }
9522             if (! IDENTIFIER_OPNAME_P (dname)
9523                 /* GNU/Linux headers use '__op'.  Arrgh.  */
9524                 || (IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname)))
9525               name = IDENTIFIER_POINTER (dname);
9526             else
9527               {
9528                 if (IDENTIFIER_TYPENAME_P (dname))
9529                   {
9530                     my_friendly_assert (flags == NO_SPECIAL, 154);
9531                     flags = TYPENAME_FLAG;
9532                     ctor_return_type = TREE_TYPE (dname);
9533                     return_type = return_conversion;
9534                   }
9535                 name = operator_name_string (dname);
9536               }
9537             break;
9538
9539             /* C++ extension */
9540           case SCOPE_REF:
9541             {
9542               /* Perform error checking, and decide on a ctype.  */
9543               tree cname = TREE_OPERAND (decl, 0);
9544               if (cname == NULL_TREE)
9545                 ctype = NULL_TREE;
9546               else if (TREE_CODE (cname) == NAMESPACE_DECL)
9547                 {
9548                   ctype = NULL_TREE;
9549                   in_namespace = TREE_OPERAND (decl, 0);
9550                   TREE_OPERAND (decl, 0) = NULL_TREE;
9551                 }
9552               else if (! is_aggr_type (cname, 1))
9553                 TREE_OPERAND (decl, 0) = NULL_TREE;
9554               /* Must test TREE_OPERAND (decl, 1), in case user gives
9555                  us `typedef (class::memfunc)(int); memfunc *memfuncptr;'  */
9556               else if (TREE_OPERAND (decl, 1)
9557                        && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9558                 ctype = cname;
9559               else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
9560                        || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
9561                 {
9562                   cp_error ("`%T::%D' is not a valid declarator", cname,
9563                             TREE_OPERAND (decl, 1));
9564                   cp_error ("  perhaps you want `typename %T::%D' to make it a type",
9565                             cname, TREE_OPERAND (decl, 1));
9566                   return void_type_node;
9567                 }
9568               else if (ctype == NULL_TREE)
9569                 ctype = cname;
9570               else if (TREE_COMPLEXITY (decl) == current_class_depth)
9571                 TREE_OPERAND (decl, 0) = ctype;
9572               else
9573                 {
9574                   if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
9575                     {
9576                       cp_error ("type `%T' is not derived from type `%T'",
9577                                 cname, ctype);
9578                       TREE_OPERAND (decl, 0) = NULL_TREE;
9579                     }
9580                   else
9581                     ctype = cname;
9582                 }
9583
9584               if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
9585                   && ((DECL_NAME (TREE_OPERAND (decl, 1))
9586                        == constructor_name_full (ctype))
9587                       || (DECL_NAME (TREE_OPERAND (decl, 1))
9588                           == constructor_name (ctype))))
9589                 TREE_OPERAND (decl, 1) = constructor_name (ctype);
9590               next = &TREE_OPERAND (decl, 1);
9591               decl = *next;
9592               if (ctype)
9593                 {
9594                   if (TREE_CODE (decl) == IDENTIFIER_NODE
9595                       && constructor_name (ctype) == decl)
9596                     {
9597                       return_type = return_ctor;
9598                       ctor_return_type = ctype;
9599                     }
9600                   else if (TREE_CODE (decl) == BIT_NOT_EXPR
9601                            && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9602                            && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9603                                || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9604                     {
9605                       return_type = return_dtor;
9606                       ctor_return_type = ctype;
9607                       flags = DTOR_FLAG;
9608                       TREE_OPERAND (decl, 0) = constructor_name (ctype);
9609                       next = &TREE_OPERAND (decl, 0);
9610                     }
9611                 }
9612             }
9613             break;
9614
9615           case ERROR_MARK:
9616             next = 0;
9617             break;
9618
9619           case TYPE_DECL:
9620             /* Parse error puts this typespec where
9621                a declarator should go.  */
9622             cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
9623             if (TREE_TYPE (decl) == current_class_type)
9624               cp_error ("  perhaps you want `%T' for a constructor",
9625                         current_class_name);
9626             dname = DECL_NAME (decl);
9627             name = IDENTIFIER_POINTER (dname);
9628
9629             /* Avoid giving two errors for this.  */
9630             IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9631
9632             declspecs = temp_tree_cons (NULL_TREE, integer_type_node,
9633                                         declspecs);
9634             *next = dname;
9635             next = 0;
9636             break;
9637
9638           default:
9639             cp_compiler_error ("`%D' as declarator", decl);
9640             return 0; /* We used to do a 155 abort here.  */
9641           }
9642       }
9643     if (name == NULL)
9644       name = "type name";
9645   }
9646
9647   /* A function definition's declarator must have the form of
9648      a function declarator.  */
9649
9650   if (funcdef_flag && innermost_code != CALL_EXPR)
9651     return 0;
9652
9653   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9654       && innermost_code != CALL_EXPR
9655       && ! (ctype && declspecs == NULL_TREE))
9656     {
9657       cp_error ("declaration of `%D' as non-function", dname);
9658       return void_type_node;
9659     }
9660
9661   /* Anything declared one level down from the top level
9662      must be one of the parameters of a function
9663      (because the body is at least two levels down).  */
9664
9665   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9666      by not allowing C++ class definitions to specify their parameters
9667      with xdecls (must be spec.d in the parmlist).
9668
9669      Since we now wait to push a class scope until we are sure that
9670      we are in a legitimate method context, we must set oldcname
9671      explicitly (since current_class_name is not yet alive).
9672
9673      We also want to avoid calling this a PARM if it is in a namespace.  */
9674
9675   if (decl_context == NORMAL && ! namespace_bindings_p ()
9676       && ! pseudo_global_level_p ())
9677     {
9678       struct binding_level *b = current_binding_level;
9679       current_binding_level = b->level_chain;
9680       if (current_binding_level != 0 && toplevel_bindings_p ())
9681         decl_context = PARM;
9682       current_binding_level = b;
9683     }
9684
9685   /* Look through the decl specs and record which ones appear.
9686      Some typespecs are defined as built-in typenames.
9687      Others, the ones that are modifiers of other types,
9688      are represented by bits in SPECBITS: set the bits for
9689      the modifiers that appear.  Storage class keywords are also in SPECBITS.
9690
9691      If there is a typedef name or a type, store the type in TYPE.
9692      This includes builtin typedefs such as `int'.
9693
9694      Set EXPLICIT_INT if the type is `int' or `char' and did not
9695      come from a user typedef.
9696
9697      Set LONGLONG if `long' is mentioned twice.
9698
9699      For C++, constructors and destructors have their own fast treatment.  */
9700
9701   for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9702     {
9703       register int i;
9704       register tree id;
9705
9706       /* Certain parse errors slip through.  For example,
9707          `int class;' is not caught by the parser. Try
9708          weakly to recover here.  */
9709       if (TREE_CODE (spec) != TREE_LIST)
9710         return 0;
9711
9712       id = TREE_VALUE (spec);
9713
9714       if (TREE_CODE (id) == IDENTIFIER_NODE)
9715         {
9716           if (id == ridpointers[(int) RID_INT]
9717               || id == ridpointers[(int) RID_CHAR]
9718               || id == ridpointers[(int) RID_BOOL]
9719               || id == ridpointers[(int) RID_WCHAR])
9720             {
9721               if (type)
9722                 {
9723                   if (id == ridpointers[(int) RID_BOOL])
9724                     error ("`bool' is now a keyword");
9725                   else
9726                     cp_error ("extraneous `%T' ignored", id);
9727                 }
9728               else
9729                 {
9730                   if (id == ridpointers[(int) RID_INT])
9731                     explicit_int = 1;
9732                   else if (id == ridpointers[(int) RID_CHAR])
9733                     explicit_char = 1;
9734                   type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
9735                 }
9736               goto found;
9737             }
9738           /* C++ aggregate types.  */
9739           if (IDENTIFIER_HAS_TYPE_VALUE (id))
9740             {
9741               if (type)
9742                 cp_error ("multiple declarations `%T' and `%T'", type, id);
9743               else
9744                 type = IDENTIFIER_TYPE_VALUE (id);
9745               goto found;
9746             }
9747
9748           for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
9749             {
9750               if (ridpointers[i] == id)
9751                 {
9752                   if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
9753                     {
9754                       if (pedantic && ! in_system_header && warn_long_long)
9755                         pedwarn ("ANSI C++ does not support `long long'");
9756                       if (longlong)
9757                         error ("`long long long' is too long for GCC");
9758                       else
9759                         longlong = 1;
9760                     }
9761                   else if (RIDBIT_SETP (i, specbits))
9762                     pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
9763                   RIDBIT_SET (i, specbits);
9764                   goto found;
9765                 }
9766             }
9767         }
9768       /* C++ aggregate types.  */
9769       else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
9770         {
9771           if (type)
9772             cp_error ("multiple declarations `%T' and `%T'", type,
9773                       TREE_TYPE (id));
9774           else
9775             {
9776               type = TREE_TYPE (id);
9777               TREE_VALUE (spec) = type;
9778             }
9779           goto found;
9780         }
9781       if (type)
9782         error ("two or more data types in declaration of `%s'", name);
9783       else if (TREE_CODE (id) == IDENTIFIER_NODE)
9784         {
9785           register tree t = lookup_name (id, 1);
9786           if (!t || TREE_CODE (t) != TYPE_DECL)
9787             error ("`%s' fails to be a typedef or built in type",
9788                    IDENTIFIER_POINTER (id));
9789           else
9790             {
9791               type = TREE_TYPE (t);
9792 #if 0
9793               /* See the code below that used this.  */
9794               decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
9795 #endif
9796               typedef_decl = t;
9797             }
9798         }
9799       else if (id != error_mark_node)
9800         /* Can't change CLASS nodes into RECORD nodes here!  */
9801         type = id;
9802
9803     found: ;
9804     }
9805
9806   typedef_type = type;
9807
9808   /* No type at all: default to `int', and set DEFAULTED_INT
9809      because it was not a user-defined typedef.
9810      Except when we have a `typedef' inside a signature, in
9811      which case the type defaults to `unknown type' and is
9812      instantiated when assigning to a signature pointer or ref.  */
9813
9814   if (type == NULL_TREE
9815       && (RIDBIT_SETP (RID_SIGNED, specbits)
9816           || RIDBIT_SETP (RID_UNSIGNED, specbits)
9817           || RIDBIT_SETP (RID_LONG, specbits)
9818           || RIDBIT_SETP (RID_SHORT, specbits)))
9819     {
9820       /* These imply 'int'.  */
9821       type = integer_type_node;
9822       defaulted_int = 1;
9823     }
9824
9825   if (type == NULL_TREE)
9826     {
9827       explicit_int = -1;
9828       if (return_type == return_dtor)
9829         type = void_type_node;
9830       else if (return_type == return_ctor)
9831         type = build_pointer_type (ctor_return_type);
9832       else if (return_type == return_conversion)
9833         type = ctor_return_type;
9834       else if (current_class_type
9835                && IS_SIGNATURE (current_class_type)
9836                && RIDBIT_SETP (RID_TYPEDEF, specbits)
9837                && (decl_context == FIELD || decl_context == NORMAL))
9838         {
9839           explicit_int = 0;
9840           opaque_typedef = 1;
9841           type = copy_node (opaque_type_node);
9842         }
9843       else
9844         {
9845           /* We handle `main' specially here, because 'main () { }' is so
9846              common.  With no options, it is allowed.  With -Wreturn-type,
9847              it is a warning.  It is only an error with -pedantic-errors.  */
9848           int is_main = (funcdef_flag
9849                          && MAIN_NAME_P (dname)
9850                          && ctype == NULL_TREE
9851                          && in_namespace == NULL_TREE
9852                          && current_namespace == global_namespace);
9853
9854           if (in_system_header)
9855             /* Allow it, sigh.  */;
9856           else if (pedantic || ! is_main)
9857             cp_pedwarn ("ANSI C++ forbids declaration `%D' with no type",
9858                         dname);
9859           else if (warn_return_type)
9860             cp_warning ("ANSI C++ forbids declaration `%D' with no type",
9861                         dname);
9862
9863           type = integer_type_node;
9864         }
9865     }
9866   else if (return_type == return_dtor)
9867     {
9868       error ("return type specification for destructor invalid");
9869       type = void_type_node;
9870     }
9871   else if (return_type == return_ctor)
9872     {
9873       error ("return type specification for constructor invalid");
9874       type = build_pointer_type (ctor_return_type);
9875     }
9876   else if (return_type == return_conversion)
9877     {
9878       if (!same_type_p (type, ctor_return_type))
9879         cp_error ("operator `%T' declared to return `%T'",
9880                   ctor_return_type, type);
9881       else
9882         cp_pedwarn ("return type specified for `operator %T'",
9883                     ctor_return_type);
9884
9885       type = ctor_return_type;
9886     }
9887
9888   ctype = NULL_TREE;
9889
9890   /* Now process the modifiers that were specified
9891      and check for invalid combinations.  */
9892
9893   /* Long double is a special combination.  */
9894
9895   if (RIDBIT_SETP (RID_LONG, specbits)
9896       && TYPE_MAIN_VARIANT (type) == double_type_node)
9897     {
9898       RIDBIT_RESET (RID_LONG, specbits);
9899       type = build_qualified_type (long_double_type_node, 
9900                                    CP_TYPE_QUALS (type));
9901     }
9902
9903   /* Check all other uses of type modifiers.  */
9904
9905   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9906       || RIDBIT_SETP (RID_SIGNED, specbits)
9907       || RIDBIT_SETP (RID_LONG, specbits)
9908       || RIDBIT_SETP (RID_SHORT, specbits))
9909     {
9910       int ok = 0;
9911
9912       if (TREE_CODE (type) == REAL_TYPE)
9913         error ("short, signed or unsigned invalid for `%s'", name);
9914       else if (TREE_CODE (type) != INTEGER_TYPE)
9915         error ("long, short, signed or unsigned invalid for `%s'", name);
9916       else if (RIDBIT_SETP (RID_LONG, specbits)
9917                && RIDBIT_SETP (RID_SHORT, specbits))
9918         error ("long and short specified together for `%s'", name);
9919       else if ((RIDBIT_SETP (RID_LONG, specbits)
9920                 || RIDBIT_SETP (RID_SHORT, specbits))
9921                && explicit_char)
9922         error ("long or short specified with char for `%s'", name);
9923       else if ((RIDBIT_SETP (RID_LONG, specbits)
9924                 || RIDBIT_SETP (RID_SHORT, specbits))
9925                && TREE_CODE (type) == REAL_TYPE)
9926         error ("long or short specified with floating type for `%s'", name);
9927       else if (RIDBIT_SETP (RID_SIGNED, specbits)
9928                && RIDBIT_SETP (RID_UNSIGNED, specbits))
9929         error ("signed and unsigned given together for `%s'", name);
9930       else
9931         {
9932           ok = 1;
9933           if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
9934             {
9935               pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
9936                        name);
9937               if (flag_pedantic_errors)
9938                 ok = 0;
9939             }
9940         }
9941
9942       /* Discard the type modifiers if they are invalid.  */
9943       if (! ok)
9944         {
9945           RIDBIT_RESET (RID_UNSIGNED, specbits);
9946           RIDBIT_RESET (RID_SIGNED, specbits);
9947           RIDBIT_RESET (RID_LONG, specbits);
9948           RIDBIT_RESET (RID_SHORT, specbits);
9949           longlong = 0;
9950         }
9951     }
9952
9953   if (RIDBIT_SETP (RID_COMPLEX, specbits)
9954       && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9955     {
9956       error ("complex invalid for `%s'", name);
9957       RIDBIT_RESET (RID_COMPLEX, specbits);
9958     }
9959
9960   /* Decide whether an integer type is signed or not.
9961      Optionally treat bitfields as signed by default.  */
9962   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9963       /* [class.bit]
9964
9965          It is implementation-defined whether a plain (neither
9966          explicitly signed or unsigned) char, short, int, or long
9967          bit-field is signed or unsigned.
9968              
9969          Naturally, we extend this to long long as well.  Note that
9970          this does not include wchar_t.  */
9971       || (bitfield && !flag_signed_bitfields
9972           && RIDBIT_NOTSETP (RID_SIGNED, specbits)
9973           /* A typedef for plain `int' without `signed' can be
9974              controlled just like plain `int', but a typedef for
9975              `signed int' cannot be so controlled.  */
9976           && !(typedef_decl 
9977                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
9978           && (TREE_CODE (type) == INTEGER_TYPE
9979               || TREE_CODE (type) == CHAR_TYPE)
9980           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
9981     {
9982       if (longlong)
9983         type = long_long_unsigned_type_node;
9984       else if (RIDBIT_SETP (RID_LONG, specbits))
9985         type = long_unsigned_type_node;
9986       else if (RIDBIT_SETP (RID_SHORT, specbits))
9987         type = short_unsigned_type_node;
9988       else if (type == char_type_node)
9989         type = unsigned_char_type_node;
9990       else if (typedef_decl)
9991         type = unsigned_type (type);
9992       else
9993         type = unsigned_type_node;
9994     }
9995   else if (RIDBIT_SETP (RID_SIGNED, specbits)
9996            && type == char_type_node)
9997     type = signed_char_type_node;
9998   else if (longlong)
9999     type = long_long_integer_type_node;
10000   else if (RIDBIT_SETP (RID_LONG, specbits))
10001     type = long_integer_type_node;
10002   else if (RIDBIT_SETP (RID_SHORT, specbits))
10003     type = short_integer_type_node;
10004
10005   if (RIDBIT_SETP (RID_COMPLEX, specbits))
10006     {
10007       /* If we just have "complex", it is equivalent to
10008          "complex double", but if any modifiers at all are specified it is
10009          the complex form of TYPE.  E.g, "complex short" is
10010          "complex short int".  */
10011
10012       if (defaulted_int && ! longlong
10013           && ! (RIDBIT_SETP (RID_LONG, specbits)
10014                 || RIDBIT_SETP (RID_SHORT, specbits)
10015                 || RIDBIT_SETP (RID_SIGNED, specbits)
10016                 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
10017         type = complex_double_type_node;
10018       else if (type == integer_type_node)
10019         type = complex_integer_type_node;
10020       else if (type == float_type_node)
10021         type = complex_float_type_node;
10022       else if (type == double_type_node)
10023         type = complex_double_type_node;
10024       else if (type == long_double_type_node)
10025         type = complex_long_double_type_node;
10026       else
10027         type = build_complex_type (type);
10028     }
10029
10030   if (return_type == return_conversion 
10031       && (RIDBIT_SETP (RID_CONST, specbits)
10032           || RIDBIT_SETP (RID_VOLATILE, specbits)
10033           || RIDBIT_SETP (RID_RESTRICT, specbits)))
10034     cp_error ("qualifiers are not allowed on declaration of `operator %T'",
10035               ctor_return_type);
10036
10037   /* Set CONSTP if this declaration is `const', whether by
10038      explicit specification or via a typedef.
10039      Likewise for VOLATILEP.  */
10040
10041   constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
10042   restrictp = 
10043     !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
10044   volatilep = 
10045     !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
10046   type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10047                 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10048                 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10049   type = cp_build_qualified_type (type, type_quals);
10050   staticp = 0;
10051   inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
10052   virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
10053   RIDBIT_RESET (RID_VIRTUAL, specbits);
10054   explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
10055   RIDBIT_RESET (RID_EXPLICIT, specbits);
10056
10057   if (RIDBIT_SETP (RID_STATIC, specbits))
10058     staticp = 1 + (decl_context == FIELD);
10059
10060   if (virtualp && staticp == 2)
10061     {
10062       cp_error ("member `%D' cannot be declared both virtual and static",
10063                 dname);
10064       staticp = 0;
10065     }
10066   friendp = RIDBIT_SETP (RID_FRIEND, specbits);
10067   RIDBIT_RESET (RID_FRIEND, specbits);
10068
10069   /* $7.1.2, Function specifiers */
10070   if (friendp && explicitp)
10071     error ("only declarations of constructors can be `explicit'");
10072
10073   if (RIDBIT_SETP (RID_MUTABLE, specbits))
10074     {
10075       if (decl_context == PARM)
10076         {
10077           error ("non-member `%s' cannot be declared `mutable'", name);
10078           RIDBIT_RESET (RID_MUTABLE, specbits);
10079         }
10080       else if (friendp || decl_context == TYPENAME)
10081         {
10082           error ("non-object member `%s' cannot be declared `mutable'", name);
10083           RIDBIT_RESET (RID_MUTABLE, specbits);
10084         }
10085     }
10086
10087   /* Warn if two storage classes are given. Default to `auto'.  */
10088
10089   if (RIDBIT_ANY_SET (specbits))
10090     {
10091       if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
10092       if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
10093       if (decl_context == PARM && nclasses > 0)
10094         error ("storage class specifiers invalid in parameter declarations");
10095       if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10096         {
10097           if (decl_context == PARM)
10098             error ("typedef declaration invalid in parameter declaration");
10099           nclasses++;
10100         }
10101       if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
10102       if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
10103     }
10104
10105   /* Give error if `virtual' is used outside of class declaration.  */
10106   if (virtualp
10107       && (current_class_name == NULL_TREE || decl_context != FIELD))
10108     {
10109       error ("virtual outside class declaration");
10110       virtualp = 0;
10111     }
10112   if (current_class_name == NULL_TREE && RIDBIT_SETP (RID_MUTABLE, specbits))
10113     {
10114       error ("only members can be declared mutable");
10115       RIDBIT_RESET (RID_MUTABLE, specbits);
10116     }
10117
10118   /* Static anonymous unions are dealt with here.  */
10119   if (staticp && decl_context == TYPENAME
10120       && TREE_CODE (declspecs) == TREE_LIST
10121       && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
10122     decl_context = FIELD;
10123
10124   /* Give error if `const,' `volatile,' `inline,' `friend,' or `virtual'
10125      is used in a signature member function declaration.  */
10126   if (decl_context == FIELD
10127       && IS_SIGNATURE (current_class_type)
10128       && RIDBIT_NOTSETP (RID_TYPEDEF, specbits))
10129     {
10130       if (type_quals != TYPE_UNQUALIFIED)
10131         {
10132           error ("type qualifiers specified for signature member function `%s'", name);
10133           type_quals = TYPE_UNQUALIFIED;
10134         }
10135       if (inlinep)
10136         {
10137           error ("`inline' specified for signature member function `%s'", name);
10138           /* Later, we'll make signature member functions inline.  */
10139           inlinep = 0;
10140         }
10141       if (friendp)
10142         {
10143           error ("`friend' declaration in signature definition");
10144           friendp = 0;
10145         }
10146       if (virtualp)
10147         {
10148           error ("`virtual' specified for signature member function `%s'",
10149                  name);
10150           /* Later, we'll make signature member functions virtual.  */
10151           virtualp = 0;
10152         }
10153     }
10154
10155   /* Warn about storage classes that are invalid for certain
10156      kinds of declarations (parameters, typenames, etc.).  */
10157
10158   if (nclasses > 1)
10159     error ("multiple storage classes in declaration of `%s'", name);
10160   else if (decl_context != NORMAL && nclasses > 0)
10161     {
10162       if ((decl_context == PARM || decl_context == CATCHPARM)
10163           && (RIDBIT_SETP (RID_REGISTER, specbits)
10164               || RIDBIT_SETP (RID_AUTO, specbits)))
10165         ;
10166       else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10167         ;
10168       else if (decl_context == FIELD
10169                && ! IS_SIGNATURE (current_class_type)
10170                /* C++ allows static class elements  */
10171                && RIDBIT_SETP (RID_STATIC, specbits))
10172         /* C++ also allows inlines and signed and unsigned elements,
10173            but in those cases we don't come in here.  */
10174         ;
10175       else
10176         {
10177           if (decl_context == FIELD)
10178             {
10179               tree tmp = NULL_TREE;
10180               register int op = 0;
10181
10182               if (declarator)
10183                 {
10184                   /* Avoid trying to get an operand off an identifier node.  */ 
10185                   if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10186                     tmp = declarator;
10187                   else
10188                     tmp = TREE_OPERAND (declarator, 0);
10189                   op = IDENTIFIER_OPNAME_P (tmp);
10190                 }
10191               error ("storage class specified for %s `%s'",
10192                      IS_SIGNATURE (current_class_type)
10193                      ? (op
10194                         ? "signature member operator"
10195                         : "signature member function")
10196                      : (op ? "member operator" : "field"),
10197                      op ? operator_name_string (tmp) : name);
10198             }
10199           else
10200             error (((decl_context == PARM || decl_context == CATCHPARM)
10201                     ? "storage class specified for parameter `%s'"
10202                     : "storage class specified for typename"), name);
10203           RIDBIT_RESET (RID_REGISTER, specbits);
10204           RIDBIT_RESET (RID_AUTO, specbits);
10205           RIDBIT_RESET (RID_EXTERN, specbits);
10206
10207           if (decl_context == FIELD && IS_SIGNATURE (current_class_type))
10208             {
10209               RIDBIT_RESET (RID_STATIC, specbits);
10210               staticp = 0;
10211             }
10212         }
10213     }
10214   else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
10215     {
10216       if (toplevel_bindings_p ())
10217         {
10218           /* It's common practice (and completely valid) to have a const
10219              be initialized and declared extern.  */
10220           if (!(type_quals & TYPE_QUAL_CONST))
10221             warning ("`%s' initialized and declared `extern'", name);
10222         }
10223       else
10224         error ("`%s' has both `extern' and initializer", name);
10225     }
10226   else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
10227            && ! toplevel_bindings_p ())
10228     error ("nested function `%s' declared `extern'", name);
10229   else if (toplevel_bindings_p ())
10230     {
10231       if (RIDBIT_SETP (RID_AUTO, specbits))
10232         error ("top-level declaration of `%s' specifies `auto'", name);
10233     }
10234
10235   if (nclasses > 0 && friendp)
10236     error ("storage class specifiers invalid in friend function declarations");
10237
10238   /* Now figure out the structure of the declarator proper.
10239      Descend through it, creating more complex types, until we reach
10240      the declared identifier (or NULL_TREE, in an absolute declarator).  */
10241
10242   inner_attrs = NULL_TREE;
10243   ignore_attrs = 0;  
10244
10245   while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
10246          && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
10247     {
10248       /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
10249          an INDIRECT_REF (for *...),
10250          a CALL_EXPR (for ...(...)),
10251          an identifier (for the name being declared)
10252          or a null pointer (for the place in an absolute declarator
10253          where the name was omitted).
10254          For the last two cases, we have just exited the loop.
10255
10256          For C++ it could also be
10257          a SCOPE_REF (for class :: ...).  In this case, we have converted
10258          sensible names to types, and those are the values we use to
10259          qualify the member name.
10260          an ADDR_EXPR (for &...),
10261          a BIT_NOT_EXPR (for destructors)
10262
10263          At this point, TYPE is the type of elements of an array,
10264          or for a function to return, or for a pointer to point to.
10265          After this sequence of ifs, TYPE is the type of the
10266          array or function or pointer, and DECLARATOR has had its
10267          outermost layer removed.  */
10268
10269       if (type == error_mark_node)
10270         {
10271           if (TREE_CODE (declarator) == SCOPE_REF)
10272             declarator = TREE_OPERAND (declarator, 1);
10273           else
10274             declarator = TREE_OPERAND (declarator, 0);
10275           continue;
10276         }
10277       if (quals != NULL_TREE
10278           && (declarator == NULL_TREE
10279               || TREE_CODE (declarator) != SCOPE_REF))
10280         {
10281           if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
10282             ctype = TYPE_METHOD_BASETYPE (type);
10283           if (ctype != NULL_TREE)
10284             {
10285               tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
10286               ctype = grok_method_quals (ctype, dummy, quals);
10287               type = TREE_TYPE (dummy);
10288               quals = NULL_TREE;
10289             }
10290         }
10291
10292       /* See the comment for the TREE_LIST case, below.  */
10293       if (ignore_attrs)
10294         ignore_attrs = 0;
10295       else if (inner_attrs)
10296         {
10297           decl_attributes (type, inner_attrs, NULL_TREE);
10298           inner_attrs = NULL_TREE;
10299         }
10300
10301       switch (TREE_CODE (declarator))
10302         {
10303         case TREE_LIST:
10304           {
10305             /* We encode a declarator with embedded attributes using
10306                a TREE_LIST.  The attributes apply to the declarator
10307                directly inside them, so we have to skip an iteration
10308                before applying them to the type.  If the declarator just
10309                inside is the declarator-id, we apply the attrs to the
10310                decl itself.  */
10311             inner_attrs = TREE_PURPOSE (declarator);
10312             ignore_attrs = 1;
10313             declarator = TREE_VALUE (declarator);
10314           }
10315           break;
10316
10317         case ARRAY_REF:
10318           {
10319             register tree itype = NULL_TREE;
10320             register tree size = TREE_OPERAND (declarator, 1);
10321             /* The index is a signed object `sizetype' bits wide.  */
10322             tree index_type = signed_type (sizetype);
10323
10324             declarator = TREE_OPERAND (declarator, 0);
10325
10326             /* Check for some types that there cannot be arrays of.  */
10327
10328             if (TREE_CODE (type) == VOID_TYPE)
10329               {
10330                 cp_error ("declaration of `%D' as array of voids", dname);
10331                 type = error_mark_node;
10332               }
10333
10334             if (TREE_CODE (type) == FUNCTION_TYPE)
10335               {
10336                 cp_error ("declaration of `%D' as array of functions", dname);
10337                 type = error_mark_node;
10338               }
10339
10340             /* ARM $8.4.3: Since you can't have a pointer to a reference,
10341                you can't have arrays of references.  If we allowed them,
10342                then we'd be saying x[i] is valid for an array x, but
10343                then you'd have to ask: what does `*(x + i)' mean?  */
10344             if (TREE_CODE (type) == REFERENCE_TYPE)
10345               {
10346                 if (decl_context == TYPENAME)
10347                   cp_error ("cannot make arrays of references");
10348                 else
10349                   cp_error ("declaration of `%D' as array of references",
10350                             dname);
10351                 type = error_mark_node;
10352               }
10353
10354             if (TREE_CODE (type) == OFFSET_TYPE)
10355               {
10356                   cp_error ("declaration of `%D' as array of data members",
10357                             dname);
10358                 type = error_mark_node;
10359               }
10360
10361             if (TREE_CODE (type) == METHOD_TYPE)
10362               {
10363                 cp_error ("declaration of `%D' as array of function members",
10364                           dname);
10365                 type = error_mark_node;
10366               }
10367
10368             if (size == error_mark_node)
10369               type = error_mark_node;
10370             else if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
10371               {
10372                 /* [dcl.array]
10373
10374                    the constant expressions that specify the bounds of
10375                    the arrays can be omitted only for the first member
10376                    of the sequence.  */
10377                 cp_error ("declaration of `%D' as multidimensional array",
10378                           dname);
10379                 cp_error ("must have bounds for all dimensions except the first");
10380                 type = error_mark_node;
10381               }
10382
10383             if (type == error_mark_node)
10384               continue;
10385
10386             /* VC++ spells a zero-sized array with [].  */
10387             if (size == NULL_TREE && decl_context == FIELD && ! staticp
10388                 && ! RIDBIT_SETP (RID_TYPEDEF, specbits))
10389               size = integer_zero_node;
10390
10391             if (size)
10392               {
10393                 /* Must suspend_momentary here because the index
10394                    type may need to live until the end of the function.
10395                    For example, it is used in the declaration of a
10396                    variable which requires destructing at the end of
10397                    the function; then build_vec_delete will need this
10398                    value.  */
10399                 int yes = suspend_momentary ();
10400                 /* Might be a cast. */
10401                 if (TREE_CODE (size) == NOP_EXPR
10402                     && TREE_TYPE (size) == TREE_TYPE (TREE_OPERAND (size, 0)))
10403                   size = TREE_OPERAND (size, 0);
10404
10405                 /* If this involves a template parameter, it will be a
10406                    constant at instantiation time, but we don't know
10407                    what the value is yet.  Even if no template
10408                    parameters are involved, we may an expression that
10409                    is not a constant; we don't even simplify `1 + 2'
10410                    when processing a template.  */
10411                 if (processing_template_decl)
10412                   {
10413                     /* Resolve a qualified reference to an enumerator or
10414                        static const data member of ours.  */
10415                     if (TREE_CODE (size) == SCOPE_REF
10416                         && TREE_OPERAND (size, 0) == current_class_type)
10417                       {
10418                         tree t = lookup_field (current_class_type,
10419                                                TREE_OPERAND (size, 1), 0, 0);
10420                         if (t)
10421                           size = t;
10422                       }
10423
10424                     itype = make_node (INTEGER_TYPE);
10425                     TYPE_MIN_VALUE (itype) = size_zero_node;
10426                     TYPE_MAX_VALUE (itype) = build_min
10427                       (MINUS_EXPR, sizetype, size, integer_one_node);
10428                     goto dont_grok_size;
10429                   }
10430
10431                 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
10432                     && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
10433                     && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
10434                   {
10435                     cp_error ("size of array `%D' has non-integer type",
10436                               dname);
10437                     size = integer_one_node;
10438                   }
10439                 if (TREE_READONLY_DECL_P (size))
10440                   size = decl_constant_value (size);
10441                 if (pedantic && integer_zerop (size))
10442                   cp_pedwarn ("ANSI C++ forbids zero-size array `%D'", dname);
10443                 if (TREE_CONSTANT (size))
10444                   {
10445                     int old_flag_pedantic_errors = flag_pedantic_errors;
10446                     int old_pedantic = pedantic;
10447                     pedantic = flag_pedantic_errors = 1;
10448                     /* Always give overflow errors on array subscripts.  */
10449                     constant_expression_warning (size);
10450                     pedantic = old_pedantic;
10451                     flag_pedantic_errors = old_flag_pedantic_errors;
10452                     if (INT_CST_LT (size, integer_zero_node))
10453                       {
10454                         cp_error ("size of array `%D' is negative", dname);
10455                         size = integer_one_node;
10456                       }
10457                   }
10458                 else
10459                   {
10460                     if (pedantic)
10461                       {
10462                         if (dname)
10463                           cp_pedwarn ("ANSI C++ forbids variable-size array `%D'",
10464                                       dname);
10465                         else
10466                           cp_pedwarn ("ANSI C++ forbids variable-size array");
10467                       }
10468                   }
10469
10470                 itype
10471                   = fold (build_binary_op (MINUS_EXPR,
10472                                            cp_convert (index_type, size),
10473                                            cp_convert (index_type,
10474                                                        integer_one_node)));
10475                 if (! TREE_CONSTANT (itype))
10476                   itype = variable_size (itype);
10477                 else if (TREE_OVERFLOW (itype))
10478                   {
10479                     error ("overflow in array dimension");
10480                     TREE_OVERFLOW (itype) = 0;
10481                   }
10482
10483                 /* If we're a parm, we need to have a permanent type so
10484                    mangling checks for re-use will work right.  If both the
10485                    element and index types are permanent, the array type
10486                    will be, too.  */
10487                 if (decl_context == PARM
10488                     && allocation_temporary_p () && TREE_PERMANENT (type))
10489                   {
10490                     push_obstacks (&permanent_obstack, &permanent_obstack);
10491                     itype = build_index_type (itype);
10492                     pop_obstacks ();
10493                   }
10494                 else
10495                   itype = build_index_type (itype);
10496
10497               dont_grok_size:
10498                 resume_momentary (yes);
10499               }
10500
10501             type = build_cplus_array_type (type, itype);
10502             ctype = NULL_TREE;
10503           }
10504           break;
10505
10506         case CALL_EXPR:
10507           {
10508             tree arg_types;
10509             int funcdecl_p;
10510             tree inner_parms = TREE_OPERAND (declarator, 1);
10511             tree inner_decl = TREE_OPERAND (declarator, 0);
10512
10513             /* Declaring a function type.
10514                Make sure we have a valid type for the function to return.  */
10515
10516             /* We now know that the TYPE_QUALS don't apply to the
10517                decl, but to its return type.  */
10518             type_quals = TYPE_UNQUALIFIED;
10519
10520             /* Warn about some types functions can't return.  */
10521
10522             if (TREE_CODE (type) == FUNCTION_TYPE)
10523               {
10524                 error ("`%s' declared as function returning a function", name);
10525                 type = integer_type_node;
10526               }
10527             if (TREE_CODE (type) == ARRAY_TYPE)
10528               {
10529                 error ("`%s' declared as function returning an array", name);
10530                 type = integer_type_node;
10531               }
10532
10533             if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
10534               inner_decl = TREE_OPERAND (inner_decl, 1);
10535
10536             if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR) 
10537               inner_decl = dname;
10538
10539             /* Pick up type qualifiers which should be applied to `this'.  */
10540             quals = TREE_OPERAND (declarator, 2);
10541
10542             /* Pick up the exception specifications.  */
10543             raises = TREE_TYPE (declarator);
10544
10545             /* Say it's a definition only for the CALL_EXPR
10546                closest to the identifier.  */
10547             funcdecl_p
10548               = inner_decl 
10549               && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
10550                   || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR 
10551                   || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
10552             
10553             if (ctype == NULL_TREE
10554                 && decl_context == FIELD
10555                 && funcdecl_p
10556                 && (friendp == 0 || dname == current_class_name))
10557               ctype = current_class_type;
10558
10559             if (ctype && return_type == return_conversion)
10560               TYPE_HAS_CONVERSION (ctype) = 1;
10561             if (ctype && constructor_name (ctype) == dname)
10562               {
10563                 /* We are within a class's scope. If our declarator name
10564                    is the same as the class name, and we are defining
10565                    a function, then it is a constructor/destructor, and
10566                    therefore returns a void type.  */
10567
10568                 if (flags == DTOR_FLAG)
10569                   {
10570                     /* ANSI C++ June 5 1992 WP 12.4.1.  A destructor may
10571                        not be declared const or volatile.  A destructor
10572                        may not be static.  */
10573                     if (staticp == 2)
10574                       error ("destructor cannot be static member function");
10575                     if (quals)
10576                       {
10577                         cp_error ("destructors may not be `%s'",
10578                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10579                         quals = NULL_TREE;
10580                       }
10581                     if (decl_context == FIELD)
10582                       {
10583                         if (! member_function_or_else (ctype, current_class_type,
10584                                                        "destructor for alien class `%s' cannot be a member"))
10585                           return void_type_node;
10586                       }
10587                   }
10588                 else            /* It's a constructor.  */
10589                   {
10590                     if (explicitp == 1)
10591                       explicitp = 2;
10592                     /* ANSI C++ June 5 1992 WP 12.1.2.  A constructor may
10593                        not be declared const or volatile.  A constructor may
10594                        not be virtual.  A constructor may not be static.  */
10595                     if (staticp == 2)
10596                       error ("constructor cannot be static member function");
10597                     if (virtualp)
10598                       {
10599                         pedwarn ("constructors cannot be declared virtual");
10600                         virtualp = 0;
10601                       }
10602                     if (quals)
10603                       {
10604                         cp_error ("constructors may not be `%s'",
10605                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10606                         quals = NULL_TREE;
10607                       }
10608                     {
10609                       RID_BIT_TYPE tmp_bits;
10610                       bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
10611                       RIDBIT_RESET (RID_INLINE, tmp_bits);
10612                       RIDBIT_RESET (RID_STATIC, tmp_bits);
10613                       if (RIDBIT_ANY_SET (tmp_bits))
10614                         error ("return value type specifier for constructor ignored");
10615                     }
10616                     type = build_pointer_type (ctype);
10617                     if (decl_context == FIELD
10618                         && IS_SIGNATURE (current_class_type))
10619                       {
10620                         error ("constructor not allowed in signature");
10621                         return void_type_node;
10622                       }                   
10623                     else if (decl_context == FIELD)
10624                       {
10625                         if (! member_function_or_else (ctype, current_class_type,
10626                                                        "constructor for alien class `%s' cannot be member"))
10627                           return void_type_node;
10628                         TYPE_HAS_CONSTRUCTOR (ctype) = 1;
10629                         if (return_type != return_ctor)
10630                           return NULL_TREE;
10631                       }
10632                   }
10633                 if (decl_context == FIELD)
10634                   staticp = 0;
10635               }
10636             else if (friendp)
10637               {
10638                 if (initialized)
10639                   error ("can't initialize friend function `%s'", name);
10640                 if (virtualp)
10641                   {
10642                     /* Cannot be both friend and virtual.  */
10643                     error ("virtual functions cannot be friends");
10644                     RIDBIT_RESET (RID_FRIEND, specbits);
10645                     friendp = 0;
10646                   }
10647                 if (decl_context == NORMAL)
10648                   error ("friend declaration not in class definition");
10649                 if (current_function_decl && funcdef_flag)
10650                   cp_error ("can't define friend function `%s' in a local class definition",
10651                             name);
10652               }
10653
10654             /* Construct the function type and go to the next
10655                inner layer of declarator.  */
10656
10657             declarator = TREE_OPERAND (declarator, 0);
10658
10659             /* FIXME: This is where default args should be fully
10660                processed.  */
10661
10662             arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
10663
10664             if (declarator && flags == DTOR_FLAG)
10665               {
10666                 /* A destructor declared in the body of a class will
10667                    be represented as a BIT_NOT_EXPR.  But, we just
10668                    want the underlying IDENTIFIER.  */
10669                 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
10670                   declarator = TREE_OPERAND (declarator, 0);
10671                 
10672                 if (strict_prototype == 0 && arg_types == NULL_TREE)
10673                   arg_types = void_list_node;
10674                 else if (arg_types == NULL_TREE
10675                          || arg_types != void_list_node)
10676                   {
10677                     cp_error ("destructors may not have parameters");
10678                     arg_types = void_list_node;
10679                     last_function_parms = NULL_TREE;
10680                   }
10681               }
10682
10683             /* ANSI says that `const int foo ();'
10684                does not make the function foo const.  */
10685             type = build_function_type (type, arg_types);
10686
10687             {
10688               tree t;
10689               for (t = arg_types; t; t = TREE_CHAIN (t))
10690                 if (TREE_PURPOSE (t)
10691                     && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10692                   {
10693                     add_defarg_fn (type);
10694                     break;
10695                   }
10696             }
10697           }
10698           break;
10699
10700         case ADDR_EXPR:
10701         case INDIRECT_REF:
10702           /* Filter out pointers-to-references and references-to-references.
10703              We can get these if a TYPE_DECL is used.  */
10704
10705           if (TREE_CODE (type) == REFERENCE_TYPE)
10706             {
10707               error ("cannot declare %s to references",
10708                      TREE_CODE (declarator) == ADDR_EXPR
10709                      ? "references" : "pointers");
10710               declarator = TREE_OPERAND (declarator, 0);
10711               continue;
10712             }
10713
10714           if (TREE_CODE (type) == OFFSET_TYPE
10715               && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10716                   || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10717             {
10718               cp_error ("cannot declare pointer to `%#T' member",
10719                         TREE_TYPE (type));
10720               type = TREE_TYPE (type);
10721             }
10722
10723           /* Merge any constancy or volatility into the target type
10724              for the pointer.  */
10725
10726           /* We now know that the TYPE_QUALS don't apply to the decl,
10727              but to the target of the pointer.  */
10728           type_quals = TYPE_UNQUALIFIED;
10729
10730           if (IS_SIGNATURE (type))
10731             {
10732               if (TREE_CODE (declarator) == ADDR_EXPR)
10733                 {
10734                   if (CLASSTYPE_METHOD_VEC (type) == NULL_TREE
10735                       && TYPE_SIZE (type))
10736                     cp_warning ("empty signature `%T' used in signature reference declaration",
10737                                 type);
10738 #if 0
10739                   type = build_signature_reference_type (type);
10740 #else
10741                   sorry ("signature reference");
10742                   return NULL_TREE;
10743 #endif
10744                 }
10745               else
10746                 {
10747                   if (CLASSTYPE_METHOD_VEC (type) == NULL_TREE
10748                       && TYPE_SIZE (type))
10749                     cp_warning ("empty signature `%T' used in signature pointer declaration",
10750                                 type);
10751                   type = build_signature_pointer_type (type);
10752                 }
10753             }
10754           else if (TREE_CODE (declarator) == ADDR_EXPR)
10755             {
10756               if (TREE_CODE (type) == VOID_TYPE)
10757                 error ("invalid type: `void &'");
10758               else
10759                 type = build_reference_type (type);
10760             }
10761           else if (TREE_CODE (type) == METHOD_TYPE)
10762             type = build_ptrmemfunc_type (build_pointer_type (type));
10763           else
10764             type = build_pointer_type (type);
10765
10766           /* Process a list of type modifier keywords (such as
10767              const or volatile) that were given inside the `*' or `&'.  */
10768
10769           if (TREE_TYPE (declarator))
10770             {
10771               register tree typemodlist;
10772               int erred = 0;
10773
10774               constp = 0;
10775               volatilep = 0;
10776               restrictp = 0;
10777               for (typemodlist = TREE_TYPE (declarator); typemodlist;
10778                    typemodlist = TREE_CHAIN (typemodlist))
10779                 {
10780                   tree qualifier = TREE_VALUE (typemodlist);
10781
10782                   if (qualifier == ridpointers[(int) RID_CONST])
10783                     constp++;
10784                   else if (qualifier == ridpointers[(int) RID_VOLATILE])
10785                     volatilep++;
10786                   else if (qualifier == ridpointers[(int) RID_RESTRICT])
10787                     restrictp++;
10788                   else if (!erred)
10789                     {
10790                       erred = 1;
10791                       error ("invalid type modifier within pointer declarator");
10792                     }
10793                 }
10794               if (constp > 1)
10795                 pedwarn ("duplicate `const'");
10796               if (volatilep > 1)
10797                 pedwarn ("duplicate `volatile'");
10798               if (restrictp > 1)
10799                 pedwarn ("duplicate `restrict'");
10800
10801               type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10802                             | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10803                             | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10804               if (TREE_CODE (declarator) == ADDR_EXPR
10805                   && (constp || volatilep))
10806                 {
10807                   if (constp)
10808                     pedwarn ("discarding `const' applied to a reference");
10809                   if (volatilep)
10810                     pedwarn ("discarding `volatile' applied to a reference");
10811                   type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
10812                 }
10813               type = cp_build_qualified_type (type, type_quals);
10814             }
10815           declarator = TREE_OPERAND (declarator, 0);
10816           ctype = NULL_TREE;
10817           break;
10818
10819         case SCOPE_REF:
10820           {
10821             /* We have converted type names to NULL_TREE if the
10822                name was bogus, or to a _TYPE node, if not.
10823
10824                The variable CTYPE holds the type we will ultimately
10825                resolve to.  The code here just needs to build
10826                up appropriate member types.  */
10827             tree sname = TREE_OPERAND (declarator, 1);
10828             tree t;
10829
10830             /* Destructors can have their visibilities changed as well.  */
10831             if (TREE_CODE (sname) == BIT_NOT_EXPR)
10832               sname = TREE_OPERAND (sname, 0);
10833
10834             if (TREE_COMPLEXITY (declarator) == 0)
10835               /* This needs to be here, in case we are called
10836                  multiple times.  */ ;
10837             else if (TREE_COMPLEXITY (declarator) == -1)
10838               /* Namespace member. */
10839               pop_decl_namespace ();
10840             else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
10841               /* Don't fall out into global scope. Hides real bug? --eichin */ ;
10842             else if (! IS_AGGR_TYPE_CODE
10843                      (TREE_CODE (TREE_OPERAND (declarator, 0))))
10844               ;
10845             else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10846               {
10847                 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10848                    that refer to ctype.  They couldn't be resolved earlier
10849                    because we hadn't pushed into the class yet.
10850                    Example: resolve 'B<T>::type' in
10851                    'B<typename B<T>::type> B<T>::f () { }'.  */
10852                 if (current_template_parms
10853                     && uses_template_parms (type)
10854                     && uses_template_parms (current_class_type))
10855                   {
10856                     tree args = current_template_args ();
10857                     type = tsubst (type, args, /*complain=*/1, NULL_TREE);
10858                   }
10859
10860                 /* This pop_nested_class corresponds to the
10861                    push_nested_class used to push into class scope for
10862                    parsing the argument list of a function decl, in
10863                    qualified_id.  */
10864                 pop_nested_class ();
10865                 TREE_COMPLEXITY (declarator) = current_class_depth;
10866               }
10867             else
10868               my_friendly_abort (16);
10869
10870             if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10871               {
10872                 /* We had a reference to a global decl, or
10873                    perhaps we were given a non-aggregate typedef,
10874                    in which case we cleared this out, and should just
10875                    keep going as though it wasn't there.  */
10876                 declarator = sname;
10877                 continue;
10878               }
10879             ctype = TREE_OPERAND (declarator, 0);
10880
10881             t = ctype;
10882             while (t != NULL_TREE && CLASS_TYPE_P (t)) 
10883               {
10884                 if (CLASSTYPE_TEMPLATE_INFO (t) &&
10885                     !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
10886                   template_count += 1;
10887                 t = TYPE_MAIN_DECL (t);
10888                 if (DECL_LANG_SPECIFIC (t))
10889                   t = DECL_CLASS_CONTEXT (t);
10890                 else
10891                   t = NULL_TREE;
10892               }
10893
10894             if (sname == NULL_TREE)
10895               goto done_scoping;
10896
10897             if (TREE_CODE (sname) == IDENTIFIER_NODE)
10898               {
10899                 /* This is the `standard' use of the scoping operator:
10900                    basetype :: member .  */
10901
10902                 if (ctype == current_class_type)
10903                   {
10904                     /* class A {
10905                          void A::f ();
10906                        };
10907
10908                        Is this ill-formed?  */
10909
10910                     if (pedantic)
10911                       cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
10912                                   ctype, name);
10913                   }
10914                 else if (TREE_CODE (type) == FUNCTION_TYPE)
10915                   {
10916                     if (current_class_type == NULL_TREE
10917                         || friendp)
10918                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10919                                                       TYPE_ARG_TYPES (type));
10920                     else
10921                       {
10922                         cp_error ("cannot declare member function `%T::%s' within `%T'",
10923                                   ctype, name, current_class_type);
10924                         return void_type_node;
10925                       }
10926                   }
10927                 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
10928                          || TYPE_SIZE (complete_type (ctype)) != NULL_TREE)
10929                   {
10930                     /* Have to move this code elsewhere in this function.
10931                        this code is used for i.e., typedef int A::M; M *pm;
10932
10933                        It is?  How? jason 10/2/94 */
10934
10935                     if (current_class_type)
10936                       {
10937                         cp_error ("cannot declare member `%T::%s' within `%T'",
10938                                   ctype, name, current_class_type);
10939                         return void_type_node;
10940                       }
10941                     type = build_offset_type (ctype, type);
10942                   }
10943                 else if (uses_template_parms (ctype))
10944                   {
10945                     if (TREE_CODE (type) == FUNCTION_TYPE)
10946                       type
10947                         = build_cplus_method_type (ctype, TREE_TYPE (type),
10948                                                    TYPE_ARG_TYPES (type));
10949                   }
10950                 else
10951                   {
10952                     cp_error ("structure `%T' not yet defined", ctype);
10953                     return error_mark_node;
10954                   }
10955
10956                 declarator = sname;
10957               }
10958             else if (TREE_CODE (sname) == SCOPE_REF)
10959               my_friendly_abort (17);
10960             else
10961               {
10962               done_scoping:
10963                 declarator = TREE_OPERAND (declarator, 1);
10964                 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10965                   /* In this case, we will deal with it later.  */
10966                   ;
10967                 else
10968                   {
10969                     if (TREE_CODE (type) == FUNCTION_TYPE)
10970                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10971                                                       TYPE_ARG_TYPES (type));
10972                     else
10973                       type = build_offset_type (ctype, type);
10974                   }
10975               }
10976           }
10977           break;
10978
10979         case BIT_NOT_EXPR:
10980           declarator = TREE_OPERAND (declarator, 0);
10981           break;
10982
10983         case RECORD_TYPE:
10984         case UNION_TYPE:
10985         case ENUMERAL_TYPE:
10986           declarator = NULL_TREE;
10987           break;
10988
10989         case ERROR_MARK:
10990           declarator = NULL_TREE;
10991           break;
10992
10993         default:
10994           my_friendly_abort (158);
10995         }
10996     }
10997
10998   /* See the comment for the TREE_LIST case, above.  */
10999   if (inner_attrs)
11000     {
11001       if (! ignore_attrs)
11002         decl_attributes (type, inner_attrs, NULL_TREE);
11003       else if (attrlist)
11004         TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
11005       else
11006         attrlist = build_decl_list (NULL_TREE, inner_attrs);
11007     }
11008
11009   /* Now TYPE has the actual type.  */
11010
11011   if (explicitp == 1)
11012     {
11013       error ("only constructors can be declared `explicit'");
11014       explicitp = 0;
11015     }
11016
11017   if (RIDBIT_SETP (RID_MUTABLE, specbits))
11018     {
11019       if (type_quals & TYPE_QUAL_CONST)
11020         {
11021           error ("const `%s' cannot be declared `mutable'", name);
11022           RIDBIT_RESET (RID_MUTABLE, specbits);
11023         }
11024       else if (staticp)
11025         {
11026           error ("static `%s' cannot be declared `mutable'", name);
11027           RIDBIT_RESET (RID_MUTABLE, specbits);
11028         }
11029     }
11030
11031   if (declarator == NULL_TREE
11032       || TREE_CODE (declarator) == IDENTIFIER_NODE
11033       || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
11034           && (TREE_CODE (type) == FUNCTION_TYPE
11035               || TREE_CODE (type) == METHOD_TYPE)))
11036     /* OK */;
11037   else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11038     {
11039       cp_error ("template-id `%D' used as a declarator", declarator);
11040       declarator = dname;
11041     }
11042   else
11043     /* Unexpected declarator format.  */
11044     my_friendly_abort (990210);
11045
11046   /* If this is declaring a typedef name, return a TYPE_DECL.  */
11047
11048   if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
11049     {
11050       tree decl;
11051
11052       /* Note that the grammar rejects storage classes
11053          in typenames, fields or parameters.  */
11054       if (current_lang_name == lang_name_java)
11055         TYPE_FOR_JAVA (type) = 1;
11056
11057       if (decl_context == FIELD)
11058         {
11059           if (declarator == constructor_name (current_class_type))
11060             cp_pedwarn ("ANSI C++ forbids nested type `%D' with same name as enclosing class",
11061                         declarator);
11062           decl = build_lang_decl (TYPE_DECL, declarator, type);
11063           if (IS_SIGNATURE (current_class_type) && opaque_typedef)
11064             SIGNATURE_HAS_OPAQUE_TYPEDECLS (current_class_type) = 1;
11065         }
11066       else
11067         {
11068           /* Make sure this typedef lives as long as its type,
11069              since it might be used as a template parameter. */
11070           if (type != error_mark_node)
11071             push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
11072           decl = build_decl (TYPE_DECL, declarator, type);
11073           if (type != error_mark_node)
11074             pop_obstacks ();
11075         }
11076
11077       /* If the user declares "struct {...} foo" then `foo' will have
11078          an anonymous name.  Fill that name in now.  Nothing can
11079          refer to it, so nothing needs know about the name change.
11080          The TYPE_NAME field was filled in by build_struct_xref.  */
11081       if (type != error_mark_node
11082           && TYPE_NAME (type)
11083           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
11084           && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type))
11085           && CP_TYPE_QUALS (type) == TYPE_UNQUALIFIED)
11086         {
11087           tree oldname = TYPE_NAME (type);
11088           tree t;
11089
11090           /* Replace the anonymous name with the real name everywhere.  */
11091           lookup_tag_reverse (type, declarator);
11092           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
11093             if (TYPE_NAME (t) == oldname)
11094               TYPE_NAME (t) = decl;
11095
11096           if (TYPE_LANG_SPECIFIC (type))
11097             TYPE_WAS_ANONYMOUS (type) = 1;
11098
11099           /* If this is a typedef within a template class, the nested
11100              type is a (non-primary) template.  The name for the
11101              template needs updating as well.  */
11102           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
11103             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)) 
11104               = TYPE_IDENTIFIER (type);
11105
11106           /* XXX Temporarily set the scope. 
11107              When returning, start_decl expects it as NULL_TREE,
11108              and will then then set it using pushdecl. */
11109           my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 980404);
11110           if (current_class_type)
11111             DECL_CONTEXT (decl) = current_class_type;
11112           else
11113             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
11114
11115           DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
11116           DECL_ASSEMBLER_NAME (decl)
11117             = get_identifier (build_overload_name (type, 1, 1));
11118           DECL_CONTEXT (decl) = NULL_TREE;
11119
11120           /* FIXME remangle member functions; member functions of a
11121              type with external linkage have external linkage.  */
11122         }
11123
11124       if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
11125         {
11126           cp_error_at ("typedef name may not be class-qualified", decl);
11127           return NULL_TREE;
11128         }
11129       else if (quals)
11130         {
11131           if (ctype == NULL_TREE)
11132             {
11133               if (TREE_CODE (type) != METHOD_TYPE)
11134                 cp_error_at ("invalid type qualifier for non-method type", decl);
11135               else
11136                 ctype = TYPE_METHOD_BASETYPE (type);
11137             }
11138           if (ctype != NULL_TREE)
11139             grok_method_quals (ctype, decl, quals);
11140         }
11141
11142       if (RIDBIT_SETP (RID_SIGNED, specbits)
11143           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
11144         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
11145
11146       if (RIDBIT_SETP (RID_MUTABLE, specbits))
11147         error ("non-object member `%s' cannot be declared mutable", name);
11148
11149       bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
11150                       inlinep, friendp, raises != NULL_TREE);
11151
11152       if (initialized)
11153         error ("typedef declaration includes an initializer");
11154
11155       return decl;
11156     }
11157
11158   /* Detect the case of an array type of unspecified size
11159      which came, as such, direct from a typedef name.
11160      We must copy the type, so that each identifier gets
11161      a distinct type, so that each identifier's size can be
11162      controlled separately by its own initializer.  */
11163
11164   if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
11165       && TYPE_DOMAIN (type) == NULL_TREE)
11166     {
11167       type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
11168     }
11169
11170   /* If this is a type name (such as, in a cast or sizeof),
11171      compute the type and return it now.  */
11172
11173   if (decl_context == TYPENAME)
11174     {
11175       /* Note that the grammar rejects storage classes
11176          in typenames, fields or parameters.  */
11177       if (type_quals != TYPE_UNQUALIFIED)
11178         {
11179           if (IS_SIGNATURE (type))
11180             error ("type qualifiers specified for signature type");
11181           type_quals = TYPE_UNQUALIFIED;
11182         }
11183
11184       /* Special case: "friend class foo" looks like a TYPENAME context.  */
11185       if (friendp)
11186         {
11187           if (type_quals != TYPE_UNQUALIFIED)
11188             {
11189               cp_error ("type qualifiers specified for friend class declaration");
11190               type_quals = TYPE_UNQUALIFIED;
11191             }
11192           if (inlinep)
11193             {
11194               cp_error ("`inline' specified for friend class declaration");
11195               inlinep = 0;
11196             }
11197
11198           /* Only try to do this stuff if we didn't already give up.  */
11199           if (type != integer_type_node)
11200             {
11201               /* A friendly class?  */
11202               if (current_class_type)
11203                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
11204               else
11205                 error ("trying to make class `%s' a friend of global scope",
11206                        TYPE_NAME_STRING (type));
11207               type = void_type_node;
11208             }
11209         }
11210       else if (quals)
11211         {
11212           tree dummy = build_decl (TYPE_DECL, declarator, type);
11213           if (ctype == NULL_TREE)
11214             {
11215               my_friendly_assert (TREE_CODE (type) == METHOD_TYPE, 159);
11216               ctype = TYPE_METHOD_BASETYPE (type);
11217             }
11218           grok_method_quals (ctype, dummy, quals);
11219           type = TREE_TYPE (dummy);
11220         }
11221
11222       return type;
11223     }
11224   else if (declarator == NULL_TREE && decl_context != PARM
11225            && decl_context != CATCHPARM
11226            && TREE_CODE (type) != UNION_TYPE
11227            && ! bitfield)
11228     {
11229       cp_error ("abstract declarator `%T' used as declaration", type);
11230       declarator = make_anon_name ();
11231     }
11232
11233   /* `void' at top level (not within pointer)
11234      is allowed only in typedefs or type names.
11235      We don't complain about parms either, but that is because
11236      a better error message can be made later.  */
11237
11238   if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
11239     {
11240       if (! declarator)
11241         error ("unnamed variable or field declared void");
11242       else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
11243         {
11244           if (IDENTIFIER_OPNAME_P (declarator))
11245             my_friendly_abort (356);
11246           else
11247             error ("variable or field `%s' declared void", name);
11248         }
11249       else
11250         error ("variable or field declared void");
11251       type = integer_type_node;
11252     }
11253
11254   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
11255      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
11256
11257   if (decl_context == PARM || decl_context == CATCHPARM)
11258     {
11259       if (ctype || in_namespace)
11260         error ("cannot use `::' in parameter declaration");
11261
11262       /* A parameter declared as an array of T is really a pointer to T.
11263          One declared as a function is really a pointer to a function.
11264          One declared as a member is really a pointer to member.  */
11265
11266       if (TREE_CODE (type) == ARRAY_TYPE)
11267         {
11268           /* Transfer const-ness of array into that of type pointed to.  */
11269           type = build_pointer_type (TREE_TYPE (type));
11270           type_quals = TYPE_UNQUALIFIED;
11271         }
11272       else if (TREE_CODE (type) == FUNCTION_TYPE)
11273         type = build_pointer_type (type);
11274       else if (TREE_CODE (type) == OFFSET_TYPE)
11275         type = build_pointer_type (type);
11276       else if (TREE_CODE (type) == VOID_TYPE && declarator)
11277         {
11278           error ("declaration of `%s' as void", name);
11279           return NULL_TREE;
11280         }
11281     }
11282   
11283   {
11284     register tree decl;
11285
11286     if (decl_context == PARM)
11287       {
11288         decl = build_decl (PARM_DECL, declarator, type);
11289
11290         bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
11291                         inlinep, friendp, raises != NULL_TREE);
11292         if (current_class_type
11293             && IS_SIGNATURE (current_class_type))
11294           {
11295             if (inlinep)
11296               error ("parameter of signature member function declared `inline'");
11297             if (RIDBIT_SETP (RID_AUTO, specbits))
11298               error ("parameter of signature member function declared `auto'");
11299             if (RIDBIT_SETP (RID_REGISTER, specbits))
11300               error ("parameter of signature member function declared `register'");
11301           }
11302
11303         /* Compute the type actually passed in the parmlist,
11304            for the case where there is no prototype.
11305            (For example, shorts and chars are passed as ints.)
11306            When there is a prototype, this is overridden later.  */
11307
11308         DECL_ARG_TYPE (decl) = type_promotes_to (type);
11309       }
11310     else if (decl_context == FIELD)
11311       {
11312         if (type == error_mark_node)
11313           {
11314             /* Happens when declaring arrays of sizes which
11315                are error_mark_node, for example.  */
11316             decl = NULL_TREE;
11317           }
11318         else if (in_namespace && !friendp)
11319           {
11320             /* Something like struct S { int N::j; };  */
11321             cp_error ("invalid use of `::'");
11322             decl = NULL_TREE;
11323           }
11324         else if (TREE_CODE (type) == FUNCTION_TYPE)
11325           {
11326             int publicp = 0;
11327             tree function_context;
11328
11329             /* We catch the others as conflicts with the builtin
11330                typedefs.  */
11331             if (friendp && declarator == ridpointers[(int) RID_SIGNED])
11332               {
11333                 cp_error ("function `%D' cannot be declared friend",
11334                           declarator);
11335                 friendp = 0;
11336               }
11337
11338             if (friendp == 0)
11339               {
11340                 if (ctype == NULL_TREE)
11341                   ctype = current_class_type;
11342
11343                 if (ctype == NULL_TREE)
11344                   {
11345                     cp_error ("can't make `%D' into a method -- not in a class",
11346                               declarator);
11347                     return void_type_node;
11348                   }
11349
11350                 /* ``A union may [ ... ] not [ have ] virtual functions.''
11351                    ARM 9.5 */
11352                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
11353                   {
11354                     cp_error ("function `%D' declared virtual inside a union",
11355                               declarator);
11356                     return void_type_node;
11357                   }
11358
11359                 if (declarator == ansi_opname[(int) NEW_EXPR]
11360                     || declarator == ansi_opname[(int) VEC_NEW_EXPR]
11361                     || declarator == ansi_opname[(int) DELETE_EXPR]
11362                     || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
11363                   {
11364                     if (virtualp)
11365                       {
11366                         cp_error ("`%D' cannot be declared virtual, since it is always static",
11367                                   declarator);
11368                         virtualp = 0;
11369                       }
11370                   }
11371                 else if (staticp < 2)
11372                   type = build_cplus_method_type (ctype, TREE_TYPE (type),
11373                                                   TYPE_ARG_TYPES (type));
11374               }
11375
11376             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
11377             function_context = (ctype != NULL_TREE) ? 
11378               hack_decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
11379             publicp = (! friendp || ! staticp)
11380               && function_context == NULL_TREE;
11381             decl = grokfndecl (ctype, type, 
11382                                TREE_CODE (declarator) != TEMPLATE_ID_EXPR
11383                                ? declarator : dname,
11384                                declarator,
11385                                virtualp, flags, quals, raises,
11386                                friendp ? -1 : 0, friendp, publicp, inlinep,
11387                                funcdef_flag, template_count, in_namespace);
11388             if (decl == NULL_TREE)
11389               return decl;
11390 #if 0
11391             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
11392             /* The decl and setting of decl_machine_attr is also turned off.  */
11393             decl = build_decl_attribute_variant (decl, decl_machine_attr);
11394 #endif
11395
11396             /* [class.conv.ctor]
11397
11398                A constructor declared without the function-specifier
11399                explicit that can be called with a single parameter
11400                specifies a conversion from the type of its first
11401                parameter to the type of its class.  Such a constructor
11402                is called a converting constructor.  */
11403             if (explicitp == 2)
11404               DECL_NONCONVERTING_P (decl) = 1;
11405             else if (DECL_CONSTRUCTOR_P (decl))
11406               {
11407                 /* The constructor can be called with exactly one
11408                    parameter if there is at least one parameter, and
11409                    any subsequent parameters have default arguments.
11410                    We don't look at the first parameter, which is
11411                    really just the `this' parameter for the new
11412                    object.  */
11413                 tree arg_types = 
11414                   TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)));
11415
11416                 /* Skip the `in_chrg' argument too, if present.  */
11417                 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (decl)))
11418                   arg_types = TREE_CHAIN (arg_types);
11419
11420                 if (arg_types == void_list_node
11421                     || (arg_types 
11422                         && TREE_CHAIN (arg_types) 
11423                         && TREE_CHAIN (arg_types) != void_list_node
11424                         && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
11425                   DECL_NONCONVERTING_P (decl) = 1;
11426               }
11427           }
11428         else if (TREE_CODE (type) == METHOD_TYPE)
11429           {
11430             /* We only get here for friend declarations of
11431                members of other classes.  */
11432             /* All method decls are public, so tell grokfndecl to set
11433                TREE_PUBLIC, also.  */
11434             decl = grokfndecl (ctype, type, declarator, declarator,
11435                                virtualp, flags, quals, raises,
11436                                friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
11437                                template_count, in_namespace);
11438             if (decl == NULL_TREE)
11439               return NULL_TREE;
11440           }
11441         else if (!staticp && ! processing_template_decl
11442                  && TYPE_SIZE (complete_type (type)) == NULL_TREE
11443                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
11444           {
11445             if (declarator)
11446               cp_error ("field `%D' has incomplete type", declarator);
11447             else
11448               cp_error ("name `%T' has incomplete type", type);
11449
11450             /* If we're instantiating a template, tell them which
11451                instantiation made the field's type be incomplete.  */
11452             if (current_class_type
11453                 && TYPE_NAME (current_class_type)
11454                 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
11455                 && declspecs && TREE_VALUE (declspecs)
11456                 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
11457               cp_error ("  in instantiation of template `%T'",
11458                         current_class_type);
11459
11460             type = error_mark_node;
11461             decl = NULL_TREE;
11462           }
11463         else
11464           {
11465             if (friendp)
11466               {
11467                 error ("`%s' is neither function nor method; cannot be declared friend",
11468                        IDENTIFIER_POINTER (declarator));
11469                 friendp = 0;
11470               }
11471             decl = NULL_TREE;
11472           }
11473
11474         if (friendp)
11475           {
11476             /* Friends are treated specially.  */
11477             if (ctype == current_class_type)
11478               warning ("member functions are implicitly friends of their class");
11479             else
11480               {
11481                 tree t = NULL_TREE;
11482                 if (decl && DECL_NAME (decl))
11483                   {
11484                     if (template_class_depth (current_class_type) == 0)
11485                       {
11486                         decl 
11487                           = check_explicit_specialization 
11488                           (declarator, decl,
11489                            template_count, 2 * (funcdef_flag != 0) + 4);
11490                         if (decl == error_mark_node)
11491                           return error_mark_node;
11492                       }
11493
11494                     t = do_friend (ctype, declarator, decl,
11495                                    last_function_parms, attrlist, flags, quals,
11496                                    funcdef_flag);
11497                   }
11498                 if (t && funcdef_flag)
11499                   return t;
11500                 
11501                 return void_type_node;
11502               }
11503           }
11504
11505         /* Structure field.  It may not be a function, except for C++ */
11506
11507         if (decl == NULL_TREE)
11508           {
11509             if (initialized)
11510               {
11511                 if (!staticp)
11512                   {
11513                     /* An attempt is being made to initialize a non-static
11514                        member.  But, from [class.mem]:
11515                        
11516                        4 A member-declarator can contain a
11517                        constant-initializer only if it declares a static
11518                        member (_class.static_) of integral or enumeration
11519                        type, see _class.static.data_.  
11520
11521                        This used to be relatively common practice, but
11522                        the rest of the compiler does not correctly
11523                        handle the initialization unless the member is
11524                        static so we make it static below.  */
11525                     cp_pedwarn ("ANSI C++ forbids initialization of member `%D'",
11526                                 declarator);
11527                     cp_pedwarn ("making `%D' static", declarator);
11528                     staticp = 1;
11529                   }
11530
11531                 if (uses_template_parms (type))
11532                   /* We'll check at instantiation time.  */
11533                   ;
11534                 else if (check_static_variable_definition (declarator,
11535                                                            type))
11536                   /* If we just return the declaration, crashes
11537                      will sometimes occur.  We therefore return
11538                      void_type_node, as if this was a friend
11539                      declaration, to cause callers to completely
11540                      ignore this declaration.  */
11541                   return void_type_node;
11542               }
11543
11544             /* 9.2p13 [class.mem] */
11545             if (declarator == constructor_name (current_class_type)
11546                 /* Divergence from the standard:  In extern "C", we
11547                    allow non-static data members here, because C does
11548                    and /usr/include/netinet/in.h uses that.  */
11549                 && (staticp || ! in_system_header))
11550               cp_pedwarn ("ANSI C++ forbids data member `%D' with same name as enclosing class",
11551                           declarator);
11552
11553             if (staticp)
11554               {
11555                 /* C++ allows static class members.
11556                    All other work for this is done by grokfield.
11557                    This VAR_DCL is built by build_lang_field_decl.
11558                    All other VAR_DECLs are built by build_decl.  */
11559                 decl = build_lang_field_decl (VAR_DECL, declarator, type);
11560                 TREE_STATIC (decl) = 1;
11561                 /* In class context, 'static' means public access.  */
11562                 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
11563               }
11564             else
11565               {
11566                 decl = build_lang_field_decl (FIELD_DECL, declarator, type);
11567                 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11568                   {
11569                     DECL_MUTABLE_P (decl) = 1;
11570                     RIDBIT_RESET (RID_MUTABLE, specbits);
11571                   }
11572               }
11573
11574             bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
11575                             inlinep, friendp, raises != NULL_TREE);
11576           }
11577       }
11578     else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
11579       {
11580         tree original_name;
11581         int publicp = 0;
11582
11583         if (! declarator)
11584           return NULL_TREE;
11585
11586         if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11587           original_name = dname;
11588         else
11589           original_name = declarator;
11590
11591         if (RIDBIT_SETP (RID_AUTO, specbits))
11592           error ("storage class `auto' invalid for function `%s'", name);
11593         else if (RIDBIT_SETP (RID_REGISTER, specbits))
11594           error ("storage class `register' invalid for function `%s'", name);
11595
11596         /* Function declaration not at top level.
11597            Storage classes other than `extern' are not allowed
11598            and `extern' makes no difference.  */
11599         if (! toplevel_bindings_p ()
11600             && (RIDBIT_SETP (RID_STATIC, specbits)
11601                 || RIDBIT_SETP (RID_INLINE, specbits))
11602             && pedantic)
11603           {
11604             if (RIDBIT_SETP (RID_STATIC, specbits))
11605               pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
11606             else
11607               pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
11608           }
11609         
11610         if (ctype == NULL_TREE)
11611           {
11612             if (virtualp)
11613               {
11614                 error ("virtual non-class function `%s'", name);
11615                 virtualp = 0;
11616               }
11617           }
11618         else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
11619           type = build_cplus_method_type (ctype, TREE_TYPE (type),
11620                                           TYPE_ARG_TYPES (type));
11621
11622         /* Record presence of `static'.  */
11623         publicp = (ctype != NULL_TREE
11624                    || RIDBIT_SETP (RID_EXTERN, specbits)
11625                    || !RIDBIT_SETP (RID_STATIC, specbits));
11626
11627         decl = grokfndecl (ctype, type, original_name, declarator,
11628                            virtualp, flags, quals, raises,
11629                            1, friendp,
11630                            publicp, inlinep, funcdef_flag, 
11631                            template_count, in_namespace);
11632         if (decl == NULL_TREE)
11633           return NULL_TREE;
11634
11635         if (staticp == 1)
11636           {
11637             int illegal_static = 0;
11638
11639             /* Don't allow a static member function in a class, and forbid
11640                declaring main to be static.  */
11641             if (TREE_CODE (type) == METHOD_TYPE)
11642               {
11643                 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
11644                 illegal_static = 1;
11645               }
11646             else if (current_function_decl)
11647               {
11648                 /* FIXME need arm citation */
11649                 error ("cannot declare static function inside another function");
11650                 illegal_static = 1;
11651               }
11652
11653             if (illegal_static)
11654               {
11655                 staticp = 0;
11656                 RIDBIT_RESET (RID_STATIC, specbits);
11657               }
11658           }
11659       }
11660     else
11661       {
11662         /* It's a variable.  */
11663
11664         /* An uninitialized decl with `extern' is a reference.  */
11665         decl = grokvardecl (type, declarator, &specbits, 
11666                             initialized, 
11667                             (type_quals & TYPE_QUAL_CONST) != 0, 
11668                             in_namespace);
11669         bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11670                         inlinep, friendp, raises != NULL_TREE);
11671
11672         if (ctype)
11673           {
11674             DECL_CONTEXT (decl) = ctype;
11675             if (staticp == 1)
11676               {
11677                 cp_pedwarn ("static member `%D' re-declared as static", decl);
11678                 staticp = 0;
11679                 RIDBIT_RESET (RID_STATIC, specbits);
11680               }
11681             if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11682               {
11683                 cp_error ("static member `%D' declared `register'", decl);
11684                 RIDBIT_RESET (RID_REGISTER, specbits);
11685               }
11686             if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
11687               {
11688                 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
11689                             decl);
11690                 RIDBIT_RESET (RID_EXTERN, specbits);
11691               }
11692           }
11693       }
11694
11695     if (RIDBIT_SETP (RID_MUTABLE, specbits))
11696       {
11697         error ("`%s' cannot be declared mutable", name);
11698       }
11699
11700     /* Record `register' declaration for warnings on &
11701        and in case doing stupid register allocation.  */
11702
11703     if (RIDBIT_SETP (RID_REGISTER, specbits))
11704       DECL_REGISTER (decl) = 1;
11705
11706     if (RIDBIT_SETP (RID_EXTERN, specbits))
11707       DECL_THIS_EXTERN (decl) = 1;
11708
11709     if (RIDBIT_SETP (RID_STATIC, specbits))
11710       DECL_THIS_STATIC (decl) = 1;
11711
11712     /* Record constancy and volatility.  There's no need to do this
11713        when processing a template; we'll do this for the instantiated
11714        declaration based on the type of DECL.  */
11715     if (!processing_template_decl)
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 int
12117 copy_args_p (d)
12118      tree d;
12119 {
12120   tree t = FUNCTION_ARG_CHAIN (d);
12121   if (DECL_CONSTRUCTOR_P (d)
12122       && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (d)))
12123     t = TREE_CHAIN (t);
12124   if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
12125       && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
12126           == DECL_CLASS_CONTEXT (d))
12127       && (TREE_CHAIN (t) == NULL_TREE
12128           || TREE_CHAIN (t) == void_list_node
12129           || TREE_PURPOSE (TREE_CHAIN (t))))
12130     return 1;
12131   return 0;
12132 }
12133
12134 /* These memoizing functions keep track of special properties which
12135    a class may have.  `grok_ctor_properties' notices whether a class
12136    has a constructor of the form X(X&), and also complains
12137    if the class has a constructor of the form X(X).
12138    `grok_op_properties' takes notice of the various forms of
12139    operator= which are defined, as well as what sorts of type conversion
12140    may apply.  Both functions take a FUNCTION_DECL as an argument.  */
12141
12142 int
12143 grok_ctor_properties (ctype, decl)
12144      tree ctype, decl;
12145 {
12146   tree parmtypes = FUNCTION_ARG_CHAIN (decl);
12147   tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
12148
12149   /* When a type has virtual baseclasses, a magical first int argument is
12150      added to any ctor so we can tell if the class has been initialized
12151      yet.  This could screw things up in this function, so we deliberately
12152      ignore the leading int if we're in that situation.  */
12153   if (TYPE_USES_VIRTUAL_BASECLASSES (ctype))
12154     {
12155       my_friendly_assert (parmtypes
12156                           && TREE_VALUE (parmtypes) == integer_type_node,
12157                           980529);
12158       parmtypes = TREE_CHAIN (parmtypes);
12159       parmtype = TREE_VALUE (parmtypes);
12160     }
12161
12162   /* [class.copy]
12163
12164      A non-template constructor for class X is a copy constructor if
12165      its first parameter is of type X&, const X&, volatile X& or const
12166      volatile X&, and either there are no other parameters or else all
12167      other parameters have default arguments.  */
12168   if (TREE_CODE (parmtype) == REFERENCE_TYPE
12169       && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
12170       && (TREE_CHAIN (parmtypes) == NULL_TREE
12171           || TREE_CHAIN (parmtypes) == void_list_node
12172           || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
12173       && !(DECL_TEMPLATE_INSTANTIATION (decl)
12174            && is_member_template (DECL_TI_TEMPLATE (decl))))
12175     {
12176       TYPE_HAS_INIT_REF (ctype) = 1;
12177       if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
12178         TYPE_HAS_CONST_INIT_REF (ctype) = 1;
12179     }
12180   /* [class.copy]
12181
12182      A declaration of a constructor for a class X is ill-formed if its
12183      first parameter is of type (optionally cv-qualified) X and either
12184      there are no other parameters or else all other parameters have
12185      default arguments.  
12186
12187      We *don't* complain about member template instantiations that
12188      have this form, though; they can occur as we try to decide what
12189      constructor to use during overload resolution.  Since overload
12190      resolution will never prefer such a constructor to the
12191      non-template copy constructor (which is either explicitly or
12192      implicitly defined), there's no need to worry about their
12193      existence.  Theoretically, they should never even be
12194      instantiated, but that's hard to forestall.  */
12195   else if (TYPE_MAIN_VARIANT (parmtype) == ctype
12196            && (TREE_CHAIN (parmtypes) == NULL_TREE
12197                || TREE_CHAIN (parmtypes) == void_list_node
12198                || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
12199            && !(DECL_TEMPLATE_INSTANTIATION (decl)
12200                 && is_member_template (DECL_TI_TEMPLATE (decl))))
12201     {
12202       cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
12203                 ctype, ctype);
12204       SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
12205       return 0;
12206     }
12207   else if (TREE_CODE (parmtype) == VOID_TYPE
12208            || TREE_PURPOSE (parmtypes) != NULL_TREE)
12209     TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
12210
12211   return 1;
12212 }
12213
12214 /* An operator with this name can be either unary or binary.  */
12215
12216 static int
12217 ambi_op_p (name)
12218      tree name;
12219 {
12220   return (name == ansi_opname [(int) INDIRECT_REF]
12221           || name == ansi_opname [(int) ADDR_EXPR]
12222           || name == ansi_opname [(int) NEGATE_EXPR]
12223           || name == ansi_opname[(int) POSTINCREMENT_EXPR]
12224           || name == ansi_opname[(int) POSTDECREMENT_EXPR]
12225           || name == ansi_opname [(int) CONVERT_EXPR]);
12226 }
12227
12228 /* An operator with this name can only be unary.  */
12229
12230 static int
12231 unary_op_p (name)
12232      tree name;
12233 {
12234   return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
12235           || name == ansi_opname [(int) BIT_NOT_EXPR]
12236           || name == ansi_opname [(int) COMPONENT_REF]
12237           || IDENTIFIER_TYPENAME_P (name));
12238 }
12239
12240 /* Do a little sanity-checking on how they declared their operator.  */
12241
12242 void
12243 grok_op_properties (decl, virtualp, friendp)
12244      tree decl;
12245      int virtualp, friendp;
12246 {
12247   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
12248   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
12249   tree name = DECL_NAME (decl);
12250
12251   if (current_class_type == NULL_TREE)
12252     friendp = 1;
12253
12254   if (! friendp)
12255     {
12256       /* [class.copy]
12257
12258          A user-declared copy assignment operator X::operator= is a
12259          non-static non-template member function of class X with
12260          exactly one parameter of type X, X&, const X&, volatile X& or
12261          const volatile X&.  */
12262       if (name == ansi_opname[(int) MODIFY_EXPR]
12263           && !(DECL_TEMPLATE_INSTANTIATION (decl)
12264                && is_member_template (DECL_TI_TEMPLATE (decl))))
12265         ;
12266       else if (name == ansi_opname[(int) CALL_EXPR])
12267         TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
12268       else if (name == ansi_opname[(int) ARRAY_REF])
12269         TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
12270       else if (name == ansi_opname[(int) COMPONENT_REF]
12271                || name == ansi_opname[(int) MEMBER_REF])
12272         TYPE_OVERLOADS_ARROW (current_class_type) = 1;
12273       else if (name == ansi_opname[(int) NEW_EXPR])
12274         TYPE_GETS_NEW (current_class_type) |= 1;
12275       else if (name == ansi_opname[(int) DELETE_EXPR])
12276         TYPE_GETS_DELETE (current_class_type) |= 1;
12277       else if (name == ansi_opname[(int) VEC_NEW_EXPR])
12278         TYPE_GETS_NEW (current_class_type) |= 2;
12279       else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
12280         TYPE_GETS_DELETE (current_class_type) |= 2;
12281     }
12282
12283   if (name == ansi_opname[(int) NEW_EXPR]
12284       || name == ansi_opname[(int) VEC_NEW_EXPR])
12285     {
12286       /* When the compiler encounters the definition of A::operator new, it
12287          doesn't look at the class declaration to find out if it's static.  */
12288       if (methodp)
12289         revert_static_member_fn (&decl, NULL, NULL);
12290      
12291       /* Take care of function decl if we had syntax errors.  */
12292       if (argtypes == NULL_TREE)
12293         TREE_TYPE (decl)
12294           = build_function_type (ptr_type_node,
12295                                  hash_tree_chain (integer_type_node,
12296                                                   void_list_node));
12297       else
12298         TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
12299     }
12300   else if (name == ansi_opname[(int) DELETE_EXPR]
12301            || name == ansi_opname[(int) VEC_DELETE_EXPR])
12302     {
12303       if (methodp)
12304         revert_static_member_fn (&decl, NULL, NULL);
12305      
12306       if (argtypes == NULL_TREE)
12307         TREE_TYPE (decl)
12308           = build_function_type (void_type_node,
12309                                  hash_tree_chain (ptr_type_node,
12310                                                   void_list_node));
12311       else
12312         {
12313           TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
12314
12315           if (! friendp && name == ansi_opname[(int) VEC_DELETE_EXPR]
12316               && (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
12317                   != void_list_node))
12318             TYPE_VEC_DELETE_TAKES_SIZE (current_class_type) = 1;
12319         }
12320     }
12321   else
12322     {
12323       /* An operator function must either be a non-static member function
12324          or have at least one parameter of a class, a reference to a class,
12325          an enumeration, or a reference to an enumeration.  13.4.0.6 */
12326       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
12327         {
12328           if (IDENTIFIER_TYPENAME_P (name)
12329               || name == ansi_opname[(int) CALL_EXPR]
12330               || name == ansi_opname[(int) MODIFY_EXPR]
12331               || name == ansi_opname[(int) COMPONENT_REF]
12332               || name == ansi_opname[(int) ARRAY_REF])
12333             cp_error ("`%D' must be a nonstatic member function", decl);
12334           else
12335             {
12336               tree p = argtypes;
12337
12338               if (DECL_STATIC_FUNCTION_P (decl))
12339                 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
12340
12341               if (p)
12342                 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
12343                   {
12344                     tree arg = TREE_VALUE (p);
12345                     if (TREE_CODE (arg) == REFERENCE_TYPE)
12346                       arg = TREE_TYPE (arg);
12347
12348                     /* This lets bad template code slip through.  */
12349                     if (IS_AGGR_TYPE (arg)
12350                         || TREE_CODE (arg) == ENUMERAL_TYPE
12351                         || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
12352                         || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
12353                       goto foundaggr;
12354                   }
12355               cp_error
12356                 ("`%D' must have an argument of class or enumerated type",
12357                  decl);
12358             foundaggr:
12359               ;
12360             }
12361         }
12362       
12363       if (name == ansi_opname[(int) CALL_EXPR])
12364         return;                 /* No restrictions on args. */
12365
12366       if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
12367         {
12368           tree t = TREE_TYPE (name);
12369           if (TREE_CODE (t) == VOID_TYPE)
12370             pedwarn ("void is not a valid type conversion operator");
12371           else if (! friendp)
12372             {
12373               int ref = (TREE_CODE (t) == REFERENCE_TYPE);
12374               const char *what = 0;
12375               if (ref)
12376                 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
12377
12378               if (t == current_class_type)
12379                 what = "the same type";
12380               /* Don't force t to be complete here.  */
12381               else if (IS_AGGR_TYPE (t)
12382                        && TYPE_SIZE (t)
12383                        && DERIVED_FROM_P (t, current_class_type))
12384                 what = "a base class";
12385
12386               if (what)
12387                 warning ("conversion to %s%s will never use a type conversion operator",
12388                          ref ? "a reference to " : "", what);
12389             }
12390         }
12391
12392       if (name == ansi_opname[(int) MODIFY_EXPR])
12393         {
12394           tree parmtype;
12395
12396           if (list_length (argtypes) != 3 && methodp)
12397             {
12398               cp_error ("`%D' must take exactly one argument", decl);
12399               return;
12400             }
12401           parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
12402
12403           if (copy_assignment_arg_p (parmtype, virtualp)
12404               && ! friendp)
12405             {
12406               TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
12407               if (TREE_CODE (parmtype) != REFERENCE_TYPE
12408                   || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
12409                 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
12410             }
12411         }
12412       else if (name == ansi_opname[(int) COND_EXPR])
12413         {
12414           /* 13.4.0.3 */
12415           pedwarn ("ANSI C++ prohibits overloading operator ?:");
12416           if (list_length (argtypes) != 4)
12417             cp_error ("`%D' must take exactly three arguments", decl);
12418         }         
12419       else if (ambi_op_p (name))
12420         {
12421           if (list_length (argtypes) == 2)
12422             /* prefix */;
12423           else if (list_length (argtypes) == 3)
12424             {
12425               if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
12426                    || name == ansi_opname[(int) POSTDECREMENT_EXPR])
12427                   && ! processing_template_decl
12428                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
12429                 {
12430                   if (methodp)
12431                     cp_error ("postfix `%D' must take `int' as its argument",
12432                               decl);
12433                   else
12434                     cp_error
12435                       ("postfix `%D' must take `int' as its second argument",
12436                        decl);
12437                 }
12438             }
12439           else
12440             {
12441               if (methodp)
12442                 cp_error ("`%D' must take either zero or one argument", decl);
12443               else
12444                 cp_error ("`%D' must take either one or two arguments", decl);
12445             }
12446
12447           /* More Effective C++ rule 6.  */
12448           if (warn_ecpp
12449               && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12450                   || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
12451             {
12452               tree arg = TREE_VALUE (argtypes);
12453               tree ret = TREE_TYPE (TREE_TYPE (decl));
12454               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
12455                 arg = TREE_TYPE (arg);
12456               arg = TYPE_MAIN_VARIANT (arg);
12457               if (list_length (argtypes) == 2)
12458                 {
12459                   if (TREE_CODE (ret) != REFERENCE_TYPE
12460                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
12461                                        arg))
12462                     cp_warning ("prefix `%D' should return `%T'", decl,
12463                                 build_reference_type (arg));
12464                 }
12465               else
12466                 {
12467                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
12468                     cp_warning ("postfix `%D' should return `%T'", decl, arg);
12469                 }
12470             }
12471         }
12472       else if (unary_op_p (name))
12473         {
12474           if (list_length (argtypes) != 2)
12475             {
12476               if (methodp)
12477                 cp_error ("`%D' must take `void'", decl);
12478               else
12479                 cp_error ("`%D' must take exactly one argument", decl);
12480             }
12481         }
12482       else /* if (binary_op_p (name)) */
12483         {
12484           if (list_length (argtypes) != 3)
12485             {
12486               if (methodp)
12487                 cp_error ("`%D' must take exactly one argument", decl);
12488               else
12489                 cp_error ("`%D' must take exactly two arguments", decl);
12490             }
12491
12492           /* More Effective C++ rule 7.  */
12493           if (warn_ecpp
12494               && (name == ansi_opname [TRUTH_ANDIF_EXPR]
12495                   || name == ansi_opname [TRUTH_ORIF_EXPR]
12496                   || name == ansi_opname [COMPOUND_EXPR]))
12497             cp_warning ("user-defined `%D' always evaluates both arguments",
12498                         decl);
12499         }
12500
12501       /* Effective C++ rule 23.  */
12502       if (warn_ecpp
12503           && list_length (argtypes) == 3
12504           && (name == ansi_opname [PLUS_EXPR]
12505               || name == ansi_opname [MINUS_EXPR]
12506               || name == ansi_opname [TRUNC_DIV_EXPR]
12507               || name == ansi_opname [MULT_EXPR])
12508           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
12509         cp_warning ("`%D' should return by value", decl);
12510
12511       /* 13.4.0.8 */
12512       if (argtypes)
12513         for (; argtypes != void_list_node ; argtypes = TREE_CHAIN (argtypes))
12514           if (TREE_PURPOSE (argtypes))
12515             {
12516               TREE_PURPOSE (argtypes) = NULL_TREE;
12517               if (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12518                   || name == ansi_opname[(int) POSTDECREMENT_EXPR])
12519                 {
12520                   if (pedantic)
12521                     cp_pedwarn ("`%D' cannot have default arguments", decl);
12522                 }
12523               else
12524                 cp_error ("`%D' cannot have default arguments", decl);
12525             }
12526     }
12527 }
12528 \f
12529 static const char *
12530 tag_name (code)
12531      enum tag_types code;
12532 {
12533   switch (code)
12534     {
12535     case record_type:
12536       return "struct";
12537     case class_type:
12538       return "class";
12539     case union_type:
12540       return "union ";
12541     case enum_type:
12542       return "enum";
12543     case signature_type:
12544       return "signature";
12545     default:
12546       my_friendly_abort (981122);
12547     }
12548 }
12549
12550 /* Get the struct, enum or union (CODE says which) with tag NAME.
12551    Define the tag as a forward-reference if it is not defined.
12552
12553    C++: If a class derivation is given, process it here, and report
12554    an error if multiple derivation declarations are not identical.
12555
12556    If this is a definition, come in through xref_tag and only look in
12557    the current frame for the name (since C++ allows new names in any
12558    scope.)  */
12559
12560 tree
12561 xref_tag (code_type_node, name, globalize)
12562      tree code_type_node;
12563      tree name;
12564      int globalize;
12565 {
12566   enum tag_types tag_code;
12567   enum tree_code code;
12568   int temp = 0;
12569   register tree ref, t;
12570   struct binding_level *b = current_binding_level;
12571   int got_type = 0;
12572   tree attributes = NULL_TREE;
12573   tree context = NULL_TREE;
12574
12575   /* If we are called from the parser, code_type_node will sometimes be a
12576      TREE_LIST.  This indicates that the user wrote
12577      "class __attribute__ ((foo)) bar".  Extract the attributes so we can
12578      use them later.  */
12579   if (TREE_CODE (code_type_node) == TREE_LIST)
12580     {
12581       attributes = TREE_PURPOSE (code_type_node);
12582       code_type_node = TREE_VALUE (code_type_node);
12583     }
12584
12585   tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12586   switch (tag_code)
12587     {
12588     case record_type:
12589     case class_type:
12590     case signature_type:
12591       code = RECORD_TYPE;
12592       break;
12593     case union_type:
12594       code = UNION_TYPE;
12595       break;
12596     case enum_type:
12597       code = ENUMERAL_TYPE;
12598       break;
12599     default:
12600       my_friendly_abort (18);
12601     }
12602
12603   /* If a cross reference is requested, look up the type
12604      already defined for this tag and return it.  */
12605   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
12606     {
12607       t = name;
12608       name = TYPE_IDENTIFIER (t);
12609       got_type = 1;
12610     }
12611   else
12612     t = IDENTIFIER_TYPE_VALUE (name);
12613
12614   if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
12615       && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
12616     t = NULL_TREE;
12617
12618   if (! globalize)
12619     {
12620       /* If we know we are defining this tag, only look it up in
12621          this scope and don't try to find it as a type.  */
12622       ref = lookup_tag (code, name, b, 1);
12623     }
12624   else
12625     {
12626       if (t)
12627         {
12628           /* [dcl.type.elab] If the identifier resolves to a
12629              typedef-name or a template type-parameter, the
12630              elaborated-type-specifier is ill-formed.  */
12631           if (t != TYPE_MAIN_VARIANT (t)
12632               || (CLASS_TYPE_P (t) && TYPE_WAS_ANONYMOUS (t)))
12633             cp_pedwarn ("using typedef-name `%D' after `%s'",
12634                         TYPE_NAME (t), tag_name (tag_code));
12635           else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
12636             cp_error ("using template type parameter `%T' after `%s'",
12637                       t, tag_name (tag_code));
12638
12639           ref = t;
12640         }
12641       else
12642         ref = lookup_tag (code, name, b, 0);
12643           
12644       if (! ref)
12645         {
12646           /* Try finding it as a type declaration.  If that wins,
12647              use it.  */ 
12648           ref = lookup_name (name, 1);
12649
12650           if (ref != NULL_TREE
12651               && processing_template_decl
12652               && DECL_CLASS_TEMPLATE_P (ref)
12653               && template_class_depth (current_class_type) == 0)
12654             /* Since GLOBALIZE is true, we're declaring a global
12655                template, so we want this type.  */
12656             ref = DECL_RESULT (ref);
12657
12658           if (ref && TREE_CODE (ref) == TYPE_DECL
12659               && TREE_CODE (TREE_TYPE (ref)) == code)
12660             ref = TREE_TYPE (ref);
12661           else
12662             ref = NULL_TREE;
12663         }
12664
12665       if (ref && current_class_type 
12666           && template_class_depth (current_class_type) 
12667           && PROCESSING_REAL_TEMPLATE_DECL_P ()) 
12668         {
12669           /* Since GLOBALIZE is non-zero, we are not looking at a
12670              definition of this tag.  Since, in addition, we are currently
12671              processing a (member) template declaration of a template
12672              class, we must be very careful; consider:
12673
12674                template <class X>
12675                struct S1
12676
12677                template <class U>
12678                struct S2
12679                { template <class V>
12680                friend struct S1; };
12681
12682              Here, the S2::S1 declaration should not be confused with the
12683              outer declaration.  In particular, the inner version should
12684              have a template parameter of level 2, not level 1.  This
12685              would be particularly important if the member declaration
12686              were instead:
12687
12688                template <class V = U> friend struct S1;
12689
12690              say, when we should tsubst into `U' when instantiating
12691              S2.  On the other hand, when presented with:
12692
12693                  template <class T>
12694                  struct S1 {
12695                    template <class U>
12696                    struct S2 {};
12697                    template <class U>
12698                    friend struct S2;
12699                  };
12700
12701               we must find the inner binding eventually.  We
12702               accomplish this by making sure that the new type we
12703               create to represent this declaration has the right
12704               TYPE_CONTEXT.  */
12705           context = TYPE_CONTEXT (ref);
12706           ref = NULL_TREE;
12707         }
12708     }
12709
12710   push_obstacks_nochange ();
12711
12712   if (! ref)
12713     {
12714       /* If no such tag is yet defined, create a forward-reference node
12715          and record it as the "definition".
12716          When a real declaration of this type is found,
12717          the forward-reference will be altered into a real type.  */
12718
12719       /* In C++, since these migrate into the global scope, we must
12720          build them on the permanent obstack.  */
12721
12722       temp = allocation_temporary_p ();
12723       if (temp)
12724         end_temporary_allocation ();
12725
12726       if (code == ENUMERAL_TYPE)
12727         {
12728           cp_error ("use of enum `%#D' without previous declaration", name);
12729
12730           ref = make_node (ENUMERAL_TYPE);
12731
12732           /* Give the type a default layout like unsigned int
12733              to avoid crashing if it does not get defined.  */
12734           TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12735           TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
12736           TREE_UNSIGNED (ref) = 1;
12737           TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12738           TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12739           TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12740
12741           /* Enable us to recognize when a type is created in class context.
12742              To do nested classes correctly, this should probably be cleared
12743              out when we leave this classes scope.  Currently this in only
12744              done in `start_enum'.  */
12745
12746           pushtag (name, ref, globalize);
12747         }
12748       else
12749         {
12750           struct binding_level *old_b = class_binding_level;
12751
12752           ref = make_lang_type (code);
12753           TYPE_CONTEXT (ref) = context;
12754
12755           if (tag_code == signature_type)
12756             {
12757               SET_SIGNATURE (ref);
12758               /* Since a signature type will be turned into the type
12759                  of signature tables, it's not only an interface.  */
12760               CLASSTYPE_INTERFACE_ONLY (ref) = 0;
12761               SET_CLASSTYPE_INTERFACE_KNOWN (ref);
12762               /* A signature doesn't have a vtable.  */
12763               CLASSTYPE_VTABLE_NEEDS_WRITING (ref) = 0;
12764             }
12765
12766 #ifdef NONNESTED_CLASSES
12767           /* Class types don't nest the way enums do.  */
12768           class_binding_level = (struct binding_level *)0;
12769 #endif
12770           pushtag (name, ref, globalize);
12771           class_binding_level = old_b;
12772         }
12773     }
12774   else
12775     {
12776       /* If it no longer looks like a nested type, make sure it's
12777          in global scope.  
12778          If it is not an IDENTIFIER, this is not a declaration */
12779       if (b->namespace_p && !class_binding_level
12780           && TREE_CODE (name) == IDENTIFIER_NODE)
12781         {
12782           if (IDENTIFIER_NAMESPACE_VALUE (name) == NULL_TREE)
12783             SET_IDENTIFIER_NAMESPACE_VALUE (name, TYPE_NAME (ref));
12784         }
12785
12786       if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
12787         redeclare_class_template (ref, current_template_parms);
12788     }
12789
12790   /* Until the type is defined, tentatively accept whatever
12791      structure tag the user hands us.  */
12792   if (TYPE_SIZE (ref) == NULL_TREE
12793       && ref != current_class_type
12794       /* Have to check this, in case we have contradictory tag info.  */
12795       && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12796     {
12797       if (tag_code == class_type)
12798         CLASSTYPE_DECLARED_CLASS (ref) = 1;
12799       else if (tag_code == record_type || tag_code == signature_type)
12800         CLASSTYPE_DECLARED_CLASS (ref) = 0;
12801     }
12802
12803   pop_obstacks ();
12804
12805   TREE_TYPE (ref) = attributes;
12806
12807   return ref;
12808 }
12809
12810 tree
12811 xref_tag_from_type (old, id, globalize)
12812      tree old, id;
12813      int globalize;
12814 {
12815   tree code_type_node;
12816
12817   if (TREE_CODE (old) == RECORD_TYPE)
12818     code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12819                       ? class_type_node : record_type_node);
12820   else
12821     code_type_node = union_type_node;
12822
12823   if (id == NULL_TREE)
12824     id = TYPE_IDENTIFIER (old);
12825
12826   return xref_tag (code_type_node, id, globalize);
12827 }
12828
12829 /* REF is a type (named NAME), for which we have just seen some
12830    baseclasses.  BINFO is a list of those baseclasses; the
12831    TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
12832    the base-class.  CODE_TYPE_NODE indicates whether REF is a class,
12833    struct, or union.  */
12834
12835 void
12836 xref_basetypes (code_type_node, name, ref, binfo)
12837      tree code_type_node;
12838      tree name, ref;
12839      tree binfo;
12840 {
12841   /* In the declaration `A : X, Y, ... Z' we mark all the types
12842      (A, X, Y, ..., Z) so we can check for duplicates.  */
12843   tree binfos;
12844   tree base;
12845
12846   int i, len;
12847   enum tag_types tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12848
12849   if (tag_code == union_type)
12850     {
12851       cp_error ("derived union `%T' invalid", ref);
12852       return;
12853     }
12854
12855   len = list_length (binfo);
12856   push_obstacks (TYPE_OBSTACK (ref), TYPE_OBSTACK (ref));
12857
12858   /* First, make sure that any templates in base-classes are
12859      instantiated.  This ensures that if we call ourselves recursively
12860      we do not get confused about which classes are marked and which
12861      are not.  */
12862   for (base = binfo; base; base = TREE_CHAIN (base))
12863     complete_type (TREE_VALUE (base));
12864
12865   SET_CLASSTYPE_MARKED (ref);
12866   BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12867
12868   for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12869     {
12870       /* The base of a derived struct is public by default.  */
12871       int via_public
12872         = (TREE_PURPOSE (binfo) == access_public_node
12873            || TREE_PURPOSE (binfo) == access_public_virtual_node
12874            || (tag_code != class_type
12875                && (TREE_PURPOSE (binfo) == access_default_node
12876                    || TREE_PURPOSE (binfo) == access_default_virtual_node)));
12877       int via_protected
12878         = (TREE_PURPOSE (binfo) == access_protected_node
12879            || TREE_PURPOSE (binfo) == access_protected_virtual_node);
12880       int via_virtual
12881         = (TREE_PURPOSE (binfo) == access_private_virtual_node
12882            || TREE_PURPOSE (binfo) == access_protected_virtual_node
12883            || TREE_PURPOSE (binfo) == access_public_virtual_node
12884            || TREE_PURPOSE (binfo) == access_default_virtual_node);
12885       tree basetype = TREE_VALUE (binfo);
12886       tree base_binfo;
12887
12888       if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12889         basetype = TREE_TYPE (basetype);
12890       if (!basetype
12891           || (TREE_CODE (basetype) != RECORD_TYPE
12892               && TREE_CODE (basetype) != TYPENAME_TYPE
12893               && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
12894               && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
12895         {
12896           cp_error ("base type `%T' fails to be a struct or class type",
12897                     TREE_VALUE (binfo));
12898           continue;
12899         }
12900
12901       GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
12902
12903       /* This code replaces similar code in layout_basetypes.
12904          We put the complete_type first for implicit `typename'.  */
12905       if (TYPE_SIZE (basetype) == NULL_TREE
12906           && ! (current_template_parms && uses_template_parms (basetype)))
12907         {
12908           cp_error ("base class `%T' has incomplete type", basetype);
12909           continue;
12910         }
12911       else
12912         {
12913           if (CLASSTYPE_MARKED (basetype))
12914             {
12915               if (basetype == ref)
12916                 cp_error ("recursive type `%T' undefined", basetype);
12917               else
12918                 cp_error ("duplicate base type `%T' invalid", basetype);
12919               continue;
12920             }
12921
12922           if (TYPE_FOR_JAVA (basetype)
12923               && current_lang_stack == current_lang_base)
12924             TYPE_FOR_JAVA (ref) = 1;
12925
12926           /* Note that the BINFO records which describe individual
12927              inheritances are *not* shared in the lattice!  They
12928              cannot be shared because a given baseclass may be
12929              inherited with different `accessibility' by different
12930              derived classes.  (Each BINFO record describing an
12931              individual inheritance contains flags which say what
12932              the `accessibility' of that particular inheritance is.)  */
12933   
12934           base_binfo 
12935             = make_binfo (integer_zero_node, basetype,
12936                           CLASS_TYPE_P (basetype)
12937                           ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12938                           CLASS_TYPE_P (basetype)
12939                           ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
12940  
12941           TREE_VEC_ELT (binfos, i) = base_binfo;
12942           TREE_VIA_PUBLIC (base_binfo) = via_public;
12943           TREE_VIA_PROTECTED (base_binfo) = via_protected;
12944           TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12945           BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12946
12947           /* We need to unshare the binfos now so that lookups during class
12948              definition work.  */
12949           unshare_base_binfos (base_binfo);
12950
12951           SET_CLASSTYPE_MARKED (basetype);
12952
12953           /* We are free to modify these bits because they are meaningless
12954              at top level, and BASETYPE is a top-level type.  */
12955           if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
12956             {
12957               TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
12958               TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12959             }
12960
12961           if (CLASS_TYPE_P (basetype))
12962             {
12963               TYPE_GETS_NEW (ref) |= TYPE_GETS_NEW (basetype);
12964               TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12965             }
12966
12967           i += 1;
12968         }
12969     }
12970   if (i)
12971     TREE_VEC_LENGTH (binfos) = i;
12972   else
12973     BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
12974
12975   if (i > 1)
12976     TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
12977   else if (i == 1)
12978     {
12979       tree basetype = BINFO_TYPE (TREE_VEC_ELT (binfos, 0));
12980       
12981       if (CLASS_TYPE_P (basetype))
12982         TYPE_USES_MULTIPLE_INHERITANCE (ref)
12983           = TYPE_USES_MULTIPLE_INHERITANCE (basetype);
12984     }
12985
12986   if (TYPE_USES_MULTIPLE_INHERITANCE (ref))
12987     TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12988
12989   /* Unmark all the types.  */
12990   while (--i >= 0)
12991     CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
12992   CLEAR_CLASSTYPE_MARKED (ref);
12993
12994   /* Now that we know all the base-classes, set up the list of virtual
12995      bases.  */
12996   CLASSTYPE_VBASECLASSES (ref) = get_vbase_types (ref);
12997
12998   pop_obstacks ();
12999 }
13000   
13001 \f
13002 /* Begin compiling the definition of an enumeration type.
13003    NAME is its name (or null if anonymous).
13004    Returns the type object, as yet incomplete.
13005    Also records info about it so that build_enumerator
13006    may be used to declare the individual values as they are read.  */
13007
13008 tree
13009 start_enum (name)
13010      tree name;
13011 {
13012   register tree enumtype = NULL_TREE;
13013   struct binding_level *b = current_binding_level;
13014
13015   /* We are wasting space here and putting these on the permanent_obstack so
13016      that typeid(local enum) will work correctly. */
13017   push_obstacks (&permanent_obstack, &permanent_obstack);
13018
13019   /* If this is the real definition for a previous forward reference,
13020      fill in the contents in the same object that used to be the
13021      forward reference.  */
13022
13023   if (name != NULL_TREE)
13024     enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
13025
13026   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
13027     cp_error ("multiple definition of `%#T'", enumtype);
13028   else
13029     {
13030       enumtype = make_node (ENUMERAL_TYPE);
13031       pushtag (name, enumtype, 0);
13032     }
13033
13034   if (current_class_type)
13035     TREE_ADDRESSABLE (b->tags) = 1;
13036
13037   /* We don't copy this value because build_enumerator needs to do it.  */
13038   enum_next_value = integer_zero_node;
13039   enum_overflow = 0;
13040
13041   GNU_xref_decl (current_function_decl, enumtype);
13042   return enumtype;
13043 }
13044
13045 /* After processing and defining all the values of an enumeration type,
13046    install their decls in the enumeration type and finish it off.
13047    ENUMTYPE is the type object and VALUES a list of name-value pairs.
13048    Returns ENUMTYPE.  */
13049
13050 tree
13051 finish_enum (enumtype)
13052      tree enumtype;
13053 {
13054   register tree minnode = NULL_TREE, maxnode = NULL_TREE;
13055   /* Calculate the maximum value of any enumerator in this type.  */
13056
13057   tree values = TYPE_VALUES (enumtype);
13058   if (values)
13059     {
13060       tree pair;
13061
13062       for (pair = values; pair; pair = TREE_CHAIN (pair))
13063         {
13064           tree decl;
13065           tree value;
13066
13067           /* The TREE_VALUE is a CONST_DECL for this enumeration
13068              constant.  */
13069           decl = TREE_VALUE (pair);
13070
13071           /* The DECL_INITIAL will be NULL if we are processing a
13072              template declaration and this enumeration constant had no
13073              explicit initializer.  */
13074           value = DECL_INITIAL (decl);
13075           if (value && !processing_template_decl)
13076             {
13077               /* Set the TREE_TYPE for the VALUE as well.  That's so
13078                  that when we call decl_constant_value we get an
13079                  entity of the right type (but with the constant
13080                  value).  Since we shouldn't ever call
13081                  decl_constant_value on a template type, there's no
13082                  reason to do that when processing_template_decl.
13083                  And, if the expression is something like a
13084                  TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
13085                  wreak havoc on the intended type of the expression.  
13086
13087                  Of course, there's also no point in trying to compute
13088                  minimum or maximum values if we're in a template.  */
13089               TREE_TYPE (value) = enumtype;
13090
13091               if (!minnode)
13092                 minnode = maxnode = value;
13093               else if (tree_int_cst_lt (maxnode, value))
13094                 maxnode = value;
13095               else if (tree_int_cst_lt (value, minnode))
13096                 minnode = value;
13097             }
13098
13099           if (processing_template_decl) 
13100             /* If this is just a template, leave the CONST_DECL
13101                alone.  That way tsubst_copy will find CONST_DECLs for
13102                CONST_DECLs, and not INTEGER_CSTs.  */
13103             ;
13104           else
13105             /* In the list we're building up, we want the enumeration
13106                values, not the CONST_DECLs.  */
13107             TREE_VALUE (pair) = value;
13108         }
13109     }
13110   else
13111     maxnode = minnode = integer_zero_node;
13112
13113   TYPE_VALUES (enumtype) = nreverse (values);
13114
13115   if (processing_template_decl)
13116     {
13117       tree scope = current_scope ();
13118       if (scope && TREE_CODE (scope) == FUNCTION_DECL)
13119         add_tree (build_min (TAG_DEFN, enumtype));
13120     }
13121   else
13122     {
13123       int unsignedp = tree_int_cst_sgn (minnode) >= 0;
13124       int lowprec = min_precision (minnode, unsignedp);
13125       int highprec = min_precision (maxnode, unsignedp);
13126       int precision = MAX (lowprec, highprec);
13127       tree tem;
13128
13129       TYPE_SIZE (enumtype) = NULL_TREE;
13130
13131       /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'.  */
13132
13133       TYPE_PRECISION (enumtype) = precision;
13134       if (unsignedp)
13135         fixup_unsigned_type (enumtype);
13136       else
13137         fixup_signed_type (enumtype);
13138
13139       if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
13140         /* Use the width of the narrowest normal C type which is wide
13141            enough.  */ 
13142         TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
13143                                                     (precision, 1));
13144       else
13145         TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
13146
13147       TYPE_SIZE (enumtype) = 0;
13148       layout_type (enumtype);
13149     
13150       /* Fix up all variant types of this enum type.  */
13151       for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
13152            tem = TYPE_NEXT_VARIANT (tem))
13153         {
13154           TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
13155           TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
13156           TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
13157           TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
13158           TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
13159           TYPE_MODE (tem) = TYPE_MODE (enumtype);
13160           TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
13161           TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
13162           TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
13163         }
13164
13165       /* Finish debugging output for this type.  */
13166       rest_of_type_compilation (enumtype, namespace_bindings_p ());
13167     }
13168
13169   /* In start_enum we pushed obstacks.  Here, we must pop them.  */
13170   pop_obstacks ();
13171
13172   return enumtype;
13173 }
13174
13175 /* Build and install a CONST_DECL for an enumeration constant of the
13176    enumeration type TYPE whose NAME and VALUE (if any) are provided.
13177    Assignment of sequential values by default is handled here.  */
13178
13179 tree
13180 build_enumerator (name, value, type)
13181      tree name;
13182      tree value;
13183      tree type;
13184 {
13185   tree decl, result;
13186   tree context;
13187
13188   /* Remove no-op casts from the value.  */
13189   if (value)
13190     STRIP_TYPE_NOPS (value);
13191
13192  if (! processing_template_decl)
13193    {
13194      /* Validate and default VALUE.  */
13195      if (value != NULL_TREE)
13196        {
13197          if (TREE_READONLY_DECL_P (value))
13198            value = decl_constant_value (value);
13199
13200          if (TREE_CODE (value) == INTEGER_CST)
13201            {
13202              value = default_conversion (value);
13203              constant_expression_warning (value);
13204            }
13205          else
13206            {
13207              cp_error ("enumerator value for `%D' not integer constant", name);
13208              value = NULL_TREE;
13209            }
13210        }
13211
13212      /* Default based on previous value.  */
13213      if (value == NULL_TREE && ! processing_template_decl)
13214        {
13215          value = enum_next_value;
13216          if (enum_overflow)
13217            cp_error ("overflow in enumeration values at `%D'", name);
13218        }
13219
13220      /* Remove no-op casts from the value.  */
13221      if (value)
13222        STRIP_TYPE_NOPS (value);
13223 #if 0
13224      /* To fix MAX_VAL enum consts. (bkoz)  */
13225      TREE_TYPE (value) = integer_type_node;
13226 #endif
13227    }
13228
13229  /* We always have to copy here; not all INTEGER_CSTs are unshared.
13230     Even in other cases, we will later (in finish_enum) be setting the
13231     type of VALUE.  */
13232  if (value != NULL_TREE)
13233    value = copy_node (value);
13234
13235   /* C++ associates enums with global, function, or class declarations.  */
13236  
13237  context = current_scope ();
13238  if (context && context == current_class_type)
13239    /* This enum declaration is local to the class.  */
13240    decl = build_lang_field_decl (CONST_DECL, name, type);
13241  else
13242    /* It's a global enum, or it's local to a function.  (Note local to
13243       a function could mean local to a class method.  */
13244    decl = build_decl (CONST_DECL, name, type);
13245
13246  DECL_CONTEXT (decl) = FROB_CONTEXT (context);
13247  DECL_INITIAL (decl) = value;
13248  TREE_READONLY (decl) = 1;
13249
13250  if (context && context == current_class_type)
13251    /* In something like `struct S { enum E { i = 7 }; };' we put `i'
13252       on the TYPE_FIELDS list for `S'.  (That's so that you can say
13253       things like `S::i' later.)  */
13254    finish_member_declaration (decl);
13255  else
13256    {
13257      pushdecl (decl);
13258      GNU_xref_decl (current_function_decl, decl);
13259    }
13260
13261  if (! processing_template_decl)
13262    {
13263      /* Set basis for default for next value.  */
13264      enum_next_value = build_binary_op_nodefault (PLUS_EXPR, value,
13265                                                   integer_one_node, PLUS_EXPR);
13266      enum_overflow = tree_int_cst_lt (enum_next_value, value);
13267    }
13268
13269   result = saveable_tree_cons (name, decl, NULL_TREE);
13270   return result;
13271 }
13272
13273 \f
13274 static int function_depth;
13275
13276 /* Create the FUNCTION_DECL for a function definition.
13277    DECLSPECS and DECLARATOR are the parts of the declaration;
13278    they describe the function's name and the type it returns,
13279    but twisted together in a fashion that parallels the syntax of C.
13280
13281    If PRE_PARSED_P is non-zero then DECLARATOR is really the DECL for
13282    the function we are about to process; DECLSPECS are ignored.  For
13283    example, we set PRE_PARSED_P when processing the definition of
13284    inline function that was defined in-class; the definition is
13285    actually processed when the class is complete.  In this case,
13286    PRE_PARSED_P is 2.  We also set PRE_PARSED_P when instanting the
13287    body of a template function, and when constructing thunk functions
13288    and such; in these cases PRE_PARSED_P is 1.
13289    
13290    This function creates a binding context for the function body
13291    as well as setting up the FUNCTION_DECL in current_function_decl.
13292
13293    Returns 1 on success.  If the DECLARATOR is not suitable for a function
13294    (it defines a datum instead), we return 0, which tells
13295    yyparse to report a parse error.
13296
13297    For C++, we must first check whether that datum makes any sense.
13298    For example, "class A local_a(1,2);" means that variable local_a
13299    is an aggregate of type A, which should have a constructor
13300    applied to it with the argument list [1, 2].
13301
13302    @@ There is currently no way to retrieve the storage
13303    @@ allocated to FUNCTION (or all of its parms) if we return
13304    @@ something we had previously.  */
13305
13306 int
13307 start_function (declspecs, declarator, attrs, pre_parsed_p)
13308      tree declspecs, declarator, attrs;
13309      int pre_parsed_p;
13310 {
13311   tree decl1;
13312   tree ctype = NULL_TREE;
13313   tree fntype;
13314   tree restype;
13315   extern int have_extern_spec;
13316   extern int used_extern_spec;
13317   int doing_friend = 0;
13318
13319   /* Sanity check.  */
13320   my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
13321   my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
13322
13323   /* Assume, until we see it does.  */
13324   current_function_returns_value = 0;
13325   current_function_returns_null = 0;
13326   named_labels = 0;
13327   shadowed_labels = 0;
13328   current_function_assigns_this = 0;
13329   current_function_just_assigned_this = 0;
13330   current_function_parms_stored = 0;
13331   original_result_rtx = NULL_RTX;
13332   base_init_expr = NULL_TREE;
13333   current_base_init_list = NULL_TREE;
13334   current_member_init_list = NULL_TREE;
13335   ctor_label = dtor_label = NULL_TREE;
13336   static_labelno = 0;
13337
13338   clear_temp_name ();
13339
13340   /* This should only be done once on the top most decl.  */
13341   if (have_extern_spec && !used_extern_spec)
13342     {
13343       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
13344       used_extern_spec = 1;
13345     }
13346
13347   if (pre_parsed_p)
13348     {
13349       decl1 = declarator;
13350
13351 #if 0
13352       /* What was this testing for, exactly?  */
13353       if (! DECL_ARGUMENTS (decl1)
13354           && !DECL_STATIC_FUNCTION_P (decl1)
13355           && !DECL_ARTIFICIAL (decl1)
13356           && DECL_CLASS_SCOPE_P (decl1)
13357           && TYPE_IDENTIFIER (DECL_CONTEXT (decl1))
13358           && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (DECL_CONTEXT (decl1))))
13359         {
13360           tree binding = binding_for_name (DECL_NAME (decl1), 
13361                                            current_namespace);
13362           cp_error ("redeclaration of `%#D'", decl1);
13363           if (IDENTIFIER_CLASS_VALUE (DECL_NAME (decl1)))
13364             cp_error_at ("previous declaration here", IDENTIFIER_CLASS_VALUE (DECL_NAME (decl1)));
13365           else if (BINDING_VALUE (binding))
13366             cp_error_at ("previous declaration here", BINDING_VALUE (binding));
13367         }
13368 #endif
13369
13370       fntype = TREE_TYPE (decl1);
13371       if (TREE_CODE (fntype) == METHOD_TYPE)
13372         ctype = TYPE_METHOD_BASETYPE (fntype);
13373
13374       /* ANSI C++ June 5 1992 WP 11.4.5.  A friend function defined in a
13375          class is in the (lexical) scope of the class in which it is
13376          defined.  */
13377       if (!ctype && DECL_FRIEND_P (decl1))
13378         {
13379           ctype = DECL_CLASS_CONTEXT (decl1);
13380
13381           /* CTYPE could be null here if we're dealing with a template;
13382              for example, `inline friend float foo()' inside a template
13383              will have no CTYPE set.  */
13384           if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
13385             ctype = NULL_TREE;
13386           else
13387             doing_friend = 1;
13388         }
13389
13390       last_function_parms = DECL_ARGUMENTS (decl1);
13391       last_function_parm_tags = NULL_TREE;
13392     }
13393   else
13394     {
13395       decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
13396       /* If the declarator is not suitable for a function definition,
13397          cause a syntax error.  */
13398       if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
13399
13400       fntype = TREE_TYPE (decl1);
13401
13402       restype = TREE_TYPE (fntype);
13403       if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
13404         {
13405           cp_error ("semicolon missing after declaration of `%#T'", restype);
13406           shadow_tag (build_expr_list (NULL_TREE, restype));
13407           CLASSTYPE_GOT_SEMICOLON (restype) = 1;
13408           if (TREE_CODE (fntype) == FUNCTION_TYPE)
13409             fntype = build_function_type (integer_type_node,
13410                                           TYPE_ARG_TYPES (fntype));
13411           else
13412             fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
13413                                               integer_type_node,
13414                                               TYPE_ARG_TYPES (fntype));
13415           TREE_TYPE (decl1) = fntype;
13416         }
13417
13418       if (TREE_CODE (fntype) == METHOD_TYPE)
13419         ctype = TYPE_METHOD_BASETYPE (fntype);
13420       else if (DECL_MAIN_P (decl1))
13421         {
13422           /* If this doesn't return integer_type, complain.  */
13423           if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
13424             {
13425               if (pedantic || warn_return_type)
13426                 pedwarn ("return type for `main' changed to `int'");
13427               TREE_TYPE (decl1) = fntype = default_function_type;
13428             }
13429         }
13430     }
13431
13432   /* Warn if function was previously implicitly declared
13433      (but not if we warned then).  */
13434   if (! warn_implicit
13435       && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
13436     cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
13437
13438   announce_function (decl1);
13439
13440   /* Set up current_class_type, and enter the scope of the class, if
13441      appropriate.  */
13442   if (ctype)
13443     push_nested_class (ctype, 1);
13444   else if (DECL_STATIC_FUNCTION_P (decl1))
13445     push_nested_class (DECL_CONTEXT (decl1), 2);
13446
13447   /* Now that we have entered the scope of the class, we must restore
13448      the bindings for any template parameters surrounding DECL1, if it
13449      is an inline member template.  (Order is important; consider the
13450      case where a template parameter has the same name as a field of
13451      the class.)  It is not until after this point that
13452      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
13453   if (pre_parsed_p == 2)
13454     maybe_begin_member_template_processing (decl1);
13455
13456   /* We are now in the scope of the function being defined.  */
13457   current_function_decl = decl1;
13458
13459   /* Save the parm names or decls from this function's declarator
13460      where store_parm_decls will find them.  */
13461   current_function_parms = last_function_parms;
13462   current_function_parm_tags = last_function_parm_tags;
13463
13464   if (! processing_template_decl)
13465     {
13466       /* In a function definition, arg types must be complete.  */
13467       require_complete_types_for_parms (current_function_parms);
13468
13469       if (TYPE_SIZE (complete_type (TREE_TYPE (fntype))) == NULL_TREE)
13470         {
13471           cp_error ("return-type `%#T' is an incomplete type",
13472                     TREE_TYPE (fntype));
13473
13474           /* Make it return void instead, but don't change the
13475              type of the DECL_RESULT, in case we have a named return value.  */
13476           if (ctype)
13477             TREE_TYPE (decl1)
13478               = build_cplus_method_type (build_type_variant (ctype,
13479                                                              TREE_READONLY (decl1),
13480                                                              TREE_SIDE_EFFECTS (decl1)),
13481                                          void_type_node,
13482                                          FUNCTION_ARG_CHAIN (decl1));
13483           else
13484             TREE_TYPE (decl1)
13485               = build_function_type (void_type_node,
13486                                      TYPE_ARG_TYPES (TREE_TYPE (decl1)));
13487           DECL_RESULT (decl1)
13488             = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (TREE_TYPE (fntype)));
13489           TREE_READONLY (DECL_RESULT (decl1))
13490             = CP_TYPE_CONST_P (TREE_TYPE (fntype));
13491           TREE_THIS_VOLATILE (DECL_RESULT (decl1))
13492             = CP_TYPE_VOLATILE_P (TREE_TYPE (fntype));
13493         }
13494
13495       if (TYPE_LANG_SPECIFIC (TREE_TYPE (fntype))
13496           && CLASSTYPE_ABSTRACT_VIRTUALS (TREE_TYPE (fntype)))
13497         abstract_virtuals_error (decl1, TREE_TYPE (fntype));
13498     }
13499
13500   /* Effective C++ rule 15.  See also c_expand_return.  */
13501   if (warn_ecpp
13502       && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
13503       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
13504     cp_warning ("`operator=' should return a reference to `*this'");
13505
13506   /* Make the init_value nonzero so pushdecl knows this is not tentative.
13507      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
13508   DECL_INITIAL (decl1) = error_mark_node;
13509
13510 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
13511   SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
13512 #endif
13513   
13514   /* This function exists in static storage.
13515      (This does not mean `static' in the C sense!)  */
13516   TREE_STATIC (decl1) = 1;
13517
13518   /* We must call push_template_decl after current_class_type is set
13519      up.  (If we are processing inline definitions after exiting a
13520      class scope, current_class_type will be NULL_TREE until set above
13521      by push_nested_class.)  */
13522   if (processing_template_decl)
13523     decl1 = push_template_decl (decl1);
13524
13525   /* Record the decl so that the function name is defined.
13526      If we already have a decl for this name, and it is a FUNCTION_DECL,
13527      use the old decl.  */
13528   if (!processing_template_decl && pre_parsed_p == 0)
13529     {
13530       /* A specialization is not used to guide overload resolution.  */
13531       if ((flag_guiding_decls 
13532            || !DECL_TEMPLATE_SPECIALIZATION (decl1))
13533           && ! DECL_FUNCTION_MEMBER_P (decl1))
13534         decl1 = pushdecl (decl1);
13535       else
13536         {
13537           /* We need to set the DECL_CONTEXT. */
13538           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13539             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13540           /* And make sure we have enough default args.  */
13541           check_default_args (decl1);
13542         }
13543       DECL_MAIN_VARIANT (decl1) = decl1;
13544       fntype = TREE_TYPE (decl1);
13545     }
13546
13547   current_function_decl = decl1;
13548
13549   if (DECL_INTERFACE_KNOWN (decl1))
13550     {
13551       tree ctx = hack_decl_function_context (decl1);
13552
13553       if (DECL_NOT_REALLY_EXTERN (decl1))
13554         DECL_EXTERNAL (decl1) = 0;
13555
13556       if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx) 
13557           && TREE_PUBLIC (ctx))
13558         /* This is a function in a local class in an extern inline
13559            function.  */
13560         comdat_linkage (decl1);
13561     }
13562   /* If this function belongs to an interface, it is public.
13563      If it belongs to someone else's interface, it is also external.
13564      This only affects inlines and template instantiations.  */
13565   else if (interface_unknown == 0
13566            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13567                || flag_alt_external_templates))
13568     {
13569       if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
13570           || processing_template_decl)
13571         {
13572           DECL_EXTERNAL (decl1)
13573             = (interface_only
13574                || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines
13575                    && !DECL_VINDEX (decl1)));
13576
13577           /* For WIN32 we also want to put these in linkonce sections.  */
13578           maybe_make_one_only (decl1);
13579         }
13580       else
13581         DECL_EXTERNAL (decl1) = 0;
13582       DECL_NOT_REALLY_EXTERN (decl1) = 0;
13583       DECL_INTERFACE_KNOWN (decl1) = 1;
13584     }
13585   else if (interface_unknown && interface_only
13586            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13587                || flag_alt_external_templates))
13588     {
13589       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13590          interface, we will have interface_only set but not
13591          interface_known.  In that case, we don't want to use the normal
13592          heuristics because someone will supply a #pragma implementation
13593          elsewhere, and deducing it here would produce a conflict.  */
13594       comdat_linkage (decl1);
13595       DECL_EXTERNAL (decl1) = 0;
13596       DECL_INTERFACE_KNOWN (decl1) = 1;
13597       DECL_DEFER_OUTPUT (decl1) = 1;
13598     }
13599   else
13600     {
13601       /* This is a definition, not a reference.
13602          So clear DECL_EXTERNAL.  */
13603       DECL_EXTERNAL (decl1) = 0;
13604
13605       if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
13606           && ! DECL_INTERFACE_KNOWN (decl1)
13607           /* Don't try to defer nested functions for now.  */
13608           && ! hack_decl_function_context (decl1))
13609         DECL_DEFER_OUTPUT (decl1) = 1;
13610       else
13611         DECL_INTERFACE_KNOWN (decl1) = 1;
13612     }
13613
13614   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1))
13615     {
13616       if (TREE_CODE (fntype) == METHOD_TYPE)
13617         TREE_TYPE (decl1) = fntype
13618           = build_function_type (TREE_TYPE (fntype),
13619                                  TREE_CHAIN (TYPE_ARG_TYPES (fntype)));
13620       current_function_parms = TREE_CHAIN (current_function_parms);
13621       DECL_ARGUMENTS (decl1) = current_function_parms;
13622       ctype = NULL_TREE;
13623     }
13624   restype = TREE_TYPE (fntype);
13625
13626   if (ctype)
13627     {
13628       /* If we're compiling a friend function, neither of the variables
13629          current_class_ptr nor current_class_type will have values.  */
13630       if (! doing_friend)
13631         {
13632           /* We know that this was set up by `grokclassfn'.
13633              We do not wait until `store_parm_decls', since evil
13634              parse errors may never get us to that point.  Here
13635              we keep the consistency between `current_class_type'
13636              and `current_class_ptr'.  */
13637           tree t = current_function_parms;
13638
13639           my_friendly_assert (t != NULL_TREE
13640                               && TREE_CODE (t) == PARM_DECL, 162);
13641
13642           if (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE)
13643             {
13644               int i;
13645
13646               if (! hack_decl_function_context (decl1))
13647                 temporary_allocation ();
13648               i = suspend_momentary ();
13649
13650               /* Normally, build_indirect_ref returns
13651                  current_class_ref whenever current_class_ptr is
13652                  dereferenced.  This time, however, we want it to
13653                  *create* current_class_ref, so we temporarily clear
13654                  current_class_ptr to fool it.  */
13655               current_class_ptr = NULL_TREE;
13656               current_class_ref = build_indirect_ref (t, NULL_PTR);
13657               current_class_ptr = t;
13658
13659               resume_momentary (i);
13660               if (! hack_decl_function_context (decl1))
13661                 end_temporary_allocation ();
13662             }
13663           else
13664             /* We're having a signature pointer here.  */
13665             current_class_ref = current_class_ptr = t;
13666
13667         }
13668     }
13669   else
13670     current_class_ptr = current_class_ref = NULL_TREE;
13671
13672   pushlevel (0);
13673   current_binding_level->parm_flag = 1;
13674
13675   GNU_xref_function (decl1, current_function_parms);
13676
13677   if (attrs)
13678     cplus_decl_attributes (decl1, NULL_TREE, attrs);
13679   
13680   make_function_rtl (decl1);
13681
13682   /* Promote the value to int before returning it.  */
13683   if (C_PROMOTING_INTEGER_TYPE_P (restype))
13684     restype = type_promotes_to (restype);
13685
13686   /* If this fcn was already referenced via a block-scope `extern' decl
13687      (or an implicit decl), propagate certain information about the usage.  */
13688   if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
13689     TREE_ADDRESSABLE (decl1) = 1;
13690
13691   if (DECL_RESULT (decl1) == NULL_TREE)
13692     {
13693       DECL_RESULT (decl1)
13694         = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13695       TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13696       TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
13697     }
13698
13699   /* Allocate further tree nodes temporarily during compilation
13700      of this function only.  Tiemann moved up here from bottom of fn.  */
13701   /* If this is a nested function, then we must continue to allocate RTL
13702      on the permanent obstack in case we need to inline it later.  */
13703   if (! hack_decl_function_context (decl1))
13704     temporary_allocation ();
13705
13706   if (processing_template_decl)
13707     {
13708       ++minimal_parse_mode;
13709       last_tree = DECL_SAVED_TREE (decl1)
13710         = build_nt (EXPR_STMT, void_zero_node);
13711     }
13712
13713   ++function_depth;
13714
13715   if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl1))
13716       && DECL_LANGUAGE (decl1) == lang_cplusplus)
13717     {
13718       dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13719       ctor_label = NULL_TREE;
13720     }
13721   else
13722     {
13723       dtor_label = NULL_TREE;
13724       if (DECL_CONSTRUCTOR_P (decl1))
13725         ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13726     }
13727
13728   return 1;
13729 }
13730 \f
13731 /* Called after store_parm_decls for a function-try-block.  We need to update
13732    last_parm_cleanup_insn so that the base initializers for a constructor
13733    are run within this block, not before it.  */
13734
13735 void
13736 expand_start_early_try_stmts ()
13737 {
13738   expand_start_try_stmts ();
13739   last_parm_cleanup_insn = get_last_insn ();
13740 }
13741
13742 /* Store the parameter declarations into the current function declaration.
13743    This is called after parsing the parameter declarations, before
13744    digesting the body of the function.
13745
13746    Also install to binding contour return value identifier, if any.  */
13747
13748 void
13749 store_parm_decls ()
13750 {
13751   register tree fndecl = current_function_decl;
13752   register tree parm;
13753   int parms_have_cleanups = 0;
13754   tree cleanups = NULL_TREE;
13755
13756   /* This is either a chain of PARM_DECLs (when a prototype is used).  */
13757   tree specparms = current_function_parms;
13758
13759   /* This is a list of types declared among parms in a prototype.  */
13760   tree parmtags = current_function_parm_tags;
13761
13762   /* This is a chain of any other decls that came in among the parm
13763      declarations.  If a parm is declared with  enum {foo, bar} x;
13764      then CONST_DECLs for foo and bar are put here.  */
13765   tree nonparms = NULL_TREE;
13766
13767   if (toplevel_bindings_p ())
13768     fatal ("parse errors have confused me too much");
13769
13770   /* Initialize RTL machinery.  */
13771   init_function_start (fndecl, input_filename, lineno);
13772
13773   /* Create a binding level for the parms.  */
13774   expand_start_bindings (0);
13775
13776   if (specparms != NULL_TREE)
13777     {
13778       /* This case is when the function was defined with an ANSI prototype.
13779          The parms already have decls, so we need not do anything here
13780          except record them as in effect
13781          and complain if any redundant old-style parm decls were written.  */
13782
13783       register tree next;
13784
13785       /* Must clear this because it might contain TYPE_DECLs declared
13786          at class level.  */
13787       storedecls (NULL_TREE);
13788
13789       for (parm = nreverse (specparms); parm; parm = next)
13790         {
13791           next = TREE_CHAIN (parm);
13792           if (TREE_CODE (parm) == PARM_DECL)
13793             {
13794               tree cleanup;
13795               if (DECL_NAME (parm) == NULL_TREE)
13796                 {
13797                   pushdecl (parm);
13798                 }
13799               else if (TREE_CODE (TREE_TYPE (parm)) == VOID_TYPE)
13800                 cp_error ("parameter `%D' declared void", parm);
13801               else
13802                 {
13803                   /* Now fill in DECL_REFERENCE_SLOT for any of the parm decls.
13804                      A parameter is assumed not to have any side effects.
13805                      If this should change for any reason, then this
13806                      will have to wrap the bashed reference type in a save_expr.
13807                      
13808                      Also, if the parameter type is declared to be an X
13809                      and there is an X(X&) constructor, we cannot lay it
13810                      into the stack (any more), so we make this parameter
13811                      look like it is really of reference type.  Functions
13812                      which pass parameters to this function will know to
13813                      create a temporary in their frame, and pass a reference
13814                      to that.  */
13815
13816                   if (TREE_CODE (TREE_TYPE (parm)) == REFERENCE_TYPE
13817                       && TYPE_SIZE (TREE_TYPE (TREE_TYPE (parm))))
13818                     SET_DECL_REFERENCE_SLOT (parm, convert_from_reference (parm));
13819
13820                   pushdecl (parm);
13821                 }
13822               if (! processing_template_decl
13823                   && (cleanup = maybe_build_cleanup (parm), cleanup))
13824                 {
13825                   expand_decl (parm);
13826                   parms_have_cleanups = 1;
13827
13828                   /* Keep track of the cleanups.  */
13829                   cleanups = tree_cons (parm, cleanup, cleanups);
13830                 }
13831             }
13832           else
13833             {
13834               /* If we find an enum constant or a type tag,
13835                  put it aside for the moment.  */
13836               TREE_CHAIN (parm) = NULL_TREE;
13837               nonparms = chainon (nonparms, parm);
13838             }
13839         }
13840
13841       /* Get the decls in their original chain order
13842          and record in the function.  This is all and only the
13843          PARM_DECLs that were pushed into scope by the loop above.  */
13844       DECL_ARGUMENTS (fndecl) = getdecls ();
13845
13846       storetags (chainon (parmtags, gettags ()));
13847     }
13848   else
13849     DECL_ARGUMENTS (fndecl) = NULL_TREE;
13850
13851   /* Now store the final chain of decls for the arguments
13852      as the decl-chain of the current lexical scope.
13853      Put the enumerators in as well, at the front so that
13854      DECL_ARGUMENTS is not modified.  */
13855
13856   storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
13857
13858   /* Declare __FUNCTION__ and __PRETTY_FUNCTION__ for this function.  */
13859   declare_function_name ();
13860
13861   /* Initialize the RTL code for the function.  */
13862   DECL_SAVED_INSNS (fndecl) = NULL_RTX;
13863   if (! processing_template_decl)
13864     expand_function_start (fndecl, parms_have_cleanups);
13865
13866   current_function_parms_stored = 1;
13867
13868   /* If this function is `main', emit a call to `__main'
13869      to run global initializers, etc.  */
13870   if (DECL_MAIN_P (fndecl))
13871     expand_main_function ();
13872
13873   /* Now that we have initialized the parms, we can start their
13874      cleanups.  We cannot do this before, since expand_decl_cleanup
13875      should not be called before the parm can be used.  */
13876   if (cleanups
13877       && ! processing_template_decl)      
13878     {
13879       for (cleanups = nreverse (cleanups); cleanups; cleanups = TREE_CHAIN (cleanups))
13880         {
13881           if (! expand_decl_cleanup (TREE_PURPOSE (cleanups), TREE_VALUE (cleanups)))
13882             cp_error ("parser lost in parsing declaration of `%D'",
13883                       TREE_PURPOSE (cleanups));
13884         }
13885     }
13886
13887   /* Create a binding contour which can be used to catch
13888      cleanup-generated temporaries.  Also, if the return value needs or
13889      has initialization, deal with that now.  */
13890   if (parms_have_cleanups)
13891     {
13892       pushlevel (0);
13893       expand_start_bindings (0);
13894     }
13895
13896   if (! processing_template_decl && flag_exceptions)
13897     {
13898       /* Do the starting of the exception specifications, if we have any.  */
13899       if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13900         expand_start_eh_spec ();
13901     }
13902
13903   last_parm_cleanup_insn = get_last_insn ();
13904   last_dtor_insn = get_last_insn ();
13905 }
13906
13907 /* Bind a name and initialization to the return value of
13908    the current function.  */
13909
13910 void
13911 store_return_init (return_id, init)
13912      tree return_id, init;
13913 {
13914   tree decl = DECL_RESULT (current_function_decl);
13915
13916   if (pedantic)
13917     /* Give this error as many times as there are occurrences,
13918        so that users can use Emacs compilation buffers to find
13919        and fix all such places.  */
13920     pedwarn ("ANSI C++ does not permit named return values");
13921
13922   if (return_id != NULL_TREE)
13923     {
13924       if (DECL_NAME (decl) == NULL_TREE)
13925         {
13926           DECL_NAME (decl) = return_id;
13927           DECL_ASSEMBLER_NAME (decl) = return_id;
13928         }
13929       else
13930         cp_error ("return identifier `%D' already in place", decl);
13931     }
13932
13933   /* Can't let this happen for constructors.  */
13934   if (DECL_CONSTRUCTOR_P (current_function_decl))
13935     {
13936       error ("can't redefine default return value for constructors");
13937       return;
13938     }
13939
13940   /* If we have a named return value, put that in our scope as well.  */
13941   if (DECL_NAME (decl) != NULL_TREE)
13942     {
13943       /* If this named return value comes in a register,
13944          put it in a pseudo-register.  */
13945       if (DECL_REGISTER (decl))
13946         {
13947           original_result_rtx = DECL_RTL (decl);
13948           DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
13949         }
13950
13951       /* Let `cp_finish_decl' know that this initializer is ok.  */
13952       DECL_INITIAL (decl) = init;
13953       pushdecl (decl);
13954
13955       if (minimal_parse_mode)
13956         add_tree (build_min_nt (RETURN_INIT, return_id,
13957                                 copy_to_permanent (init)));
13958       else
13959         cp_finish_decl (decl, init, NULL_TREE, 0, 0);
13960     }
13961 }
13962
13963 \f
13964 /* Finish up a function declaration and compile that function
13965    all the way to assembler language output.  The free the storage
13966    for the function definition.
13967
13968    This is called after parsing the body of the function definition.
13969    LINENO is the current line number.
13970
13971    FLAGS is a bitwise or of the following values: 
13972      1 - CALL_POPLEVEL 
13973        An extra call to poplevel (and expand_end_bindings) must be
13974        made to take care of the binding contour for the base
13975        initializers.  This is only relevant for constructors.
13976      2 - INCLASS_INLINE
13977        We just finished processing the body of an in-class inline
13978        function definition.  (This processing will have taken place
13979        after the class definition is complete.)
13980
13981    NESTED is nonzero if we were in the middle of compiling another function
13982    when we started on this one.  */
13983
13984 void
13985 finish_function (lineno, flags, nested)
13986      int lineno;
13987      int flags;
13988      int nested;
13989 {
13990   register tree fndecl = current_function_decl;
13991   tree fntype, ctype = NULL_TREE;
13992   rtx last_parm_insn, insns;
13993   /* Label to use if this function is supposed to return a value.  */
13994   tree no_return_label = NULL_TREE;
13995   tree decls = NULL_TREE;
13996   int call_poplevel = (flags & 1) != 0;
13997   int inclass_inline = (flags & 2) != 0;
13998   int in_template;
13999
14000   /* When we get some parse errors, we can end up without a
14001      current_function_decl, so cope.  */
14002   if (fndecl == NULL_TREE)
14003     return;
14004
14005   if (function_depth > 1)
14006     nested = 1;
14007
14008   fntype = TREE_TYPE (fndecl);
14009
14010 /*  TREE_READONLY (fndecl) = 1;
14011     This caused &foo to be of type ptr-to-const-function
14012     which then got a warning when stored in a ptr-to-function variable.  */
14013
14014   /* This happens on strange parse errors.  */
14015   if (! current_function_parms_stored)
14016     {
14017       call_poplevel = 0;
14018       store_parm_decls ();
14019     }
14020
14021   if (processing_template_decl)
14022     {
14023       if (DECL_CONSTRUCTOR_P (fndecl) && call_poplevel)
14024         {
14025           decls = getdecls ();
14026           expand_end_bindings (decls, decls != NULL_TREE, 0);
14027           poplevel (decls != NULL_TREE, 0, 0);
14028         }
14029     }
14030   else
14031     {
14032       if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
14033         {
14034           tree ttype = target_type (fntype);
14035           tree parmdecl;
14036
14037           if (IS_AGGR_TYPE (ttype))
14038             /* Let debugger know it should output info for this type.  */
14039             note_debug_info_needed (ttype);
14040
14041           for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
14042             {
14043               ttype = target_type (TREE_TYPE (parmdecl));
14044               if (IS_AGGR_TYPE (ttype))
14045                 /* Let debugger know it should output info for this type.  */
14046                 note_debug_info_needed (ttype);
14047             }
14048         }
14049
14050       /* Clean house because we will need to reorder insns here.  */
14051       do_pending_stack_adjust ();
14052
14053       if (dtor_label)
14054         {
14055           tree binfo = TYPE_BINFO (current_class_type);
14056           tree cond = integer_one_node;
14057           tree exprstmt;
14058           tree in_charge_node = lookup_name (in_charge_identifier, 0);
14059           tree virtual_size;
14060           int ok_to_optimize_dtor = 0;
14061           int empty_dtor = get_last_insn () == last_dtor_insn;
14062
14063           if (current_function_assigns_this)
14064             cond = build (NE_EXPR, boolean_type_node,
14065                           current_class_ptr, integer_zero_node);
14066           else
14067             {
14068               int n_baseclasses = CLASSTYPE_N_BASECLASSES (current_class_type);
14069
14070               /* If this destructor is empty, then we don't need to check
14071                  whether `this' is NULL in some cases.  */
14072               if ((flag_this_is_variable & 1) == 0)
14073                 ok_to_optimize_dtor = 1;
14074               else if (empty_dtor)
14075                 ok_to_optimize_dtor
14076                   = (n_baseclasses == 0
14077                      || (n_baseclasses == 1
14078                          && TYPE_HAS_DESTRUCTOR (TYPE_BINFO_BASETYPE (current_class_type, 0))));
14079             }
14080
14081           /* These initializations might go inline.  Protect
14082              the binding level of the parms.  */
14083           pushlevel (0);
14084           expand_start_bindings (0);
14085
14086           if (current_function_assigns_this)
14087             {
14088               current_function_assigns_this = 0;
14089               current_function_just_assigned_this = 0;
14090             }
14091
14092           /* Generate the code to call destructor on base class.
14093              If this destructor belongs to a class with virtual
14094              functions, then set the virtual function table
14095              pointer to represent the type of our base class.  */
14096
14097           /* This side-effect makes call to `build_delete' generate the
14098              code we have to have at the end of this destructor.
14099              `build_delete' will set the flag again.  */
14100           TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
14101
14102           /* These are two cases where we cannot delegate deletion.  */
14103           if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)
14104               || TYPE_GETS_REG_DELETE (current_class_type))
14105             exprstmt = build_delete (current_class_type, current_class_ref, integer_zero_node,
14106                                      LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
14107           else
14108             exprstmt = build_delete (current_class_type, current_class_ref, in_charge_node,
14109                                      LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
14110
14111           /* If we did not assign to this, then `this' is non-zero at
14112              the end of a destructor.  As a special optimization, don't
14113              emit test if this is an empty destructor.  If it does nothing,
14114              it does nothing.  If it calls a base destructor, the base
14115              destructor will perform the test.  */
14116
14117           if (exprstmt != error_mark_node
14118               && (TREE_CODE (exprstmt) != NOP_EXPR
14119                   || TREE_OPERAND (exprstmt, 0) != integer_zero_node
14120                   || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
14121             {
14122               expand_label (dtor_label);
14123               if (cond != integer_one_node)
14124                 expand_start_cond (cond, 0);
14125               if (exprstmt != void_zero_node)
14126                 /* Don't call `expand_expr_stmt' if we're not going to do
14127                    anything, since -Wall will give a diagnostic.  */
14128                 expand_expr_stmt (exprstmt);
14129
14130               /* Run destructor on all virtual baseclasses.  */
14131               if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
14132                 {
14133                   tree vbases = nreverse (copy_list (CLASSTYPE_VBASECLASSES (current_class_type)));
14134                   expand_start_cond (build (BIT_AND_EXPR, integer_type_node,
14135                                             in_charge_node, integer_two_node), 0);
14136                   while (vbases)
14137                     {
14138                       if (TYPE_NEEDS_DESTRUCTOR (BINFO_TYPE (vbases)))
14139                         {
14140                           tree vb = get_vbase
14141                             (BINFO_TYPE (vbases),
14142                              TYPE_BINFO (current_class_type));
14143                           expand_expr_stmt
14144                             (build_scoped_method_call
14145                              (current_class_ref, vb, dtor_identifier,
14146                               build_expr_list (NULL_TREE, integer_zero_node)));
14147                         }
14148                       vbases = TREE_CHAIN (vbases);
14149                     }
14150                   expand_end_cond ();
14151                 }
14152
14153               do_pending_stack_adjust ();
14154               if (cond != integer_one_node)
14155                 expand_end_cond ();
14156             }
14157
14158           virtual_size = c_sizeof (current_class_type);
14159
14160           /* At the end, call delete if that's what's requested.  */
14161
14162           /* FDIS sez: At the point of definition of a virtual destructor
14163                (including an implicit definition), non-placement operator
14164                delete shall be looked up in the scope of the destructor's
14165                class and if found shall be accessible and unambiguous.
14166
14167              This is somewhat unclear, but I take it to mean that if the
14168              class only defines placement deletes we don't do anything here.
14169              So we pass LOOKUP_SPECULATIVELY; delete_sanity will complain
14170              for us if they ever try to delete one of these.  */
14171
14172           if (TYPE_GETS_REG_DELETE (current_class_type)
14173               || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
14174             exprstmt = build_op_delete_call
14175               (DELETE_EXPR, current_class_ptr, virtual_size,
14176                LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
14177           else
14178             exprstmt = NULL_TREE;
14179
14180           if (exprstmt)
14181             {
14182               cond = build (BIT_AND_EXPR, integer_type_node,
14183                             in_charge_node, integer_one_node);
14184               expand_start_cond (cond, 0);
14185               expand_expr_stmt (exprstmt);
14186               expand_end_cond ();
14187             }
14188
14189           /* End of destructor.  */
14190           expand_end_bindings (NULL_TREE, getdecls () != NULL_TREE, 0);
14191           poplevel (getdecls () != NULL_TREE, 0, 0);
14192
14193           /* Back to the top of destructor.  */
14194           /* Don't execute destructor code if `this' is NULL.  */
14195
14196           start_sequence ();
14197
14198           /* If the dtor is empty, and we know there is not possible way we
14199              could use any vtable entries, before they are possibly set by
14200              a base class dtor, we don't have to setup the vtables, as we
14201              know that any base class dtoring will set up any vtables it
14202              needs.  We avoid MI, because one base class dtor can do a
14203              virtual dispatch to an overridden function that would need to
14204              have a non-related vtable set up, we cannot avoid setting up
14205              vtables in that case.  We could change this to see if there is
14206              just one vtable.  */
14207           if (! empty_dtor || TYPE_USES_COMPLEX_INHERITANCE (current_class_type))
14208             {
14209               /* Make all virtual function table pointers in non-virtual base
14210                  classes point to CURRENT_CLASS_TYPE's virtual function
14211                  tables.  */
14212               expand_direct_vtbls_init (binfo, binfo, 1, 0, current_class_ptr);
14213
14214               if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
14215                 expand_indirect_vtbls_init (binfo, current_class_ref, current_class_ptr);
14216             }
14217           
14218           if (! ok_to_optimize_dtor)
14219             {
14220               cond = build_binary_op (NE_EXPR,
14221                                       current_class_ptr, integer_zero_node);
14222               expand_start_cond (cond, 0);
14223             }
14224
14225           insns = get_insns ();
14226           end_sequence ();
14227
14228           last_parm_insn = get_first_nonparm_insn ();
14229           if (last_parm_insn == NULL_RTX)
14230             last_parm_insn = get_last_insn ();
14231           else
14232             last_parm_insn = previous_insn (last_parm_insn);
14233
14234           emit_insns_after (insns, last_parm_insn);
14235
14236           if (! ok_to_optimize_dtor)
14237             expand_end_cond ();
14238         }
14239       else if (current_function_assigns_this)
14240         {
14241           /* Does not need to call emit_base_init, because
14242              that is done (if needed) just after assignment to this
14243              is seen.  */
14244
14245           if (DECL_CONSTRUCTOR_P (current_function_decl))
14246             {
14247               end_protect_partials ();
14248               expand_label (ctor_label);
14249               ctor_label = NULL_TREE;
14250
14251               if (call_poplevel)
14252                 {
14253                   decls = getdecls ();
14254                   expand_end_bindings (decls, decls != NULL_TREE, 0);
14255                   poplevel (decls != NULL_TREE, 0, 0);
14256                 }
14257               /* c_expand_return knows to return 'this' from a constructor.  */
14258               c_expand_return (NULL_TREE);
14259             }
14260           else if (TREE_CODE (TREE_TYPE (DECL_RESULT (current_function_decl))) != VOID_TYPE
14261                    && return_label != NULL_RTX)
14262             no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
14263
14264           current_function_assigns_this = 0;
14265           current_function_just_assigned_this = 0;
14266           base_init_expr = NULL_TREE;
14267         }
14268       else if (DECL_CONSTRUCTOR_P (fndecl))
14269         {
14270           tree cond = NULL_TREE, thenclause = NULL_TREE;
14271           /* Allow constructor for a type to get a new instance of the object
14272              using `build_new'.  */
14273           tree abstract_virtuals = CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type);
14274           CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = NULL_TREE;
14275
14276           if (flag_this_is_variable > 0)
14277             {
14278               cond = build_binary_op (EQ_EXPR,
14279                                       current_class_ptr, integer_zero_node);
14280               thenclause = build_modify_expr (current_class_ptr, NOP_EXPR,
14281                                               build_new (NULL_TREE, current_class_type, void_type_node, 0));
14282             }
14283
14284           CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = abstract_virtuals;
14285
14286           start_sequence ();
14287
14288           if (flag_this_is_variable > 0)
14289             {
14290               expand_start_cond (cond, 0);
14291               expand_expr_stmt (thenclause);
14292               expand_end_cond ();
14293             }
14294
14295           /* Emit insns from `emit_base_init' which sets up virtual
14296              function table pointer(s).  */
14297           if (base_init_expr)
14298             {
14299               expand_expr_stmt (base_init_expr);
14300               base_init_expr = NULL_TREE;
14301             }
14302
14303           insns = get_insns ();
14304           end_sequence ();
14305
14306           /* This is where the body of the constructor begins.  */
14307
14308           emit_insns_after (insns, last_parm_cleanup_insn);
14309
14310           end_protect_partials ();
14311
14312           /* This is where the body of the constructor ends.  */
14313           expand_label (ctor_label);
14314           ctor_label = NULL_TREE;
14315
14316           if (call_poplevel)
14317             {
14318               decls = getdecls ();
14319               expand_end_bindings (decls, decls != NULL_TREE, 0);
14320               poplevel (decls != NULL_TREE, 1, 0);
14321             }
14322
14323           /* c_expand_return knows to return 'this' from a constructor.  */
14324           c_expand_return (NULL_TREE);
14325
14326           current_function_assigns_this = 0;
14327           current_function_just_assigned_this = 0;
14328         }
14329       else if (DECL_MAIN_P (fndecl))
14330         {
14331           /* Make it so that `main' always returns 0 by default.  */
14332 #ifdef VMS
14333           c_expand_return (integer_one_node);
14334 #else
14335           c_expand_return (integer_zero_node);
14336 #endif
14337         }
14338       else if (return_label != NULL_RTX
14339                && current_function_return_value == NULL_TREE
14340                && ! DECL_NAME (DECL_RESULT (current_function_decl)))
14341         no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
14342
14343       if (flag_exceptions)
14344         expand_exception_blocks ();
14345
14346       /* If this function is supposed to return a value, ensure that
14347          we do not fall into the cleanups by mistake.  The end of our
14348          function will look like this:
14349          
14350          user code (may have return stmt somewhere)
14351          goto no_return_label
14352          cleanup_label:
14353          cleanups
14354          goto return_label
14355          no_return_label:
14356          NOTE_INSN_FUNCTION_END
14357          return_label:
14358          things for return
14359          
14360          If the user omits a return stmt in the USER CODE section, we
14361          will have a control path which reaches NOTE_INSN_FUNCTION_END.
14362          Otherwise, we won't.  */
14363       if (no_return_label)
14364         {
14365           DECL_CONTEXT (no_return_label) = fndecl;
14366           DECL_INITIAL (no_return_label) = error_mark_node;
14367           DECL_SOURCE_FILE (no_return_label) = input_filename;
14368           DECL_SOURCE_LINE (no_return_label) = lineno;
14369           expand_goto (no_return_label);
14370         }
14371
14372       if (cleanup_label)
14373         {
14374           /* Remove the binding contour which is used
14375              to catch cleanup-generated temporaries.  */
14376           expand_end_bindings (0, 0, 0);
14377           poplevel (0, 0, 0);
14378
14379           /* Emit label at beginning of cleanup code for parameters.  */
14380           emit_label (cleanup_label);
14381         }
14382
14383       /* Get return value into register if that's where it's supposed to be.  */
14384       if (original_result_rtx)
14385         fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
14386
14387       /* Finish building code that will trigger warnings if users forget
14388          to make their functions return values.  */
14389       if (no_return_label || cleanup_label)
14390         emit_jump (return_label);
14391       if (no_return_label)
14392         {
14393           /* We don't need to call `expand_*_return' here because we
14394              don't need any cleanups here--this path of code is only
14395              for error checking purposes.  */
14396           expand_label (no_return_label);
14397         }
14398
14399       /* Generate rtl for function exit.  */
14400       expand_function_end (input_filename, lineno, 1);
14401     }
14402   
14403   /* If we're processing a template, squirrel away the definition
14404      until we do an instantiation.  */
14405   if (processing_template_decl)
14406     {
14407       --minimal_parse_mode;
14408       DECL_SAVED_TREE (fndecl) = TREE_CHAIN (DECL_SAVED_TREE (fndecl));
14409       /* We have to save this value here in case
14410          maybe_end_member_template_processing decides to pop all the
14411          template parameters.  */
14412       in_template = 1;
14413     }
14414   else
14415     in_template = 0;
14416
14417   /* This must come after expand_function_end because cleanups might
14418      have declarations (from inline functions) that need to go into
14419      this function's blocks.  */
14420   if (current_binding_level->parm_flag != 1)
14421     my_friendly_abort (122);
14422   poplevel (1, 0, 1);
14423
14424   /* If this is a in-class inline definition, we may have to pop the
14425      bindings for the template parameters that we added in
14426      maybe_begin_member_template_processing when start_function was
14427      called.  */
14428   if (inclass_inline)
14429     maybe_end_member_template_processing ();
14430
14431   /* Reset scope for C++: if we were in the scope of a class,
14432      then when we finish this function, we are not longer so.
14433      This cannot be done until we know for sure that no more
14434      class members will ever be referenced in this function
14435      (i.e., calls to destructors).  */
14436   if (current_class_name)
14437     {
14438       ctype = current_class_type;
14439       pop_nested_class ();
14440     }
14441
14442   /* Must mark the RESULT_DECL as being in this function.  */
14443   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
14444
14445   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
14446      to the FUNCTION_DECL node itself.  */
14447   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
14448
14449   if (!in_template)
14450     {
14451       int saved_flag_keep_inline_functions =
14452         flag_keep_inline_functions;
14453
14454       /* So we can tell if jump_optimize sets it to 1.  */
14455       can_reach_end = 0;
14456
14457       if (DECL_CONTEXT (fndecl) != NULL_TREE
14458           && hack_decl_function_context (fndecl))
14459         /* Trick rest_of_compilation into not deferring output of this
14460            function, even if it is inline, since the rtl_obstack for
14461            this function is the function_obstack of the enclosing
14462            function and will be deallocated when the enclosing
14463            function is gone.  See save_tree_status.  */
14464         flag_keep_inline_functions = 1;
14465
14466       /* Run the optimizers and output the assembler code for this
14467          function.  */
14468
14469       if (DECL_ARTIFICIAL (fndecl))
14470         {
14471           /* Do we really *want* to inline this synthesized method?  */
14472
14473           int save_fif = flag_inline_functions;
14474           flag_inline_functions = 1;
14475
14476           /* Turn off DECL_INLINE for the moment so function_cannot_inline_p
14477              will check our size.  */
14478           DECL_INLINE (fndecl) = 0;
14479
14480           rest_of_compilation (fndecl);
14481           flag_inline_functions = save_fif;
14482         }
14483       else
14484         rest_of_compilation (fndecl);
14485
14486       flag_keep_inline_functions = saved_flag_keep_inline_functions;
14487
14488       if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
14489         {
14490           /* Set DECL_EXTERNAL so that assemble_external will be called as
14491              necessary.  We'll clear it again in finish_file.  */
14492           if (! DECL_EXTERNAL (fndecl))
14493             DECL_NOT_REALLY_EXTERN (fndecl) = 1;
14494           DECL_EXTERNAL (fndecl) = 1;
14495           mark_inline_for_output (fndecl);
14496         }
14497
14498       if (ctype && TREE_ASM_WRITTEN (fndecl))
14499         note_debug_info_needed (ctype);
14500
14501       current_function_returns_null |= can_reach_end;
14502
14503       /* Since we don't normally go through c_expand_return for constructors,
14504          this normally gets the wrong value.
14505          Also, named return values have their return codes emitted after
14506          NOTE_INSN_FUNCTION_END, confusing jump.c.  */
14507       if (DECL_CONSTRUCTOR_P (fndecl)
14508           || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
14509         current_function_returns_null = 0;
14510
14511       if (TREE_THIS_VOLATILE (fndecl) && current_function_returns_null)
14512         cp_warning ("`noreturn' function `%D' does return", fndecl);
14513       else if ((warn_return_type || pedantic)
14514                && current_function_returns_null
14515                && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE)
14516         {
14517           /* If this function returns non-void and control can drop through,
14518              complain.  */
14519           cp_warning ("control reaches end of non-void function `%D'", fndecl);
14520         }
14521       /* With just -W, complain only if function returns both with
14522          and without a value.  */
14523       else if (extra_warnings
14524                && current_function_returns_value && current_function_returns_null)
14525         warning ("this function may return with or without a value");
14526     }
14527
14528   --function_depth;
14529
14530   /* Free all the tree nodes making up this function.  */
14531   /* Switch back to allocating nodes permanently
14532      until we start another function.  */
14533   if (! nested)
14534     permanent_allocation (1);
14535
14536   if (DECL_SAVED_INSNS (fndecl) == NULL_RTX)
14537     {
14538       tree t;
14539
14540       /* Stop pointing to the local nodes about to be freed.  */
14541       /* But DECL_INITIAL must remain nonzero so we know this
14542          was an actual function definition.  */
14543       DECL_INITIAL (fndecl) = error_mark_node;
14544       for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
14545         DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
14546     }
14547
14548   if (DECL_STATIC_CONSTRUCTOR (fndecl))
14549     static_ctors = perm_tree_cons (NULL_TREE, fndecl, static_ctors);
14550   if (DECL_STATIC_DESTRUCTOR (fndecl))
14551     static_dtors = perm_tree_cons (NULL_TREE, fndecl, static_dtors);
14552
14553   if (! nested)
14554     {
14555       /* Let the error reporting routines know that we're outside a
14556          function.  For a nested function, this value is used in
14557          pop_cp_function_context and then reset via pop_function_context.  */
14558       current_function_decl = NULL_TREE;
14559     }
14560
14561   named_label_uses = NULL;
14562   current_class_ptr = NULL_TREE;
14563   current_class_ref = NULL_TREE;
14564 }
14565 \f
14566 /* Create the FUNCTION_DECL for a function definition.
14567    DECLSPECS and DECLARATOR are the parts of the declaration;
14568    they describe the return type and the name of the function,
14569    but twisted together in a fashion that parallels the syntax of C.
14570
14571    This function creates a binding context for the function body
14572    as well as setting up the FUNCTION_DECL in current_function_decl.
14573
14574    Returns a FUNCTION_DECL on success.
14575
14576    If the DECLARATOR is not suitable for a function (it defines a datum
14577    instead), we return 0, which tells yyparse to report a parse error.
14578
14579    May return void_type_node indicating that this method is actually
14580    a friend.  See grokfield for more details.
14581
14582    Came here with a `.pushlevel' .
14583
14584    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14585    CHANGES TO CODE IN `grokfield'.  */
14586
14587 tree
14588 start_method (declspecs, declarator, attrlist)
14589      tree declarator, declspecs, attrlist;
14590 {
14591   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
14592                                 attrlist);
14593
14594   /* Something too ugly to handle.  */
14595   if (fndecl == NULL_TREE)
14596     return NULL_TREE;
14597
14598   /* Pass friends other than inline friend functions back.  */
14599   if (fndecl == void_type_node)
14600     return fndecl;
14601
14602   if (TREE_CODE (fndecl) != FUNCTION_DECL)
14603     /* Not a function, tell parser to report parse error.  */
14604     return NULL_TREE;
14605
14606   if (IS_SIGNATURE (current_class_type))
14607     IS_DEFAULT_IMPLEMENTATION (fndecl) = 1;
14608
14609   if (DECL_IN_AGGR_P (fndecl))
14610     {
14611       if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
14612         {
14613           if (DECL_CONTEXT (fndecl) 
14614               && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
14615             cp_error ("`%D' is already defined in class %s", fndecl,
14616                              TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
14617         }
14618       return void_type_node;
14619     }
14620
14621   check_template_shadow (fndecl);
14622
14623   DECL_THIS_INLINE (fndecl) = 1;
14624
14625   if (flag_default_inline)
14626     DECL_INLINE (fndecl) = 1;
14627
14628   /* We process method specializations in finish_struct_1.  */
14629   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
14630     fndecl = push_template_decl (fndecl);
14631
14632   /* We read in the parameters on the maybepermanent_obstack,
14633      but we won't be getting back to them until after we
14634      may have clobbered them.  So the call to preserve_data
14635      will keep them safe.  */
14636   preserve_data ();
14637
14638   if (! DECL_FRIEND_P (fndecl))
14639     {
14640       if (TREE_CHAIN (fndecl))
14641         {
14642           fndecl = copy_node (fndecl);
14643           TREE_CHAIN (fndecl) = NULL_TREE;
14644         }
14645
14646       if (DECL_CONSTRUCTOR_P (fndecl))
14647         {
14648           if (! grok_ctor_properties (current_class_type, fndecl))
14649             return void_type_node;
14650         }
14651       else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
14652         grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
14653     }
14654
14655   cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0, 0);
14656
14657   /* Make a place for the parms */
14658   pushlevel (0);
14659   current_binding_level->parm_flag = 1;
14660   
14661   DECL_IN_AGGR_P (fndecl) = 1;
14662   return fndecl;
14663 }
14664
14665 /* Go through the motions of finishing a function definition.
14666    We don't compile this method until after the whole class has
14667    been processed.
14668
14669    FINISH_METHOD must return something that looks as though it
14670    came from GROKFIELD (since we are defining a method, after all).
14671
14672    This is called after parsing the body of the function definition.
14673    STMTS is the chain of statements that makes up the function body.
14674
14675    DECL is the ..._DECL that `start_method' provided.  */
14676
14677 tree
14678 finish_method (decl)
14679      tree decl;
14680 {
14681   register tree fndecl = decl;
14682   tree old_initial;
14683
14684   register tree link;
14685
14686   if (decl == void_type_node)
14687     return decl;
14688
14689   old_initial = DECL_INITIAL (fndecl);
14690
14691   /* Undo the level for the parms (from start_method).
14692      This is like poplevel, but it causes nothing to be
14693      saved.  Saving information here confuses symbol-table
14694      output routines.  Besides, this information will
14695      be correctly output when this method is actually
14696      compiled.  */
14697
14698   /* Clear out the meanings of the local variables of this level;
14699      also record in each decl which block it belongs to.  */
14700
14701   for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
14702     {
14703       if (DECL_NAME (link) != NULL_TREE)
14704         pop_binding (DECL_NAME (link), link);
14705       my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
14706       DECL_CONTEXT (link) = NULL_TREE;
14707     }
14708
14709   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
14710                       (HOST_WIDE_INT) current_binding_level->level_chain,
14711                       current_binding_level->parm_flag,
14712                       current_binding_level->keep);
14713
14714   poplevel (0, 0, 0);
14715
14716   DECL_INITIAL (fndecl) = old_initial;
14717
14718   /* We used to check if the context of FNDECL was different from
14719      current_class_type as another way to get inside here.  This didn't work
14720      for String.cc in libg++.  */
14721   if (DECL_FRIEND_P (fndecl))
14722     {
14723       CLASSTYPE_INLINE_FRIENDS (current_class_type)
14724         = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
14725       decl = void_type_node;
14726     }
14727
14728   return decl;
14729 }
14730 \f
14731 /* Called when a new struct TYPE is defined.
14732    If this structure or union completes the type of any previous
14733    variable declaration, lay it out and output its rtl.  */
14734
14735 void
14736 hack_incomplete_structures (type)
14737      tree type;
14738 {
14739   tree *list;
14740
14741   if (current_binding_level->incomplete == NULL_TREE)
14742     return;
14743
14744   if (!type) /* Don't do this for class templates.  */
14745     return;
14746
14747   for (list = &current_binding_level->incomplete; *list; )
14748     {
14749       tree decl = TREE_VALUE (*list);
14750       if ((decl && TREE_TYPE (decl) == type)
14751           || (TREE_TYPE (decl)
14752               && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14753               && TREE_TYPE (TREE_TYPE (decl)) == type))
14754         {
14755           int toplevel = toplevel_bindings_p ();
14756           if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14757               && TREE_TYPE (TREE_TYPE (decl)) == type)
14758             layout_type (TREE_TYPE (decl));
14759           layout_decl (decl, 0);
14760           rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
14761           if (! toplevel)
14762             {
14763               tree cleanup;
14764               expand_decl (decl);
14765               cleanup = maybe_build_cleanup (decl);
14766               expand_decl_init (decl);
14767               if (! expand_decl_cleanup (decl, cleanup))
14768                 cp_error ("parser lost in parsing declaration of `%D'",
14769                           decl);
14770             }
14771           *list = TREE_CHAIN (*list);
14772         }
14773       else
14774         list = &TREE_CHAIN (*list);
14775     }
14776 }
14777
14778 /* If DECL is of a type which needs a cleanup, build that cleanup here.
14779    See build_delete for information about AUTO_DELETE.
14780
14781    Don't build these on the momentary obstack; they must live
14782    the life of the binding contour.  */
14783
14784 static tree
14785 maybe_build_cleanup_1 (decl, auto_delete)
14786      tree decl, auto_delete;
14787 {
14788   tree type = TREE_TYPE (decl);
14789   if (type != error_mark_node && TYPE_NEEDS_DESTRUCTOR (type))
14790     {
14791       int temp = 0, flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
14792       tree rval;
14793
14794       if (TREE_CODE (decl) != PARM_DECL)
14795         temp = suspend_momentary ();
14796
14797       if (TREE_CODE (type) == ARRAY_TYPE)
14798         rval = decl;
14799       else
14800         {
14801           mark_addressable (decl);
14802           rval = build_unary_op (ADDR_EXPR, decl, 0);
14803         }
14804
14805       /* Optimize for space over speed here.  */
14806       if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14807           || flag_expensive_optimizations)
14808         flags |= LOOKUP_NONVIRTUAL;
14809
14810       rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
14811
14812       if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14813           && ! TYPE_HAS_DESTRUCTOR (type))
14814         rval = build_compound_expr (expr_tree_cons (NULL_TREE, rval,
14815                                                build_expr_list (NULL_TREE, build_vbase_delete (type, decl))));
14816
14817       if (TREE_CODE (decl) != PARM_DECL)
14818         resume_momentary (temp);
14819
14820       return rval;
14821     }
14822   return 0;
14823 }
14824
14825 /* If DECL is of a type which needs a cleanup, build that cleanup
14826    here.  The cleanup does free the storage with a call to delete.  */
14827
14828 tree
14829 maybe_build_cleanup_and_delete (decl)
14830      tree decl;
14831 {
14832   return maybe_build_cleanup_1 (decl, integer_three_node);
14833 }
14834
14835 /* If DECL is of a type which needs a cleanup, build that cleanup
14836    here.  The cleanup does not free the storage with a call a delete.  */
14837
14838 tree
14839 maybe_build_cleanup (decl)
14840      tree decl;
14841 {
14842   return maybe_build_cleanup_1 (decl, integer_two_node);
14843 }
14844 \f
14845 /* Expand a C++ expression at the statement level.
14846    This is needed to ferret out nodes which have UNKNOWN_TYPE.
14847    The C++ type checker should get all of these out when
14848    expressions are combined with other, type-providing, expressions,
14849    leaving only orphan expressions, such as:
14850
14851    &class::bar;         / / takes its address, but does nothing with it.  */
14852
14853 void
14854 cplus_expand_expr_stmt (exp)
14855      tree exp;
14856 {
14857   if (processing_template_decl)
14858     {
14859       add_tree (build_min_nt (EXPR_STMT, exp));
14860       return;
14861     }
14862
14863   /* Arrange for all temps to disappear.  */
14864   expand_start_target_temps ();
14865
14866   exp = require_complete_type_in_void (exp);
14867   
14868   if (TREE_CODE (exp) == FUNCTION_DECL)
14869     {
14870       cp_warning ("reference, not call, to function `%D'", exp);
14871       warning ("at this point in file");
14872     }
14873
14874 #if 0
14875   /* We should do this eventually, but right now this causes regex.o from
14876      libg++ to miscompile, and tString to core dump.  */
14877   exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
14878 #endif
14879
14880   /* Strip unused implicit INDIRECT_REFs of references.  */
14881   if (TREE_CODE (exp) == INDIRECT_REF
14882       && TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 0))) == REFERENCE_TYPE)
14883     exp = TREE_OPERAND (exp, 0);
14884
14885   /* If we don't do this, we end up down inside expand_expr
14886      trying to do TYPE_MODE on the ERROR_MARK, and really
14887      go outside the bounds of the type.  */
14888   if (exp != error_mark_node)
14889     expand_expr_stmt (break_out_cleanups (exp));
14890
14891   /* Clean up any pending cleanups.  This happens when a function call
14892      returns a cleanup-needing value that nobody uses.  */
14893   expand_end_target_temps ();
14894 }
14895
14896 /* When a stmt has been parsed, this function is called.
14897
14898    Currently, this function only does something within a
14899    constructor's scope: if a stmt has just assigned to this,
14900    and we are in a derived class, we call `emit_base_init'.  */
14901
14902 void
14903 finish_stmt ()
14904 {
14905   extern struct nesting *cond_stack, *loop_stack, *case_stack;
14906
14907   
14908   if (current_function_assigns_this
14909       || ! current_function_just_assigned_this)
14910     return;
14911   if (DECL_CONSTRUCTOR_P (current_function_decl))
14912     {
14913       /* Constructors must wait until we are out of control
14914          zones before calling base constructors.  */
14915       if (cond_stack || loop_stack || case_stack)
14916         return;
14917       expand_expr_stmt (base_init_expr);
14918       check_base_init (current_class_type);
14919     }
14920   current_function_assigns_this = 1;
14921 }
14922
14923 /* Change a static member function definition into a FUNCTION_TYPE, instead
14924    of the METHOD_TYPE that we create when it's originally parsed.
14925
14926    WARNING: DO NOT pass &TREE_TYPE (decl) to FN or &TYPE_ARG_TYPES
14927    (TREE_TYPE (decl)) to ARGTYPES, as doing so will corrupt the types of
14928    other decls.  Either pass the addresses of local variables or NULL.  */
14929
14930 void
14931 revert_static_member_fn (decl, fn, argtypes)
14932      tree *decl, *fn, *argtypes;
14933 {
14934   tree tmp;
14935   tree function = fn ? *fn : TREE_TYPE (*decl);
14936   tree args = argtypes ? *argtypes : TYPE_ARG_TYPES (function);
14937
14938   if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args))) 
14939       != TYPE_UNQUALIFIED)
14940     cp_error ("static member function `%#D' declared with type qualifiers", 
14941               *decl);
14942
14943   args = TREE_CHAIN (args);
14944   tmp = build_function_type (TREE_TYPE (function), args);
14945   tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
14946   tmp = build_exception_variant (tmp,
14947                                  TYPE_RAISES_EXCEPTIONS (function));
14948   TREE_TYPE (*decl) = tmp;
14949   if (DECL_ARGUMENTS (*decl))
14950     DECL_ARGUMENTS (*decl) = TREE_CHAIN (DECL_ARGUMENTS (*decl));
14951   DECL_STATIC_FUNCTION_P (*decl) = 1;
14952   if (fn)
14953     *fn = tmp;
14954   if (argtypes)
14955     *argtypes = args;
14956 }
14957
14958 struct cp_function
14959 {
14960   int returns_value;
14961   int returns_null;
14962   int assigns_this;
14963   int just_assigned_this;
14964   int parms_stored;
14965   int temp_name_counter;
14966   tree named_labels;
14967   struct named_label_list *named_label_uses;
14968   tree shadowed_labels;
14969   tree ctor_label;
14970   tree dtor_label;
14971   rtx last_dtor_insn;
14972   rtx last_parm_cleanup_insn;
14973   tree base_init_list;
14974   tree member_init_list;
14975   tree base_init_expr;
14976   tree current_class_ptr;
14977   tree current_class_ref;
14978   rtx result_rtx;
14979   struct cp_function *next;
14980   struct binding_level *binding_level;
14981   int static_labelno;
14982 };
14983
14984 static struct cp_function *cp_function_chain;
14985
14986 extern int temp_name_counter;
14987
14988 /* Save and reinitialize the variables
14989    used during compilation of a C++ function.  */
14990
14991 void
14992 push_cp_function_context (context)
14993      tree context;
14994 {
14995   struct cp_function *p
14996     = (struct cp_function *) xmalloc (sizeof (struct cp_function));
14997
14998   push_function_context_to (context);
14999
15000   p->next = cp_function_chain;
15001   cp_function_chain = p;
15002
15003   p->named_labels = named_labels;
15004   p->named_label_uses = named_label_uses;
15005   p->shadowed_labels = shadowed_labels;
15006   p->returns_value = current_function_returns_value;
15007   p->returns_null = current_function_returns_null;
15008   p->binding_level = current_binding_level;
15009   p->ctor_label = ctor_label;
15010   p->dtor_label = dtor_label;
15011   p->last_dtor_insn = last_dtor_insn;
15012   p->last_parm_cleanup_insn = last_parm_cleanup_insn;
15013   p->assigns_this = current_function_assigns_this;
15014   p->just_assigned_this = current_function_just_assigned_this;
15015   p->parms_stored = current_function_parms_stored;
15016   p->result_rtx = original_result_rtx;
15017   p->base_init_expr = base_init_expr;
15018   p->temp_name_counter = temp_name_counter;
15019   p->base_init_list = current_base_init_list;
15020   p->member_init_list = current_member_init_list;
15021   p->current_class_ptr = current_class_ptr;
15022   p->current_class_ref = current_class_ref;
15023   p->static_labelno = static_labelno;
15024 }
15025
15026 /* Restore the variables used during compilation of a C++ function.  */
15027
15028 void
15029 pop_cp_function_context (context)
15030      tree context;
15031 {
15032   struct cp_function *p = cp_function_chain;
15033   tree link;
15034
15035   /* Bring back all the labels that were shadowed.  */
15036   for (link = shadowed_labels; link; link = TREE_CHAIN (link))
15037     if (DECL_NAME (TREE_VALUE (link)) != 0)
15038       SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link)),
15039                                   TREE_VALUE (link));
15040
15041   pop_function_context_from (context);
15042
15043   cp_function_chain = p->next;
15044
15045   named_labels = p->named_labels;
15046   named_label_uses = p->named_label_uses;
15047   shadowed_labels = p->shadowed_labels;
15048   current_function_returns_value = p->returns_value;
15049   current_function_returns_null = p->returns_null;
15050   current_binding_level = p->binding_level;
15051   ctor_label = p->ctor_label;
15052   dtor_label = p->dtor_label;
15053   last_dtor_insn = p->last_dtor_insn;
15054   last_parm_cleanup_insn = p->last_parm_cleanup_insn;
15055   current_function_assigns_this = p->assigns_this;
15056   current_function_just_assigned_this = p->just_assigned_this;
15057   current_function_parms_stored = p->parms_stored;
15058   original_result_rtx = p->result_rtx;
15059   base_init_expr = p->base_init_expr;
15060   temp_name_counter = p->temp_name_counter;
15061   current_base_init_list = p->base_init_list;
15062   current_member_init_list = p->member_init_list;
15063   current_class_ptr = p->current_class_ptr;
15064   current_class_ref = p->current_class_ref;
15065   static_labelno = p->static_labelno;
15066
15067   free (p);
15068 }
15069
15070 int
15071 in_function_p ()
15072 {
15073   return function_depth != 0;
15074 }