Initial import from FreeBSD RELENG_4:
[dragonfly.git] / contrib / gcc / cp / decl.c
1 /* Process declarations and variables for C compiler.
2    Copyright (C) 1988, 92-98, 1999 Free Software Foundation, Inc.
3    Contributed by Michael Tiemann (tiemann@cygnus.com)
4
5 This file is part of GNU CC.
6
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING.  If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA.  */
21
22 /* $FreeBSD: src/contrib/gcc/cp/decl.c,v 1.4.2.2 2000/08/07 10:06:54 obrien Exp $ */
23
24
25 /* Process declarations and symbol lookup for C front end.
26    Also constructs types; the standard scalar types at initialization,
27    and structure, union, array and enum types when they are declared.  */
28
29 /* ??? not all decl nodes are given the most useful possible
30    line numbers.  For example, the CONST_DECLs for enum values.  */
31
32 #include "config.h"
33 #include "system.h"
34 #include "tree.h"
35 #include "rtl.h"
36 #include "flags.h"
37 #include "cp-tree.h"
38 #include "decl.h"
39 #include "lex.h"
40 #include <signal.h>
41 #include "obstack.h"
42 #include "defaults.h"
43 #include "output.h"
44 #include "except.h"
45 #include "toplev.h"
46 #include "../hash.h"
47
48 #define obstack_chunk_alloc xmalloc
49 #define obstack_chunk_free free
50
51 extern tree builtin_return_address_fndecl;
52
53 extern struct obstack permanent_obstack;
54 extern struct obstack* saveable_obstack;
55
56 extern int current_class_depth;
57
58 extern tree static_ctors, static_dtors;
59
60 extern int static_labelno;
61
62 extern tree current_namespace;
63 extern tree global_namespace;
64
65 extern void (*print_error_function) PROTO((char *));
66 extern int (*valid_lang_attribute) PROTO ((tree, tree, tree, tree));
67
68 /* Obstack used for remembering local class declarations (like
69    enums and static (const) members.  */
70 #include "stack.h"
71 struct obstack decl_obstack;
72 static struct stack_level *decl_stack;
73
74 #ifndef CHAR_TYPE_SIZE
75 #define CHAR_TYPE_SIZE BITS_PER_UNIT
76 #endif
77
78 #ifndef SHORT_TYPE_SIZE
79 #define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2))
80 #endif
81
82 #ifndef INT_TYPE_SIZE
83 #define INT_TYPE_SIZE BITS_PER_WORD
84 #endif
85
86 #ifndef LONG_TYPE_SIZE
87 #define LONG_TYPE_SIZE BITS_PER_WORD
88 #endif
89
90 #ifndef LONG_LONG_TYPE_SIZE
91 #define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
92 #endif
93
94 #ifndef WCHAR_UNSIGNED
95 #define WCHAR_UNSIGNED 0
96 #endif
97
98 #ifndef FLOAT_TYPE_SIZE
99 #define FLOAT_TYPE_SIZE BITS_PER_WORD
100 #endif
101
102 #ifndef DOUBLE_TYPE_SIZE
103 #define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
104 #endif
105
106 #ifndef LONG_DOUBLE_TYPE_SIZE
107 #define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
108 #endif
109
110 #ifndef BOOL_TYPE_SIZE
111 #ifdef SLOW_BYTE_ACCESS
112 #define BOOL_TYPE_SIZE ((SLOW_BYTE_ACCESS) ? (POINTER_SIZE) : (CHAR_TYPE_SIZE))
113 #else
114 #define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
115 #endif
116 #endif
117
118 /* We let tm.h override the types used here, to handle trivial differences
119    such as the choice of unsigned int or long unsigned int for size_t.
120    When machines start needing nontrivial differences in the size type,
121    it would be best to do something here to figure out automatically
122    from other information what type to use.  */
123
124 #ifndef SIZE_TYPE
125 #define SIZE_TYPE "long unsigned int"
126 #endif
127
128 #ifndef PTRDIFF_TYPE
129 #define PTRDIFF_TYPE "long int"
130 #endif
131
132 #ifndef WCHAR_TYPE
133 #define WCHAR_TYPE "int"
134 #endif
135
136 static tree grokparms                           PROTO((tree, int));
137 static tree lookup_nested_type                  PROTO((tree, tree));
138 static const char *redeclaration_error_message  PROTO((tree, tree));
139
140 static struct stack_level *push_decl_level PROTO((struct stack_level *,
141                                                   struct obstack *));
142 static void push_binding_level PROTO((struct binding_level *, int,
143                                       int));
144 static void pop_binding_level PROTO((void));
145 static void suspend_binding_level PROTO((void));
146 static void resume_binding_level PROTO((struct binding_level *));
147 static struct binding_level *make_binding_level PROTO((void));
148 static void declare_namespace_level PROTO((void));
149 static void signal_catch PROTO((int)) ATTRIBUTE_NORETURN;
150 static void storedecls PROTO((tree));
151 static void require_complete_types_for_parms PROTO((tree));
152 static void push_overloaded_decl_1 PROTO((tree));
153 static int ambi_op_p PROTO((tree));
154 static int unary_op_p PROTO((tree));
155 static tree store_bindings PROTO((tree, tree));
156 static tree lookup_tag_reverse PROTO((tree, tree));
157 static tree obscure_complex_init PROTO((tree, tree));
158 static tree maybe_build_cleanup_1 PROTO((tree, tree));
159 static tree lookup_name_real PROTO((tree, int, int, int));
160 static void warn_extern_redeclared_static PROTO((tree, tree));
161 static void grok_reference_init PROTO((tree, tree, tree));
162 static tree grokfndecl PROTO((tree, tree, tree, tree, int,
163                               enum overload_flags, tree,
164                               tree, int, int, int, int, int, int, tree));
165 static tree grokvardecl PROTO((tree, tree, RID_BIT_TYPE *, int, int, tree));
166 static tree lookup_tag PROTO((enum tree_code, tree,
167                               struct binding_level *, int));
168 static void set_identifier_type_value_with_scope
169         PROTO((tree, tree, struct binding_level *));
170 static void record_builtin_type PROTO((enum rid, const char *, tree));
171 static void record_unknown_type PROTO((tree, const char *));
172 static int member_function_or_else PROTO((tree, tree, const char *));
173 static void bad_specifiers PROTO((tree, const char *, int, int, int, int,
174                                   int));
175 static void lang_print_error_function PROTO((char *));
176 static tree maybe_process_template_type_declaration PROTO((tree, int, struct binding_level*));
177 static void check_for_uninitialized_const_var PROTO((tree));
178 static unsigned long typename_hash PROTO((hash_table_key));
179 static boolean typename_compare PROTO((hash_table_key, hash_table_key));
180 static void push_binding PROTO((tree, tree, struct binding_level*));
181 static int add_binding PROTO((tree, tree));
182 static void pop_binding PROTO((tree, tree));
183 static tree local_variable_p PROTO((tree));
184 static tree find_binding PROTO((tree, tree));
185 static tree select_decl PROTO((tree, int));
186 static tree unqualified_namespace_lookup PROTO((tree, int));
187 static int lookup_flags PROTO((int, int));
188 static tree qualify_lookup PROTO((tree, int));
189 static tree record_builtin_java_type PROTO((const char *, int));
190 static const char *tag_name PROTO((enum tag_types code));
191 static void find_class_binding_level PROTO((void));
192 static struct binding_level *innermost_nonclass_level PROTO((void));
193 static void finish_dtor PROTO((void));
194 static void finish_ctor PROTO((int));
195 static tree poplevel_class PROTO((void));
196 static void warn_about_implicit_typename_lookup PROTO((tree, tree));
197 static int walk_namespaces_r PROTO((tree, walk_namespaces_fn, void *));
198 static int walk_globals_r PROTO((tree, void *));
199
200 #if defined (DEBUG_CP_BINDING_LEVELS)
201 static void indent PROTO((void));
202 #endif
203
204 /* A node which has tree code ERROR_MARK, and whose type is itself.
205    All erroneous expressions are replaced with this node.  All functions
206    that accept nodes as arguments should avoid generating error messages
207    if this node is one of the arguments, since it is undesirable to get
208    multiple error messages from one error in the input.  */
209
210 tree error_mark_node;
211
212 /* Erroneous argument lists can use this *IFF* they do not modify it.  */
213 tree error_mark_list;
214
215 /* INTEGER_TYPE and REAL_TYPE nodes for the standard data types */
216
217 tree short_integer_type_node;
218 tree integer_type_node;
219 tree long_integer_type_node;
220 tree long_long_integer_type_node;
221
222 tree short_unsigned_type_node;
223 tree unsigned_type_node;
224 tree long_unsigned_type_node;
225 tree long_long_unsigned_type_node;
226
227 tree ptrdiff_type_node;
228
229 tree unsigned_char_type_node;
230 tree signed_char_type_node;
231 tree char_type_node;
232 tree wchar_type_node;
233 tree signed_wchar_type_node;
234 tree unsigned_wchar_type_node;
235
236 tree wchar_decl_node;
237
238 tree float_type_node;
239 tree double_type_node;
240 tree long_double_type_node;
241
242 tree complex_integer_type_node;
243 tree complex_float_type_node;
244 tree complex_double_type_node;
245 tree complex_long_double_type_node;
246
247 tree intQI_type_node;
248 tree intHI_type_node;
249 tree intSI_type_node;
250 tree intDI_type_node;
251 #if HOST_BITS_PER_WIDE_INT >= 64
252 tree intTI_type_node;
253 #endif
254
255 tree unsigned_intQI_type_node;
256 tree unsigned_intHI_type_node;
257 tree unsigned_intSI_type_node;
258 tree unsigned_intDI_type_node;
259 #if HOST_BITS_PER_WIDE_INT >= 64
260 tree unsigned_intTI_type_node;
261 #endif
262
263 tree java_byte_type_node;
264 tree java_short_type_node;
265 tree java_int_type_node;
266 tree java_long_type_node;
267 tree java_float_type_node;
268 tree java_double_type_node;
269 tree java_char_type_node;
270 tree java_boolean_type_node;
271
272 /* A VOID_TYPE node, and the same, packaged in a TREE_LIST.  */
273
274 tree void_type_node, void_list_node;
275 tree void_zero_node;
276
277 /* Nodes for types `void *' and `const void *'.  */
278
279 tree ptr_type_node;
280 tree const_ptr_type_node;
281
282 /* Nodes for types `char *' and `const char *'.  */
283
284 tree string_type_node, const_string_type_node;
285
286 /* Type `char[256]' or something like it.
287    Used when an array of char is needed and the size is irrelevant.  */
288
289 tree char_array_type_node;
290
291 /* Type `int[256]' or something like it.
292    Used when an array of int needed and the size is irrelevant.  */
293
294 tree int_array_type_node;
295
296 /* Type `wchar_t[256]' or something like it.
297    Used when a wide string literal is created.  */
298
299 tree wchar_array_type_node;
300
301 /* The bool data type, and constants */
302 tree boolean_type_node, boolean_true_node, boolean_false_node;
303
304 /* Type `int ()' -- used for implicit declaration of functions.  */
305
306 tree default_function_type;
307
308 /* Function types `double (double)' and `double (double, double)', etc.  */
309
310 static tree double_ftype_double, double_ftype_double_double;
311 static tree int_ftype_int, long_ftype_long;
312 static tree float_ftype_float;
313 static tree ldouble_ftype_ldouble;
314
315 /* Function type `int (const void *, const void *, size_t)' */
316 static tree int_ftype_cptr_cptr_sizet;
317
318 /* C++ extensions */
319 tree vtable_entry_type;
320 tree delta_type_node;
321 #if 0
322 /* Old rtti stuff.  */
323 tree __baselist_desc_type_node;
324 tree __i_desc_type_node, __m_desc_type_node;
325 tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
326 #endif
327 tree __t_desc_type_node;
328 #if 0
329 tree __tp_desc_type_node;
330 #endif
331 tree __access_mode_type_node;
332 tree __bltn_desc_type_node, __user_desc_type_node, __class_desc_type_node;
333 tree __ptr_desc_type_node, __attr_desc_type_node, __func_desc_type_node;
334 tree __ptmf_desc_type_node, __ptmd_desc_type_node;
335 #if 0
336 /* Not needed yet?  May be needed one day?  */
337 tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
338 tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
339 tree __ptmf_desc_array_type, __ptmd_desc_array_type;
340 #endif
341
342 /* This is the identifier __vlist. */
343 tree vlist_identifier;
344
345 /* This is the type _Vlist = vtable_entry_type**. */
346 tree vlist_type_node;
347
348 /* A null pointer of type _Vlist. */
349 tree vlist_zero_node;
350
351 /* Indicates that there is a type value in some namespace, although
352    that is not necessarily in scope at the moment. */
353
354 static tree global_type_node;
355
356 tree class_star_type_node;
357 tree class_type_node, record_type_node, union_type_node, enum_type_node;
358 tree unknown_type_node;
359 tree opaque_type_node, signature_type_node;
360 tree sigtable_entry_type;
361
362 /* Array type `vtable_entry_type[]' */
363 tree vtbl_type_node;
364 tree vtbl_ptr_type_node;
365
366 /* namespace std */
367 tree std_node;
368 int in_std = 0;
369
370 /* Expect only namespace names now. */
371 static int only_namespace_names;
372
373 /* In a destructor, the point at which all derived class destroying
374    has been done, just before any base class destroying will be done.  */
375
376 tree dtor_label;
377
378 /* In a destructor, the last insn emitted after the start of the
379    function and the parms.  */
380
381 static rtx last_dtor_insn;
382
383 /* In a constructor, the last insn emitted after the start of the
384    function and the parms, the exception specification and any
385    function-try-block.  The constructor initializers are emitted after
386    this insn.  */
387
388 static rtx last_parm_cleanup_insn;
389
390 /* In a constructor, the point at which we are ready to return
391    the pointer to the initialized object.  */
392
393 tree ctor_label;
394
395 /* A FUNCTION_DECL which can call `abort'.  Not necessarily the
396    one that the user will declare, but sufficient to be called
397    by routines that want to abort the program.  */
398
399 tree abort_fndecl;
400
401 /* A FUNCTION_DECL for the default `::operator delete'.  */
402
403 tree global_delete_fndecl;
404
405 extern rtx cleanup_label, return_label;
406
407 /* If original DECL_RESULT of current function was a register,
408    but due to being an addressable named return value, would up
409    on the stack, this variable holds the named return value's
410    original location.  */
411 static rtx original_result_rtx;
412
413 /* Sequence of insns which represents base initialization.  */
414 tree base_init_expr;
415
416 /* C++: Keep these around to reduce calls to `get_identifier'.
417    Identifiers for `this' in member functions and the auto-delete
418    parameter for destructors.  */
419 tree this_identifier, in_charge_identifier;
420 tree ctor_identifier, dtor_identifier;
421 /* Used in pointer to member functions, in vtables, and in sigtables.  */
422 tree pfn_identifier, index_identifier, delta_identifier, delta2_identifier;
423 tree pfn_or_delta2_identifier, tag_identifier;
424 tree vt_off_identifier;
425
426 struct named_label_list
427 {
428   struct binding_level *binding_level;
429   tree names_in_scope;
430   tree label_decl;
431   char *filename_o_goto;
432   int lineno_o_goto;
433   struct named_label_list *next;
434 };
435
436 /* A list (chain of TREE_LIST nodes) of named label uses.
437    The TREE_PURPOSE field is the list of variables defined
438    in the label's scope defined at the point of use.
439    The TREE_VALUE field is the LABEL_DECL used.
440    The TREE_TYPE field holds `current_binding_level' at the
441    point of the label's use.
442
443    BWAHAHAAHAHahhahahahaah.  No, no, no, said the little chicken.
444
445    Look at the pretty struct named_label_list. See the pretty struct
446    with the pretty named fields that describe what they do. See the
447    pretty lack of gratuitous casts. Notice the code got a lot cleaner.
448
449    Used only for jumps to as-yet undefined labels, since
450    jumps to defined labels can have their validity checked
451    by stmt.c.  */
452
453 static struct named_label_list *named_label_uses = NULL;
454
455 /* A list of objects which have constructors or destructors
456    which reside in the global scope.  The decl is stored in
457    the TREE_VALUE slot and the initializer is stored
458    in the TREE_PURPOSE slot.  */
459 tree static_aggregates;
460
461 /* -- end of C++ */
462
463 /* Two expressions that are constants with value zero.
464    The first is of type `int', the second of type `void *'.  */
465
466 tree integer_zero_node;
467 tree null_pointer_node;
468
469 /* The value for __null (NULL), namely, a zero of an integer type with
470    the same number of bits as a pointer.  */
471 tree null_node;
472
473 /* A node for the integer constants 1, 2, and 3.  */
474
475 tree integer_one_node, integer_two_node, integer_three_node;
476
477 /* While defining an enum type, this is 1 plus the last enumerator
478    constant value.  */
479
480 static tree enum_next_value;
481
482 /* Nonzero means that there was overflow computing enum_next_value.  */
483
484 static int enum_overflow;
485
486 /* Parsing a function declarator leaves a list of parameter names
487    or a chain or parameter decls here.  */
488
489 tree last_function_parms;
490
491 /* Parsing a function declarator leaves here a chain of structure
492    and enum types declared in the parmlist.  */
493
494 static tree last_function_parm_tags;
495
496 /* After parsing the declarator that starts a function definition,
497    `start_function' puts here the list of parameter names or chain of decls.
498    `store_parm_decls' finds it here.  */
499
500 static tree current_function_parms;
501
502 /* Similar, for last_function_parm_tags.  */
503 static tree current_function_parm_tags;
504
505 /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
506    that have names.  Here so we can clear out their names' definitions
507    at the end of the function.  */
508
509 static tree named_labels;
510
511 /* A list of LABEL_DECLs from outer contexts that are currently shadowed.  */
512
513 static tree shadowed_labels;
514
515 /* The FUNCTION_DECL for the function currently being compiled,
516    or 0 if between functions.  */
517 tree current_function_decl;
518
519 /* Set to 0 at beginning of a function definition, set to 1 if
520    a return statement that specifies a return value is seen.  */
521
522 int current_function_returns_value;
523
524 /* Set to 0 at beginning of a function definition, set to 1 if
525    a return statement with no argument is seen.  */
526
527 int current_function_returns_null;
528
529 /* Set to 0 at beginning of a function definition, and whenever
530    a label (case or named) is defined.  Set to value of expression
531    returned from function when that value can be transformed into
532    a named return value.  */
533
534 tree current_function_return_value;
535
536 /* Nonzero means give `double' the same size as `float'.  */
537
538 extern int flag_short_double;
539
540 /* Nonzero means don't recognize any builtin functions.  */
541
542 extern int flag_no_builtin;
543
544 /* Nonzero means don't recognize the non-ANSI builtin functions.
545    -ansi sets this.  */
546
547 extern int flag_no_nonansi_builtin;
548
549 /* Nonzero means enable obscure ANSI features and disable GNU extensions
550    that might cause ANSI-compliant code to be miscompiled.  */
551
552 extern int flag_ansi;
553
554 /* Nonzero if we want to support huge (> 2^(sizeof(short)*8-1) bytes)
555    objects.  */
556 extern int flag_huge_objects;
557
558 /* Nonzero if we want to conserve space in the .o files.  We do this
559    by putting uninitialized data and runtime initialized data into
560    .common instead of .data at the expense of not flagging multiple
561    definitions.  */
562 extern int flag_conserve_space;
563
564 /* Pointers to the base and current top of the language name stack.  */
565
566 extern tree *current_lang_base, *current_lang_stack;
567 \f
568 /* C and C++ flags are in decl2.c.  */
569
570 /* Set to 0 at beginning of a constructor, set to 1
571    if that function does an allocation before referencing its
572    instance variable.  */
573 static int current_function_assigns_this;
574 int current_function_just_assigned_this;
575
576 /* Set to 0 at beginning of a function.  Set non-zero when
577    store_parm_decls is called.  Don't call store_parm_decls
578    if this flag is non-zero!  */
579 int current_function_parms_stored;
580
581 /* Flag used when debugging spew.c */
582
583 extern int spew_debug;
584
585 /* This is a copy of the class_shadowed list of the previous class binding
586    contour when at global scope.  It's used to reset IDENTIFIER_CLASS_VALUEs
587    when entering another class scope (i.e. a cache miss).  */
588 extern tree previous_class_values;
589
590 /* A expression of value 0 with the same precision as a sizetype
591    node, but signed.  */
592 tree signed_size_zero_node;
593
594 /* The name of the anonymous namespace, throughout this translation
595    unit.  */
596 tree anonymous_namespace_name;
597
598 \f
599 /* Allocate a level of searching.  */
600
601 static
602 struct stack_level *
603 push_decl_level (stack, obstack)
604      struct stack_level *stack;
605      struct obstack *obstack;
606 {
607   struct stack_level tem;
608   tem.prev = stack;
609
610   return push_stack_level (obstack, (char *)&tem, sizeof (tem));
611 }
612 \f
613 /* For each binding contour we allocate a binding_level structure
614    which records the names defined in that contour.
615    Contours include:
616     0) the global one
617     1) one for each function definition,
618        where internal declarations of the parameters appear.
619     2) one for each compound statement,
620        to record its declarations.
621
622    The current meaning of a name can be found by searching the levels
623    from the current one out to the global one.
624
625    Off to the side, may be the class_binding_level.  This exists only
626    to catch class-local declarations.  It is otherwise nonexistent.
627
628    Also there may be binding levels that catch cleanups that must be
629    run when exceptions occur.  Thus, to see whether a name is bound in
630    the current scope, it is not enough to look in the
631    CURRENT_BINDING_LEVEL.  You should use lookup_name_current_level
632    instead.  */
633
634 /* Note that the information in the `names' component of the global contour
635    is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers.  */
636
637 struct binding_level
638   {
639     /* A chain of _DECL nodes for all variables, constants, functions,
640        and typedef types.  These are in the reverse of the order
641        supplied.  There may be OVERLOADs on this list, too, but they
642        are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD.  */
643     tree names;
644
645     /* A list of structure, union and enum definitions, for looking up
646        tag names.
647        It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
648        or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
649        or ENUMERAL_TYPE node.
650
651        C++: the TREE_VALUE nodes can be simple types for
652        component_bindings.  */
653     tree tags;
654
655     /* A list of USING_DECL nodes. */
656     tree usings;
657
658     /* A list of used namespaces. PURPOSE is the namespace,
659        VALUE the common ancestor with this binding_level's namespace. */
660     tree using_directives;
661
662     /* If this binding level is the binding level for a class, then
663        class_shadowed is a TREE_LIST.  The TREE_PURPOSE of each node
664        is the name of an entity bound in the class; the TREE_VALUE is
665        the IDENTIFIER_CLASS_VALUE before we entered the class.  Thus,
666        when leaving class scope, we can restore the
667        IDENTIFIER_CLASS_VALUE by walking this list.  The TREE_TYPE is
668        the DECL bound by this name in the class.  */
669     tree class_shadowed;
670
671     /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
672        is used for all binding levels.  */
673     tree type_shadowed;
674
675     /* For each level (except not the global one),
676        a chain of BLOCK nodes for all the levels
677        that were entered and exited one level down.  */
678     tree blocks;
679
680     /* The BLOCK node for this level, if one has been preallocated.
681        If 0, the BLOCK is allocated (if needed) when the level is popped.  */
682     tree this_block;
683
684     /* The binding level which this one is contained in (inherits from).  */
685     struct binding_level *level_chain;
686
687     /* List of decls in `names' that have incomplete
688        structure or union types.  */
689     tree incomplete;
690
691     /* List of VAR_DECLS saved from a previous for statement.
692        These would be dead in ANSI-conforming code, but might
693        be referenced in ARM-era code.  These are stored in a
694        TREE_LIST; the TREE_VALUE is the actual declaration.  */
695     tree dead_vars_from_for;
696
697     /* 1 for the level that holds the parameters of a function.
698        2 for the level that holds a class declaration.
699        3 for levels that hold parameter declarations.  */
700     unsigned parm_flag : 4;
701
702     /* 1 means make a BLOCK for this level regardless of all else.
703        2 for temporary binding contours created by the compiler.  */
704     unsigned keep : 3;
705
706     /* Nonzero if this level "doesn't exist" for tags.  */
707     unsigned tag_transparent : 1;
708
709     /* Nonzero if this level can safely have additional
710        cleanup-needing variables added to it.  */
711     unsigned more_cleanups_ok : 1;
712     unsigned have_cleanups : 1;
713
714     /* Nonzero if this level is for storing the decls for template
715        parameters and generic decls; these decls will be discarded and
716        replaced with a TEMPLATE_DECL.  */
717     unsigned pseudo_global : 1;
718
719     /* This is set for a namespace binding level.  */
720     unsigned namespace_p : 1;
721
722     /* True if this level is that of a for-statement where we need to
723        worry about ambiguous (ARM or ANSI) scope rules.  */
724     unsigned is_for_scope : 1;
725
726     /* Two bits left for this word.  */
727
728 #if defined(DEBUG_CP_BINDING_LEVELS)
729     /* Binding depth at which this level began.  */
730     unsigned binding_depth;
731 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
732   };
733
734 #define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
735   
736 /* The binding level currently in effect.  */
737
738 static struct binding_level *current_binding_level;
739
740 /* The binding level of the current class, if any.  */
741
742 static struct binding_level *class_binding_level;
743
744 /* A chain of binding_level structures awaiting reuse.  */
745
746 static struct binding_level *free_binding_level;
747
748 /* The outermost binding level, for names of file scope.
749    This is created when the compiler is started and exists
750    through the entire run.  */
751
752 static struct binding_level *global_binding_level;
753
754 /* Binding level structures are initialized by copying this one.  */
755
756 static struct binding_level clear_binding_level;
757
758 /* Nonzero means unconditionally make a BLOCK for the next level pushed.  */
759
760 static int keep_next_level_flag;
761
762 #if defined(DEBUG_CP_BINDING_LEVELS)
763 static int binding_depth = 0;
764 static int is_class_level = 0;
765
766 static void
767 indent ()
768 {
769   register unsigned i;
770
771   for (i = 0; i < binding_depth*2; i++)
772     putc (' ', stderr);
773 }
774 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
775
776 static tree pushdecl_with_scope PROTO((tree, struct binding_level *));
777
778 static void
779 push_binding_level (newlevel, tag_transparent, keep)
780      struct binding_level *newlevel;
781      int tag_transparent, keep;
782 {
783   /* Add this level to the front of the chain (stack) of levels that
784      are active.  */
785   *newlevel = clear_binding_level;
786   newlevel->level_chain = current_binding_level;
787   current_binding_level = newlevel;
788   newlevel->tag_transparent = tag_transparent;
789   newlevel->more_cleanups_ok = 1;
790   newlevel->keep = keep;
791 #if defined(DEBUG_CP_BINDING_LEVELS)
792   newlevel->binding_depth = binding_depth;
793   indent ();
794   fprintf (stderr, "push %s level 0x%08x line %d\n",
795            (is_class_level) ? "class" : "block", newlevel, lineno);
796   is_class_level = 0;
797   binding_depth++;
798 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
799 }
800
801 /* Find the innermost enclosing class scope, and reset
802    CLASS_BINDING_LEVEL appropriately.  */
803
804 static void
805 find_class_binding_level ()
806 {
807   struct binding_level *level = current_binding_level;
808
809   while (level && level->parm_flag != 2)
810     level = level->level_chain;
811   if (level && level->parm_flag == 2)
812     class_binding_level = level;
813   else
814     class_binding_level = 0;
815 }
816
817 static void
818 pop_binding_level ()
819 {
820   if (global_binding_level)
821     {
822       /* Cannot pop a level, if there are none left to pop.  */
823       if (current_binding_level == global_binding_level)
824         my_friendly_abort (123);
825     }
826   /* Pop the current level, and free the structure for reuse.  */
827 #if defined(DEBUG_CP_BINDING_LEVELS)
828   binding_depth--;
829   indent ();
830   fprintf (stderr, "pop  %s level 0x%08x line %d\n",
831           (is_class_level) ? "class" : "block",
832           current_binding_level, lineno);
833   if (is_class_level != (current_binding_level == class_binding_level))
834     {
835       indent ();
836       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
837     }
838   is_class_level = 0;
839 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
840   {
841     register struct binding_level *level = current_binding_level;
842     current_binding_level = current_binding_level->level_chain;
843     level->level_chain = free_binding_level;
844 #if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
845     if (level->binding_depth != binding_depth)
846       abort ();
847 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
848     free_binding_level = level;
849     find_class_binding_level ();
850   }
851 }
852
853 static void
854 suspend_binding_level ()
855 {
856   if (class_binding_level)
857     current_binding_level = class_binding_level;
858
859   if (global_binding_level)
860     {
861       /* Cannot suspend a level, if there are none left to suspend.  */
862       if (current_binding_level == global_binding_level)
863         my_friendly_abort (123);
864     }
865   /* Suspend the current level.  */
866 #if defined(DEBUG_CP_BINDING_LEVELS)
867   binding_depth--;
868   indent ();
869   fprintf (stderr, "suspend  %s level 0x%08x line %d\n",
870           (is_class_level) ? "class" : "block",
871           current_binding_level, lineno);
872   if (is_class_level != (current_binding_level == class_binding_level))
873     {
874       indent ();
875       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
876     }
877   is_class_level = 0;
878 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
879   current_binding_level = current_binding_level->level_chain;
880   find_class_binding_level ();
881 }
882
883 static void
884 resume_binding_level (b)
885      struct binding_level *b;
886 {
887   /* Resuming binding levels is meant only for namespaces,
888      and those cannot nest into classes. */
889   my_friendly_assert(!class_binding_level, 386);
890   /* Also, resuming a non-directly nested namespace is a no-no.  */
891   my_friendly_assert(b->level_chain == current_binding_level, 386);
892   current_binding_level = b;
893 #if defined(DEBUG_CP_BINDING_LEVELS)
894   b->binding_depth = binding_depth;
895   indent ();
896   fprintf (stderr, "resume %s level 0x%08x line %d\n",
897            (is_class_level) ? "class" : "block", b, lineno);
898   is_class_level = 0;
899   binding_depth++;
900 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
901 }
902 \f
903 /* Create a new `struct binding_level'.  */
904
905 static
906 struct binding_level *
907 make_binding_level ()
908 {
909   /* NOSTRICT */
910   return (struct binding_level *) xmalloc (sizeof (struct binding_level));
911 }
912
913 /* Nonzero if we are currently in the global binding level.  */
914
915 int
916 global_bindings_p ()
917 {
918   return current_binding_level == global_binding_level;
919 }
920
921 /* Return the innermost binding level that is not for a class scope.  */
922
923 static struct binding_level *
924 innermost_nonclass_level ()
925 {
926   struct binding_level *b;
927
928   b = current_binding_level;
929   while (b->parm_flag == 2)
930     b = b->level_chain;
931
932   return b;
933 }
934
935 /* Nonzero if we are currently in a toplevel binding level.  This
936    means either the global binding level or a namespace in a toplevel
937    binding level.  Since there are no non-toplevel namespace levels,
938    this really means any namespace or pseudo-global level.  We also
939    include a class whose context is toplevel.  */
940
941 int
942 toplevel_bindings_p ()
943 {
944   struct binding_level *b = innermost_nonclass_level ();
945
946   return b->namespace_p || b->pseudo_global;
947 }
948
949 /* Nonzero if this is a namespace scope, or if we are defining a class
950    which is itself at namespace scope, or whose enclosing class is
951    such a class, etc.  */
952
953 int
954 namespace_bindings_p ()
955 {
956   struct binding_level *b = innermost_nonclass_level ();
957
958   return b->namespace_p;
959 }
960
961 void
962 keep_next_level ()
963 {
964   keep_next_level_flag = 1;
965 }
966
967 /* Nonzero if the current level needs to have a BLOCK made.  */
968
969 int
970 kept_level_p ()
971 {
972   return (current_binding_level->blocks != NULL_TREE
973           || current_binding_level->keep
974           || current_binding_level->names != NULL_TREE
975           || (current_binding_level->tags != NULL_TREE
976               && !current_binding_level->tag_transparent));
977 }
978
979 /* Identify this binding level as a level of parameters.  */
980
981 void
982 declare_parm_level ()
983 {
984   current_binding_level->parm_flag = 1;
985 }
986
987 void
988 declare_pseudo_global_level ()
989 {
990   current_binding_level->pseudo_global = 1;
991 }
992
993 static void
994 declare_namespace_level ()
995 {
996   current_binding_level->namespace_p = 1;
997 }
998
999 int
1000 pseudo_global_level_p ()
1001 {
1002   struct binding_level *b = innermost_nonclass_level ();
1003
1004   return b->pseudo_global;
1005 }
1006
1007 void
1008 set_class_shadows (shadows)
1009      tree shadows;
1010 {
1011   class_binding_level->class_shadowed = shadows;
1012 }
1013
1014 /* Enter a new binding level.
1015    If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
1016    not for that of tags.  */
1017
1018 void
1019 pushlevel (tag_transparent)
1020      int tag_transparent;
1021 {
1022   register struct binding_level *newlevel = NULL_BINDING_LEVEL;
1023
1024   /* If this is the top level of a function,
1025      just make sure that NAMED_LABELS is 0.
1026      They should have been set to 0 at the end of the previous function.  */
1027
1028   if (current_binding_level == global_binding_level)
1029     my_friendly_assert (named_labels == NULL_TREE, 134);
1030
1031   /* Reuse or create a struct for this binding level.  */
1032
1033 #if defined(DEBUG_CP_BINDING_LEVELS)
1034   if (0)
1035 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1036   if (free_binding_level)
1037 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1038     {
1039       newlevel = free_binding_level;
1040       free_binding_level = free_binding_level->level_chain;
1041     }
1042   else
1043     {
1044       newlevel = make_binding_level ();
1045     }
1046
1047   push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
1048   GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
1049   keep_next_level_flag = 0;
1050 }
1051
1052 void
1053 note_level_for_for ()
1054 {
1055   current_binding_level->is_for_scope = 1;
1056 }
1057
1058 void
1059 pushlevel_temporary (tag_transparent)
1060      int tag_transparent;
1061 {
1062   pushlevel (tag_transparent);
1063   current_binding_level->keep = 2;
1064   clear_last_expr ();
1065
1066   /* Note we don't call push_momentary() here.  Otherwise, it would cause
1067      cleanups to be allocated on the momentary obstack, and they will be
1068      overwritten by the next statement.  */
1069
1070   expand_start_bindings (0);
1071 }
1072
1073 /* For a binding between a name and an entity at a block scope,
1074    this is the `struct binding_level' for the block.  */
1075 #define BINDING_LEVEL(NODE) \
1076    (((struct tree_binding*)NODE)->scope.level)
1077
1078 /* These are currently unused, but permanent, CPLUS_BINDING nodes.
1079    They are kept here because they are allocated from the permanent
1080    obstack and cannot be easily freed.  */
1081 static tree free_binding_nodes;
1082
1083 /* Make DECL the innermost binding for ID.  The LEVEL is the binding
1084    level at which this declaration is being bound.  */
1085
1086 static void
1087 push_binding (id, decl, level)
1088      tree id;
1089      tree decl;
1090      struct binding_level* level;
1091 {
1092   tree binding;
1093
1094   if (!free_binding_nodes)
1095     {
1096       /* There are no free nodes, so we must build one here.  */
1097       push_obstacks_nochange ();
1098       end_temporary_allocation ();
1099       binding = make_node (CPLUS_BINDING);
1100       pop_obstacks ();
1101     }
1102   else
1103     {
1104       /* There are nodes on the free list.  Grab the first one.  */
1105       binding = free_binding_nodes;
1106       
1107       /* And update the free list.  */
1108       free_binding_nodes = TREE_CHAIN (free_binding_nodes);
1109     }
1110
1111   /* Now, fill in the binding information.  */
1112   BINDING_VALUE (binding) = decl;
1113   BINDING_TYPE (binding) = NULL_TREE;
1114   BINDING_LEVEL (binding) = level;
1115   INHERITED_VALUE_BINDING_P (binding) = 0;
1116   LOCAL_BINDING_P (binding) = (level != class_binding_level);
1117
1118   /* And put it on the front of the list of bindings for ID.  */
1119   TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
1120   IDENTIFIER_BINDING (id) = binding;
1121 }
1122
1123 /* ID is already bound in the current scope.  But, DECL is an
1124    additional binding for ID in the same scope.  This is the `struct
1125    stat' hack whereby a non-typedef class-name or enum-name can be
1126    bound at the same level as some other kind of entity.  It's the
1127    responsibility of the caller to check that inserting this name is
1128    legal here.  Returns nonzero if the new binding was successful.  */
1129 static int
1130 add_binding (id, decl)
1131      tree id;
1132      tree decl;
1133 {
1134   tree binding = IDENTIFIER_BINDING (id);
1135   int ok = 1;
1136
1137   if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
1138     /* The new name is the type name.  */
1139     BINDING_TYPE (binding) = decl;
1140   else if (!BINDING_VALUE (binding))
1141     /* This situation arises when push_class_level_binding moves an
1142        inherited type-binding out of the way to make room for a new
1143        value binding.  */
1144     BINDING_VALUE (binding) = decl;
1145   else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
1146            && DECL_ARTIFICIAL (BINDING_VALUE (binding)))
1147     {
1148       /* The old binding was a type name.  It was placed in
1149          BINDING_VALUE because it was thought, at the point it was
1150          declared, to be the only entity with such a name.  Move the
1151          type name into the type slot; it is now hidden by the new
1152          binding.  */
1153       BINDING_TYPE (binding) = BINDING_VALUE (binding);
1154       BINDING_VALUE (binding) = decl;
1155       INHERITED_VALUE_BINDING_P (binding) = 0;
1156     }
1157   else
1158     {
1159       cp_error ("declaration of `%#D'", decl);
1160       cp_error_at ("conflicts with previous declaration `%#D'",
1161                    BINDING_VALUE (binding));
1162       ok = 0;
1163     }
1164
1165   return ok;
1166 }
1167
1168 /* Bind DECL to ID in the current_binding_level.
1169    If PUSH_USING is set in FLAGS, we know that DECL doesn't really belong
1170    to this binding level, that it got here through a using-declaration.  */
1171
1172 void
1173 push_local_binding (id, decl, flags)
1174      tree id;
1175      tree decl;
1176      int flags;
1177 {
1178   struct binding_level *b;
1179
1180   /* Skip over any local classes.  This makes sense if we call
1181      push_local_binding with a friend decl of a local class.  */
1182   b = current_binding_level;
1183   while (b->parm_flag == 2)
1184     b = b->level_chain;
1185
1186   if (lookup_name_current_level (id))
1187     {
1188       /* Supplement the existing binding.  */
1189       if (!add_binding (id, decl))
1190         /* It didn't work.  Something else must be bound at this
1191            level.  Do not add DECL to the list of things to pop
1192            later.  */
1193         return;
1194     }
1195   else
1196     /* Create a new binding.  */
1197     push_binding (id, decl, b);
1198
1199   if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
1200     /* We must put the OVERLOAD into a TREE_LIST since the
1201        TREE_CHAIN of an OVERLOAD is already used.  Similarly for
1202        decls that got here through a using-declaration.  */
1203     decl = build_tree_list (NULL_TREE, decl);
1204
1205   /* And put DECL on the list of things declared by the current
1206      binding level.  */
1207   TREE_CHAIN (decl) = b->names;
1208   b->names = decl;
1209 }
1210
1211 /* Bind DECL to ID in the class_binding_level.  Returns nonzero if the
1212    binding was successful.  */
1213
1214 int
1215 push_class_binding (id, decl)
1216      tree id;
1217      tree decl;
1218 {
1219   int result = 1;
1220   tree binding = IDENTIFIER_BINDING (id);
1221   tree context;
1222
1223   /* Note that we declared this value so that we can issue an error if
1224      this an illegal redeclaration of a name already used for some
1225      other purpose.  */
1226   note_name_declared_in_class (id, decl);
1227
1228   if (binding && BINDING_LEVEL (binding) == class_binding_level)
1229     /* Supplement the existing binding.  */
1230     result = add_binding (id, decl);
1231   else
1232     /* Create a new binding.  */
1233     push_binding (id, decl, class_binding_level);
1234
1235   /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
1236      class-level declaration.  Note that we do not use DECL here
1237      because of the possibility of the `struct stat' hack; if DECL is
1238      a class-name or enum-name we might prefer a field-name, or some
1239      such.  */
1240   IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
1241
1242   /* If this is a binding from a base class, mark it as such.  */
1243   binding = IDENTIFIER_BINDING (id);
1244   if (BINDING_VALUE (binding) == decl && TREE_CODE (decl) != TREE_LIST)
1245     {
1246       /* Any implicit typename must be from a base-class.  The
1247          context for an implicit typename declaration is always
1248          the derived class in which the lookup was done, so the checks
1249          based on the context of DECL below will not trigger.  */
1250       if (TREE_CODE (decl) == TYPE_DECL 
1251           && IMPLICIT_TYPENAME_P (TREE_TYPE (decl)))
1252         INHERITED_VALUE_BINDING_P (binding) = 1;
1253       else
1254         {
1255           if (TREE_CODE (decl) == OVERLOAD)
1256             context = DECL_REAL_CONTEXT (OVL_CURRENT (decl));
1257           else
1258             {
1259               my_friendly_assert (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd',
1260                                   0);
1261               context = DECL_REAL_CONTEXT (decl);
1262             }
1263
1264           if (is_properly_derived_from (current_class_type, context))
1265             INHERITED_VALUE_BINDING_P (binding) = 1;
1266           else
1267             INHERITED_VALUE_BINDING_P (binding) = 0;
1268         }
1269     }
1270   else if (BINDING_VALUE (binding) == decl)
1271     /* We only encounter a TREE_LIST when push_class_decls detects an
1272        ambiguity.  Such an ambiguity can be overridden by a definition
1273        in this class.  */
1274     INHERITED_VALUE_BINDING_P (binding) = 1;
1275
1276   return result;
1277 }
1278
1279 /* Remove the binding for DECL which should be the innermost binding
1280    for ID.  */
1281
1282 static void 
1283 pop_binding (id, decl) 
1284      tree id;
1285      tree decl;
1286 {
1287   tree binding;
1288     
1289   if (id == NULL_TREE)
1290     /* It's easiest to write the loops that call this function without
1291        checking whether or not the entities involved have names.  We
1292        get here for such an entity.  */
1293     return;
1294
1295   /* Get the innermost binding for ID.  */
1296   binding = IDENTIFIER_BINDING (id);
1297
1298   /* The name should be bound.  */
1299   my_friendly_assert (binding != NULL_TREE, 0);
1300
1301   /* The DECL will be either the ordinary binding or the type
1302      binding for this identifier.  Remove that binding.  */
1303   if (BINDING_VALUE (binding) == decl)
1304     BINDING_VALUE (binding) = NULL_TREE;
1305   else if (BINDING_TYPE (binding) == decl)
1306     BINDING_TYPE (binding) = NULL_TREE;
1307   else
1308     my_friendly_abort (0);
1309
1310   if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
1311     {
1312       /* We're completely done with the innermost binding for this
1313          identifier.  Unhook it from the list of bindings.  */
1314       IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
1315
1316       /* And place it on the free list.  */
1317       TREE_CHAIN (binding) = free_binding_nodes;
1318       free_binding_nodes = binding;
1319     }
1320 }
1321
1322 /* Exit a binding level.
1323    Pop the level off, and restore the state of the identifier-decl mappings
1324    that were in effect when this level was entered.
1325
1326    If KEEP == 1, this level had explicit declarations, so
1327    and create a "block" (a BLOCK node) for the level
1328    to record its declarations and subblocks for symbol table output.
1329
1330    If FUNCTIONBODY is nonzero, this level is the body of a function,
1331    so create a block as if KEEP were set and also clear out all
1332    label names.
1333
1334    If REVERSE is nonzero, reverse the order of decls before putting
1335    them into the BLOCK.  */
1336
1337 tree
1338 poplevel (keep, reverse, functionbody)
1339      int keep;
1340      int reverse;
1341      int functionbody;
1342 {
1343   register tree link;
1344   /* The chain of decls was accumulated in reverse order.
1345      Put it into forward order, just for cleanliness.  */
1346   tree decls;
1347   int tmp = functionbody;
1348   int real_functionbody = current_binding_level->keep == 2
1349     ? ((functionbody = 0), tmp) : functionbody;
1350   tree tags = functionbody >= 0 ? current_binding_level->tags : 0;
1351   tree subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1352   tree block = NULL_TREE;
1353   tree decl;
1354   int block_previously_created;
1355   int leaving_for_scope;
1356
1357   if (current_binding_level->parm_flag == 2)
1358     return poplevel_class ();
1359
1360   my_friendly_assert (!current_binding_level->class_shadowed,
1361                       19990414);
1362
1363   /* We used to use KEEP == 2 to indicate that the new block should go
1364      at the beginning of the list of blocks at this binding level,
1365      rather than the end.  This hack is no longer used.  */
1366   my_friendly_assert (keep == 0 || keep == 1, 0);
1367
1368   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1369                       (HOST_WIDE_INT) current_binding_level->level_chain,
1370                       current_binding_level->parm_flag,
1371                       current_binding_level->keep);
1372
1373   if (current_binding_level->keep == 1)
1374     keep = 1;
1375
1376   /* Get the decls in the order they were written.
1377      Usually current_binding_level->names is in reverse order.
1378      But parameter decls were previously put in forward order.  */
1379
1380   if (reverse)
1381     current_binding_level->names
1382       = decls = nreverse (current_binding_level->names);
1383   else
1384     decls = current_binding_level->names;
1385
1386   /* Output any nested inline functions within this block
1387      if they weren't already output.  */
1388
1389   for (decl = decls; decl; decl = TREE_CHAIN (decl))
1390     if (TREE_CODE (decl) == FUNCTION_DECL
1391         && ! TREE_ASM_WRITTEN (decl)
1392         && DECL_INITIAL (decl) != NULL_TREE
1393         && TREE_ADDRESSABLE (decl)
1394         && decl_function_context (decl) == current_function_decl)
1395       {
1396         /* If this decl was copied from a file-scope decl
1397            on account of a block-scope extern decl,
1398            propagate TREE_ADDRESSABLE to the file-scope decl.  */
1399         if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1400           TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1401         else
1402           {
1403             push_function_context ();
1404             output_inline_function (decl);
1405             pop_function_context ();
1406           }
1407       }
1408
1409   /* If there were any declarations or structure tags in that level,
1410      or if this level is a function body,
1411      create a BLOCK to record them for the life of this function.  */
1412
1413   block = NULL_TREE;
1414   block_previously_created = (current_binding_level->this_block != NULL_TREE);
1415   if (block_previously_created)
1416     block = current_binding_level->this_block;
1417   else if (keep == 1 || functionbody)
1418     block = make_node (BLOCK);
1419   if (block != NULL_TREE)
1420     {
1421       if (block_previously_created)
1422         {
1423           if (decls || tags || subblocks)
1424             {
1425               if (BLOCK_VARS (block) || BLOCK_TYPE_TAGS (block))
1426                 warning ("internal compiler error: debugging info corrupted");
1427
1428               BLOCK_VARS (block) = decls;
1429               BLOCK_TYPE_TAGS (block) = tags;
1430
1431               /* We can have previous subblocks and new subblocks when
1432                  doing fixup_gotos with complex cleanups.  We chain the new
1433                  subblocks onto the end of any pre-existing subblocks.  */
1434               BLOCK_SUBBLOCKS (block) = chainon (BLOCK_SUBBLOCKS (block),
1435                                                  subblocks);
1436             }
1437           /* If we created the block earlier on, and we are just
1438              diddling it now, then it already should have a proper
1439              BLOCK_END_NOTE value associated with it.  */
1440         }
1441       else
1442         {
1443           BLOCK_VARS (block) = decls;
1444           BLOCK_TYPE_TAGS (block) = tags;
1445           BLOCK_SUBBLOCKS (block) = subblocks;
1446           /* Otherwise, for a new block, install a new BLOCK_END_NOTE
1447              value.  */ 
1448           remember_end_note (block);
1449         }
1450     }
1451
1452   /* In each subblock, record that this is its superior.  */
1453
1454   if (keep >= 0)
1455     for (link = subblocks; link; link = TREE_CHAIN (link))
1456       BLOCK_SUPERCONTEXT (link) = block;
1457
1458   /* We still support the old for-scope rules, whereby the variables
1459      in a for-init statement were in scope after the for-statement
1460      ended.  We only use the new rules in flag_new_for_scope is
1461      nonzero.  */
1462   leaving_for_scope 
1463     = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1464
1465   /* Remove declarations for all the DECLs in this level.  */
1466   for (link = decls; link; link = TREE_CHAIN (link))
1467     {
1468       if (leaving_for_scope && TREE_CODE (link) == VAR_DECL)
1469         {
1470           tree outer_binding 
1471             = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1472           tree ns_binding;
1473
1474           if (!outer_binding)
1475             ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
1476           else
1477             ns_binding = NULL_TREE;
1478
1479           if (outer_binding 
1480               && (BINDING_LEVEL (outer_binding) 
1481                   == current_binding_level->level_chain))
1482             /* We have something like:
1483                
1484                  int i;
1485                  for (int i; ;);
1486                  
1487                and we are leaving the `for' scope.  There's no reason to
1488                keep the binding of the inner `i' in this case.  */
1489             pop_binding (DECL_NAME (link), link);
1490           else if ((outer_binding 
1491                     && (TREE_CODE (BINDING_VALUE (outer_binding)) 
1492                         == TYPE_DECL))
1493                    || (ns_binding 
1494                        && TREE_CODE (ns_binding) == TYPE_DECL))
1495             /* Here, we have something like:
1496
1497                  typedef int I;
1498
1499                  void f () {
1500                    for (int I; ;);
1501                  }
1502
1503                We must pop the for-scope binding so we know what's a
1504                type and what isn't.  */
1505             pop_binding (DECL_NAME (link), link);
1506           else
1507             {
1508               /* Mark this VAR_DECL as dead so that we can tell we left it
1509                  there only for backward compatibility.  */
1510               DECL_DEAD_FOR_LOCAL (link) = 1;
1511               
1512               /* Keep track of what should of have happenned when we
1513                  popped the binding.  */
1514               if (outer_binding && BINDING_VALUE (outer_binding))
1515                 DECL_SHADOWED_FOR_VAR (link) 
1516                   = BINDING_VALUE (outer_binding);
1517
1518               /* Add it to the list of dead variables in the next
1519                  outermost binding to that we can remove these when we
1520                  leave that binding.  */
1521               current_binding_level->level_chain->dead_vars_from_for
1522                 = tree_cons (NULL_TREE, link,
1523                              current_binding_level->level_chain->
1524                              dead_vars_from_for);
1525
1526               /* Although we don't pop the CPLUS_BINDING, we do clear
1527                  its BINDING_LEVEL since the level is going away now.  */
1528               BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1529                 = 0;
1530             }
1531         }
1532       else 
1533         {
1534           /* Remove the binding.  */
1535           decl = link;
1536           if (TREE_CODE (decl) == TREE_LIST)
1537             decl = TREE_VALUE (decl);
1538           if (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd')
1539             pop_binding (DECL_NAME (decl), decl);
1540           else if (TREE_CODE (decl) == OVERLOAD)
1541             pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
1542           else 
1543             my_friendly_abort (0);
1544         }
1545     }
1546
1547   /* Remove declarations for any `for' variables from inner scopes
1548      that we kept around.  */
1549   for (link = current_binding_level->dead_vars_from_for;
1550        link; link = TREE_CHAIN (link))
1551     pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
1552
1553   /* Restore the IDENTIFIER_TYPE_VALUEs.  */
1554   for (link = current_binding_level->type_shadowed;
1555        link; link = TREE_CHAIN (link))
1556     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
1557   
1558   /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1559      list if a `using' declaration put them there.  The debugging
1560      back-ends won't understand OVERLOAD, so we remove them here.
1561      Because the BLOCK_VARS are (temporarily) shared with
1562      CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1563      popped all the bindings.  */
1564   if (block)
1565     {
1566       tree* d;
1567
1568       for (d = &BLOCK_VARS (block); *d; )
1569         {
1570           if (TREE_CODE (*d) == TREE_LIST)
1571             *d = TREE_CHAIN (*d);
1572           else
1573             d = &TREE_CHAIN (*d);
1574         }
1575     }
1576
1577   /* If the level being exited is the top level of a function,
1578      check over all the labels.  */
1579
1580   if (functionbody)
1581     {
1582       /* If this is the top level block of a function,
1583          the vars are the function's parameters.
1584          Don't leave them in the BLOCK because they are
1585          found in the FUNCTION_DECL instead.  */
1586
1587       BLOCK_VARS (block) = 0;
1588
1589       /* Clear out the definitions of all label names,
1590          since their scopes end here.  */
1591
1592       for (link = named_labels; link; link = TREE_CHAIN (link))
1593         {
1594           register tree label = TREE_VALUE (link);
1595
1596           if (DECL_INITIAL (label) == NULL_TREE)
1597             {
1598               cp_error_at ("label `%D' used but not defined", label);
1599               /* Avoid crashing later.  */
1600               define_label (input_filename, 1, DECL_NAME (label));
1601             }
1602           else if (warn_unused && !TREE_USED (label))
1603             cp_warning_at ("label `%D' defined but not used", label);
1604           SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), NULL_TREE);
1605
1606           /* Put the labels into the "variables" of the
1607              top-level block, so debugger can see them.  */
1608           TREE_CHAIN (label) = BLOCK_VARS (block);
1609           BLOCK_VARS (block) = label;
1610         }
1611
1612       named_labels = NULL_TREE;
1613     }
1614
1615   /* Any uses of undefined labels now operate under constraints
1616      of next binding contour.  */
1617   {
1618     struct binding_level *level_chain;
1619     level_chain = current_binding_level->level_chain;
1620     if (level_chain)
1621       {
1622         struct named_label_list *labels;
1623         for (labels = named_label_uses; labels; labels = labels->next)
1624           if (labels->binding_level == current_binding_level)
1625             {
1626               labels->binding_level = level_chain;
1627               labels->names_in_scope = level_chain->names;
1628             }
1629       }
1630   }
1631
1632   tmp = current_binding_level->keep;
1633
1634   pop_binding_level ();
1635   if (functionbody)
1636     DECL_INITIAL (current_function_decl) = block;
1637   else if (block)
1638     {
1639       if (!block_previously_created)
1640         current_binding_level->blocks
1641           = chainon (current_binding_level->blocks, block);
1642     }
1643   /* If we did not make a block for the level just exited,
1644      any blocks made for inner levels
1645      (since they cannot be recorded as subblocks in that level)
1646      must be carried forward so they will later become subblocks
1647      of something else.  */
1648   else if (subblocks)
1649     current_binding_level->blocks
1650       = chainon (current_binding_level->blocks, subblocks);
1651
1652   /* Take care of compiler's internal binding structures.  */
1653   if (tmp == 2)
1654     {
1655       expand_end_bindings (getdecls (), keep, 1);
1656       /* Each and every BLOCK node created here in `poplevel' is important
1657          (e.g. for proper debugging information) so if we created one
1658          earlier, mark it as "used".  */
1659       if (block)
1660         TREE_USED (block) = 1;
1661       block = poplevel (keep, reverse, real_functionbody);
1662     }
1663
1664   /* Each and every BLOCK node created here in `poplevel' is important
1665      (e.g. for proper debugging information) so if we created one
1666      earlier, mark it as "used".  */
1667   if (block)
1668     TREE_USED (block) = 1;
1669   return block;
1670 }
1671
1672 /* Delete the node BLOCK from the current binding level.
1673    This is used for the block inside a stmt expr ({...})
1674    so that the block can be reinserted where appropriate.  */
1675
1676 void
1677 delete_block (block)
1678      tree block;
1679 {
1680   tree t;
1681   if (current_binding_level->blocks == block)
1682     current_binding_level->blocks = TREE_CHAIN (block);
1683   for (t = current_binding_level->blocks; t;)
1684     {
1685       if (TREE_CHAIN (t) == block)
1686         TREE_CHAIN (t) = TREE_CHAIN (block);
1687       else
1688         t = TREE_CHAIN (t);
1689     }
1690   TREE_CHAIN (block) = NULL_TREE;
1691   /* Clear TREE_USED which is always set by poplevel.
1692      The flag is set again if insert_block is called.  */
1693   TREE_USED (block) = 0;
1694 }
1695
1696 /* Insert BLOCK at the end of the list of subblocks of the
1697    current binding level.  This is used when a BIND_EXPR is expanded,
1698    to handle the BLOCK node inside the BIND_EXPR.  */
1699
1700 void
1701 insert_block (block)
1702      tree block;
1703 {
1704   TREE_USED (block) = 1;
1705   current_binding_level->blocks
1706     = chainon (current_binding_level->blocks, block);
1707 }
1708
1709 /* Set the BLOCK node for the innermost scope
1710    (the one we are currently in).  */
1711
1712 void
1713 set_block (block)
1714     register tree block;
1715 {
1716   current_binding_level->this_block = block;
1717 }
1718
1719 /* Do a pushlevel for class declarations.  */
1720
1721 void
1722 pushlevel_class ()
1723 {
1724   register struct binding_level *newlevel;
1725
1726   /* Reuse or create a struct for this binding level.  */
1727 #if defined(DEBUG_CP_BINDING_LEVELS)
1728   if (0)
1729 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1730   if (free_binding_level)
1731 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1732     {
1733       newlevel = free_binding_level;
1734       free_binding_level = free_binding_level->level_chain;
1735     }
1736   else
1737     newlevel = make_binding_level ();
1738
1739 #if defined(DEBUG_CP_BINDING_LEVELS)
1740   is_class_level = 1;
1741 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1742
1743   push_binding_level (newlevel, 0, 0);
1744
1745   decl_stack = push_decl_level (decl_stack, &decl_obstack);
1746   class_binding_level = current_binding_level;
1747   class_binding_level->parm_flag = 2;
1748 }
1749
1750 /* ...and a poplevel for class declarations.  */
1751
1752 static tree
1753 poplevel_class ()
1754 {
1755   register struct binding_level *level = class_binding_level;
1756   tree shadowed;
1757
1758   my_friendly_assert (level != 0, 354);
1759   
1760   decl_stack = pop_stack_level (decl_stack);
1761   /* If we're leaving a toplevel class, don't bother to do the setting
1762      of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
1763      shouldn't even be used when current_class_type isn't set, and second,
1764      if we don't touch it here, we're able to use the cache effect if the
1765      next time we're entering a class scope, it is the same class.  */
1766   if (current_class_depth != 1)
1767     {
1768       struct binding_level* b;
1769
1770       /* Clear out our IDENTIFIER_CLASS_VALUEs.  */
1771       for (shadowed = level->class_shadowed;
1772            shadowed;
1773            shadowed = TREE_CHAIN (shadowed))
1774         IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = NULL_TREE;
1775         
1776       /* Find the next enclosing class, and recreate
1777          IDENTIFIER_CLASS_VALUEs appropriate for that class.  */
1778       b = level->level_chain;
1779       while (b && b->parm_flag != 2)
1780         b = b->level_chain;
1781
1782       if (b)
1783         for (shadowed = b->class_shadowed; 
1784              shadowed; 
1785              shadowed = TREE_CHAIN (shadowed))
1786           {
1787             tree t;
1788
1789             t = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
1790             while (t && BINDING_LEVEL (t) != b)
1791               t = TREE_CHAIN (t);
1792       
1793             if (t)
1794               IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) 
1795                 = BINDING_VALUE (t);
1796           }
1797     }
1798   else
1799     /* Remember to save what IDENTIFIER's were bound in this scope so we
1800        can recover from cache misses.  */
1801     {
1802       previous_class_type = current_class_type;
1803       previous_class_values = class_binding_level->class_shadowed;
1804     }
1805   for (shadowed = level->type_shadowed;
1806        shadowed;
1807        shadowed = TREE_CHAIN (shadowed))
1808     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
1809
1810   /* Remove the bindings for all of the class-level declarations.  */
1811   for (shadowed = level->class_shadowed; 
1812        shadowed; 
1813        shadowed = TREE_CHAIN (shadowed))
1814     pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
1815
1816   GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1817                       (HOST_WIDE_INT) class_binding_level->level_chain,
1818                       class_binding_level->parm_flag,
1819                       class_binding_level->keep);
1820
1821   /* Now, pop out of the binding level which we created up in the
1822      `pushlevel_class' routine.  */
1823 #if defined(DEBUG_CP_BINDING_LEVELS)
1824   is_class_level = 1;
1825 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1826
1827   pop_binding_level ();
1828
1829   return NULL_TREE;
1830 }
1831
1832 /* We are entering the scope of a class.  Clear IDENTIFIER_CLASS_VALUE
1833    for any names in enclosing classes.  */
1834
1835 void
1836 clear_identifier_class_values ()
1837 {
1838   tree t;
1839
1840   if (!class_binding_level)
1841     return;
1842
1843   for (t = class_binding_level->class_shadowed;
1844        t;
1845        t = TREE_CHAIN (t))
1846     IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
1847 }
1848
1849 /* Returns non-zero if T is a virtual function table.  */
1850
1851 int
1852 vtable_decl_p (t, data)
1853      tree t;
1854      void *data ATTRIBUTE_UNUSED;
1855 {
1856   return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
1857 }
1858
1859 /* Returns non-zero if T is a TYPE_DECL for a type with virtual
1860    functions.  */
1861
1862 int
1863 vtype_decl_p (t, data)
1864      tree t;
1865      void *data ATTRIBUTE_UNUSED;
1866 {
1867   return (TREE_CODE (t) == TYPE_DECL
1868           && TREE_TYPE (t) != error_mark_node
1869           && TYPE_LANG_SPECIFIC (TREE_TYPE (t))
1870           && CLASSTYPE_VSIZE (TREE_TYPE (t)));
1871 }
1872
1873 /* Returns non-zero if T is a signature table.  */
1874
1875 int 
1876 sigtable_decl_p (t, data)
1877      tree t;
1878      void *data ATTRIBUTE_UNUSED;
1879 {
1880   return (TREE_CODE (t) == VAR_DECL
1881           && TREE_TYPE (t) != error_mark_node
1882           && IS_SIGNATURE (TREE_TYPE (t)));
1883 }
1884
1885 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
1886    itself, calling F for each.  The DATA is passed to F as well.  */
1887
1888 static int
1889 walk_namespaces_r (namespace, f, data)
1890      tree namespace;
1891      walk_namespaces_fn f;
1892      void *data;
1893 {
1894   tree current;
1895   int result = 0;
1896
1897   result |= (*f) (namespace, data);
1898
1899   for (current = NAMESPACE_LEVEL (namespace)->names;
1900        current;
1901        current = TREE_CHAIN (current))
1902     {
1903       if (TREE_CODE (current) != NAMESPACE_DECL
1904           || DECL_NAMESPACE_ALIAS (current))
1905         continue;
1906       if (!DECL_LANG_SPECIFIC (current))
1907         {
1908           /* Hmm. std. */
1909           my_friendly_assert (current == std_node, 393);
1910           continue;
1911         }
1912
1913       /* We found a namespace.  */
1914       result |= walk_namespaces_r (current, f, data);
1915     }
1916
1917   return result;
1918 }
1919
1920 /* Walk all the namespaces, calling F for each.  The DATA is passed to
1921    F as well.  */
1922
1923 int
1924 walk_namespaces (f, data)
1925      walk_namespaces_fn f;
1926      void *data;
1927 {
1928   return walk_namespaces_r (global_namespace, f, data);
1929 }
1930
1931 struct walk_globals_data {
1932   walk_globals_pred p;
1933   walk_globals_fn f;
1934   void *data;
1935 };
1936
1937 /* Walk the global declarations in NAMESPACE.  Whenever one is found
1938    for which P returns non-zero, call F with its address.  If any call
1939    to F returns a non-zero value, return a non-zero value.  */
1940
1941 static int 
1942 walk_globals_r (namespace, data)
1943      tree namespace;
1944      void *data;
1945 {
1946   struct walk_globals_data* wgd = (struct walk_globals_data *) data;
1947   walk_globals_pred p = wgd->p;
1948   walk_globals_fn f = wgd->f;
1949   void *d = wgd->data;
1950   tree *t;
1951   int result = 0;
1952
1953   t = &NAMESPACE_LEVEL (namespace)->names;
1954
1955   while (*t)
1956     {
1957       tree glbl = *t;
1958
1959       if ((*p) (glbl, d))
1960         result |= (*f) (t, d);
1961
1962       /* If F changed *T, then *T still points at the next item to
1963          examine.  */
1964       if (*t == glbl)
1965         t = &TREE_CHAIN (*t);
1966     }
1967
1968   return result;
1969 }
1970
1971 /* Walk the global declarations.  Whenever one is found for which P
1972    returns non-zero, call F with its address.  If any call to F
1973    returns a non-zero value, return a non-zero value.  */
1974
1975 int
1976 walk_globals (p, f, data)
1977      walk_globals_pred p;
1978      walk_globals_fn f;
1979      void *data;
1980 {
1981   struct walk_globals_data wgd;
1982   wgd.p = p;
1983   wgd.f = f;
1984   wgd.data = data;
1985
1986   return walk_namespaces (walk_globals_r, &wgd);
1987 }
1988
1989 /* Call wrapup_globals_declarations for the globals in NAMESPACE.  If
1990    DATA is non-NULL, this is the last time we will call
1991    wrapup_global_declarations for this NAMESPACE.  */
1992
1993 int
1994 wrapup_globals_for_namespace (namespace, data)
1995      tree namespace;
1996      void *data;
1997 {
1998   tree globals = NAMESPACE_LEVEL (namespace)->names;
1999   int len = list_length (globals);
2000   tree *vec = (tree *) alloca (sizeof (tree) * len);
2001   int i;
2002   int result;
2003   tree decl;
2004   int last_time = (data != 0);
2005
2006   if (last_time && namespace == global_namespace)
2007     /* Let compile_file handle the global namespace.  */
2008     return 0;
2009
2010   /* Process the decls in reverse order--earliest first.
2011      Put them into VEC from back to front, then take out from front.  */
2012   
2013   for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
2014     vec[len - i - 1] = decl;
2015   
2016   if (last_time)
2017     {
2018       check_global_declarations (vec, len);
2019       return 0;
2020     }
2021
2022   /* Temporarily mark vtables as external.  That prevents
2023      wrapup_global_declarations from writing them out; we must process
2024      them ourselves in finish_vtable_vardecl.  */
2025   for (i = 0; i < len; ++i)
2026     if (vtable_decl_p (vec[i], /*data=*/0) && !DECL_EXTERNAL (vec[i]))
2027       {
2028         DECL_NOT_REALLY_EXTERN (vec[i]) = 1;
2029         DECL_EXTERNAL (vec[i]) = 1;
2030       }
2031
2032   /* Write out any globals that need to be output.  */
2033   result = wrapup_global_declarations (vec, len);
2034
2035   /* Undo the hack to DECL_EXTERNAL above.  */
2036   for (i = 0; i < len; ++i)
2037     if (vtable_decl_p (vec[i], /*data=*/0)
2038         && DECL_NOT_REALLY_EXTERN (vec[i]))
2039       {
2040         DECL_NOT_REALLY_EXTERN (vec[i]) = 0;
2041         DECL_EXTERNAL (vec[i]) = 0;
2042       }
2043
2044   return result;
2045 }
2046
2047 \f
2048 /* For debugging.  */
2049 static int no_print_functions = 0;
2050 static int no_print_builtins = 0;
2051
2052 void
2053 print_binding_level (lvl)
2054      struct binding_level *lvl;
2055 {
2056   tree t;
2057   int i = 0, len;
2058   fprintf (stderr, " blocks=");
2059   fprintf (stderr, HOST_PTR_PRINTF, (void *) lvl->blocks);
2060   fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
2061            list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
2062   if (lvl->tag_transparent)
2063     fprintf (stderr, " tag-transparent");
2064   if (lvl->more_cleanups_ok)
2065     fprintf (stderr, " more-cleanups-ok");
2066   if (lvl->have_cleanups)
2067     fprintf (stderr, " have-cleanups");
2068   fprintf (stderr, "\n");
2069   if (lvl->names)
2070     {
2071       fprintf (stderr, " names:\t");
2072       /* We can probably fit 3 names to a line?  */
2073       for (t = lvl->names; t; t = TREE_CHAIN (t))
2074         {
2075           if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL)) 
2076             continue;
2077           if (no_print_builtins
2078               && (TREE_CODE (t) == TYPE_DECL)
2079               && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
2080             continue;
2081
2082           /* Function decls tend to have longer names.  */
2083           if (TREE_CODE (t) == FUNCTION_DECL)
2084             len = 3;
2085           else
2086             len = 2;
2087           i += len;
2088           if (i > 6)
2089             {
2090               fprintf (stderr, "\n\t");
2091               i = len;
2092             }
2093           print_node_brief (stderr, "", t, 0);
2094           if (t == error_mark_node)
2095             break;
2096         }
2097       if (i)
2098         fprintf (stderr, "\n");
2099     }
2100   if (lvl->tags)
2101     {
2102       fprintf (stderr, " tags:\t");
2103       i = 0;
2104       for (t = lvl->tags; t; t = TREE_CHAIN (t))
2105         {
2106           if (TREE_PURPOSE (t) == NULL_TREE)
2107             len = 3;
2108           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2109             len = 2;
2110           else
2111             len = 4;
2112           i += len;
2113           if (i > 5)
2114             {
2115               fprintf (stderr, "\n\t");
2116               i = len;
2117             }
2118           if (TREE_PURPOSE (t) == NULL_TREE)
2119             {
2120               print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
2121               fprintf (stderr, ">");
2122             }
2123           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2124             print_node_brief (stderr, "", TREE_VALUE (t), 0);
2125           else
2126             {
2127               print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
2128               print_node_brief (stderr, "", TREE_VALUE (t), 0);
2129               fprintf (stderr, ">");
2130             }
2131         }
2132       if (i)
2133         fprintf (stderr, "\n");
2134     }
2135   if (lvl->class_shadowed)
2136     {
2137       fprintf (stderr, " class-shadowed:");
2138       for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
2139         {
2140           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2141         }
2142       fprintf (stderr, "\n");
2143     }
2144   if (lvl->type_shadowed)
2145     {
2146       fprintf (stderr, " type-shadowed:");
2147       for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
2148         {
2149           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2150         }
2151       fprintf (stderr, "\n");
2152     }
2153 }
2154
2155 void
2156 print_other_binding_stack (stack)
2157      struct binding_level *stack;
2158 {
2159   struct binding_level *level;
2160   for (level = stack; level != global_binding_level; level = level->level_chain)
2161     {
2162       fprintf (stderr, "binding level ");
2163       fprintf (stderr, HOST_PTR_PRINTF, (void *) level);
2164       fprintf (stderr, "\n");
2165       print_binding_level (level);
2166     }
2167 }
2168
2169 void
2170 print_binding_stack ()
2171 {
2172   struct binding_level *b;
2173   fprintf (stderr, "current_binding_level=");
2174   fprintf (stderr, HOST_PTR_PRINTF, (void *) current_binding_level);
2175   fprintf (stderr, "\nclass_binding_level=");
2176   fprintf (stderr, HOST_PTR_PRINTF, (void *) class_binding_level);
2177   fprintf (stderr, "\nglobal_binding_level=");
2178   fprintf (stderr, HOST_PTR_PRINTF, (void *) global_binding_level);
2179   fprintf (stderr, "\n");
2180   if (class_binding_level)
2181     {
2182       for (b = class_binding_level; b; b = b->level_chain)
2183         if (b == current_binding_level)
2184           break;
2185       if (b)
2186         b = class_binding_level;
2187       else
2188         b = current_binding_level;
2189     }
2190   else
2191     b = current_binding_level;
2192   print_other_binding_stack (b);
2193   fprintf (stderr, "global:\n");
2194   print_binding_level (global_binding_level);
2195 }
2196
2197 /* Namespace binding access routines: The namespace_bindings field of
2198    the identifier is polymorphic, with three possible values:
2199    NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
2200    indicating the BINDING_VALUE of global_namespace. */
2201
2202 /* Check whether the a binding for the name to scope is known.
2203    Assumes that the bindings of the name are already a list
2204    of bindings. Returns the binding found, or NULL_TREE. */
2205
2206 static tree
2207 find_binding (name, scope)
2208      tree name;
2209      tree scope;
2210 {
2211   tree iter, prev = NULL_TREE;
2212
2213   scope = ORIGINAL_NAMESPACE (scope);
2214   
2215   for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
2216        iter = TREE_CHAIN (iter))
2217     {
2218       my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
2219       if (BINDING_SCOPE (iter) == scope)
2220         {
2221           /* Move binding found to the fron of the list, so
2222              subsequent lookups will find it faster. */
2223           if (prev)
2224             {
2225               TREE_CHAIN (prev) = TREE_CHAIN (iter);
2226               TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
2227               IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
2228             }
2229           return iter;
2230         }
2231       prev = iter;
2232     }
2233   return NULL_TREE;
2234 }
2235
2236 /* Always returns a binding for name in scope. If the
2237    namespace_bindings is not a list, convert it to one first.
2238    If no binding is found, make a new one. */
2239
2240 tree
2241 binding_for_name (name, scope)
2242      tree name;
2243      tree scope;
2244 {
2245   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2246   tree result;
2247
2248   scope = ORIGINAL_NAMESPACE (scope);
2249   
2250   if (b && TREE_CODE (b) != CPLUS_BINDING)
2251     {
2252       /* Get rid of optimization for global scope. */
2253       IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
2254       BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
2255       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2256     }
2257   if (b && (result = find_binding (name, scope)))
2258     return result;
2259   /* Not found, make a new permanent one. */
2260   push_obstacks (&permanent_obstack, &permanent_obstack);
2261   result = make_node (CPLUS_BINDING);
2262   TREE_CHAIN (result) = b;
2263   IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
2264   BINDING_SCOPE (result) = scope;
2265   BINDING_TYPE (result) = NULL_TREE;
2266   BINDING_VALUE (result) = NULL_TREE;
2267   pop_obstacks ();
2268   return result;
2269 }
2270
2271 /* Return the binding value for name in scope, considering that
2272    namespace_binding may or may not be a list of CPLUS_BINDINGS. */
2273
2274 tree
2275 namespace_binding (name, scope)
2276      tree name;
2277      tree scope;
2278 {
2279   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2280   if (b == NULL_TREE)
2281     return NULL_TREE;
2282   if (scope == NULL_TREE)
2283     scope = global_namespace;
2284   if (TREE_CODE (b) != CPLUS_BINDING)
2285     return (scope == global_namespace) ? b : NULL_TREE;
2286   name = find_binding (name,scope);
2287   if (name == NULL_TREE)
2288     return name;
2289   return BINDING_VALUE (name);
2290 }
2291
2292 /* Set the binding value for name in scope. If modifying the binding
2293    of global_namespace is attempted, try to optimize it. */
2294
2295 void
2296 set_namespace_binding (name, scope, val)
2297      tree name;
2298      tree scope;
2299      tree val;
2300 {
2301   tree b;
2302
2303   if (scope == NULL_TREE)
2304     scope = global_namespace;
2305   
2306   if (scope == global_namespace)
2307     {
2308       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2309       if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
2310         {
2311           IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
2312           return;
2313         }
2314     }
2315   b = binding_for_name (name, scope);
2316   BINDING_VALUE (b) = val;
2317 }
2318
2319 /* Push into the scope of the NAME namespace.  If NAME is NULL_TREE, then we
2320    select a name that is unique to this compilation unit.  */
2321
2322 void
2323 push_namespace (name)
2324      tree name;
2325 {
2326   tree d = NULL_TREE;
2327   int need_new = 1;
2328   int implicit_use = 0;
2329   int global = 0;
2330   if (!global_namespace)
2331     {
2332       /* This must be ::. */
2333       my_friendly_assert (name == get_identifier ("::"), 377);
2334       global = 1;
2335     }
2336   else if (!name)
2337     {
2338       /* The name of anonymous namespace is unique for the translation
2339          unit.  */
2340       if (!anonymous_namespace_name)
2341         anonymous_namespace_name = get_file_function_name ('N');
2342       name = anonymous_namespace_name;
2343       d = IDENTIFIER_NAMESPACE_VALUE (name);
2344       if (d)
2345         /* Reopening anonymous namespace.  */
2346         need_new = 0;
2347       implicit_use = 1;
2348     }
2349   else if (current_namespace == global_namespace
2350            && name == DECL_NAME (std_node))
2351     {
2352       in_std++;
2353       return;
2354     }
2355   else
2356     {
2357       /* Check whether this is an extended namespace definition. */
2358       d = IDENTIFIER_NAMESPACE_VALUE (name);
2359       if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
2360         {
2361           need_new = 0;
2362           if (DECL_NAMESPACE_ALIAS (d))
2363             {
2364               cp_error ("namespace alias `%D' not allowed here, assuming `%D'",
2365                         d, DECL_NAMESPACE_ALIAS (d));
2366               d = DECL_NAMESPACE_ALIAS (d);
2367             }
2368         }
2369     }
2370   
2371   if (need_new)
2372     {
2373       /* Make a new namespace, binding the name to it. */
2374       d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2375       /* The global namespace is not pushed, and the global binding
2376          level is set elsewhere.  */
2377       if (!global)
2378         {
2379           d = pushdecl (d);
2380           pushlevel (0);
2381           declare_namespace_level ();
2382           NAMESPACE_LEVEL (d) = current_binding_level;
2383         }
2384     }
2385   else
2386     resume_binding_level (NAMESPACE_LEVEL (d));
2387
2388   if (implicit_use)
2389     do_using_directive (d);
2390   /* Enter the name space. */
2391   current_namespace = d;
2392 }
2393
2394 /* Pop from the scope of the current namespace.  */
2395
2396 void
2397 pop_namespace ()
2398 {
2399   if (current_namespace == global_namespace)
2400     {
2401       my_friendly_assert (in_std>0, 980421);
2402       in_std--;
2403       return;
2404     }
2405   current_namespace = CP_DECL_CONTEXT (current_namespace);
2406   /* The binding level is not popped, as it might be re-opened later.  */
2407   suspend_binding_level ();
2408 }
2409
2410 \f
2411 /* Subroutines for reverting temporarily to top-level for instantiation
2412    of templates and such.  We actually need to clear out the class- and
2413    local-value slots of all identifiers, so that only the global values
2414    are at all visible.  Simply setting current_binding_level to the global
2415    scope isn't enough, because more binding levels may be pushed.  */
2416 struct saved_scope {
2417   struct binding_level *old_binding_level;
2418   tree old_bindings;
2419   tree old_namespace;
2420   struct saved_scope *prev;
2421   tree class_name, class_type;
2422   tree access_specifier;
2423   tree function_decl;
2424   struct binding_level *class_bindings;
2425   tree *lang_base, *lang_stack, lang_name;
2426   int lang_stacksize;
2427   int minimal_parse_mode;
2428   tree last_function_parms;
2429   tree template_parms;
2430   HOST_WIDE_INT processing_template_decl;
2431   tree previous_class_type, previous_class_values;
2432   int processing_specialization;
2433   int processing_explicit_instantiation;
2434   char *class_cache_firstobj;
2435 };
2436 static struct saved_scope *current_saved_scope;
2437
2438 /* A chain of the binding vecs created by store_bindings.  We create a
2439    whole bunch of these during compilation, on permanent_obstack, so we
2440    can't just throw them away.  */
2441 static tree free_binding_vecs;
2442
2443 static tree
2444 store_bindings (names, old_bindings)
2445      tree names, old_bindings;
2446 {
2447   tree t;
2448   for (t = names; t; t = TREE_CHAIN (t))
2449     {
2450       tree binding, t1, id;
2451
2452       if (TREE_CODE (t) == TREE_LIST)
2453         id = TREE_PURPOSE (t);
2454       else
2455         id = DECL_NAME (t);
2456
2457       if (!id 
2458           /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2459              we have no IDENTIFIER_BINDING if we have left the class
2460              scope, but cached the class-level declarations.  */
2461           || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
2462         continue;
2463
2464       for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
2465         if (TREE_VEC_ELT (t1, 0) == id)
2466           goto skip_it;
2467
2468       if (free_binding_vecs)
2469         {
2470           binding = free_binding_vecs;
2471           free_binding_vecs = TREE_CHAIN (free_binding_vecs);
2472         }
2473       else
2474         binding = make_tree_vec (4);
2475
2476       if (id)
2477         {
2478           my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
2479           TREE_VEC_ELT (binding, 0) = id;
2480           TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
2481           TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
2482           TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
2483           IDENTIFIER_BINDING (id) = NULL_TREE;
2484           IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
2485         }
2486       TREE_CHAIN (binding) = old_bindings;
2487       old_bindings = binding;
2488     skip_it:
2489       ;
2490     }
2491   return old_bindings;
2492 }
2493
2494 void
2495 maybe_push_to_top_level (pseudo)
2496      int pseudo;
2497 {
2498   extern int current_lang_stacksize;
2499   struct saved_scope *s
2500     = (struct saved_scope *) xmalloc (sizeof (struct saved_scope));
2501   struct binding_level *b = current_binding_level;
2502   tree old_bindings = NULL_TREE;
2503
2504   push_cp_function_context (NULL_TREE);
2505
2506   if (previous_class_type)
2507     old_bindings = store_bindings (previous_class_values, old_bindings);
2508
2509   /* Have to include global_binding_level, because class-level decls
2510      aren't listed anywhere useful.  */
2511   for (; b; b = b->level_chain)
2512     {
2513       tree t;
2514
2515       /* Template IDs are inserted into the global level. If they were
2516          inserted into namespace level, finish_file wouldn't find them
2517          when doing pending instantiations. Therefore, don't stop at
2518          namespace level, but continue until :: .  */
2519       if (b == global_binding_level || (pseudo && b->pseudo_global))
2520         break;
2521
2522       old_bindings = store_bindings (b->names, old_bindings);
2523       /* We also need to check class_shadowed to save class-level type
2524          bindings, since pushclass doesn't fill in b->names.  */
2525       if (b->parm_flag == 2)
2526         old_bindings = store_bindings (b->class_shadowed, old_bindings);
2527
2528       /* Unwind type-value slots back to top level.  */
2529       for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2530         SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2531     }
2532
2533   s->old_binding_level = current_binding_level;
2534   current_binding_level = b;
2535
2536   s->old_namespace = current_namespace;
2537   s->class_name = current_class_name;
2538   s->class_type = current_class_type;
2539   s->access_specifier = current_access_specifier;
2540   s->function_decl = current_function_decl;
2541   s->class_bindings = class_binding_level;
2542   s->lang_stack = current_lang_stack;
2543   s->lang_base = current_lang_base;
2544   s->lang_stacksize = current_lang_stacksize;
2545   s->lang_name = current_lang_name;
2546   s->minimal_parse_mode = minimal_parse_mode;
2547   s->last_function_parms = last_function_parms;
2548   s->template_parms = current_template_parms;
2549   s->processing_template_decl = processing_template_decl;
2550   s->previous_class_type = previous_class_type;
2551   s->previous_class_values = previous_class_values;
2552   s->class_cache_firstobj = class_cache_firstobj;
2553   s->processing_specialization = processing_specialization;
2554   s->processing_explicit_instantiation = processing_explicit_instantiation;
2555
2556   current_class_name = current_class_type = NULL_TREE;
2557   current_function_decl = NULL_TREE;
2558   class_binding_level = (struct binding_level *)0;
2559   current_lang_stacksize = 10;
2560   current_lang_stack = current_lang_base
2561     = (tree *) xmalloc (current_lang_stacksize * sizeof (tree));
2562   current_lang_name = lang_name_cplusplus;
2563   strict_prototype = strict_prototypes_lang_cplusplus;
2564   named_labels = NULL_TREE;
2565   shadowed_labels = NULL_TREE;
2566   minimal_parse_mode = 0;
2567   previous_class_type = previous_class_values = NULL_TREE;
2568   class_cache_firstobj = 0;
2569   processing_specialization = 0;
2570   processing_explicit_instantiation = 0;
2571   current_template_parms = NULL_TREE;
2572   processing_template_decl = 0;
2573   current_namespace = global_namespace;
2574
2575   s->prev = current_saved_scope;
2576   s->old_bindings = old_bindings;
2577   current_saved_scope = s;
2578
2579   push_obstacks (&permanent_obstack, &permanent_obstack);
2580 }
2581
2582 void
2583 push_to_top_level ()
2584 {
2585   maybe_push_to_top_level (0);
2586 }
2587
2588 void
2589 pop_from_top_level ()
2590 {
2591   extern int current_lang_stacksize;
2592   struct saved_scope *s = current_saved_scope;
2593   tree t;
2594
2595   /* Clear out class-level bindings cache.  */
2596   if (previous_class_type)
2597     invalidate_class_lookup_cache ();
2598
2599   pop_obstacks ();
2600
2601   current_binding_level = s->old_binding_level;
2602   current_saved_scope = s->prev;
2603   for (t = s->old_bindings; t; )
2604     {
2605       tree save = t;
2606       tree id = TREE_VEC_ELT (t, 0);
2607       if (id)
2608         {
2609           SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
2610           IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
2611           IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
2612         }
2613       t = TREE_CHAIN (t);
2614       TREE_CHAIN (save) = free_binding_vecs;
2615       free_binding_vecs = save;
2616     }
2617   current_namespace = s->old_namespace;
2618   current_class_name = s->class_name;
2619   current_class_type = s->class_type;
2620   current_access_specifier = s->access_specifier;
2621   current_function_decl = s->function_decl;
2622   class_binding_level = s->class_bindings;
2623   free (current_lang_base);
2624   current_lang_base = s->lang_base;
2625   current_lang_stack = s->lang_stack;
2626   current_lang_name = s->lang_name;
2627   current_lang_stacksize = s->lang_stacksize;
2628   if (current_lang_name == lang_name_cplusplus)
2629     strict_prototype = strict_prototypes_lang_cplusplus;
2630   else if (current_lang_name == lang_name_c)
2631     strict_prototype = strict_prototypes_lang_c;
2632   minimal_parse_mode = s->minimal_parse_mode;
2633   last_function_parms = s->last_function_parms;
2634   current_template_parms = s->template_parms;
2635   processing_template_decl = s->processing_template_decl;
2636   previous_class_type = s->previous_class_type;
2637   previous_class_values = s->previous_class_values;
2638   processing_specialization = s->processing_specialization;
2639   processing_explicit_instantiation = s->processing_explicit_instantiation;
2640   class_cache_firstobj = s->class_cache_firstobj;
2641
2642   free (s);
2643
2644   pop_cp_function_context (NULL_TREE);
2645 }
2646 \f
2647 /* Push a definition of struct, union or enum tag "name".
2648    into binding_level "b".   "type" should be the type node, 
2649    We assume that the tag "name" is not already defined.
2650
2651    Note that the definition may really be just a forward reference.
2652    In that case, the TYPE_SIZE will be a NULL_TREE.
2653
2654    C++ gratuitously puts all these tags in the name space.  */
2655
2656 /* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2657    record the shadowed value for this binding contour.  TYPE is
2658    the type that ID maps to.  */
2659
2660 static void
2661 set_identifier_type_value_with_scope (id, type, b)
2662      tree id;
2663      tree type;
2664      struct binding_level *b;
2665 {
2666   if (!b->namespace_p)
2667     {
2668       /* Shadow the marker, not the real thing, so that the marker
2669          gets restored later. */
2670       tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
2671       b->type_shadowed
2672         = tree_cons (id, old_type_value, b->type_shadowed);
2673     }
2674   else
2675     {
2676       tree binding = binding_for_name (id, current_namespace);
2677       BINDING_TYPE (binding) = type;
2678       /* Store marker instead of real type. */
2679       type = global_type_node;
2680     }
2681   SET_IDENTIFIER_TYPE_VALUE (id, type);
2682 }
2683
2684 /* As set_identifier_type_value_with_scope, but using current_binding_level.  */
2685
2686 void
2687 set_identifier_type_value (id, type)
2688      tree id;
2689      tree type;
2690 {
2691   set_identifier_type_value_with_scope (id, type, current_binding_level);
2692 }
2693
2694 /* Return the type associated with id. */
2695
2696 tree
2697 identifier_type_value (id)
2698      tree id;
2699 {
2700   /* There is no type with that name, anywhere. */
2701   if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2702     return NULL_TREE;
2703   /* This is not the type marker, but the real thing. */
2704   if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2705     return REAL_IDENTIFIER_TYPE_VALUE (id);
2706   /* Have to search for it. It must be on the global level, now.
2707      Ask lookup_name not to return non-types. */
2708   id = lookup_name_real (id, 2, 1, 0);
2709   if (id)
2710     return TREE_TYPE (id);
2711   return NULL_TREE;
2712 }
2713
2714 /* Pop off extraneous binding levels left over due to syntax errors.
2715
2716    We don't pop past namespaces, as they might be valid.  */
2717
2718 void
2719 pop_everything ()
2720 {
2721 #ifdef DEBUG_CP_BINDING_LEVELS
2722   fprintf (stderr, "XXX entering pop_everything ()\n");
2723 #endif
2724   while (!toplevel_bindings_p ())
2725     {
2726       if (current_binding_level->parm_flag == 2)
2727         pop_nested_class ();
2728       else
2729         poplevel (0, 0, 0);
2730     }
2731 #ifdef DEBUG_CP_BINDING_LEVELS
2732   fprintf (stderr, "XXX leaving pop_everything ()\n");
2733 #endif
2734 }
2735
2736 /* The type TYPE is being declared.  If it is a class template, or a
2737    specialization of a class template, do any processing required and
2738    perform error-checking.  If IS_FRIEND is non-zero, this TYPE is
2739    being declared a friend.  B is the binding level at which this TYPE
2740    should be bound.
2741
2742    Returns the TYPE_DECL for TYPE, which may have been altered by this
2743    processing.  */
2744
2745 static tree 
2746 maybe_process_template_type_declaration (type, globalize, b)
2747      tree type;
2748      int globalize;
2749      struct binding_level* b;
2750 {
2751   tree decl = TYPE_NAME (type);
2752  
2753   if (processing_template_parmlist)
2754     /* You can't declare a new template type in a template parameter
2755        list.  But, you can declare a non-template type:
2756        
2757          template <class A*> struct S;
2758        
2759        is a forward-declaration of `A'.  */
2760     ;
2761   else 
2762     {
2763       maybe_check_template_type (type);
2764
2765       my_friendly_assert (IS_AGGR_TYPE (type) 
2766                           || TREE_CODE (type) == ENUMERAL_TYPE, 0);
2767                           
2768                           
2769       if (/* If !GLOBALIZE then we are looking at a definition.
2770              It may not be a primary template.  (For example, in:
2771                   
2772                template <class T>
2773                struct S1 { class S2 {}; }
2774                   
2775              we have to push_template_decl for S2.)  */
2776           (processing_template_decl && !globalize)
2777           /* If we are declaring a friend template class, we will
2778              have GLOBALIZE set, since something like:
2779
2780                template <class T>
2781                struct S1 {
2782                  template <class U>
2783                  friend class S2; 
2784                };
2785
2786              declares S2 to be at global scope.  */
2787           || PROCESSING_REAL_TEMPLATE_DECL_P ())
2788         {
2789           /* This may change after the call to
2790              push_template_decl_real, but we want the original value.  */
2791           tree name = DECL_NAME (decl);
2792
2793           decl = push_template_decl_real (decl, globalize);
2794           /* If the current binding level is the binding level for the
2795              template parameters (see the comment in
2796              begin_template_parm_list) and the enclosing level is a class
2797              scope, and we're not looking at a friend, push the
2798              declaration of the member class into the class scope.  In the
2799              friend case, push_template_decl will already have put the
2800              friend into global scope, if appropriate.  */
2801           if (TREE_CODE (type) != ENUMERAL_TYPE
2802               && !globalize && b->pseudo_global
2803               && b->level_chain->parm_flag == 2)
2804             {
2805               finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
2806               /* Put this tag on the list of tags for the class, since
2807                  that won't happen below because B is not the class
2808                  binding level, but is instead the pseudo-global level.  */
2809               b->level_chain->tags = 
2810                 saveable_tree_cons (name, type, b->level_chain->tags);
2811               if (TYPE_SIZE (current_class_type) == NULL_TREE)
2812                 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2813             }
2814         }
2815     }
2816
2817   return decl;
2818 }
2819
2820 /* Push a tag name NAME for struct/class/union/enum type TYPE.
2821    Normally put it into the inner-most non-tag-transparent scope,
2822    but if GLOBALIZE is true, put it in the inner-most non-class scope.
2823    The latter is needed for implicit declarations.  */
2824
2825 void
2826 pushtag (name, type, globalize)
2827      tree name, type;
2828      int globalize;
2829 {
2830   register struct binding_level *b;
2831
2832   b = current_binding_level;
2833   while (b->tag_transparent
2834          || (globalize && b->parm_flag == 2))
2835     b = b->level_chain;
2836
2837   if (toplevel_bindings_p ())
2838     b->tags = perm_tree_cons (name, type, b->tags);
2839   else
2840     b->tags = saveable_tree_cons (name, type, b->tags);
2841
2842   if (name)
2843     {
2844       /* Do C++ gratuitous typedefing.  */
2845       if (IDENTIFIER_TYPE_VALUE (name) != type)
2846         {
2847           register tree d = NULL_TREE;
2848           int newdecl = 0, in_class = 0;
2849           tree context;
2850           tree c_decl = NULL_TREE;
2851
2852           context = type ? TYPE_CONTEXT (type) : NULL_TREE;
2853           if (! context)
2854             {
2855               tree cs = current_scope ();
2856
2857               if (! globalize)
2858                 context = cs;
2859               else if (cs != NULL_TREE 
2860                        && TREE_CODE_CLASS (TREE_CODE (cs)) == 't')
2861                 /* When declaring a friend class of a local class, we want
2862                    to inject the newly named class into the scope
2863                    containing the local class, not the namespace scope.  */
2864                 context = hack_decl_function_context (get_type_decl (cs));
2865             }
2866           if (context)
2867             c_decl = TREE_CODE (context) == FUNCTION_DECL
2868               ? context : TYPE_MAIN_DECL (context);
2869
2870           if (!context)
2871             context = current_namespace;
2872
2873           if ((b->pseudo_global && b->level_chain->parm_flag == 2)
2874               || b->parm_flag == 2)
2875             in_class = 1;
2876           else
2877             d = lookup_nested_type (type, c_decl);
2878
2879           if (d == NULL_TREE)
2880             {
2881               newdecl = 1;
2882               d = build_decl (TYPE_DECL, name, type);
2883               if (current_lang_name == lang_name_java)
2884                 TYPE_FOR_JAVA (type) = 1;
2885               SET_DECL_ARTIFICIAL (d);
2886               if (! in_class)
2887                 set_identifier_type_value_with_scope (name, type, b);
2888             }
2889           else
2890             d = TYPE_MAIN_DECL (d);
2891
2892           TYPE_NAME (type) = d;
2893           DECL_CONTEXT (d) = FROB_CONTEXT (context);
2894
2895           d = maybe_process_template_type_declaration (type,
2896                                                        globalize, b);
2897
2898           if (b->parm_flag == 2)
2899             {
2900               if (newdecl && !PROCESSING_REAL_TEMPLATE_DECL_P ())
2901                 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2902                    class.  But if it's a member template class, we
2903                    want the TEMPLATE_DECL, not the TYPE_DECL, so this
2904                    is done later.  */
2905                 finish_member_declaration (d);
2906               else
2907                 pushdecl_class_level (d);
2908             }
2909           else
2910             d = pushdecl_with_scope (d, b);
2911
2912           if (newdecl)
2913             {
2914               if (ANON_AGGRNAME_P (name))
2915                 DECL_IGNORED_P (d) = 1;
2916
2917               TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2918               DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
2919               if (!uses_template_parms (type))
2920                 DECL_ASSEMBLER_NAME (d)
2921                   = get_identifier (build_overload_name (type, 1, 1));
2922             }
2923         }
2924       if (b->parm_flag == 2)
2925         {
2926           if (TYPE_SIZE (current_class_type) == NULL_TREE)
2927             CLASSTYPE_TAGS (current_class_type) = b->tags;
2928         }
2929     }
2930
2931   if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2932     /* Use the canonical TYPE_DECL for this node.  */
2933     TYPE_STUB_DECL (type) = TYPE_NAME (type);
2934   else
2935     {
2936       /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2937          will be the tagged type we just added to the current
2938          binding level.  This fake NULL-named TYPE_DECL node helps
2939          dwarfout.c to know when it needs to output a
2940          representation of a tagged type, and it also gives us a
2941          convenient place to record the "scope start" address for
2942          the tagged type.  */
2943
2944       tree d = build_decl (TYPE_DECL, NULL_TREE, type);
2945       TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2946     }
2947 }
2948
2949 /* Counter used to create anonymous type names.  */
2950
2951 static int anon_cnt = 0;
2952
2953 /* Return an IDENTIFIER which can be used as a name for
2954    anonymous structs and unions.  */
2955
2956 tree
2957 make_anon_name ()
2958 {
2959   char buf[32];
2960
2961   sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2962   return get_identifier (buf);
2963 }
2964
2965 /* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2966    This keeps dbxout from getting confused.  */
2967
2968 void
2969 clear_anon_tags ()
2970 {
2971   register struct binding_level *b;
2972   register tree tags;
2973   static int last_cnt = 0;
2974
2975   /* Fast out if no new anon names were declared.  */
2976   if (last_cnt == anon_cnt)
2977     return;
2978
2979   b = current_binding_level;
2980   while (b->tag_transparent)
2981     b = b->level_chain;
2982   tags = b->tags;
2983   while (tags)
2984     {
2985       /* A NULL purpose means we have already processed all tags
2986          from here to the end of the list.  */
2987       if (TREE_PURPOSE (tags) == NULL_TREE)
2988         break;
2989       if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2990         TREE_PURPOSE (tags) = NULL_TREE;
2991       tags = TREE_CHAIN (tags);
2992     }
2993   last_cnt = anon_cnt;
2994 }
2995 \f
2996 /* Subroutine of duplicate_decls: return truthvalue of whether
2997    or not types of these decls match.
2998
2999    For C++, we must compare the parameter list so that `int' can match
3000    `int&' in a parameter position, but `int&' is not confused with
3001    `const int&'.  */
3002
3003 int
3004 decls_match (newdecl, olddecl)
3005      tree newdecl, olddecl;
3006 {
3007   int types_match;
3008
3009   if (newdecl == olddecl)
3010     return 1;
3011
3012   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
3013     /* If the two DECLs are not even the same kind of thing, we're not
3014        interested in their types.  */
3015     return 0;
3016
3017   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3018     {
3019       tree f1 = TREE_TYPE (newdecl);
3020       tree f2 = TREE_TYPE (olddecl);
3021       tree p1 = TYPE_ARG_TYPES (f1);
3022       tree p2 = TYPE_ARG_TYPES (f2);
3023
3024       if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl)
3025           && ! (DECL_LANGUAGE (newdecl) == lang_c
3026                 && DECL_LANGUAGE (olddecl) == lang_c))
3027         return 0;
3028
3029       /* When we parse a static member function definition,
3030          we put together a FUNCTION_DECL which thinks its type
3031          is METHOD_TYPE.  Change that to FUNCTION_TYPE, and
3032          proceed.  */
3033       if (TREE_CODE (f1) == METHOD_TYPE && DECL_STATIC_FUNCTION_P (olddecl))
3034         revert_static_member_fn (&newdecl, &f1, &p1);
3035       else if (TREE_CODE (f2) == METHOD_TYPE
3036                && DECL_STATIC_FUNCTION_P (newdecl))
3037         revert_static_member_fn (&olddecl, &f2, &p2);
3038
3039       /* Here we must take care of the case where new default
3040          parameters are specified.  Also, warn if an old
3041          declaration becomes ambiguous because default
3042          parameters may cause the two to be ambiguous.  */
3043       if (TREE_CODE (f1) != TREE_CODE (f2))
3044         {
3045           if (TREE_CODE (f1) == OFFSET_TYPE)
3046             cp_compiler_error ("`%D' redeclared as member function", newdecl);
3047           else
3048             cp_compiler_error ("`%D' redeclared as non-member function", newdecl);
3049           return 0;
3050         }
3051
3052       if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
3053         {
3054           if (! strict_prototypes_lang_c && DECL_LANGUAGE (olddecl) == lang_c
3055               && p2 == NULL_TREE)
3056             {
3057               types_match = self_promoting_args_p (p1);
3058               if (p1 == void_list_node)
3059                 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
3060             }
3061           else if (!strict_prototypes_lang_c && DECL_LANGUAGE (olddecl)==lang_c
3062                    && DECL_LANGUAGE (newdecl) == lang_c && p1 == NULL_TREE)
3063             {
3064               types_match = self_promoting_args_p (p2);
3065               TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
3066             }
3067           else
3068             types_match = compparms (p1, p2);
3069         }
3070       else
3071         types_match = 0;
3072     }
3073   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3074     {
3075       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3076                                 DECL_TEMPLATE_PARMS (olddecl)))
3077         return 0;
3078       
3079       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3080         types_match = 1;
3081       else
3082         types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
3083                                    DECL_TEMPLATE_RESULT (newdecl));
3084     }
3085   else
3086     {
3087       if (TREE_TYPE (newdecl) == error_mark_node)
3088         types_match = TREE_TYPE (olddecl) == error_mark_node;
3089       else if (TREE_TYPE (olddecl) == NULL_TREE)
3090         types_match = TREE_TYPE (newdecl) == NULL_TREE;
3091       else if (TREE_TYPE (newdecl) == NULL_TREE)
3092         types_match = 0;
3093       else
3094         types_match = comptypes (TREE_TYPE (newdecl),
3095                                  TREE_TYPE (olddecl),
3096                                  COMPARE_REDECLARATION);
3097     }
3098
3099   return types_match;
3100 }
3101
3102 /* If NEWDECL is `static' and an `extern' was seen previously,
3103    warn about it.  (OLDDECL may be NULL_TREE; NAME contains
3104    information about previous usage as an `extern'.)
3105
3106    Note that this does not apply to the C++ case of declaring
3107    a variable `extern const' and then later `const'.
3108
3109    Don't complain about built-in functions, since they are beyond
3110    the user's control.  */
3111
3112 static void
3113 warn_extern_redeclared_static (newdecl, olddecl)
3114      tree newdecl, olddecl;
3115 {
3116   tree name;
3117
3118   static const char *explicit_extern_static_warning
3119     = "`%D' was declared `extern' and later `static'";
3120   static const char *implicit_extern_static_warning
3121     = "`%D' was declared implicitly `extern' and later `static'";
3122
3123   if (TREE_CODE (newdecl) == TYPE_DECL)
3124     return;
3125
3126   name = DECL_ASSEMBLER_NAME (newdecl);
3127   if (TREE_PUBLIC (name) && DECL_THIS_STATIC (newdecl))
3128     {
3129       /* It's okay to redeclare an ANSI built-in function as static,
3130          or to declare a non-ANSI built-in function as anything.  */
3131       if (! (TREE_CODE (newdecl) == FUNCTION_DECL
3132              && olddecl != NULL_TREE
3133              && TREE_CODE (olddecl) == FUNCTION_DECL
3134              && (DECL_BUILT_IN (olddecl)
3135                  || DECL_BUILT_IN_NONANSI (olddecl))))
3136         {
3137           cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
3138                       ? implicit_extern_static_warning
3139                       : explicit_extern_static_warning, newdecl);
3140           if (olddecl != NULL_TREE)
3141             cp_pedwarn_at ("previous declaration of `%D'", olddecl);
3142         }
3143     }
3144 }
3145
3146 /* Handle when a new declaration NEWDECL has the same name as an old
3147    one OLDDECL in the same binding contour.  Prints an error message
3148    if appropriate.
3149
3150    If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
3151    Otherwise, return 0.  */
3152
3153 int
3154 duplicate_decls (newdecl, olddecl)
3155      tree newdecl, olddecl;
3156 {
3157   extern struct obstack permanent_obstack;
3158   unsigned olddecl_uid = DECL_UID (olddecl);
3159   int olddecl_friend = 0, types_match = 0;
3160   int new_defines_function = 0;
3161
3162   if (newdecl == olddecl)
3163     return 1;
3164
3165   types_match = decls_match (newdecl, olddecl);
3166
3167   /* If either the type of the new decl or the type of the old decl is an
3168      error_mark_node, then that implies that we have already issued an
3169      error (earlier) for some bogus type specification, and in that case,
3170      it is rather pointless to harass the user with yet more error message
3171      about the same declaration, so just pretend the types match here.  */
3172   if (TREE_TYPE (newdecl) == error_mark_node
3173       || TREE_TYPE (olddecl) == error_mark_node)
3174     types_match = 1;
3175  
3176   /* Check for redeclaration and other discrepancies. */
3177   if (TREE_CODE (olddecl) == FUNCTION_DECL
3178       && DECL_ARTIFICIAL (olddecl)
3179       && (DECL_BUILT_IN (olddecl) || DECL_BUILT_IN_NONANSI (olddecl)))
3180     {
3181       /* If you declare a built-in or predefined function name as static,
3182          the old definition is overridden, but optionally warn this was a
3183          bad choice of name.  Ditto for overloads.  */
3184       if (! TREE_PUBLIC (newdecl)
3185           || (TREE_CODE (newdecl) == FUNCTION_DECL
3186               && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl)))
3187         {
3188           if (warn_shadow)
3189             cp_warning ("shadowing %s function `%#D'",
3190                         DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3191                         olddecl);
3192           /* Discard the old built-in function.  */
3193           return 0;
3194         }
3195       else if (! types_match)
3196         {
3197           if (TREE_CODE (newdecl) != FUNCTION_DECL)
3198             {
3199               /* If the built-in is not ansi, then programs can override
3200                  it even globally without an error.  */
3201               if (! DECL_BUILT_IN (olddecl))
3202                 cp_warning ("library function `%#D' redeclared as non-function `%#D'",
3203                             olddecl, newdecl);
3204               else
3205                 {
3206                   cp_error ("declaration of `%#D'", newdecl);
3207                   cp_error ("conflicts with built-in declaration `%#D'",
3208                             olddecl);
3209                 }
3210               return 0;
3211             }
3212
3213           cp_warning ("declaration of `%#D'", newdecl);
3214           cp_warning ("conflicts with built-in declaration `%#D'",
3215                       olddecl);
3216         }
3217     }
3218   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
3219     {
3220       if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
3221            && TREE_CODE (newdecl) != TYPE_DECL
3222            && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
3223                  && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
3224           || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
3225               && TREE_CODE (olddecl) != TYPE_DECL
3226               && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
3227                     && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
3228                         == TYPE_DECL))))
3229         {
3230           /* We do nothing special here, because C++ does such nasty
3231              things with TYPE_DECLs.  Instead, just let the TYPE_DECL
3232              get shadowed, and know that if we need to find a TYPE_DECL
3233              for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3234              slot of the identifier.  */
3235           return 0;
3236         }
3237
3238       if ((TREE_CODE (newdecl) == FUNCTION_DECL
3239            && DECL_FUNCTION_TEMPLATE_P (olddecl))
3240           || (TREE_CODE (olddecl) == FUNCTION_DECL
3241               && DECL_FUNCTION_TEMPLATE_P (newdecl)))
3242         return 0;
3243
3244       cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
3245       if (TREE_CODE (olddecl) == TREE_LIST)
3246         olddecl = TREE_VALUE (olddecl);
3247       cp_error_at ("previous declaration of `%#D'", olddecl);
3248
3249       /* New decl is completely inconsistent with the old one =>
3250          tell caller to replace the old one.  */
3251
3252       return 0;
3253     }
3254   else if (!types_match)
3255     {
3256       if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl))
3257         /* These are certainly not duplicate declarations; they're
3258            from different scopes.  */
3259         return 0;
3260
3261       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3262         {
3263           /* The name of a class template may not be declared to refer to
3264              any other template, class, function, object, namespace, value,
3265              or type in the same scope.  */
3266           if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
3267               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3268             {
3269               cp_error ("declaration of template `%#D'", newdecl);
3270               cp_error_at ("conflicts with previous declaration `%#D'",
3271                            olddecl);
3272             }
3273           else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
3274                    && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3275                    && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
3276                                  TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
3277                    && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3278                                            DECL_TEMPLATE_PARMS (olddecl)))
3279             {
3280               cp_error ("new declaration `%#D'", newdecl);
3281               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3282             }
3283           return 0;
3284         }
3285       if (TREE_CODE (newdecl) == FUNCTION_DECL)
3286         {
3287           if (DECL_LANGUAGE (newdecl) == lang_c
3288               && DECL_LANGUAGE (olddecl) == lang_c)
3289             {
3290               cp_error ("declaration of C function `%#D' conflicts with",
3291                         newdecl);
3292               cp_error_at ("previous declaration `%#D' here", olddecl);
3293             }
3294           else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3295                               TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3296             {
3297               cp_error ("new declaration `%#D'", newdecl);
3298               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3299             }
3300           else
3301             return 0;
3302         }
3303
3304       /* Already complained about this, so don't do so again.  */
3305       else if (current_class_type == NULL_TREE
3306           || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3307         {
3308           cp_error ("conflicting types for `%#D'", newdecl);
3309           cp_error_at ("previous declaration as `%#D'", olddecl);
3310         }
3311     }
3312   else if (TREE_CODE (newdecl) == FUNCTION_DECL 
3313             && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3314                  && (!DECL_TEMPLATE_INFO (newdecl)
3315                      || (DECL_TI_TEMPLATE (newdecl) 
3316                          != DECL_TI_TEMPLATE (olddecl))))
3317                 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3318                     && (!DECL_TEMPLATE_INFO (olddecl)
3319                         || (DECL_TI_TEMPLATE (olddecl) 
3320                             != DECL_TI_TEMPLATE (newdecl))))))
3321     /* It's OK to have a template specialization and a non-template
3322        with the same type, or to have specializations of two
3323        different templates with the same type.  Note that if one is a
3324        specialization, and the other is an instantiation of the same
3325        template, that we do not exit at this point.  That situation
3326        can occur if we instantiate a template class, and then
3327        specialize one of its methods.  This situation is legal, but
3328        the declarations must be merged in the usual way.  */
3329     return 0;
3330   else if (TREE_CODE (newdecl) == FUNCTION_DECL 
3331            && ((DECL_TEMPLATE_INSTANTIATION (olddecl) 
3332                 && !DECL_USE_TEMPLATE (newdecl))
3333                || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3334                    && !DECL_USE_TEMPLATE (olddecl))))
3335     /* One of the declarations is a template instantiation, and the
3336        other is not a template at all.  That's OK.  */
3337     return 0;
3338   else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3339            && DECL_NAMESPACE_ALIAS (newdecl)
3340            && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3341     /* Redeclaration of namespace alias, ignore it. */
3342     return 1;
3343   else
3344     {
3345       const char *errmsg = redeclaration_error_message (newdecl, olddecl);
3346       if (errmsg)
3347         {
3348           cp_error (errmsg, newdecl);
3349           if (DECL_NAME (olddecl) != NULL_TREE)
3350             cp_error_at ((DECL_INITIAL (olddecl)
3351                           && namespace_bindings_p ())
3352                          ? "`%#D' previously defined here"
3353                          : "`%#D' previously declared here", olddecl);
3354         }
3355       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3356                && DECL_INITIAL (olddecl) != NULL_TREE
3357                && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3358                && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3359         {
3360           /* Prototype decl follows defn w/o prototype.  */
3361           cp_warning_at ("prototype for `%#D'", newdecl);
3362           cp_warning_at ("follows non-prototype definition here", olddecl);
3363         }
3364       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3365                && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
3366         {
3367           /* extern "C" int foo ();
3368              int foo () { bar (); }
3369              is OK.  */
3370           if (current_lang_stack == current_lang_base)
3371             DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3372           else
3373             {
3374               cp_error_at ("previous declaration of `%#D' with %L linkage",
3375                            olddecl, DECL_LANGUAGE (olddecl));
3376               cp_error ("conflicts with new declaration with %L linkage",
3377                         DECL_LANGUAGE (newdecl));
3378             }
3379         }
3380
3381       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
3382         ;
3383       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
3384         {
3385           tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3386           tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3387           int i = 1;
3388
3389           if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3390             t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
3391         
3392           for (; t1 && t1 != void_list_node;
3393                t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3394             if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3395               {
3396                 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3397                                            TREE_PURPOSE (t2)))
3398                   {
3399                     if (pedantic)
3400                       {
3401                         cp_pedwarn ("default argument given for parameter %d of `%#D'",
3402                                     i, newdecl);
3403                         cp_pedwarn_at ("after previous specification in `%#D'",
3404                                        olddecl);
3405                       }
3406                   }
3407                 else
3408                   {
3409                     cp_error ("default argument given for parameter %d of `%#D'",
3410                               i, newdecl);
3411                     cp_error_at ("after previous specification in `%#D'",
3412                                  olddecl);
3413                   }
3414               }
3415
3416           if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
3417               && TREE_ADDRESSABLE (olddecl) && warn_inline)
3418             {
3419               cp_warning ("`%#D' was used before it was declared inline",
3420                           newdecl);
3421               cp_warning_at ("previous non-inline declaration here",
3422                              olddecl);
3423             }
3424         }
3425     }
3426
3427   /* If new decl is `static' and an `extern' was seen previously,
3428      warn about it.  */
3429   warn_extern_redeclared_static (newdecl, olddecl);
3430
3431   /* We have committed to returning 1 at this point.  */
3432   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3433     {
3434       /* Now that functions must hold information normally held
3435          by field decls, there is extra work to do so that
3436          declaration information does not get destroyed during
3437          definition.  */
3438       if (DECL_VINDEX (olddecl))
3439         DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
3440       if (DECL_CONTEXT (olddecl))
3441         DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
3442       if (DECL_CLASS_CONTEXT (olddecl))
3443         DECL_CLASS_CONTEXT (newdecl) = DECL_CLASS_CONTEXT (olddecl);
3444       if (DECL_PENDING_INLINE_INFO (newdecl) == (struct pending_inline *)0)
3445         DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
3446       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3447       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
3448       DECL_ABSTRACT_VIRTUAL_P (newdecl) |= DECL_ABSTRACT_VIRTUAL_P (olddecl);
3449       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
3450       DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
3451       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
3452       
3453       /* Optionally warn about more than one declaration for the same
3454          name, but don't warn about a function declaration followed by a
3455          definition.  */
3456       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3457           && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3458           /* Don't warn about extern decl followed by definition. */
3459           && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3460           /* Don't warn about friends, let add_friend take care of it. */
3461           && ! DECL_FRIEND_P (newdecl))
3462         {
3463           cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3464           cp_warning_at ("previous declaration of `%D'", olddecl);
3465         }
3466     }
3467
3468   /* Deal with C++: must preserve virtual function table size.  */
3469   if (TREE_CODE (olddecl) == TYPE_DECL)
3470     {
3471       register tree newtype = TREE_TYPE (newdecl);
3472       register tree oldtype = TREE_TYPE (olddecl);
3473
3474       if (newtype != error_mark_node && oldtype != error_mark_node
3475           && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3476         {
3477           CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3478           CLASSTYPE_FRIEND_CLASSES (newtype)
3479             = CLASSTYPE_FRIEND_CLASSES (oldtype);
3480         }
3481     }
3482
3483   /* Copy all the DECL_... slots specified in the new decl
3484      except for any that we copy here from the old type.  */
3485   DECL_MACHINE_ATTRIBUTES (newdecl) 
3486     = merge_machine_decl_attributes (olddecl, newdecl);
3487
3488   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3489     {
3490       if (! duplicate_decls (DECL_TEMPLATE_RESULT (newdecl),
3491                              DECL_TEMPLATE_RESULT (olddecl)))
3492         cp_error ("invalid redeclaration of %D", newdecl);
3493       TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
3494       DECL_TEMPLATE_SPECIALIZATIONS (olddecl) 
3495         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3496                    DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
3497  
3498       return 1;
3499     }
3500     
3501   if (types_match)
3502     {
3503       /* Automatically handles default parameters.  */
3504       tree oldtype = TREE_TYPE (olddecl);
3505       tree newtype;
3506
3507       /* Make sure we put the new type in the same obstack as the old one.  */
3508       if (oldtype)
3509         push_obstacks (TYPE_OBSTACK (oldtype), TYPE_OBSTACK (oldtype));
3510       else
3511         {
3512           push_obstacks_nochange ();
3513           end_temporary_allocation ();
3514         }
3515
3516       /* Merge the data types specified in the two decls.  */
3517       newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3518
3519       if (TREE_CODE (newdecl) == VAR_DECL)
3520         DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3521       /* Do this after calling `common_type' so that default
3522          parameters don't confuse us.  */
3523       else if (TREE_CODE (newdecl) == FUNCTION_DECL
3524           && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3525               != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3526         {
3527           TREE_TYPE (newdecl) = build_exception_variant (newtype,
3528                                                          TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
3529           TREE_TYPE (olddecl) = build_exception_variant (newtype,
3530                                                          TYPE_RAISES_EXCEPTIONS (oldtype));
3531
3532           if ((pedantic || (! DECL_IN_SYSTEM_HEADER (olddecl)
3533                             && ! DECL_IN_SYSTEM_HEADER (newdecl)))
3534               && DECL_SOURCE_LINE (olddecl) != 0
3535               && flag_exceptions
3536               && ! compexcepttypes (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
3537             {
3538               cp_pedwarn ("declaration of `%D' throws different exceptions",
3539                         newdecl);
3540               cp_pedwarn_at ("previous declaration here", olddecl);
3541             }
3542         }
3543       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3544
3545       /* Lay the type out, unless already done.  */
3546       if (! same_type_p (newtype, oldtype)
3547           && TREE_TYPE (newdecl) != error_mark_node
3548           && !(processing_template_decl && uses_template_parms (newdecl)))
3549         layout_type (TREE_TYPE (newdecl));
3550
3551       if ((TREE_CODE (newdecl) == VAR_DECL
3552            || TREE_CODE (newdecl) == PARM_DECL
3553            || TREE_CODE (newdecl) == RESULT_DECL
3554            || TREE_CODE (newdecl) == FIELD_DECL
3555            || TREE_CODE (newdecl) == TYPE_DECL)
3556           && !(processing_template_decl && uses_template_parms (newdecl)))
3557         layout_decl (newdecl, 0);
3558
3559       /* Merge the type qualifiers.  */
3560       if (TREE_READONLY (newdecl))
3561         TREE_READONLY (olddecl) = 1;
3562       if (TREE_THIS_VOLATILE (newdecl))
3563         TREE_THIS_VOLATILE (olddecl) = 1;
3564
3565       /* Merge the initialization information.  */
3566       if (DECL_INITIAL (newdecl) == NULL_TREE
3567           && DECL_INITIAL (olddecl) != NULL_TREE)
3568         {
3569           DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3570           DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3571           DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
3572           if (DECL_LANG_SPECIFIC (newdecl)
3573               && DECL_LANG_SPECIFIC (olddecl))
3574             DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
3575         }
3576
3577       /* Merge the section attribute.
3578          We want to issue an error if the sections conflict but that must be
3579          done later in decl_attributes since we are called before attributes
3580          are assigned.  */
3581       if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3582         DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3583
3584       /* Keep the old rtl since we can safely use it, unless it's the
3585          call to abort() used for abstract virtuals.  */
3586       if ((DECL_LANG_SPECIFIC (olddecl)
3587            && !DECL_ABSTRACT_VIRTUAL_P (olddecl))
3588           || DECL_RTL (olddecl) != DECL_RTL (abort_fndecl))
3589         DECL_RTL (newdecl) = DECL_RTL (olddecl);
3590
3591       pop_obstacks ();
3592     }
3593   /* If cannot merge, then use the new type and qualifiers,
3594      and don't preserve the old rtl.  */
3595   else
3596     {
3597       /* Clean out any memory we had of the old declaration.  */
3598       tree oldstatic = value_member (olddecl, static_aggregates);
3599       if (oldstatic)
3600         TREE_VALUE (oldstatic) = error_mark_node;
3601
3602       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3603       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3604       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3605       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3606     }
3607
3608   /* Merge the storage class information.  */
3609   DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
3610   DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
3611   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3612   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3613   if (! DECL_EXTERNAL (olddecl))
3614     DECL_EXTERNAL (newdecl) = 0;
3615   
3616   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
3617     {
3618       DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3619       DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
3620       DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
3621       DECL_TEMPLATE_INSTANTIATED (newdecl) 
3622         |= DECL_TEMPLATE_INSTANTIATED (olddecl);
3623       /* Don't really know how much of the language-specific
3624          values we should copy from old to new.  */
3625       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3626       DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3627       DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
3628       DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3629       olddecl_friend = DECL_FRIEND_P (olddecl);
3630
3631       /* Only functions have DECL_BEFRIENDING_CLASSES.  */
3632       if (TREE_CODE (newdecl) == FUNCTION_DECL
3633           || DECL_FUNCTION_TEMPLATE_P (newdecl))
3634         DECL_BEFRIENDING_CLASSES (newdecl)
3635           = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3636                      DECL_BEFRIENDING_CLASSES (olddecl));
3637     }
3638
3639   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3640     {
3641       if (DECL_TEMPLATE_INSTANTIATION (olddecl) 
3642           && !DECL_TEMPLATE_INSTANTIATION (newdecl)) 
3643         {
3644           /* If newdecl is not a specialization, then it is not a
3645              template-related function at all.  And that means that we
3646              shoud have exited above, returning 0.  */
3647           my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3648                               0);
3649
3650           if (TREE_USED (olddecl)) 
3651             /* From [temp.expl.spec]:
3652                
3653                If a template, a member template or the member of a class
3654                template is explicitly specialized then that
3655                specialization shall be declared before the first use of
3656                that specialization that would cause an implicit
3657                instantiation to take place, in every translation unit in
3658                which such a use occurs.  */
3659             cp_error ("explicit specialization of %D after first use", 
3660                       olddecl);
3661
3662           SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3663         }
3664       DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3665
3666       /* If either decl says `inline', this fn is inline, unless its
3667          definition was passed already.  */
3668       if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3669         DECL_INLINE (olddecl) = 1;
3670       DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3671
3672       if (! types_match)
3673         {
3674           DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3675           DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3676           DECL_RTL (olddecl) = DECL_RTL (newdecl);
3677         }
3678       if (! types_match || new_defines_function)
3679         {
3680           /* These need to be copied so that the names are available.  */
3681           DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3682           DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
3683         }
3684       if (new_defines_function)
3685         /* If defining a function declared with other language
3686            linkage, use the previously declared language linkage.  */
3687         DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3688       else
3689         {
3690           /* If redeclaring a builtin function, and not a definition,
3691              it stays built in.  */
3692           if (DECL_BUILT_IN (olddecl))
3693             {
3694               DECL_BUILT_IN (newdecl) = 1;
3695               DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
3696               /* If we're keeping the built-in definition, keep the rtl,
3697                  regardless of declaration matches.  */
3698               DECL_RTL (newdecl) = DECL_RTL (olddecl);
3699             }
3700           else
3701             DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
3702
3703           DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
3704           if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
3705             /* Previously saved insns go together with
3706                the function's previous definition.  */
3707             DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3708           /* Don't clear out the arguments if we're redefining a function.  */
3709           if (DECL_ARGUMENTS (olddecl))
3710             DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3711         }
3712       if (DECL_LANG_SPECIFIC (olddecl))
3713         DECL_MAIN_VARIANT (newdecl) = DECL_MAIN_VARIANT (olddecl);
3714     }
3715
3716   if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3717     {
3718       NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3719     }
3720
3721   /* Now preserve various other info from the definition.  */
3722   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3723   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3724   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
3725   DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
3726
3727   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3728     {
3729       int function_size;
3730       struct lang_decl *ol = DECL_LANG_SPECIFIC (olddecl);
3731       struct lang_decl *nl = DECL_LANG_SPECIFIC (newdecl);
3732
3733       function_size = sizeof (struct tree_decl);
3734
3735       bcopy ((char *) newdecl + sizeof (struct tree_common),
3736              (char *) olddecl + sizeof (struct tree_common),
3737              function_size - sizeof (struct tree_common));
3738
3739       /* Can we safely free the storage used by newdecl?  */
3740
3741 #define ROUND(x) ((x + obstack_alignment_mask (&permanent_obstack)) \
3742                   & ~ obstack_alignment_mask (&permanent_obstack))
3743
3744       if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3745         {
3746           /* If newdecl is a template instantiation, it is possible that
3747              the following sequence of events has occurred:
3748
3749              o A friend function was declared in a class template.  The
3750              class template was instantiated.  
3751
3752              o The instantiation of the friend declaration was 
3753              recorded on the instantiation list, and is newdecl.  
3754
3755              o Later, however, instantiate_class_template called pushdecl
3756              on the newdecl to perform name injection.  But, pushdecl in
3757              turn called duplicate_decls when it discovered that another
3758              declaration of a global function with the same name already
3759              existed. 
3760
3761              o Here, in duplicate_decls, we decided to clobber newdecl.
3762
3763              If we're going to do that, we'd better make sure that
3764              olddecl, and not newdecl, is on the list of
3765              instantiations so that if we try to do the instantiation
3766              again we won't get the clobbered declaration.  */
3767
3768           tree tmpl = DECL_TI_TEMPLATE (newdecl); 
3769           tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); 
3770
3771           for (; decls; decls = TREE_CHAIN (decls))
3772             if (TREE_VALUE (decls) == newdecl)
3773               TREE_VALUE (decls) = olddecl;
3774         }
3775
3776       if (((char *)newdecl + ROUND (function_size) == (char *)nl
3777            && ((char *)newdecl + ROUND (function_size)
3778                + ROUND (sizeof (struct lang_decl))
3779                == obstack_next_free (&permanent_obstack)))
3780           || ((char *)newdecl + ROUND (function_size)
3781               == obstack_next_free (&permanent_obstack)))
3782         {
3783           DECL_MAIN_VARIANT (newdecl) = olddecl;
3784           DECL_LANG_SPECIFIC (olddecl) = ol;
3785           bcopy ((char *)nl, (char *)ol, sizeof (struct lang_decl));
3786
3787           obstack_free (&permanent_obstack, newdecl);
3788         }
3789       else if (LANG_DECL_PERMANENT (ol) && ol != nl)
3790         {
3791           if (DECL_MAIN_VARIANT (olddecl) == olddecl)
3792             {
3793               /* Save these lang_decls that would otherwise be lost.  */
3794               extern tree free_lang_decl_chain;
3795               tree free_lang_decl = (tree) ol;
3796
3797               if (DECL_LANG_SPECIFIC (olddecl) == ol)
3798                 abort ();
3799
3800               TREE_CHAIN (free_lang_decl) = free_lang_decl_chain;
3801               free_lang_decl_chain = free_lang_decl;
3802             }
3803           else
3804             {
3805               /* Storage leak.  */;
3806             }
3807         }
3808     }
3809   else
3810     {
3811       bcopy ((char *) newdecl + sizeof (struct tree_common),
3812              (char *) olddecl + sizeof (struct tree_common),
3813              sizeof (struct tree_decl) - sizeof (struct tree_common)
3814              + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3815     }
3816
3817   DECL_UID (olddecl) = olddecl_uid;
3818   if (olddecl_friend)
3819     DECL_FRIEND_P (olddecl) = 1;
3820
3821   /* NEWDECL contains the merged attribute lists.
3822      Update OLDDECL to be the same.  */
3823   DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3824
3825   return 1;
3826 }
3827
3828 /* Record a decl-node X as belonging to the current lexical scope.
3829    Check for errors (such as an incompatible declaration for the same
3830    name already seen in the same scope).
3831
3832    Returns either X or an old decl for the same name.
3833    If an old decl is returned, it may have been smashed
3834    to agree with what X says.  */
3835
3836 tree
3837 pushdecl (x)
3838      tree x;
3839 {
3840   register tree t;
3841   register tree name = DECL_ASSEMBLER_NAME (x);
3842   int need_new_binding = 1;
3843
3844   if (DECL_TEMPLATE_PARM_P (x))
3845     /* Template parameters have no context; they are not X::T even
3846        when declared within a class or namespace.  */
3847     ;
3848   else
3849     {
3850       if (current_function_decl && x != current_function_decl
3851           /* A local declaration for a function doesn't constitute
3852              nesting.  */
3853           && (TREE_CODE (x) != FUNCTION_DECL || DECL_INITIAL (x))
3854           /* Don't change DECL_CONTEXT of virtual methods.  */
3855           && (TREE_CODE (x) != FUNCTION_DECL || !DECL_VIRTUAL_P (x))
3856           && !DECL_CONTEXT (x))
3857         DECL_CONTEXT (x) = current_function_decl;
3858       if (!DECL_CONTEXT (x))
3859         DECL_CONTEXT (x) = FROB_CONTEXT (current_namespace);
3860     }
3861
3862   /* Type are looked up using the DECL_NAME, as that is what the rest of the
3863      compiler wants to use.  */
3864   if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
3865       || TREE_CODE (x) == NAMESPACE_DECL)
3866     name = DECL_NAME (x);
3867
3868   if (name)
3869     {
3870 #if 0
3871       /* Not needed...see below.  */
3872       char *file;
3873       int line;
3874 #endif
3875       if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3876         name = TREE_OPERAND (name, 0);
3877       
3878       /* Namespace-scoped variables are not found in the current level. */
3879       if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x))
3880         t = namespace_binding (name, DECL_CONTEXT (x));
3881       else
3882         t = lookup_name_current_level (name);
3883       if (t == error_mark_node)
3884         {
3885           /* error_mark_node is 0 for a while during initialization!  */
3886           t = NULL_TREE;
3887           cp_error_at ("`%#D' used prior to declaration", x);
3888         }
3889
3890       else if (t != NULL_TREE)
3891         {
3892 #if 0
3893           /* This is turned off until I have time to do it right (bpk).  */
3894           /* With the code below that uses it...  */
3895           file = DECL_SOURCE_FILE (t);
3896           line = DECL_SOURCE_LINE (t);
3897 #endif
3898           if (TREE_CODE (t) == PARM_DECL)
3899             {
3900               if (DECL_CONTEXT (t) == NULL_TREE)
3901                 fatal ("parse errors have confused me too much");
3902
3903               /* Check for duplicate params.  */
3904               if (duplicate_decls (x, t))
3905                 return t;
3906             }
3907           else if (((TREE_CODE (x) == FUNCTION_DECL && DECL_LANGUAGE (x) == lang_c)
3908                     || DECL_FUNCTION_TEMPLATE_P (x))
3909                    && is_overloaded_fn (t))
3910             /* Don't do anything just yet. */;
3911           else if (t == wchar_decl_node)
3912             {
3913               if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
3914                 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
3915
3916               /* Throw away the redeclaration.  */
3917               return t;
3918             }
3919           else if (TREE_CODE (t) != TREE_CODE (x))
3920             {
3921               if (duplicate_decls (x, t))
3922                 return t;
3923             }
3924           else if (duplicate_decls (x, t))
3925             {
3926 #if 0
3927               /* This is turned off until I have time to do it right (bpk).  */
3928
3929               /* Also warn if they did a prototype with `static' on it, but
3930                  then later left the `static' off.  */
3931               if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
3932                 {
3933                   if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3934                     return t;
3935
3936                   if (extra_warnings)
3937                     {
3938                       cp_warning ("`static' missing from declaration of `%D'",
3939                                   t);
3940                       warning_with_file_and_line (file, line,
3941                                                   "previous declaration of `%s'",
3942                                                   decl_as_string (t, 0));
3943                     }
3944
3945                   /* Now fix things so it'll do what they expect.  */
3946                   if (current_function_decl)
3947                     TREE_PUBLIC (current_function_decl) = 0;
3948                 }
3949               /* Due to interference in memory reclamation (X may be
3950                  obstack-deallocated at this point), we must guard against
3951                  one really special case.  [jason: This should be handled
3952                  by start_function]  */
3953               if (current_function_decl == x)
3954                 current_function_decl = t;
3955 #endif
3956               if (TREE_CODE (t) == TYPE_DECL)
3957                 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
3958               else if (TREE_CODE (t) == FUNCTION_DECL)
3959                 check_default_args (t);
3960
3961               return t;
3962             }
3963           else if (DECL_MAIN_P (x))
3964             {
3965               /* A redeclaration of main, but not a duplicate of the
3966                  previous one. 
3967
3968                  [basic.start.main]
3969
3970                  This function shall not be overloaded.  */
3971               cp_error_at ("invalid redeclaration of `%D'", t);
3972               cp_error ("as `%D'", x);
3973               /* We don't try to push this declaration since that
3974                  causes a crash.  */
3975               return x;
3976             }
3977         }
3978
3979       check_template_shadow (x);
3980
3981       /* If this is a function conjured up by the backend, massage it
3982          so it looks friendly.  */
3983       if (TREE_CODE (x) == FUNCTION_DECL
3984           && ! DECL_LANG_SPECIFIC (x))
3985         {
3986           retrofit_lang_decl (x);
3987           DECL_LANGUAGE (x) = lang_c;
3988         }
3989
3990       if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_FUNCTION_MEMBER_P (x))
3991         {
3992           t = push_overloaded_decl (x, PUSH_LOCAL);
3993           if (t != x || DECL_LANGUAGE (x) == lang_c)
3994             return t;
3995           if (!namespace_bindings_p ())
3996             /* We do not need to create a binding for this name;
3997                push_overloaded_decl will have already done so if
3998                necessary.  */
3999             need_new_binding = 0;
4000         }
4001       else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
4002         return push_overloaded_decl (x, PUSH_GLOBAL);
4003
4004       /* If declaring a type as a typedef, copy the type (unless we're
4005          at line 0), and install this TYPE_DECL as the new type's typedef
4006          name.  See the extensive comment in ../c-decl.c (pushdecl). */
4007       if (TREE_CODE (x) == TYPE_DECL)
4008         {
4009           tree type = TREE_TYPE (x);
4010           if (DECL_SOURCE_LINE (x) == 0)
4011             {
4012               if (TYPE_NAME (type) == 0)
4013                 TYPE_NAME (type) = x;
4014             }
4015           else if (type != error_mark_node && TYPE_NAME (type) != x
4016                    /* We don't want to copy the type when all we're
4017                       doing is making a TYPE_DECL for the purposes of
4018                       inlining.  */
4019                    && (!TYPE_NAME (type) 
4020                        || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
4021             {
4022               push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
4023
4024               DECL_ORIGINAL_TYPE (x) = type;
4025               type = build_type_copy (type);
4026               TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
4027               TYPE_NAME (type) = x;
4028               TREE_TYPE (x) = type;
4029
4030               pop_obstacks ();
4031             }
4032
4033           if (type != error_mark_node
4034               && TYPE_NAME (type)
4035               && TYPE_IDENTIFIER (type))
4036             set_identifier_type_value_with_scope (DECL_NAME (x), type, 
4037                                                   current_binding_level);
4038
4039         }
4040
4041       /* Multiple external decls of the same identifier ought to match.
4042
4043          We get warnings about inline functions where they are defined.
4044          We get warnings about other functions from push_overloaded_decl.
4045          
4046          Avoid duplicate warnings where they are used.  */
4047       if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
4048         {
4049           tree decl;
4050
4051           if (IDENTIFIER_NAMESPACE_VALUE (name) != NULL_TREE
4052               && (DECL_EXTERNAL (IDENTIFIER_NAMESPACE_VALUE (name))
4053                   || TREE_PUBLIC (IDENTIFIER_NAMESPACE_VALUE (name))))
4054             decl = IDENTIFIER_NAMESPACE_VALUE (name);
4055           else
4056             decl = NULL_TREE;
4057
4058           if (decl
4059               /* If different sort of thing, we already gave an error.  */
4060               && TREE_CODE (decl) == TREE_CODE (x)
4061               && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
4062             {
4063               cp_pedwarn ("type mismatch with previous external decl", x);
4064               cp_pedwarn_at ("previous external decl of `%#D'", decl);
4065             }
4066         }
4067
4068       /* This name is new in its binding level.
4069          Install the new declaration and return it.  */
4070       if (namespace_bindings_p ())
4071         {
4072           /* Install a global value.  */
4073
4074           /* If the first global decl has external linkage,
4075              warn if we later see static one.  */
4076           if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
4077             TREE_PUBLIC (name) = 1;
4078
4079           if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
4080                 && t != NULL_TREE))
4081             {
4082               if (TREE_CODE (x) == FUNCTION_DECL)
4083                 my_friendly_assert 
4084                   ((IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
4085                   || (IDENTIFIER_GLOBAL_VALUE (name) == x), 378);
4086               SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
4087             }
4088
4089           /* Don't forget if the function was used via an implicit decl.  */
4090           if (IDENTIFIER_IMPLICIT_DECL (name)
4091               && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
4092             TREE_USED (x) = 1;
4093
4094           /* Don't forget if its address was taken in that way.  */
4095           if (IDENTIFIER_IMPLICIT_DECL (name)
4096               && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
4097             TREE_ADDRESSABLE (x) = 1;
4098
4099           /* Warn about mismatches against previous implicit decl.  */
4100           if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
4101               /* If this real decl matches the implicit, don't complain.  */
4102               && ! (TREE_CODE (x) == FUNCTION_DECL
4103                     && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
4104             cp_warning
4105               ("`%D' was previously implicitly declared to return `int'", x);
4106
4107           /* If new decl is `static' and an `extern' was seen previously,
4108              warn about it.  */
4109           if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
4110             warn_extern_redeclared_static (x, t);
4111         }
4112       else
4113         {
4114           /* Here to install a non-global value.  */
4115           tree oldlocal = IDENTIFIER_VALUE (name);
4116           tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
4117
4118           if (need_new_binding)
4119             {
4120               push_local_binding (name, x, 0);
4121               /* Because push_local_binding will hook X on to the
4122                  current_binding_level's name list, we don't want to
4123                  do that again below.  */
4124               need_new_binding = 0;
4125             }
4126
4127           /* If this is a TYPE_DECL, push it into the type value slot.  */
4128           if (TREE_CODE (x) == TYPE_DECL)
4129             set_identifier_type_value_with_scope (name, TREE_TYPE (x), 
4130                                                   current_binding_level);
4131
4132           /* Clear out any TYPE_DECL shadowed by a namespace so that
4133              we won't think this is a type.  The C struct hack doesn't
4134              go through namespaces.  */
4135           if (TREE_CODE (x) == NAMESPACE_DECL)
4136             set_identifier_type_value_with_scope (name, NULL_TREE, 
4137                                                   current_binding_level);
4138
4139           /* If this is an extern function declaration, see if we
4140              have a global definition or declaration for the function.  */
4141           if (oldlocal == NULL_TREE
4142               && DECL_EXTERNAL (x)
4143               && oldglobal != NULL_TREE
4144               && TREE_CODE (x) == FUNCTION_DECL
4145               && TREE_CODE (oldglobal) == FUNCTION_DECL)
4146             {
4147               /* We have one.  Their types must agree.  */
4148               if (decls_match (x, oldglobal))
4149                 /* OK */;
4150               else
4151                 {
4152                   cp_warning ("extern declaration of `%#D' doesn't match", x);
4153                   cp_warning_at ("global declaration `%#D'", oldglobal);
4154                 }
4155             }
4156           /* If we have a local external declaration,
4157              and no file-scope declaration has yet been seen,
4158              then if we later have a file-scope decl it must not be static.  */
4159           if (oldlocal == NULL_TREE
4160               && oldglobal == NULL_TREE
4161               && DECL_EXTERNAL (x)
4162               && TREE_PUBLIC (x))
4163             TREE_PUBLIC (name) = 1;
4164
4165           if (DECL_FROM_INLINE (x))
4166             /* Inline decls shadow nothing.  */;
4167
4168           /* Warn if shadowing an argument at the top level of the body.  */
4169           else if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
4170                    && TREE_CODE (oldlocal) == PARM_DECL
4171                    /* Don't complain if it's from an enclosing function.  */
4172                    && DECL_CONTEXT (oldlocal) == current_function_decl
4173                    && TREE_CODE (x) != PARM_DECL)
4174             {
4175               /* Go to where the parms should be and see if we
4176                  find them there.  */
4177               struct binding_level *b = current_binding_level->level_chain;
4178
4179               if (cleanup_label)
4180                 b = b->level_chain;
4181
4182               /* ARM $8.3 */
4183               if (b->parm_flag == 1)
4184                 cp_error ("declaration of `%#D' shadows a parameter", name);
4185             }
4186           else if (warn_shadow && oldlocal != NULL_TREE
4187                    && current_binding_level->is_for_scope
4188                    && !DECL_DEAD_FOR_LOCAL (oldlocal))
4189             {
4190               warning ("variable `%s' shadows local",
4191                        IDENTIFIER_POINTER (name));
4192               cp_warning_at ("  this is the shadowed declaration", oldlocal);
4193             }              
4194           /* Maybe warn if shadowing something else.  */
4195           else if (warn_shadow && !DECL_EXTERNAL (x)
4196                    /* No shadow warnings for internally generated vars.  */
4197                    && ! DECL_ARTIFICIAL (x)
4198                    /* No shadow warnings for vars made for inlining.  */
4199                    && ! DECL_FROM_INLINE (x))
4200             {
4201               const char *warnstring = NULL;
4202
4203               if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
4204                 warnstring = "declaration of `%s' shadows a parameter";
4205               else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
4206                        && current_class_ptr
4207                        && !TREE_STATIC (name))
4208                 warnstring = "declaration of `%s' shadows a member of `this'";
4209               else if (oldlocal != NULL_TREE)
4210                 warnstring = "declaration of `%s' shadows previous local";
4211               else if (oldglobal != NULL_TREE)
4212                 /* XXX shadow warnings in outer-more namespaces */
4213                 warnstring = "declaration of `%s' shadows global declaration";
4214
4215               if (warnstring)
4216                 warning (warnstring, IDENTIFIER_POINTER (name));
4217             }
4218         }
4219
4220       if (TREE_CODE (x) == FUNCTION_DECL)
4221         check_default_args (x);
4222
4223       /* Keep count of variables in this level with incomplete type.  */
4224       if (TREE_CODE (x) == VAR_DECL
4225           && TREE_TYPE (x) != error_mark_node
4226           && ((TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
4227                && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
4228               /* RTTI TD entries are created while defining the type_info.  */
4229               || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
4230                   && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
4231         current_binding_level->incomplete 
4232           = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
4233     }
4234
4235   if (need_new_binding)
4236     {
4237       /* Put decls on list in reverse order.
4238          We will reverse them later if necessary.  */
4239       TREE_CHAIN (x) = current_binding_level->names;
4240       current_binding_level->names = x;
4241       if (current_binding_level == global_binding_level
4242           && !TREE_PERMANENT (x))
4243         my_friendly_abort (124);
4244     }
4245
4246   return x;
4247 }
4248
4249 /* Same as pushdecl, but define X in binding-level LEVEL.  We rely on the
4250    caller to set DECL_CONTEXT properly.  */
4251
4252 static tree
4253 pushdecl_with_scope (x, level)
4254      tree x;
4255      struct binding_level *level;
4256 {
4257   register struct binding_level *b;
4258   tree function_decl = current_function_decl;
4259
4260   current_function_decl = NULL_TREE;
4261   if (level->parm_flag == 2)
4262     {
4263       b = class_binding_level;
4264       class_binding_level = level;
4265       pushdecl_class_level (x);
4266       class_binding_level = b;
4267     }
4268   else
4269     {
4270       b = current_binding_level;
4271       current_binding_level = level;
4272       x = pushdecl (x);
4273       current_binding_level = b;
4274     }
4275   current_function_decl = function_decl;
4276   return x;
4277 }
4278
4279 /* Like pushdecl, only it places X in the current namespace,
4280    if appropriate.  */
4281
4282 tree
4283 pushdecl_namespace_level (x)
4284      tree x;
4285 {
4286   register struct binding_level *b = current_binding_level;
4287   register tree t;
4288
4289   t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
4290
4291   /* Now, the type_shadowed stack may screw us.  Munge it so it does
4292      what we want.  */
4293   if (TREE_CODE (x) == TYPE_DECL)
4294     {
4295       tree name = DECL_NAME (x);
4296       tree newval;
4297       tree *ptr = (tree *)0;
4298       for (; b != global_binding_level; b = b->level_chain)
4299         {
4300           tree shadowed = b->type_shadowed;
4301           for (; shadowed; shadowed = TREE_CHAIN (shadowed))
4302             if (TREE_PURPOSE (shadowed) == name)
4303               {
4304                 ptr = &TREE_VALUE (shadowed);
4305                 /* Can't break out of the loop here because sometimes
4306                    a binding level will have duplicate bindings for
4307                    PT names.  It's gross, but I haven't time to fix it.  */
4308               }
4309         }
4310       newval = TREE_TYPE (x);
4311       if (ptr == (tree *)0)
4312         {
4313           /* @@ This shouldn't be needed.  My test case "zstring.cc" trips
4314              up here if this is changed to an assertion.  --KR  */
4315           SET_IDENTIFIER_TYPE_VALUE (name, newval);
4316         }
4317       else
4318         {
4319           *ptr = newval;
4320         }
4321     }
4322   return t;
4323 }
4324
4325 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4326    if appropriate.  */
4327
4328 tree
4329 pushdecl_top_level (x)
4330      tree x;
4331 {
4332   tree cur_namespace = current_namespace;
4333   current_namespace = global_namespace;
4334   x = pushdecl_namespace_level (x);
4335   current_namespace = cur_namespace;
4336   return x;
4337 }
4338
4339 /* Make the declaration of X appear in CLASS scope.  */
4340
4341 void
4342 pushdecl_class_level (x)
4343      tree x;
4344 {
4345   /* Don't use DECL_ASSEMBLER_NAME here!  Everything that looks in class
4346      scope looks for the pre-mangled name.  */
4347   register tree name;
4348
4349   if (TREE_CODE (x) == OVERLOAD)
4350     x = OVL_CURRENT (x);
4351   name = DECL_NAME (x);
4352
4353   if (name)
4354     {
4355       push_class_level_binding (name, x);
4356       if (TREE_CODE (x) == TYPE_DECL)
4357         set_identifier_type_value (name, TREE_TYPE (x));
4358     }
4359   else if (ANON_UNION_TYPE_P (TREE_TYPE (x)))
4360     {
4361       tree f;
4362
4363       for (f = TYPE_FIELDS (TREE_TYPE (x));
4364            f;
4365            f = TREE_CHAIN (f))
4366         pushdecl_class_level (f);
4367     }
4368 }
4369
4370 #if 0
4371 /* This function is used to push the mangled decls for nested types into
4372    the appropriate scope.  Previously pushdecl_top_level was used, but that
4373    is incorrect for members of local classes.  */
4374
4375 void
4376 pushdecl_nonclass_level (x)
4377      tree x;
4378 {
4379   struct binding_level *b = current_binding_level;
4380
4381   my_friendly_assert (b->parm_flag != 2, 180);
4382
4383 #if 0
4384   /* Get out of template binding levels */
4385   while (b->pseudo_global)
4386     b = b->level_chain;
4387 #endif
4388
4389   pushdecl_with_scope (x, b);
4390 }
4391 #endif
4392
4393 /* Make the declaration(s) of X appear in CLASS scope
4394    under the name NAME.  */
4395
4396 void
4397 push_class_level_binding (name, x)
4398      tree name;
4399      tree x;
4400 {
4401   tree binding;
4402   /* The class_binding_level will be NULL if x is a template 
4403      parameter name in a member template.  */
4404   if (!class_binding_level)
4405     return;
4406
4407   /* Make sure that this new member does not have the same name
4408      as a template parameter.  */
4409   if (TYPE_BEING_DEFINED (current_class_type))
4410     check_template_shadow (x);
4411
4412   /* If this declaration shadows a declaration from an enclosing
4413      class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4414      we leave this class.  Record the shadowed declaration here.  */
4415   binding = IDENTIFIER_BINDING (name);
4416   if (binding 
4417       && ((TREE_CODE (x) == OVERLOAD
4418            && BINDING_VALUE (binding)
4419            && is_overloaded_fn (BINDING_VALUE (binding)))
4420           || INHERITED_VALUE_BINDING_P (binding)))
4421     {
4422       tree shadow;
4423       tree old_decl;
4424
4425       /* If the old binding was from a base class, and was for a tag
4426          name, slide it over to make room for the new binding.  The
4427          old binding is still visible if explicitly qualified with a
4428          class-key.  */
4429       if (INHERITED_VALUE_BINDING_P (binding)
4430           && BINDING_VALUE (binding)
4431           && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
4432           && DECL_ARTIFICIAL (BINDING_VALUE (binding))
4433           && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
4434         {
4435           old_decl = BINDING_TYPE (binding);
4436           BINDING_TYPE (binding) = BINDING_VALUE (binding);
4437           BINDING_VALUE (binding) = NULL_TREE;
4438           INHERITED_VALUE_BINDING_P (binding) = 0;
4439         }
4440       else
4441         old_decl = BINDING_VALUE (binding);
4442
4443       /* There was already a binding for X containing fewer
4444          functions than are named in X.  Find the previous
4445          declaration of X on the class-shadowed list, and update it.  */
4446       for (shadow = class_binding_level->class_shadowed;
4447            shadow;
4448            shadow = TREE_CHAIN (shadow))
4449         if (TREE_PURPOSE (shadow) == name
4450             && TREE_TYPE (shadow) == old_decl)
4451           {
4452             BINDING_VALUE (binding) = x;
4453             INHERITED_VALUE_BINDING_P (binding) = 0;
4454             TREE_TYPE (shadow) = x;
4455             return;
4456           }
4457     }
4458
4459   /* If we didn't replace an existing binding, put the binding on the
4460      stack of bindings for the identifier, and update
4461      IDENTIFIER_CLASS_VALUE.  */
4462   if (push_class_binding (name, x))
4463     {
4464       push_cache_obstack ();
4465       class_binding_level->class_shadowed
4466         = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
4467                      class_binding_level->class_shadowed);
4468       pop_obstacks ();
4469       /* Record the value we are binding NAME to so that we can know
4470          what to pop later.  */
4471       TREE_TYPE (class_binding_level->class_shadowed) = x;
4472     }
4473 }
4474
4475 /* Insert another USING_DECL into the current binding level,
4476    returning this declaration. If this is a redeclaration,
4477    do nothing and return NULL_TREE.  */
4478
4479 tree
4480 push_using_decl (scope, name)
4481      tree scope;
4482      tree name;
4483 {
4484   tree decl;
4485   
4486   my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4487   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4488   for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4489     if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4490       break;
4491   if (decl)
4492     return NULL_TREE;
4493   decl = build_lang_decl (USING_DECL, name, void_type_node);
4494   DECL_INITIAL (decl) = scope;
4495   TREE_CHAIN (decl) = current_binding_level->usings;
4496   current_binding_level->usings = decl;
4497   return decl;
4498 }
4499
4500 /* Add namespace to using_directives. Return NULL_TREE if nothing was
4501    changed (i.e. there was already a directive), or the fresh
4502    TREE_LIST otherwise.  */
4503
4504 tree
4505 push_using_directive (used)
4506      tree used;
4507 {
4508   tree ud = current_binding_level->using_directives;
4509   tree iter, ancestor;
4510   
4511   /* Check if we already have this. */
4512   if (purpose_member (used, ud) != NULL_TREE)
4513     return NULL_TREE;
4514
4515   /* Recursively add all namespaces used. */
4516   for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4517     push_using_directive (TREE_PURPOSE (iter));
4518
4519   ancestor = namespace_ancestor (current_decl_namespace (), used);
4520   ud = current_binding_level->using_directives;
4521   ud = perm_tree_cons (used, ancestor, ud);
4522   current_binding_level->using_directives = ud;
4523   return ud;
4524 }
4525
4526 /* DECL is a FUNCTION_DECL for a non-member function, which may have
4527    other definitions already in place.  We get around this by making
4528    the value of the identifier point to a list of all the things that
4529    want to be referenced by that name.  It is then up to the users of
4530    that name to decide what to do with that list.
4531
4532    DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its DECL_RESULT
4533    slot.  It is dealt with the same way.
4534
4535    FLAGS is a bitwise-or of the following values:
4536      PUSH_LOCAL: Bind DECL in the current scope, rather than at
4537                  namespace scope.
4538      PUSH_USING: DECL is being pushed as the result of a using
4539                  declaration. 
4540
4541    The value returned may be a previous declaration if we guessed wrong
4542    about what language DECL should belong to (C or C++).  Otherwise,
4543    it's always DECL (and never something that's not a _DECL).  */
4544
4545 tree
4546 push_overloaded_decl (decl, flags)
4547      tree decl;
4548      int flags;
4549 {
4550   tree name = DECL_NAME (decl);
4551   tree old;
4552   tree new_binding;
4553   int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
4554
4555   if (doing_global)
4556     {
4557       old = namespace_binding (name, DECL_CONTEXT (decl));
4558       if (old && TREE_CODE (old) == FUNCTION_DECL
4559           && DECL_ARTIFICIAL (old)
4560           && (DECL_BUILT_IN (old) || DECL_BUILT_IN_NONANSI (old)))
4561         {
4562           if (duplicate_decls (decl, old))
4563             return old;
4564           old = NULL_TREE;
4565         }
4566     }
4567   else
4568     old = lookup_name_current_level (name);
4569
4570   if (old)
4571     {
4572       if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
4573         {
4574           tree t = TREE_TYPE (old);
4575           if (IS_AGGR_TYPE (t) && warn_shadow
4576               && (! DECL_IN_SYSTEM_HEADER (decl)
4577                   || ! DECL_IN_SYSTEM_HEADER (old)))
4578             cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
4579           old = NULL_TREE;
4580         }
4581       else if (is_overloaded_fn (old))
4582         {
4583           tree tmp;
4584           
4585           for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
4586             {
4587               tree fn = OVL_CURRENT (tmp);
4588
4589               if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4590                   && !(flags & PUSH_USING)
4591                   && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4592                                 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4593                 cp_error ("`%#D' conflicts with previous using declaration `%#D'",
4594                           decl, fn);
4595               
4596               if (duplicate_decls (decl, fn))
4597                 return fn;
4598             }
4599         }
4600       else
4601         {
4602           cp_error_at ("previous non-function declaration `%#D'", old);
4603           cp_error ("conflicts with function declaration `%#D'", decl);
4604           return decl;
4605         }
4606     }
4607
4608   if (old || TREE_CODE (decl) == TEMPLATE_DECL)
4609     {
4610       if (old && TREE_CODE (old) != OVERLOAD)
4611         new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4612       else
4613         new_binding = ovl_cons (decl, old);
4614       if (flags & PUSH_USING)
4615         OVL_USED (new_binding) = 1;
4616     }
4617   else
4618     /* NAME is not ambiguous.  */
4619     new_binding = decl;
4620
4621   if (doing_global)
4622     set_namespace_binding (name, current_namespace, new_binding);
4623   else
4624     {
4625       /* We only create an OVERLOAD if there was a previous binding at
4626          this level, or if decl is a template. In the former case, we
4627          need to remove the old binding and replace it with the new
4628          binding.  We must also run through the NAMES on the binding
4629          level where the name was bound to update the chain.  */
4630
4631       if (TREE_CODE (new_binding) == OVERLOAD && old)
4632         {
4633           tree *d;
4634           
4635           for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4636                *d;
4637                d = &TREE_CHAIN (*d))
4638             if (*d == old
4639                 || (TREE_CODE (*d) == TREE_LIST
4640                     && TREE_VALUE (*d) == old))
4641               {
4642                 if (TREE_CODE (*d) == TREE_LIST)
4643                   /* Just replace the old binding with the new.  */
4644                   TREE_VALUE (*d) = new_binding;
4645                 else
4646                   /* Build a TREE_LIST to wrap the OVERLOAD.  */
4647                   *d = build_tree_list (NULL_TREE, new_binding);
4648
4649                 /* And update the CPLUS_BINDING node.  */
4650                 BINDING_VALUE (IDENTIFIER_BINDING (name))
4651                   = new_binding;
4652                 return decl;
4653               }
4654
4655           /* We should always find a previous binding in this case.  */
4656           my_friendly_abort (0);
4657         }
4658
4659       /* Install the new binding.  */
4660       push_local_binding (name, new_binding, flags);
4661     }
4662
4663   return decl;
4664 }
4665 \f
4666 /* Generate an implicit declaration for identifier FUNCTIONID
4667    as a function of type int ().  Print a warning if appropriate.  */
4668
4669 tree
4670 implicitly_declare (functionid)
4671      tree functionid;
4672 {
4673   register tree decl;
4674   int temp = allocation_temporary_p ();
4675
4676   push_obstacks_nochange ();
4677
4678   /* Save the decl permanently so we can warn if definition follows.
4679      In ANSI C, warn_implicit is usually false, so the saves little space.
4680      But in C++, it's usually true, hence the extra code.  */
4681   if (temp && (! warn_implicit || toplevel_bindings_p ()))
4682     end_temporary_allocation ();
4683
4684   /* We used to reuse an old implicit decl here,
4685      but this loses with inline functions because it can clobber
4686      the saved decl chains.  */
4687   decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4688
4689   DECL_EXTERNAL (decl) = 1;
4690   TREE_PUBLIC (decl) = 1;
4691
4692   /* ANSI standard says implicit declarations are in the innermost block.
4693      So we record the decl in the standard fashion.  */
4694   pushdecl (decl);
4695   rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4696
4697   if (warn_implicit
4698       /* Only one warning per identifier.  */
4699       && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4700     {
4701       cp_pedwarn ("implicit declaration of function `%#D'", decl);
4702     }
4703
4704   SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4705
4706   pop_obstacks ();
4707
4708   return decl;
4709 }
4710
4711 /* Return zero if the declaration NEWDECL is valid
4712    when the declaration OLDDECL (assumed to be for the same name)
4713    has already been seen.
4714    Otherwise return an error message format string with a %s
4715    where the identifier should go.  */
4716
4717 static const char *
4718 redeclaration_error_message (newdecl, olddecl)
4719      tree newdecl, olddecl;
4720 {
4721   if (TREE_CODE (newdecl) == TYPE_DECL)
4722     {
4723       /* Because C++ can put things into name space for free,
4724          constructs like "typedef struct foo { ... } foo"
4725          would look like an erroneous redeclaration.  */
4726       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
4727         return 0;
4728       else
4729         return "redefinition of `%#D'";
4730     }
4731   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4732     {
4733       /* If this is a pure function, its olddecl will actually be
4734          the original initialization to `0' (which we force to call
4735          abort()).  Don't complain about redefinition in this case.  */
4736       if (DECL_LANG_SPECIFIC (olddecl) && DECL_ABSTRACT_VIRTUAL_P (olddecl))
4737         return 0;
4738
4739       /* If both functions come from different namespaces, this is not
4740          a redeclaration - this is a conflict with a used function. */
4741       if (DECL_NAMESPACE_SCOPE_P (olddecl)
4742           && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
4743         return "`%D' conflicts with used function";
4744
4745       /* We'll complain about linkage mismatches in
4746          warn_extern_redeclared_static.  */
4747
4748       /* Defining the same name twice is no good.  */
4749       if (DECL_INITIAL (olddecl) != NULL_TREE
4750           && DECL_INITIAL (newdecl) != NULL_TREE)
4751         {
4752           if (DECL_NAME (olddecl) == NULL_TREE)
4753             return "`%#D' not declared in class";
4754           else
4755             return "redefinition of `%#D'";
4756         }
4757       return 0;
4758     }
4759   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4760     {
4761       if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
4762            && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4763            && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4764           || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
4765               && TYPE_SIZE (TREE_TYPE (newdecl))
4766               && TYPE_SIZE (TREE_TYPE (olddecl))))
4767         return "redefinition of `%#D'";
4768       return 0;
4769     }
4770   else if (toplevel_bindings_p ())
4771     {
4772       /* Objects declared at top level:  */
4773       /* If at least one is a reference, it's ok.  */
4774       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
4775         return 0;
4776       /* Reject two definitions.  */
4777       return "redefinition of `%#D'";
4778     }
4779   else
4780     {
4781       /* Objects declared with block scope:  */
4782       /* Reject two definitions, and reject a definition
4783          together with an external reference.  */
4784       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
4785         return "redeclaration of `%#D'";
4786       return 0;
4787     }
4788 }
4789 \f
4790 /* Get the LABEL_DECL corresponding to identifier ID as a label.
4791    Create one if none exists so far for the current function.
4792    This function is called for both label definitions and label references.  */
4793
4794 tree
4795 lookup_label (id)
4796      tree id;
4797 {
4798   register tree decl = IDENTIFIER_LABEL_VALUE (id);
4799
4800   if (current_function_decl == NULL_TREE)
4801     {
4802       error ("label `%s' referenced outside of any function",
4803              IDENTIFIER_POINTER (id));
4804       return NULL_TREE;
4805     }
4806
4807   if ((decl == NULL_TREE
4808       || DECL_SOURCE_LINE (decl) == 0)
4809       && (named_label_uses == NULL
4810           || named_label_uses->names_in_scope != current_binding_level->names
4811           || named_label_uses->label_decl != decl))
4812     {
4813       struct named_label_list *new_ent;
4814       new_ent
4815         = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
4816       new_ent->label_decl = decl;
4817       new_ent->names_in_scope = current_binding_level->names;
4818       new_ent->binding_level = current_binding_level;
4819       new_ent->lineno_o_goto = lineno;
4820       new_ent->filename_o_goto = input_filename;
4821       new_ent->next = named_label_uses;
4822       named_label_uses = new_ent;
4823     }
4824
4825   /* Use a label already defined or ref'd with this name.  */
4826   if (decl != NULL_TREE)
4827     {
4828       /* But not if it is inherited and wasn't declared to be inheritable.  */
4829       if (DECL_CONTEXT (decl) != current_function_decl
4830           && ! C_DECLARED_LABEL_FLAG (decl))
4831         return shadow_label (id);
4832       return decl;
4833     }
4834
4835   decl = build_decl (LABEL_DECL, id, void_type_node);
4836
4837   /* Make sure every label has an rtx.  */
4838   label_rtx (decl);
4839
4840   /* A label not explicitly declared must be local to where it's ref'd.  */
4841   DECL_CONTEXT (decl) = current_function_decl;
4842
4843   DECL_MODE (decl) = VOIDmode;
4844
4845   /* Say where one reference is to the label,
4846      for the sake of the error if it is not defined.  */
4847   DECL_SOURCE_LINE (decl) = lineno;
4848   DECL_SOURCE_FILE (decl) = input_filename;
4849
4850   SET_IDENTIFIER_LABEL_VALUE (id, decl);
4851
4852   named_labels = tree_cons (NULL_TREE, decl, named_labels);
4853   named_label_uses->label_decl = decl;
4854
4855   return decl;
4856 }
4857
4858 /* Make a label named NAME in the current function,
4859    shadowing silently any that may be inherited from containing functions
4860    or containing scopes.
4861
4862    Note that valid use, if the label being shadowed
4863    comes from another scope in the same function,
4864    requires calling declare_nonlocal_label right away.  */
4865
4866 tree
4867 shadow_label (name)
4868      tree name;
4869 {
4870   register tree decl = IDENTIFIER_LABEL_VALUE (name);
4871
4872   if (decl != NULL_TREE)
4873     {
4874       shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
4875       SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE);
4876     }
4877
4878   return lookup_label (name);
4879 }
4880
4881 /* Define a label, specifying the location in the source file.
4882    Return the LABEL_DECL node for the label, if the definition is valid.
4883    Otherwise return 0.  */
4884
4885 tree
4886 define_label (filename, line, name)
4887      char *filename;
4888      int line;
4889      tree name;
4890 {
4891   tree decl;
4892
4893   if (minimal_parse_mode)
4894     {
4895       push_obstacks (&permanent_obstack, &permanent_obstack);
4896       decl = build_decl (LABEL_DECL, name, void_type_node);
4897       pop_obstacks ();
4898       DECL_SOURCE_LINE (decl) = line;
4899       DECL_SOURCE_FILE (decl) = filename;
4900       add_tree (decl);
4901       return decl;
4902     }
4903
4904   decl = lookup_label (name);
4905
4906   /* After labels, make any new cleanups go into their
4907      own new (temporary) binding contour.  */
4908   current_binding_level->more_cleanups_ok = 0;
4909
4910   /* If label with this name is known from an outer context, shadow it.  */
4911   if (decl != NULL_TREE && DECL_CONTEXT (decl) != current_function_decl)
4912     {
4913       shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
4914       SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE);
4915       decl = lookup_label (name);
4916     }
4917
4918   if (name == get_identifier ("wchar_t"))
4919     cp_pedwarn ("label named wchar_t");
4920
4921   if (DECL_INITIAL (decl) != NULL_TREE)
4922     {
4923       cp_error ("duplicate label `%D'", decl);
4924       return 0;
4925     }
4926   else
4927     {
4928       struct named_label_list *uses, *prev;
4929       int identified = 0;
4930
4931       /* Mark label as having been defined.  */
4932       DECL_INITIAL (decl) = error_mark_node;
4933       /* Say where in the source.  */
4934       DECL_SOURCE_FILE (decl) = filename;
4935       DECL_SOURCE_LINE (decl) = line;
4936
4937       prev = NULL;
4938       uses = named_label_uses;
4939       while (uses != NULL)
4940         if (uses->label_decl == decl)
4941           {
4942             struct binding_level *b = current_binding_level;
4943             while (b)
4944               {
4945                 tree new_decls = b->names;
4946                 tree old_decls = (b == uses->binding_level)
4947                                   ? uses->names_in_scope : NULL_TREE;
4948                 while (new_decls != old_decls)
4949                   {
4950                     if (TREE_CODE (new_decls) == VAR_DECL
4951                         /* Don't complain about crossing initialization
4952                            of internal entities.  They can't be accessed,
4953                            and they should be cleaned up
4954                            by the time we get to the label.  */
4955                         && ! DECL_ARTIFICIAL (new_decls)
4956                         && !(DECL_INITIAL (new_decls) == NULL_TREE
4957                              && pod_type_p (TREE_TYPE (new_decls))))
4958                       {
4959                         /* This is really only important if we're crossing
4960                            an initialization.  The POD stuff is just
4961                            pedantry; why should it matter if the class
4962                            contains a field of pointer to member type?  */
4963                         int problem = (DECL_INITIAL (new_decls)
4964                                        || (TYPE_NEEDS_CONSTRUCTING
4965                                            (TREE_TYPE (new_decls))));
4966
4967                         if (! identified)
4968                           {
4969                             if (problem)
4970                               {
4971                                 cp_error ("jump to label `%D'", decl);
4972                                 error_with_file_and_line
4973                                   (uses->filename_o_goto,
4974                                    uses->lineno_o_goto, "  from here");
4975                               }
4976                             else
4977                               {
4978                                 cp_pedwarn ("jump to label `%D'", decl);
4979                                 pedwarn_with_file_and_line
4980                                   (uses->filename_o_goto,
4981                                    uses->lineno_o_goto, "  from here");
4982                               }
4983                             identified = 1;
4984                         }
4985
4986                         if (problem)
4987                           cp_error_at ("  crosses initialization of `%#D'",
4988                                        new_decls);
4989                         else
4990                           cp_pedwarn_at ("  enters scope of non-POD `%#D'",
4991                                          new_decls);
4992                       }
4993                     new_decls = TREE_CHAIN (new_decls);
4994                   }
4995                 if (b == uses->binding_level)
4996                   break;
4997                 b = b->level_chain;
4998               }
4999
5000             if (prev != NULL)
5001               prev->next = uses->next;
5002             else
5003               named_label_uses = uses->next;
5004
5005             uses = uses->next;
5006           }
5007         else
5008           {
5009             prev = uses;
5010             uses = uses->next;
5011           }
5012       current_function_return_value = NULL_TREE;
5013       return decl;
5014     }
5015 }
5016
5017 struct cp_switch
5018 {
5019   struct binding_level *level;
5020   struct cp_switch *next;
5021 };
5022
5023 static struct cp_switch *switch_stack;
5024
5025 void
5026 push_switch ()
5027 {
5028   struct cp_switch *p
5029     = (struct cp_switch *) oballoc (sizeof (struct cp_switch));
5030   p->level = current_binding_level;
5031   p->next = switch_stack;
5032   switch_stack = p;
5033 }
5034
5035 void
5036 pop_switch ()
5037 {
5038   switch_stack = switch_stack->next;
5039 }
5040
5041 /* Same, but for CASE labels.  If DECL is NULL_TREE, it's the default.  */
5042 /* XXX Note decl is never actually used. (bpk) */
5043
5044 void
5045 define_case_label ()
5046 {
5047   tree cleanup = last_cleanup_this_contour ();
5048   struct binding_level *b = current_binding_level;
5049   int identified = 0;
5050
5051   if (cleanup)
5052     {
5053       static int explained = 0;
5054       cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
5055       warning ("where case label appears here");
5056       if (!explained)
5057         {
5058           warning ("(enclose actions of previous case statements requiring");
5059           warning ("destructors in their own binding contours.)");
5060           explained = 1;
5061         }
5062     }
5063
5064   for (; b && b != switch_stack->level; b = b->level_chain)
5065     {
5066       tree new_decls = b->names;
5067       for (; new_decls; new_decls = TREE_CHAIN (new_decls))
5068         {
5069           if (TREE_CODE (new_decls) == VAR_DECL
5070               /* Don't complain about crossing initialization
5071                  of internal entities.  They can't be accessed,
5072                  and they should be cleaned up
5073                  by the time we get to the label.  */
5074               && ! DECL_ARTIFICIAL (new_decls)
5075               && ((DECL_INITIAL (new_decls) != NULL_TREE
5076                    && DECL_INITIAL (new_decls) != error_mark_node)
5077                   || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
5078             {
5079               if (! identified)
5080                 error ("jump to case label");
5081               identified = 1;
5082               cp_error_at ("  crosses initialization of `%#D'",
5083                            new_decls);
5084             }
5085         }
5086     }
5087
5088   /* After labels, make any new cleanups go into their
5089      own new (temporary) binding contour.  */
5090
5091   current_binding_level->more_cleanups_ok = 0;
5092   current_function_return_value = NULL_TREE;
5093 }
5094 \f
5095 /* Return the list of declarations of the current level.
5096    Note that this list is in reverse order unless/until
5097    you nreverse it; and when you do nreverse it, you must
5098    store the result back using `storedecls' or you will lose.  */
5099
5100 tree
5101 getdecls ()
5102 {
5103   return current_binding_level->names;
5104 }
5105
5106 /* Return the list of type-tags (for structs, etc) of the current level.  */
5107
5108 tree
5109 gettags ()
5110 {
5111   return current_binding_level->tags;
5112 }
5113
5114 /* Store the list of declarations of the current level.
5115    This is done for the parameter declarations of a function being defined,
5116    after they are modified in the light of any missing parameters.  */
5117
5118 static void
5119 storedecls (decls)
5120      tree decls;
5121 {
5122   current_binding_level->names = decls;
5123 }
5124
5125 /* Similarly, store the list of tags of the current level.  */
5126
5127 void
5128 storetags (tags)
5129      tree tags;
5130 {
5131   current_binding_level->tags = tags;
5132 }
5133 \f
5134 /* Given NAME, an IDENTIFIER_NODE,
5135    return the structure (or union or enum) definition for that name.
5136    Searches binding levels from BINDING_LEVEL up to the global level.
5137    If THISLEVEL_ONLY is nonzero, searches only the specified context
5138    (but skips any tag-transparent contexts to find one that is
5139    meaningful for tags).
5140    FORM says which kind of type the caller wants;
5141    it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
5142    If the wrong kind of type is found, and it's not a template, an error is
5143    reported.  */
5144
5145 static tree
5146 lookup_tag (form, name, binding_level, thislevel_only)
5147      enum tree_code form;
5148      tree name;
5149      struct binding_level *binding_level;
5150      int thislevel_only;
5151 {
5152   register struct binding_level *level;
5153   /* Non-zero if, we should look past a pseudo-global level, even if
5154      THISLEVEL_ONLY.  */
5155   int allow_pseudo_global = 1;
5156
5157   for (level = binding_level; level; level = level->level_chain)
5158     {
5159       register tree tail;
5160       if (ANON_AGGRNAME_P (name))
5161         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5162           {
5163             /* There's no need for error checking here, because
5164                anon names are unique throughout the compilation.  */
5165             if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
5166               return TREE_VALUE (tail);
5167           }
5168       else if (level->namespace_p)
5169         /* Do namespace lookup. */
5170         for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
5171           {
5172             tree old = binding_for_name (name, tail);
5173
5174             /* If we just skipped past a pseudo global level, even
5175                though THISLEVEL_ONLY, and we find a template class
5176                declaration, then we use the _TYPE node for the
5177                template.  See the example below.  */
5178             if (thislevel_only && !allow_pseudo_global
5179                 && old && BINDING_VALUE (old) 
5180                 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
5181               old = TREE_TYPE (BINDING_VALUE (old));
5182             else 
5183               old = BINDING_TYPE (old);
5184
5185             /* If it has an original type, it is a typedef, and we
5186                should not return it.  */
5187             if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
5188               old = NULL_TREE;
5189             if (old && TREE_CODE (old) != form
5190                 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
5191               {
5192                 cp_error ("`%#D' redeclared as %C", old, form);
5193                 return NULL_TREE;
5194               }
5195             if (old)
5196               return old;
5197             if (thislevel_only || tail == global_namespace)
5198               return NULL_TREE;
5199           }
5200       else
5201         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5202           {
5203             if (TREE_PURPOSE (tail) == name)
5204               {
5205                 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
5206                 /* Should tighten this up; it'll probably permit
5207                    UNION_TYPE and a struct template, for example.  */
5208                 if (code != form
5209                     && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
5210                   {
5211                     /* Definition isn't the kind we were looking for.  */
5212                     cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
5213                               form);
5214                     return NULL_TREE;
5215                   }
5216                 return TREE_VALUE (tail);
5217               }
5218           }
5219       if (thislevel_only && ! level->tag_transparent)
5220         {
5221           if (level->pseudo_global && allow_pseudo_global)
5222             {
5223               /* We must deal with cases like this:
5224                  
5225                    template <class T> struct S;
5226                    template <class T> struct S {};
5227                    
5228                  When looking up `S', for the second declaration, we
5229                  would like to find the first declaration.  But, we
5230                  are in the pseudo-global level created for the
5231                  template parameters, rather than the (surrounding)
5232                  namespace level.  Thus, we keep going one more level,
5233                  even though THISLEVEL_ONLY is non-zero.  */
5234               allow_pseudo_global = 0;
5235               continue;
5236             }
5237           else
5238             return NULL_TREE;
5239         }
5240       if (current_class_type && level->level_chain->namespace_p)
5241         {
5242           /* Try looking in this class's tags before heading into
5243              global binding level.  */
5244           tree context = current_class_type;
5245           while (context)
5246             {
5247               switch (TREE_CODE_CLASS (TREE_CODE (context)))
5248                 {
5249                 tree these_tags;
5250                 case 't':
5251                     these_tags = CLASSTYPE_TAGS (context);
5252                     if (ANON_AGGRNAME_P (name))
5253                       while (these_tags)
5254                         {
5255                           if (TYPE_IDENTIFIER (TREE_VALUE (these_tags))
5256                               == name)
5257                             return TREE_VALUE (tail);
5258                           these_tags = TREE_CHAIN (these_tags);
5259                         }
5260                     else
5261                       while (these_tags)
5262                         {
5263                           if (TREE_PURPOSE (these_tags) == name)
5264                             {
5265                               if (TREE_CODE (TREE_VALUE (these_tags)) != form)
5266                                 {
5267                                   cp_error ("`%#D' redeclared as %C in class scope",
5268                                             TREE_VALUE (tail), form);
5269                                   return NULL_TREE;
5270                                 }
5271                               return TREE_VALUE (tail);
5272                             }
5273                           these_tags = TREE_CHAIN (these_tags);
5274                         }
5275                     /* If this type is not yet complete, then don't
5276                        look at its context.  */
5277                     if (TYPE_SIZE (context) == NULL_TREE)
5278                       goto no_context;
5279                     /* Go to next enclosing type, if any.  */
5280                     context = DECL_CONTEXT (TYPE_MAIN_DECL (context));
5281                     break;
5282                 case 'd':
5283                     context = DECL_CONTEXT (context);
5284                     break;
5285                 default:
5286                     my_friendly_abort (10);
5287                 }
5288               continue;
5289               no_context:
5290               break;
5291             }
5292         }
5293     }
5294   return NULL_TREE;
5295 }
5296
5297 #if 0
5298 void
5299 set_current_level_tags_transparency (tags_transparent)
5300      int tags_transparent;
5301 {
5302   current_binding_level->tag_transparent = tags_transparent;
5303 }
5304 #endif
5305
5306 /* Given a type, find the tag that was defined for it and return the tag name.
5307    Otherwise return 0.  However, the value can never be 0
5308    in the cases in which this is used.
5309
5310    C++: If NAME is non-zero, this is the new name to install.  This is
5311    done when replacing anonymous tags with real tag names.  */
5312
5313 static tree
5314 lookup_tag_reverse (type, name)
5315      tree type;
5316      tree name;
5317 {
5318   register struct binding_level *level;
5319
5320   for (level = current_binding_level; level; level = level->level_chain)
5321     {
5322       register tree tail;
5323       for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5324         {
5325           if (TREE_VALUE (tail) == type)
5326             {
5327               if (name)
5328                 TREE_PURPOSE (tail) = name;
5329               return TREE_PURPOSE (tail);
5330             }
5331         }
5332     }
5333   return NULL_TREE;
5334 }
5335 \f
5336 /* Lookup TYPE in CONTEXT (a chain of nested types or a FUNCTION_DECL).
5337    Return the type value, or NULL_TREE if not found.  */
5338
5339 static tree
5340 lookup_nested_type (type, context)
5341      tree type;
5342      tree context;
5343 {
5344   if (context == NULL_TREE)
5345     return NULL_TREE;
5346   while (context)
5347     {
5348       switch (TREE_CODE (context))
5349         {
5350         case TYPE_DECL:
5351           {
5352             tree ctype = TREE_TYPE (context);
5353             tree match = value_member (type, CLASSTYPE_TAGS (ctype));
5354             if (match)
5355               return TREE_VALUE (match);
5356             context = DECL_CONTEXT (context);
5357
5358             /* When we have a nested class whose member functions have
5359                local types (e.g., a set of enums), we'll arrive here
5360                with the DECL_CONTEXT as the actual RECORD_TYPE node for
5361                the enclosing class.  Instead, we want to make sure we
5362                come back in here with the TYPE_DECL, not the RECORD_TYPE.  */
5363             if (context && TREE_CODE (context) == RECORD_TYPE)
5364               context = TREE_CHAIN (context);
5365           }
5366           break;
5367         case FUNCTION_DECL:
5368           if (TYPE_NAME (type) && TYPE_IDENTIFIER (type))
5369             return lookup_name (TYPE_IDENTIFIER (type), 1);
5370           return NULL_TREE;
5371         default:
5372           my_friendly_abort (12);
5373         }
5374     }
5375   return NULL_TREE;
5376 }
5377
5378 /* Look up NAME in the NAMESPACE.  */
5379
5380 tree
5381 lookup_namespace_name (namespace, name)
5382      tree namespace, name;
5383 {
5384   struct tree_binding _b;
5385   tree val;
5386
5387   my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
5388
5389   if (TREE_CODE (name) == NAMESPACE_DECL)
5390     /* This happens for A::B<int> when B is a namespace. */
5391     return name;
5392   else if (TREE_CODE (name) == TEMPLATE_DECL)
5393     {
5394       /* This happens for A::B where B is a template, and there are no
5395          template arguments.  */
5396       cp_error ("invalid use of `%D'", name);
5397       return error_mark_node;
5398     }
5399
5400   namespace = ORIGINAL_NAMESPACE (namespace);
5401
5402   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
5403   
5404   val = binding_init (&_b);
5405   if (!qualified_lookup_using_namespace (name, namespace, val, 0))
5406     return error_mark_node;
5407
5408   if (BINDING_VALUE (val))
5409     {
5410       val = BINDING_VALUE (val);
5411
5412       /* If we have a single function from a using decl, pull it out.  */
5413       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5414         val = OVL_FUNCTION (val);
5415       return val;
5416     }
5417
5418   cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
5419   return error_mark_node;
5420 }
5421
5422 /* Hash a TYPENAME_TYPE.  K is really of type `tree'.  */
5423
5424 static unsigned long
5425 typename_hash (k)
5426      hash_table_key k;
5427 {
5428   unsigned long hash;
5429   tree t;
5430
5431   t = (tree) k;
5432   hash = (((unsigned long) TYPE_CONTEXT (t))
5433           ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5434
5435   return hash;
5436 }
5437
5438 /* Compare two TYPENAME_TYPEs.  K1 and K2 are really of type `tree'.  */
5439
5440 static boolean
5441 typename_compare (k1, k2)
5442      hash_table_key k1;
5443      hash_table_key k2;
5444 {
5445   tree t1;
5446   tree t2;
5447   tree d1;
5448   tree d2;
5449
5450   t1 = (tree) k1;
5451   t2 = (tree) k2;
5452   d1 = TYPE_NAME (t1);
5453   d2 = TYPE_NAME (t2);
5454   
5455   return (DECL_NAME (d1) == DECL_NAME (d2)
5456           && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
5457           && ((TREE_TYPE (t1) != NULL_TREE) 
5458               == (TREE_TYPE (t2) != NULL_TREE))
5459           && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5460           && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5461 }
5462
5463 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
5464    the type of `T', NAME is the IDENTIFIER_NODE for `t'.  If BASE_TYPE
5465    is non-NULL, this type is being created by the implicit typename
5466    extension, and BASE_TYPE is a type named `t' in some base class of
5467    `T' which depends on template parameters.  
5468
5469    Returns the new TYPENAME_TYPE.  */
5470
5471 tree
5472 build_typename_type (context, name, fullname, base_type)
5473      tree context;
5474      tree name;
5475      tree fullname;
5476      tree base_type;
5477 {
5478   tree t;
5479   tree d;
5480   struct hash_entry* e;
5481
5482   static struct hash_table ht;
5483
5484   push_obstacks (&permanent_obstack, &permanent_obstack);
5485
5486   if (!ht.table
5487       && !hash_table_init (&ht, &hash_newfunc, &typename_hash, 
5488                            &typename_compare))
5489     fatal ("virtual memory exhausted");
5490
5491   /* The FULLNAME needs to exist for the life of the hash table, i.e.,
5492      for the entire compilation.  */
5493   if (!TREE_PERMANENT (fullname))
5494     fullname = copy_to_permanent (fullname);
5495
5496   /* Build the TYPENAME_TYPE.  */
5497   t = make_lang_type (TYPENAME_TYPE);
5498   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5499   TYPENAME_TYPE_FULLNAME (t) = fullname;
5500   TREE_TYPE (t) = base_type;
5501
5502   /* Build the corresponding TYPE_DECL.  */
5503   d = build_decl (TYPE_DECL, name, t);
5504   TYPE_NAME (TREE_TYPE (d)) = d;
5505   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5506   DECL_CONTEXT (d) = FROB_CONTEXT (context);
5507   DECL_ARTIFICIAL (d) = 1;
5508
5509   /* See if we already have this type.  */
5510   e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5511   if (e)
5512     {
5513       /* This will free not only TREE_TYPE, but the lang-specific data
5514          and the TYPE_DECL as well.  */
5515       obstack_free (&permanent_obstack, t);
5516       t = (tree) e->key;
5517     }
5518   else
5519     /* Insert the type into the table.  */
5520     hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5521
5522   pop_obstacks ();
5523
5524   return t;
5525 }
5526
5527 tree
5528 make_typename_type (context, name)
5529      tree context, name;
5530 {
5531   tree t;
5532   tree fullname;
5533
5534   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
5535     {
5536       if (!(TYPE_LANG_SPECIFIC (name) 
5537             && (CLASSTYPE_IS_TEMPLATE (name) 
5538                 || CLASSTYPE_USE_TEMPLATE (name))))
5539         name = TYPE_IDENTIFIER (name);
5540       else
5541         /* Create a TEMPLATE_ID_EXPR for the type.  */
5542         name = build_nt (TEMPLATE_ID_EXPR,
5543                          CLASSTYPE_TI_TEMPLATE (name),
5544                          CLASSTYPE_TI_ARGS (name));
5545     }
5546   else if (TREE_CODE (name) == TYPE_DECL)
5547     name = DECL_NAME (name);
5548
5549   fullname = name;
5550
5551   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5552     {
5553       name = TREE_OPERAND (name, 0);
5554       if (TREE_CODE (name) == TEMPLATE_DECL)
5555         name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5556     }
5557   if (TREE_CODE (name) != IDENTIFIER_NODE)
5558     my_friendly_abort (2000);
5559
5560   if (TREE_CODE (context) == NAMESPACE_DECL)
5561     {
5562       /* We can get here from typename_sub0 in the explicit_template_type
5563          expansion.  Just fail.  */
5564       cp_error ("no class template named `%#T' in `%#T'",
5565                 name, context);
5566       return error_mark_node;
5567     }
5568
5569   if (! uses_template_parms (context)
5570       || currently_open_class (context))
5571     {
5572       if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5573         {
5574           tree tmpl = NULL_TREE;
5575           if (IS_AGGR_TYPE (context))
5576             tmpl = lookup_field (context, name, 0, 0);
5577           if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5578             {
5579               cp_error ("no class template named `%#T' in `%#T'",
5580                         name, context);
5581               return error_mark_node;
5582             }
5583
5584           return lookup_template_class (tmpl, 
5585                                         TREE_OPERAND (fullname, 1),
5586                                         NULL_TREE, context, 
5587                                         /*entering_scope=*/0);
5588         }
5589       else
5590         {
5591           if (IS_AGGR_TYPE (context))
5592             t = lookup_field (context, name, 0, 1);
5593           else
5594             {
5595               cp_error ("no type named `%#T' in `%#T'", name, context);
5596               return error_mark_node;
5597             }
5598
5599           if (t)
5600             return TREE_TYPE (t);
5601         }
5602     }
5603
5604   /* If the CONTEXT is not a template type, then either the field is
5605      there now or its never going to be.  */
5606   if (!uses_template_parms (context) && !t)
5607     {
5608       cp_error ("no type named `%#T' in `%#T'", name, context);
5609       return error_mark_node;
5610     }
5611     
5612   
5613   return build_typename_type (context, name, fullname,  NULL_TREE);
5614 }
5615
5616 /* Select the right _DECL from multiple choices. */
5617
5618 static tree
5619 select_decl (binding, flags)
5620      tree binding;
5621      int flags;
5622 {
5623   tree val;
5624   val = BINDING_VALUE (binding);
5625   if (LOOKUP_NAMESPACES_ONLY (flags))
5626     {
5627       /* We are not interested in types. */
5628       if (val && TREE_CODE (val) == NAMESPACE_DECL)
5629         return val;
5630       return NULL_TREE;
5631     }
5632   
5633   /* If we could have a type and
5634      we have nothing or we need a type and have none.  */
5635   if (BINDING_TYPE (binding)
5636       && (!val || ((flags & LOOKUP_PREFER_TYPES)
5637                    && TREE_CODE (val) != TYPE_DECL)))
5638     val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5639   /* Don't return non-types if we really prefer types. */
5640   else if (val && LOOKUP_TYPES_ONLY (flags)  && TREE_CODE (val) != TYPE_DECL
5641            && (TREE_CODE (val) != TEMPLATE_DECL
5642                || !DECL_CLASS_TEMPLATE_P (val)))
5643     val = NULL_TREE;
5644
5645   return val;
5646 }
5647
5648 /* Unscoped lookup of a global, iterate over namespaces, considering
5649    using namespace statements. */
5650
5651 static tree
5652 unqualified_namespace_lookup (name, flags)
5653      tree name;
5654      int flags;
5655 {
5656   struct tree_binding _binding;
5657   tree b = binding_init (&_binding);
5658   tree initial = current_decl_namespace();
5659   tree scope = initial;
5660   tree siter;
5661   struct binding_level *level;
5662   tree val = NULL_TREE;
5663
5664   while (!val)
5665     {
5666       val = binding_for_name (name, scope);
5667
5668       /* Initialize binding for this context. */
5669       BINDING_VALUE (b) = BINDING_VALUE (val);
5670       BINDING_TYPE (b) = BINDING_TYPE (val);
5671
5672       /* Add all _DECLs seen through local using-directives. */
5673       for (level = current_binding_level; 
5674            !level->namespace_p;
5675            level = level->level_chain)
5676         if (!lookup_using_namespace (name, b, level->using_directives,
5677                                      scope, flags))
5678           /* Give up because of error. */
5679           return error_mark_node;
5680
5681       /* Add all _DECLs seen through global using-directives. */
5682       /* XXX local and global using lists should work equally. */
5683       siter = initial;
5684       while (1)
5685         {
5686           if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter), 
5687                                        scope, flags))
5688             /* Give up because of error. */
5689             return error_mark_node;
5690           if (siter == scope) break;
5691           siter = CP_DECL_CONTEXT (siter);
5692         }
5693
5694       val = select_decl (b, flags);
5695       if (scope == global_namespace)
5696         break;
5697       scope = CP_DECL_CONTEXT (scope);
5698     }
5699   return val;
5700 }
5701
5702 /* Combine prefer_type and namespaces_only into flags.  */
5703
5704 static int
5705 lookup_flags (prefer_type, namespaces_only)
5706   int prefer_type, namespaces_only;
5707 {
5708   if (namespaces_only)
5709     return LOOKUP_PREFER_NAMESPACES;
5710   if (prefer_type > 1)
5711     return LOOKUP_PREFER_TYPES;
5712   if (prefer_type > 0)
5713     return LOOKUP_PREFER_BOTH;
5714   return 0;
5715 }
5716
5717 /* Given a lookup that returned VAL, use FLAGS to decide if we want to
5718    ignore it or not.  Subroutine of lookup_name_real.  */
5719
5720 static tree
5721 qualify_lookup (val, flags)
5722      tree val;
5723      int flags;
5724 {
5725   if (val == NULL_TREE)
5726     return val;
5727   if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5728     return val;
5729   if ((flags & LOOKUP_PREFER_TYPES)
5730       && (TREE_CODE (val) == TYPE_DECL
5731           || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5732               && DECL_CLASS_TEMPLATE_P (val))))
5733     return val;
5734   if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
5735     return NULL_TREE;
5736   return val;
5737 }
5738
5739 /* Any other BINDING overrides an implicit TYPENAME.  Warn about
5740    that.  */
5741
5742 static void
5743 warn_about_implicit_typename_lookup (typename, binding)
5744      tree typename;
5745      tree binding;
5746 {
5747   tree subtype = TREE_TYPE (TREE_TYPE (typename));
5748   tree name = DECL_NAME (typename);
5749
5750   if (! (TREE_CODE (binding) == TEMPLATE_DECL
5751          && CLASSTYPE_TEMPLATE_INFO (subtype)
5752          && CLASSTYPE_TI_TEMPLATE (subtype) == binding)
5753       && ! (TREE_CODE (binding) == TYPE_DECL
5754             && same_type_p (TREE_TYPE (binding), subtype)))
5755     {
5756       cp_warning ("lookup of `%D' finds `%#D'", 
5757                   name, binding);
5758       cp_warning ("  instead of `%D' from dependent base class",
5759                   typename);
5760       cp_warning ("  (use `typename %T::%D' if that's what you meant)",
5761                   constructor_name (current_class_type), name);
5762     }
5763 }
5764
5765 /* Look up NAME in the current binding level and its superiors in the
5766    namespace of variables, functions and typedefs.  Return a ..._DECL
5767    node of some kind representing its definition if there is only one
5768    such declaration, or return a TREE_LIST with all the overloaded
5769    definitions if there are many, or return 0 if it is undefined.
5770
5771    If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5772    If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
5773    If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
5774    Otherwise we prefer non-TYPE_DECLs.  
5775
5776    If NONCLASS is non-zero, we don't look for the NAME in class scope,
5777    using IDENTIFIER_CLASS_VALUE.  */
5778
5779 static tree
5780 lookup_name_real (name, prefer_type, nonclass, namespaces_only)
5781      tree name;
5782      int prefer_type, nonclass, namespaces_only;
5783 {
5784   tree t;
5785   tree val = NULL_TREE;
5786   int yylex = 0;
5787   tree from_obj = NULL_TREE;
5788   int flags;
5789   int val_is_implicit_typename = 0;
5790
5791   /* Hack: copy flag set by parser, if set. */
5792   if (only_namespace_names)
5793     namespaces_only = 1;
5794
5795   if (prefer_type == -2)
5796     {
5797       extern int looking_for_typename;
5798       tree type = NULL_TREE;
5799
5800       yylex = 1;
5801       prefer_type = looking_for_typename;
5802
5803       flags = lookup_flags (prefer_type, namespaces_only);
5804       /* If the next thing is '<', class templates are types. */
5805       if (looking_for_template)
5806         flags |= LOOKUP_TEMPLATES_EXPECTED;
5807
5808       /* std:: becomes :: for now.  */
5809       if (got_scope == std_node)
5810         got_scope = void_type_node;
5811
5812       if (got_scope)
5813         type = got_scope;
5814       else if (got_object != error_mark_node)
5815         type = got_object;
5816       
5817       if (type)
5818         {
5819           if (type == error_mark_node)
5820             return error_mark_node;
5821           if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5822             type = TREE_TYPE (type);
5823
5824           if (TYPE_P (type))
5825             type = complete_type (type);
5826
5827           if (TREE_CODE (type) == VOID_TYPE)
5828             type = global_namespace;
5829           if (TREE_CODE (type) == NAMESPACE_DECL)
5830             {
5831               struct tree_binding b;
5832               val = binding_init (&b);
5833               flags |= LOOKUP_COMPLAIN;
5834               if (!qualified_lookup_using_namespace (name, type, val, flags))
5835                 return NULL_TREE;
5836               val = select_decl (val, flags);
5837             }
5838           else if (! IS_AGGR_TYPE (type)
5839                    || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5840                    || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
5841                    || TREE_CODE (type) == TYPENAME_TYPE)
5842             /* Someone else will give an error about this if needed.  */
5843             val = NULL_TREE;
5844           else if (type == current_class_type)
5845             val = IDENTIFIER_CLASS_VALUE (name);
5846           else
5847             val = lookup_member (type, name, 0, prefer_type);
5848         }
5849       else
5850         val = NULL_TREE;
5851
5852       if (got_scope)
5853         goto done;
5854       else if (got_object && val)
5855         from_obj = val;
5856     }
5857   else
5858     {
5859       flags = lookup_flags (prefer_type, namespaces_only);
5860       /* If we're not parsing, we need to complain. */
5861       flags |= LOOKUP_COMPLAIN;
5862     }
5863
5864   /* First, look in non-namespace scopes.  */
5865   for (t = IDENTIFIER_BINDING (name); t; t = TREE_CHAIN (t))
5866     {
5867       tree binding;
5868
5869       if (!LOCAL_BINDING_P (t) && nonclass)
5870         /* We're not looking for class-scoped bindings, so keep going.  */
5871         continue;
5872       
5873       /* If this is the kind of thing we're looking for, we're done.  */
5874       if (qualify_lookup (BINDING_VALUE (t), flags))
5875         binding = BINDING_VALUE (t);
5876       else if ((flags & LOOKUP_PREFER_TYPES) 
5877                && qualify_lookup (BINDING_TYPE (t), flags))
5878         binding = BINDING_TYPE (t);
5879       else
5880         binding = NULL_TREE;
5881
5882       if (binding
5883           && (!val || !(TREE_CODE (binding) == TYPE_DECL
5884                         && IMPLICIT_TYPENAME_P (TREE_TYPE (binding)))))
5885         {
5886           if (val_is_implicit_typename && !yylex)
5887             warn_about_implicit_typename_lookup (val, binding);
5888           val = binding;
5889           val_is_implicit_typename 
5890             = (TREE_CODE (val) == TYPE_DECL
5891                && IMPLICIT_TYPENAME_P (TREE_TYPE (val)));
5892           if (!val_is_implicit_typename)
5893             break;
5894         }
5895     }
5896
5897   /* Now lookup in namespace scopes.  */
5898   if (!val || val_is_implicit_typename)
5899     {
5900       t = unqualified_namespace_lookup (name, flags);
5901       if (t)
5902         {
5903           if (val_is_implicit_typename && !yylex)
5904             warn_about_implicit_typename_lookup (val, t);
5905           val = t;
5906         }
5907     }
5908
5909  done:
5910   if (val)
5911     {
5912       /* This should only warn about types used in qualified-ids.  */
5913       if (from_obj && from_obj != val)
5914         {
5915           if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
5916               && TREE_CODE (val) == TYPE_DECL
5917               && TREE_TYPE (from_obj) != TREE_TYPE (val))
5918             {
5919               cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
5920                           name, got_object, TREE_TYPE (from_obj));
5921               cp_pedwarn ("  does not match lookup in the current scope (`%#T')",
5922                           TREE_TYPE (val));
5923             }
5924
5925           /* We don't change val to from_obj if got_object depends on
5926              template parms because that breaks implicit typename for
5927              destructor calls.  */
5928           if (! uses_template_parms (got_object))
5929             val = from_obj;
5930         }
5931
5932       /* If we have a single function from a using decl, pull it out.  */
5933       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5934         val = OVL_FUNCTION (val);
5935     }
5936   else if (from_obj)
5937     val = from_obj;
5938
5939   return val;
5940 }
5941
5942 tree
5943 lookup_name_nonclass (name)
5944      tree name;
5945 {
5946   return lookup_name_real (name, 0, 1, 0);
5947 }
5948
5949 tree
5950 lookup_function_nonclass (name, args)
5951      tree name;
5952      tree args;
5953 {
5954   return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
5955 }
5956
5957 tree
5958 lookup_name_namespace_only (name)
5959      tree name;
5960 {
5961   /* type-or-namespace, nonclass, namespace_only */
5962   return lookup_name_real (name, 1, 1, 1);
5963 }
5964
5965 tree
5966 lookup_name (name, prefer_type)
5967      tree name;
5968      int prefer_type;
5969 {
5970   return lookup_name_real (name, prefer_type, 0, 0);
5971 }
5972
5973 /* Similar to `lookup_name' but look only in the innermost non-class
5974    binding level.  */
5975
5976 tree
5977 lookup_name_current_level (name)
5978      tree name;
5979 {
5980   struct binding_level *b;
5981   tree t = NULL_TREE;
5982
5983   b = current_binding_level;
5984   while (b->parm_flag == 2)
5985     b = b->level_chain;
5986
5987   if (b->namespace_p)
5988     {
5989       t =  IDENTIFIER_NAMESPACE_VALUE (name);
5990
5991       /* extern "C" function() */
5992       if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
5993         t = TREE_VALUE (t);
5994     }
5995   else if (IDENTIFIER_BINDING (name) 
5996            && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
5997     {
5998       while (1)
5999         {
6000           if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
6001             return IDENTIFIER_VALUE (name);
6002           
6003           if (b->keep == 2)
6004             b = b->level_chain;
6005           else
6006             break;
6007         }
6008     }
6009
6010   return t;
6011 }
6012
6013 /* Like lookup_name_current_level, but for types.  */
6014
6015 tree
6016 lookup_type_current_level (name)
6017      tree name;
6018 {
6019   register tree t = NULL_TREE;
6020
6021   my_friendly_assert (! current_binding_level->namespace_p, 980716);
6022
6023   if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
6024       && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
6025     {
6026       struct binding_level *b = current_binding_level;
6027       while (1)
6028         {
6029           if (purpose_member (name, b->type_shadowed))
6030             return REAL_IDENTIFIER_TYPE_VALUE (name);
6031           if (b->keep == 2)
6032             b = b->level_chain;
6033           else
6034             break;
6035         }
6036     }
6037
6038   return t;
6039 }
6040
6041 void
6042 begin_only_namespace_names ()
6043 {
6044   only_namespace_names = 1;
6045 }
6046
6047 void
6048 end_only_namespace_names ()
6049 {
6050   only_namespace_names = 0;
6051 }
6052 \f
6053 /* Arrange for the user to get a source line number, even when the
6054    compiler is going down in flames, so that she at least has a
6055    chance of working around problems in the compiler.  We used to
6056    call error(), but that let the segmentation fault continue
6057    through; now, it's much more passive by asking them to send the
6058    maintainers mail about the problem.  */
6059
6060 static void
6061 signal_catch (sig)
6062      int sig ATTRIBUTE_UNUSED;
6063 {
6064   signal (SIGSEGV, SIG_DFL);
6065 #ifdef SIGIOT
6066   signal (SIGIOT, SIG_DFL);
6067 #endif
6068 #ifdef SIGILL
6069   signal (SIGILL, SIG_DFL);
6070 #endif
6071 #ifdef SIGABRT
6072   signal (SIGABRT, SIG_DFL);
6073 #endif
6074 #ifdef SIGBUS
6075   signal (SIGBUS, SIG_DFL);
6076 #endif
6077   my_friendly_abort (0);
6078 }
6079
6080 #if 0
6081 /* Unused -- brendan 970107 */
6082 /* Array for holding types considered "built-in".  These types
6083    are output in the module in which `main' is defined.  */
6084 static tree *builtin_type_tdescs_arr;
6085 static int builtin_type_tdescs_len, builtin_type_tdescs_max;
6086 #endif
6087
6088 /* Push the declarations of builtin types into the namespace.
6089    RID_INDEX, if < RID_MAX is the index of the builtin type
6090    in the array RID_POINTERS.  NAME is the name used when looking
6091    up the builtin type.  TYPE is the _TYPE node for the builtin type.  */
6092
6093 static void
6094 record_builtin_type (rid_index, name, type)
6095      enum rid rid_index;
6096      const char *name;
6097      tree type;
6098 {
6099   tree rname = NULL_TREE, tname = NULL_TREE;
6100   tree tdecl = NULL_TREE;
6101
6102   if ((int) rid_index < (int) RID_MAX)
6103     rname = ridpointers[(int) rid_index];
6104   if (name)
6105     tname = get_identifier (name);
6106
6107   TYPE_BUILT_IN (type) = 1;
6108   
6109   if (tname)
6110     {
6111       tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
6112       set_identifier_type_value (tname, NULL_TREE);
6113       if ((int) rid_index < (int) RID_MAX)
6114         /* Built-in types live in the global namespace. */
6115         SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
6116     }
6117   if (rname != NULL_TREE)
6118     {
6119       if (tname != NULL_TREE)
6120         {
6121           set_identifier_type_value (rname, NULL_TREE);
6122           SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
6123         }
6124       else
6125         {
6126           tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
6127           set_identifier_type_value (rname, NULL_TREE);
6128         }
6129     }
6130 }
6131
6132 /* Record one of the standard Java types.
6133  * Declare it as having the given NAME.
6134  * If SIZE > 0, it is the size of one of the integral types;
6135  * otherwise it is the negative of the size of one of the other types.  */
6136
6137 static tree
6138 record_builtin_java_type (name, size)
6139      const char *name;
6140      int size;
6141 {
6142   tree type, decl;
6143   if (size > 0)
6144     type = make_signed_type (size);
6145   else if (size > -32)
6146     { /* "__java_char" or ""__java_boolean". */
6147       type = make_unsigned_type (-size);
6148       /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
6149     }
6150   else
6151     { /* "__java_float" or ""__java_double". */
6152       type = make_node (REAL_TYPE);
6153       TYPE_PRECISION (type) = - size;
6154       layout_type (type);
6155     }
6156   record_builtin_type (RID_MAX, name, type);
6157   decl = TYPE_NAME (type);
6158
6159   /* Suppress generate debug symbol entries for these types,
6160      since for normal C++ they are just clutter.
6161      However, push_lang_context undoes this if extern "Java" is seen. */
6162   DECL_IGNORED_P (decl) = 1;
6163
6164   TYPE_FOR_JAVA (type) = 1;
6165   return type;
6166 }
6167
6168 /* Push a type into the namespace so that the back-ends ignore it. */
6169
6170 static void
6171 record_unknown_type (type, name)
6172      tree type;
6173      const char *name;
6174 {
6175   tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
6176   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
6177   DECL_IGNORED_P (decl) = 1;
6178   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6179   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
6180   TYPE_ALIGN (type) = 1;
6181   TYPE_MODE (type) = TYPE_MODE (void_type_node);
6182
6183
6184 /* Push overloaded decl, in global scope, with one argument so it
6185    can be used as a callback from define_function.  */
6186
6187 static void
6188 push_overloaded_decl_1 (x)
6189      tree x;
6190 {
6191   push_overloaded_decl (x, PUSH_GLOBAL);
6192 }
6193
6194 #ifdef __GNUC__
6195 __inline
6196 #endif
6197 tree
6198 auto_function (name, type, code)
6199      tree name, type;
6200      enum built_in_function code;
6201 {
6202   return define_function
6203     (IDENTIFIER_POINTER (name), type, code, push_overloaded_decl_1,
6204      IDENTIFIER_POINTER (build_decl_overload (name, TYPE_ARG_TYPES (type),
6205                                               0)));
6206 }
6207
6208 /* Create the predefined scalar types of C,
6209    and some nodes representing standard constants (0, 1, (void *)0).
6210    Initialize the global binding level.
6211    Make definitions for built-in primitive functions.  */
6212
6213 void
6214 init_decl_processing ()
6215 {
6216   register tree endlink, int_endlink, double_endlink, unsigned_endlink;
6217   tree fields[20];
6218   /* Data type of memcpy.  */
6219   tree memcpy_ftype, strlen_ftype;
6220   int wchar_type_size;
6221   tree temp;
6222   tree array_domain_type;
6223   tree vb_off_identifier = NULL_TREE;
6224   /* Function type `char *(char *, char *)' and similar ones */
6225   tree string_ftype_ptr_ptr, int_ftype_string_string;
6226   tree sizetype_endlink;
6227   tree ptr_ftype, ptr_ftype_unsigned, ptr_ftype_sizetype;
6228   tree void_ftype, void_ftype_int, void_ftype_ptr;
6229
6230   /* Have to make these distinct before we try using them.  */
6231   lang_name_cplusplus = get_identifier ("C++");
6232   lang_name_c = get_identifier ("C");
6233   lang_name_java = get_identifier ("Java");
6234
6235   /* Enter the global namespace. */
6236   my_friendly_assert (global_namespace == NULL_TREE, 375);
6237   my_friendly_assert (current_lang_name == NULL_TREE, 375);
6238   current_lang_name = lang_name_cplusplus;
6239   push_namespace (get_identifier ("::"));
6240   global_namespace = current_namespace;
6241   current_lang_name = NULL_TREE;
6242
6243   if (flag_strict_prototype == 2)
6244     flag_strict_prototype = pedantic;
6245   if (! flag_permissive && ! pedantic)
6246     flag_pedantic_errors = 1;
6247
6248   strict_prototypes_lang_c = flag_strict_prototype;
6249
6250   /* Initially, C.  */
6251   current_lang_name = lang_name_c;
6252
6253   current_function_decl = NULL_TREE;
6254   named_labels = NULL_TREE;
6255   named_label_uses = NULL;
6256   current_binding_level = NULL_BINDING_LEVEL;
6257   free_binding_level = NULL_BINDING_LEVEL;
6258
6259   /* Because most segmentation signals can be traced back into user
6260      code, catch them and at least give the user a chance of working
6261      around compiler bugs.  */
6262   signal (SIGSEGV, signal_catch);
6263
6264   /* We will also catch aborts in the back-end through signal_catch and
6265      give the user a chance to see where the error might be, and to defeat
6266      aborts in the back-end when there have been errors previously in their
6267      code.  */
6268 #ifdef SIGIOT
6269   signal (SIGIOT, signal_catch);
6270 #endif
6271 #ifdef SIGILL
6272   signal (SIGILL, signal_catch);
6273 #endif
6274 #ifdef SIGABRT
6275   signal (SIGABRT, signal_catch);
6276 #endif
6277 #ifdef SIGBUS
6278   signal (SIGBUS, signal_catch);
6279 #endif
6280
6281   gcc_obstack_init (&decl_obstack);
6282
6283   /* Must lay these out before anything else gets laid out.  */
6284   error_mark_node = make_node (ERROR_MARK);
6285   TREE_PERMANENT (error_mark_node) = 1;
6286   TREE_TYPE (error_mark_node) = error_mark_node;
6287   error_mark_list = build_tree_list (error_mark_node, error_mark_node);
6288   TREE_TYPE (error_mark_list) = error_mark_node;
6289
6290   /* Make the binding_level structure for global names.  */
6291   pushlevel (0);
6292   global_binding_level = current_binding_level;
6293   /* The global level is the namespace level of ::.  */
6294   NAMESPACE_LEVEL (global_namespace) = global_binding_level;
6295   declare_namespace_level ();
6296
6297   this_identifier = get_identifier (THIS_NAME);
6298   in_charge_identifier = get_identifier (IN_CHARGE_NAME);
6299   vlist_identifier = get_identifier (VLIST_NAME);
6300   ctor_identifier = get_identifier (CTOR_NAME);
6301   dtor_identifier = get_identifier (DTOR_NAME);
6302   pfn_identifier = get_identifier (VTABLE_PFN_NAME);
6303   index_identifier = get_identifier (VTABLE_INDEX_NAME);
6304   delta_identifier = get_identifier (VTABLE_DELTA_NAME);
6305   delta2_identifier = get_identifier (VTABLE_DELTA2_NAME);
6306   pfn_or_delta2_identifier = get_identifier ("__pfn_or_delta2");
6307   if (flag_handle_signatures)
6308     {
6309       tag_identifier = get_identifier (SIGTABLE_TAG_NAME);
6310       vb_off_identifier = get_identifier (SIGTABLE_VB_OFF_NAME);
6311       vt_off_identifier = get_identifier (SIGTABLE_VT_OFF_NAME);
6312     }
6313
6314   /* Define `int' and `char' first so that dbx will output them first.  */
6315
6316   integer_type_node = make_signed_type (INT_TYPE_SIZE);
6317   record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
6318
6319   /* Define `char', which is like either `signed char' or `unsigned char'
6320      but not the same as either.  */
6321
6322   char_type_node
6323     = (flag_signed_char
6324        ? make_signed_type (CHAR_TYPE_SIZE)
6325        : make_unsigned_type (CHAR_TYPE_SIZE));
6326   record_builtin_type (RID_CHAR, "char", char_type_node);
6327
6328   /* `signed' is the same as `int' */
6329   record_builtin_type (RID_SIGNED, NULL_PTR, integer_type_node);
6330   
6331   long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
6332   record_builtin_type (RID_LONG, "long int", long_integer_type_node);
6333
6334   unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
6335   record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
6336
6337   long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
6338   record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
6339   record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
6340
6341   long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
6342   record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
6343
6344   long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
6345   record_builtin_type (RID_MAX, "long long unsigned int",
6346                        long_long_unsigned_type_node);
6347   record_builtin_type (RID_MAX, "long long unsigned",
6348                        long_long_unsigned_type_node);
6349
6350   short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
6351   record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
6352   short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
6353   record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
6354   record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
6355
6356   /* `unsigned long' is the standard type for sizeof.
6357      Note that stddef.h uses `unsigned long',
6358      and this must agree, even if long and int are the same size.  */
6359   set_sizetype
6360     (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
6361
6362   ptrdiff_type_node
6363     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
6364
6365   /* Define both `signed char' and `unsigned char'.  */
6366   signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
6367   record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
6368   unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
6369   record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
6370
6371   /* These are types that type_for_size and type_for_mode use.  */
6372   intQI_type_node = make_signed_type (GET_MODE_BITSIZE (QImode));
6373   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
6374   intHI_type_node = make_signed_type (GET_MODE_BITSIZE (HImode));
6375   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
6376   intSI_type_node = make_signed_type (GET_MODE_BITSIZE (SImode));
6377   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
6378   intDI_type_node = make_signed_type (GET_MODE_BITSIZE (DImode));
6379   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
6380 #if HOST_BITS_PER_WIDE_INT >= 64
6381   intTI_type_node = make_signed_type (GET_MODE_BITSIZE (TImode));
6382   pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
6383 #endif
6384   unsigned_intQI_type_node = make_unsigned_type (GET_MODE_BITSIZE (QImode));
6385   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
6386   unsigned_intHI_type_node = make_unsigned_type (GET_MODE_BITSIZE (HImode));
6387   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
6388   unsigned_intSI_type_node = make_unsigned_type (GET_MODE_BITSIZE (SImode));
6389   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
6390   unsigned_intDI_type_node = make_unsigned_type (GET_MODE_BITSIZE (DImode));
6391   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
6392 #if HOST_BITS_PER_WIDE_INT >= 64
6393   unsigned_intTI_type_node = make_unsigned_type (GET_MODE_BITSIZE (TImode));
6394   pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
6395 #endif
6396
6397   float_type_node = make_node (REAL_TYPE);
6398   TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
6399   record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
6400   layout_type (float_type_node);
6401
6402   double_type_node = make_node (REAL_TYPE);
6403   if (flag_short_double)
6404     TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
6405   else
6406     TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
6407   record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
6408   layout_type (double_type_node);
6409
6410   long_double_type_node = make_node (REAL_TYPE);
6411   TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
6412   record_builtin_type (RID_MAX, "long double", long_double_type_node);
6413   layout_type (long_double_type_node);
6414
6415   complex_integer_type_node = make_node (COMPLEX_TYPE);
6416   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
6417                         complex_integer_type_node));
6418   TREE_TYPE (complex_integer_type_node) = integer_type_node;
6419   layout_type (complex_integer_type_node);
6420
6421   complex_float_type_node = make_node (COMPLEX_TYPE);
6422   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
6423                         complex_float_type_node));
6424   TREE_TYPE (complex_float_type_node) = float_type_node;
6425   layout_type (complex_float_type_node);
6426
6427   complex_double_type_node = make_node (COMPLEX_TYPE);
6428   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
6429                         complex_double_type_node));
6430   TREE_TYPE (complex_double_type_node) = double_type_node;
6431   layout_type (complex_double_type_node);
6432
6433   complex_long_double_type_node = make_node (COMPLEX_TYPE);
6434   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
6435                         complex_long_double_type_node));
6436   TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
6437   layout_type (complex_long_double_type_node);
6438
6439   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6440   java_short_type_node = record_builtin_java_type ("__java_short", 16);
6441   java_int_type_node = record_builtin_java_type ("__java_int", 32);
6442   java_long_type_node = record_builtin_java_type ("__java_long", 64);
6443   java_float_type_node = record_builtin_java_type ("__java_float", -32);
6444   java_double_type_node = record_builtin_java_type ("__java_double", -64);
6445   java_char_type_node = record_builtin_java_type ("__java_char", -16);
6446   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
6447
6448   integer_zero_node = build_int_2 (0, 0);
6449   TREE_TYPE (integer_zero_node) = integer_type_node;
6450   integer_one_node = build_int_2 (1, 0);
6451   TREE_TYPE (integer_one_node) = integer_type_node;
6452   integer_two_node = build_int_2 (2, 0);
6453   TREE_TYPE (integer_two_node) = integer_type_node;
6454   integer_three_node = build_int_2 (3, 0);
6455   TREE_TYPE (integer_three_node) = integer_type_node;
6456
6457   boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6458   TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
6459   TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6460   TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6461   TYPE_PRECISION (boolean_type_node) = 1;
6462   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6463   boolean_false_node = build_int_2 (0, 0);
6464   TREE_TYPE (boolean_false_node) = boolean_type_node;
6465   boolean_true_node = build_int_2 (1, 0);
6466   TREE_TYPE (boolean_true_node) = boolean_type_node;
6467
6468   /* These are needed by stor-layout.c.  */
6469   size_zero_node = size_int (0);
6470   size_one_node = size_int (1);
6471
6472   signed_size_zero_node = build_int_2 (0, 0);
6473   TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6474
6475   void_type_node = make_node (VOID_TYPE);
6476   record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
6477   layout_type (void_type_node); /* Uses integer_zero_node.  */
6478   void_list_node = build_tree_list (NULL_TREE, void_type_node);
6479   TREE_PARMLIST (void_list_node) = 1;
6480
6481   null_pointer_node = build_int_2 (0, 0);
6482   TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
6483   layout_type (TREE_TYPE (null_pointer_node));
6484      
6485   /* Used for expressions that do nothing, but are not errors.  */
6486   void_zero_node = build_int_2 (0, 0);
6487   TREE_TYPE (void_zero_node) = void_type_node;
6488
6489   string_type_node = build_pointer_type (char_type_node);
6490   const_string_type_node
6491     = build_pointer_type (build_qualified_type (char_type_node, 
6492                                                 TYPE_QUAL_CONST));
6493 #if 0
6494   record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6495 #endif
6496
6497   /* Make a type to be the domain of a few array types
6498      whose domains don't really matter.
6499      200 is small enough that it always fits in size_t
6500      and large enough that it can hold most function names for the
6501      initializations of __FUNCTION__ and __PRETTY_FUNCTION__.  */
6502   array_domain_type = build_index_type (build_int_2 (200, 0));
6503
6504   /* Make a type for arrays of characters.
6505      With luck nothing will ever really depend on the length of this
6506      array type.  */
6507   char_array_type_node
6508     = build_array_type (char_type_node, array_domain_type);
6509   /* Likewise for arrays of ints.  */
6510   int_array_type_node
6511     = build_array_type (integer_type_node, array_domain_type);
6512
6513   /* This is just some anonymous class type.  Nobody should ever
6514      need to look inside this envelope.  */
6515   class_star_type_node = build_pointer_type (make_lang_type (RECORD_TYPE));
6516
6517   default_function_type
6518     = build_function_type (integer_type_node, NULL_TREE);
6519
6520   ptr_type_node = build_pointer_type (void_type_node);
6521   const_ptr_type_node
6522     = build_pointer_type (build_qualified_type (void_type_node,
6523                                                 TYPE_QUAL_CONST)); 
6524 #if 0
6525   record_builtin_type (RID_MAX, NULL_PTR, ptr_type_node);
6526 #endif
6527
6528   endlink = void_list_node;
6529   int_endlink = tree_cons (NULL_TREE, integer_type_node, endlink);
6530   double_endlink = tree_cons (NULL_TREE, double_type_node, endlink);
6531   unsigned_endlink = tree_cons (NULL_TREE, unsigned_type_node, endlink);
6532
6533   ptr_ftype = build_function_type (ptr_type_node, NULL_TREE);
6534   ptr_ftype_unsigned = build_function_type (ptr_type_node, unsigned_endlink);
6535   sizetype_endlink = tree_cons (NULL_TREE, sizetype, endlink);
6536   /* We realloc here because sizetype could be int or unsigned.  S'ok.  */
6537   ptr_ftype_sizetype = build_function_type (ptr_type_node, sizetype_endlink);
6538
6539   void_ftype = build_function_type (void_type_node, endlink);
6540   void_ftype_int = build_function_type (void_type_node, int_endlink);
6541   void_ftype_ptr
6542     = build_function_type (void_type_node,
6543                            tree_cons (NULL_TREE, ptr_type_node, endlink));
6544   void_ftype_ptr
6545     = build_exception_variant (void_ftype_ptr,
6546                                tree_cons (NULL_TREE, NULL_TREE, NULL_TREE));
6547
6548   float_ftype_float
6549     = build_function_type (float_type_node,
6550                            tree_cons (NULL_TREE, float_type_node, endlink));
6551
6552   double_ftype_double
6553     = build_function_type (double_type_node, double_endlink);
6554
6555   ldouble_ftype_ldouble
6556     = build_function_type (long_double_type_node,
6557                            tree_cons (NULL_TREE, long_double_type_node,
6558                                       endlink));
6559
6560   double_ftype_double_double
6561     = build_function_type (double_type_node,
6562                            tree_cons (NULL_TREE, double_type_node,
6563                                       double_endlink));
6564
6565   int_ftype_int
6566     = build_function_type (integer_type_node, int_endlink);
6567
6568   long_ftype_long
6569     = build_function_type (long_integer_type_node,
6570                            tree_cons (NULL_TREE, long_integer_type_node,
6571                                       endlink));
6572
6573   int_ftype_cptr_cptr_sizet
6574     = build_function_type (integer_type_node,
6575                            tree_cons (NULL_TREE, const_ptr_type_node,
6576                                       tree_cons (NULL_TREE, const_ptr_type_node,
6577                                                  tree_cons (NULL_TREE,
6578                                                             sizetype,
6579                                                             endlink))));
6580
6581   string_ftype_ptr_ptr          /* strcpy prototype */
6582     = build_function_type (string_type_node,
6583                            tree_cons (NULL_TREE, string_type_node,
6584                                       tree_cons (NULL_TREE,
6585                                                  const_string_type_node,
6586                                                  endlink)));
6587
6588   int_ftype_string_string       /* strcmp prototype */
6589     = build_function_type (integer_type_node,
6590                            tree_cons (NULL_TREE, const_string_type_node,
6591                                       tree_cons (NULL_TREE,
6592                                                  const_string_type_node,
6593                                                  endlink)));
6594
6595   strlen_ftype          /* strlen prototype */
6596     = build_function_type (sizetype,
6597                            tree_cons (NULL_TREE, const_string_type_node,
6598                                       endlink));
6599
6600   memcpy_ftype  /* memcpy prototype */
6601     = build_function_type (ptr_type_node,
6602                            tree_cons (NULL_TREE, ptr_type_node,
6603                                       tree_cons (NULL_TREE, const_ptr_type_node,
6604                                                  sizetype_endlink)));
6605
6606   if (flag_huge_objects)
6607     delta_type_node = long_integer_type_node;
6608   else
6609     delta_type_node = short_integer_type_node;
6610
6611   builtin_function ("__builtin_constant_p", default_function_type,
6612                     BUILT_IN_CONSTANT_P, NULL_PTR);
6613
6614   builtin_return_address_fndecl
6615     = builtin_function ("__builtin_return_address", ptr_ftype_unsigned,
6616                         BUILT_IN_RETURN_ADDRESS, NULL_PTR);
6617
6618   builtin_function ("__builtin_frame_address", ptr_ftype_unsigned,
6619                     BUILT_IN_FRAME_ADDRESS, NULL_PTR);
6620
6621   builtin_function ("__builtin_alloca", ptr_ftype_sizetype,
6622                     BUILT_IN_ALLOCA, "alloca");
6623   builtin_function ("__builtin_ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
6624   /* Define alloca, ffs as builtins.
6625      Declare _exit just to mark it as volatile.  */
6626   if (! flag_no_builtin && !flag_no_nonansi_builtin)
6627     {
6628       temp = builtin_function ("alloca", ptr_ftype_sizetype,
6629                                BUILT_IN_ALLOCA, NULL_PTR);
6630       /* Suppress error if redefined as a non-function.  */
6631       DECL_BUILT_IN_NONANSI (temp) = 1;
6632       temp = builtin_function ("ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
6633       /* Suppress error if redefined as a non-function.  */
6634       DECL_BUILT_IN_NONANSI (temp) = 1;
6635       temp = builtin_function ("_exit", void_ftype_int,
6636                                NOT_BUILT_IN, NULL_PTR);
6637       TREE_THIS_VOLATILE (temp) = 1;
6638       TREE_SIDE_EFFECTS (temp) = 1;
6639       /* Suppress error if redefined as a non-function.  */
6640       DECL_BUILT_IN_NONANSI (temp) = 1;
6641     }
6642
6643   builtin_function ("__builtin_abs", int_ftype_int, BUILT_IN_ABS, NULL_PTR);
6644   builtin_function ("__builtin_fabsf", float_ftype_float, BUILT_IN_FABS,
6645                     NULL_PTR);
6646   builtin_function ("__builtin_fabs", double_ftype_double, BUILT_IN_FABS,
6647                     NULL_PTR);
6648   builtin_function ("__builtin_fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
6649                     NULL_PTR);
6650   builtin_function ("__builtin_labs", long_ftype_long,
6651                     BUILT_IN_LABS, NULL_PTR);
6652   builtin_function ("__builtin_saveregs", ptr_ftype,
6653                     BUILT_IN_SAVEREGS, NULL_PTR);
6654   builtin_function ("__builtin_classify_type", default_function_type,
6655                     BUILT_IN_CLASSIFY_TYPE, NULL_PTR);
6656   builtin_function ("__builtin_next_arg", ptr_ftype,
6657                     BUILT_IN_NEXT_ARG, NULL_PTR);
6658   builtin_function ("__builtin_args_info", int_ftype_int,
6659                     BUILT_IN_ARGS_INFO, NULL_PTR);
6660   builtin_function ("__builtin_setjmp",
6661                     build_function_type (integer_type_node,
6662                                          tree_cons (NULL_TREE, ptr_type_node,
6663                                                     endlink)),
6664                     BUILT_IN_SETJMP, NULL_PTR);
6665   builtin_function ("__builtin_longjmp",
6666                     build_function_type (integer_type_node,
6667                                          tree_cons (NULL_TREE, ptr_type_node,
6668                                                     tree_cons (NULL_TREE,
6669                                                                integer_type_node,
6670                                                                endlink))),
6671                     BUILT_IN_LONGJMP, NULL_PTR);
6672
6673   /* Untyped call and return.  */
6674   builtin_function ("__builtin_apply_args", ptr_ftype,
6675                     BUILT_IN_APPLY_ARGS, NULL_PTR);
6676
6677   temp = tree_cons (NULL_TREE,
6678                     build_pointer_type (build_function_type (void_type_node,
6679                                                              NULL_TREE)),
6680                     tree_cons (NULL_TREE, ptr_ftype_sizetype, NULL_TREE));
6681   builtin_function ("__builtin_apply",
6682                     build_function_type (ptr_type_node, temp),
6683                     BUILT_IN_APPLY, NULL_PTR);
6684   builtin_function ("__builtin_return", void_ftype_ptr,
6685                     BUILT_IN_RETURN, NULL_PTR);
6686
6687   /* Currently under experimentation.  */
6688   builtin_function ("__builtin_memcpy", memcpy_ftype,
6689                     BUILT_IN_MEMCPY, "memcpy");
6690   builtin_function ("__builtin_memcmp", int_ftype_cptr_cptr_sizet,
6691                     BUILT_IN_MEMCMP, "memcmp");
6692   builtin_function ("__builtin_strcmp", int_ftype_string_string,
6693                     BUILT_IN_STRCMP, "strcmp");
6694   builtin_function ("__builtin_strcpy", string_ftype_ptr_ptr,
6695                     BUILT_IN_STRCPY, "strcpy");
6696   builtin_function ("__builtin_strlen", strlen_ftype,
6697                     BUILT_IN_STRLEN, "strlen");
6698   builtin_function ("__builtin_sqrtf", float_ftype_float, 
6699                     BUILT_IN_FSQRT, "sqrtf");
6700   builtin_function ("__builtin_fsqrt", double_ftype_double,
6701                     BUILT_IN_FSQRT, NULL_PTR);
6702   builtin_function ("__builtin_sqrtl", ldouble_ftype_ldouble, 
6703                     BUILT_IN_FSQRT, "sqrtl");
6704   builtin_function ("__builtin_sinf", float_ftype_float, 
6705                     BUILT_IN_SIN, "sinf");
6706   builtin_function ("__builtin_sin", double_ftype_double, 
6707                     BUILT_IN_SIN, "sin");
6708   builtin_function ("__builtin_sinl", ldouble_ftype_ldouble, 
6709                     BUILT_IN_SIN, "sinl");
6710   builtin_function ("__builtin_cosf", float_ftype_float, 
6711                     BUILT_IN_COS, "cosf");
6712   builtin_function ("__builtin_cos", double_ftype_double, 
6713                     BUILT_IN_COS, "cos");
6714   builtin_function ("__builtin_cosl", ldouble_ftype_ldouble, 
6715                     BUILT_IN_COS, "cosl");
6716
6717   if (!flag_no_builtin)
6718     {
6719       builtin_function ("abs", int_ftype_int, BUILT_IN_ABS, NULL_PTR);
6720       builtin_function ("fabs", double_ftype_double, BUILT_IN_FABS, NULL_PTR);
6721       builtin_function ("labs", long_ftype_long, BUILT_IN_LABS, NULL_PTR);
6722       builtin_function ("fabsf", float_ftype_float, BUILT_IN_FABS, NULL_PTR);
6723       builtin_function ("fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
6724                         NULL_PTR);
6725       builtin_function ("memcpy", memcpy_ftype, BUILT_IN_MEMCPY, NULL_PTR);
6726       builtin_function ("memcmp", int_ftype_cptr_cptr_sizet, BUILT_IN_MEMCMP,
6727                         NULL_PTR);
6728       builtin_function ("strcmp", int_ftype_string_string, BUILT_IN_STRCMP,
6729                         NULL_PTR);
6730       builtin_function ("strcpy", string_ftype_ptr_ptr, BUILT_IN_STRCPY,
6731                         NULL_PTR);
6732       builtin_function ("strlen", strlen_ftype, BUILT_IN_STRLEN, NULL_PTR);
6733       builtin_function ("sqrtf", float_ftype_float, BUILT_IN_FSQRT, NULL_PTR);
6734       builtin_function ("sqrt", double_ftype_double, BUILT_IN_FSQRT, NULL_PTR);
6735       builtin_function ("sqrtl", ldouble_ftype_ldouble, BUILT_IN_FSQRT,
6736                         NULL_PTR);
6737       builtin_function ("sinf", float_ftype_float, BUILT_IN_SIN, NULL_PTR);
6738       builtin_function ("sin", double_ftype_double, BUILT_IN_SIN, NULL_PTR);
6739       builtin_function ("sinl", ldouble_ftype_ldouble, BUILT_IN_SIN, NULL_PTR);
6740       builtin_function ("cosf", float_ftype_float, BUILT_IN_COS, NULL_PTR);
6741       builtin_function ("cos", double_ftype_double, BUILT_IN_COS, NULL_PTR);
6742       builtin_function ("cosl", ldouble_ftype_ldouble, BUILT_IN_COS, NULL_PTR);
6743
6744       /* Declare these functions volatile
6745          to avoid spurious "control drops through" warnings.  */
6746       temp = builtin_function ("abort", void_ftype,
6747                                NOT_BUILT_IN, NULL_PTR);
6748       TREE_THIS_VOLATILE (temp) = 1;
6749       TREE_SIDE_EFFECTS (temp) = 1;
6750       /* Well, these are actually ANSI, but we can't set DECL_BUILT_IN on
6751          them...  */
6752       DECL_BUILT_IN_NONANSI (temp) = 1;
6753       temp = builtin_function ("exit", void_ftype_int,
6754                                NOT_BUILT_IN, NULL_PTR);
6755       TREE_THIS_VOLATILE (temp) = 1;
6756       TREE_SIDE_EFFECTS (temp) = 1;
6757       DECL_BUILT_IN_NONANSI (temp) = 1;
6758     }
6759
6760 #if 0
6761   /* Support for these has not been written in either expand_builtin
6762      or build_function_call.  */
6763   builtin_function ("__builtin_div", default_ftype, BUILT_IN_DIV, NULL_PTR);
6764   builtin_function ("__builtin_ldiv", default_ftype, BUILT_IN_LDIV, NULL_PTR);
6765   builtin_function ("__builtin_ffloor", double_ftype_double, BUILT_IN_FFLOOR,
6766                     NULL_PTR);
6767   builtin_function ("__builtin_fceil", double_ftype_double, BUILT_IN_FCEIL,
6768                     NULL_PTR);
6769   builtin_function ("__builtin_fmod", double_ftype_double_double,
6770                     BUILT_IN_FMOD, NULL_PTR);
6771   builtin_function ("__builtin_frem", double_ftype_double_double,
6772                     BUILT_IN_FREM, NULL_PTR);
6773   builtin_function ("__builtin_memset", ptr_ftype_ptr_int_int,
6774                     BUILT_IN_MEMSET, NULL_PTR);
6775   builtin_function ("__builtin_getexp", double_ftype_double, BUILT_IN_GETEXP,
6776                     NULL_PTR);
6777   builtin_function ("__builtin_getman", double_ftype_double, BUILT_IN_GETMAN,
6778                     NULL_PTR);
6779 #endif
6780
6781   /* C++ extensions */
6782
6783   unknown_type_node = make_node (UNKNOWN_TYPE);
6784   record_unknown_type (unknown_type_node, "unknown type");
6785
6786   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
6787   TREE_TYPE (unknown_type_node) = unknown_type_node;
6788
6789   TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
6790
6791   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6792      result.  */
6793   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6794   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6795
6796   /* This is for handling opaque types in signatures.  */
6797   opaque_type_node = copy_node (ptr_type_node);
6798   TYPE_MAIN_VARIANT (opaque_type_node) = opaque_type_node;
6799   record_builtin_type (RID_MAX, 0, opaque_type_node);
6800
6801   /* This is special for C++ so functions can be overloaded.  */
6802   wchar_type_node
6803     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (WCHAR_TYPE)));
6804   wchar_type_size = TYPE_PRECISION (wchar_type_node);
6805   signed_wchar_type_node = make_signed_type (wchar_type_size);
6806   unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
6807   wchar_type_node
6808     = TREE_UNSIGNED (wchar_type_node)
6809       ? unsigned_wchar_type_node
6810       : signed_wchar_type_node;
6811   record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
6812
6813   /* Artificial declaration of wchar_t -- can be bashed */
6814   wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
6815                                 wchar_type_node);
6816   pushdecl (wchar_decl_node);
6817
6818   /* This is for wide string constants.  */
6819   wchar_array_type_node
6820     = build_array_type (wchar_type_node, array_domain_type);
6821
6822   if (flag_vtable_thunks)
6823     {
6824       /* Make sure we get a unique function type, so we can give
6825          its pointer type a name.  (This wins for gdb.) */
6826       tree vfunc_type = make_node (FUNCTION_TYPE);
6827       TREE_TYPE (vfunc_type) = integer_type_node;
6828       TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6829       layout_type (vfunc_type);
6830
6831       vtable_entry_type = build_pointer_type (vfunc_type);
6832     }
6833   else
6834     {
6835       vtable_entry_type = make_lang_type (RECORD_TYPE);
6836       fields[0] = build_lang_field_decl (FIELD_DECL, delta_identifier,
6837                                          delta_type_node);
6838       fields[1] = build_lang_field_decl (FIELD_DECL, index_identifier,
6839                                          delta_type_node);
6840       fields[2] = build_lang_field_decl (FIELD_DECL, pfn_identifier,
6841                                          ptr_type_node);
6842       finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6843                            double_type_node);
6844
6845       /* Make this part of an invisible union.  */
6846       fields[3] = copy_node (fields[2]);
6847       TREE_TYPE (fields[3]) = delta_type_node;
6848       DECL_NAME (fields[3]) = delta2_identifier;
6849       DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6850       DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
6851       TREE_UNSIGNED (fields[3]) = 0;
6852       TREE_CHAIN (fields[2]) = fields[3];
6853       vtable_entry_type = build_qualified_type (vtable_entry_type,
6854                                                 TYPE_QUAL_CONST);
6855     }
6856   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
6857
6858   vtbl_type_node
6859     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
6860   layout_type (vtbl_type_node);
6861   vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
6862   record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
6863   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6864   layout_type (vtbl_ptr_type_node);
6865   record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
6866
6867   if (flag_vtable_thunks)
6868     {
6869       /* We need vlists only when using thunks; otherwise leave them
6870          as NULL_TREE. That way, it doesn't get into the way of the
6871          mangling.  */
6872       vlist_type_node = build_pointer_type (vtbl_ptr_type_node); 
6873       vlist_zero_node = build_int_2 (0, 0);
6874       TREE_TYPE (vlist_zero_node) = vlist_type_node; 
6875     }
6876
6877   /* Simplify life by making a "sigtable_entry_type".  Give its
6878      fields names so that the debugger can use them.  */
6879
6880   if (flag_handle_signatures)
6881     {
6882       sigtable_entry_type = make_lang_type (RECORD_TYPE);
6883       fields[0] = build_lang_field_decl (FIELD_DECL, tag_identifier,
6884                                          delta_type_node);
6885       fields[1] = build_lang_field_decl (FIELD_DECL, vb_off_identifier,
6886                                          delta_type_node);
6887       fields[2] = build_lang_field_decl (FIELD_DECL, delta_identifier,
6888                                          delta_type_node);
6889       fields[3] = build_lang_field_decl (FIELD_DECL, index_identifier,
6890                                          delta_type_node);
6891       fields[4] = build_lang_field_decl (FIELD_DECL, pfn_identifier,
6892                                          ptr_type_node);
6893
6894       /* Set the alignment to the max of the alignment of ptr_type_node and
6895          delta_type_node.  Double alignment wastes a word on the Sparc.  */
6896       finish_builtin_type (sigtable_entry_type, SIGTABLE_PTR_TYPE, fields, 4,
6897                            (TYPE_ALIGN (ptr_type_node) > TYPE_ALIGN (delta_type_node))
6898                            ? ptr_type_node
6899                            : delta_type_node);
6900
6901       /* Make this part of an invisible union.  */
6902       fields[5] = copy_node (fields[4]);
6903       TREE_TYPE (fields[5]) = delta_type_node;
6904       DECL_NAME (fields[5]) = vt_off_identifier;
6905       DECL_MODE (fields[5]) = TYPE_MODE (delta_type_node);
6906       DECL_SIZE (fields[5]) = TYPE_SIZE (delta_type_node);
6907       TREE_UNSIGNED (fields[5]) = 0;
6908       TREE_CHAIN (fields[4]) = fields[5];
6909
6910       sigtable_entry_type = build_qualified_type (sigtable_entry_type, 
6911                                                   TYPE_QUAL_CONST);
6912       record_builtin_type (RID_MAX, SIGTABLE_PTR_TYPE, sigtable_entry_type);
6913     }
6914
6915   std_node = build_decl (NAMESPACE_DECL, 
6916                          get_identifier (flag_honor_std ? "fake std":"std"),
6917                          void_type_node);
6918   pushdecl (std_node);
6919
6920   global_type_node = make_node (LANG_TYPE);
6921   record_unknown_type (global_type_node, "global type");
6922
6923   /* Now, C++.  */
6924   current_lang_name = lang_name_cplusplus;
6925
6926   {
6927     tree bad_alloc_type_node, newtype, deltype;
6928     if (flag_honor_std)
6929       push_namespace (get_identifier ("std"));
6930     bad_alloc_type_node = xref_tag
6931       (class_type_node, get_identifier ("bad_alloc"), 1);
6932     if (flag_honor_std)
6933       pop_namespace ();
6934     newtype = build_exception_variant
6935       (ptr_ftype_sizetype, build_tree_list (NULL_TREE, bad_alloc_type_node));
6936     deltype = build_exception_variant
6937       (void_ftype_ptr, build_tree_list (NULL_TREE, NULL_TREE));
6938     auto_function (ansi_opname[(int) NEW_EXPR], newtype, NOT_BUILT_IN);
6939     auto_function (ansi_opname[(int) VEC_NEW_EXPR], newtype, NOT_BUILT_IN);
6940     global_delete_fndecl
6941       = auto_function (ansi_opname[(int) DELETE_EXPR], deltype, NOT_BUILT_IN);
6942     auto_function (ansi_opname[(int) VEC_DELETE_EXPR], deltype, NOT_BUILT_IN);
6943   }
6944
6945   abort_fndecl
6946     = define_function ("__pure_virtual", void_ftype,
6947                        NOT_BUILT_IN, 0, 0);
6948
6949   /* Perform other language dependent initializations.  */
6950   init_class_processing ();
6951   init_init_processing ();
6952   init_search_processing ();
6953   if (flag_rtti)
6954     init_rtti_processing ();
6955
6956   if (flag_exceptions)
6957     init_exception_processing ();
6958   if (flag_no_inline)
6959     {
6960       flag_inline_functions = 0;
6961     }
6962
6963   if (! supports_one_only ())
6964     flag_weak = 0;
6965
6966   /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__.  */
6967   declare_function_name ();
6968
6969   /* Prepare to check format strings against argument lists.  */
6970   init_function_format_info ();
6971
6972   /* Show we use EH for cleanups.  */
6973   using_eh_for_cleanups ();
6974
6975   print_error_function = lang_print_error_function;
6976   lang_get_alias_set = &c_get_alias_set;
6977   valid_lang_attribute = cp_valid_lang_attribute;
6978
6979   /* Maintain consistency.  Perhaps we should just complain if they
6980      say -fwritable-strings?  */
6981   if (flag_writable_strings)
6982     flag_const_strings = 0;
6983 }
6984
6985 /* Function to print any language-specific context for an error message.  */
6986
6987 static void
6988 lang_print_error_function (file)
6989      char *file;
6990 {
6991   default_print_error_function (file);
6992   maybe_print_template_context ();
6993 }
6994
6995 /* Make a definition for a builtin function named NAME and whose data type
6996    is TYPE.  TYPE should be a function type with argument types.
6997    FUNCTION_CODE tells later passes how to compile calls to this function.
6998    See tree.h for its possible values.
6999
7000    If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
7001    the name to be called if we can't opencode the function.  */
7002
7003 tree
7004 define_function (name, type, function_code, pfn, library_name)
7005      const char *name;
7006      tree type;
7007      enum built_in_function function_code;
7008      void (*pfn) PROTO((tree));
7009      const char *library_name;
7010 {
7011   tree decl = build_lang_decl (FUNCTION_DECL, get_identifier (name), type);
7012   DECL_EXTERNAL (decl) = 1;
7013   TREE_PUBLIC (decl) = 1;
7014   DECL_ARTIFICIAL (decl) = 1;
7015
7016   my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
7017   DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
7018
7019   /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
7020      we cannot change DECL_ASSEMBLER_NAME until we have installed this
7021      function in the namespace.  */
7022   if (pfn) (*pfn) (decl);
7023   if (library_name)
7024     DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
7025   make_function_rtl (decl);
7026   if (function_code != NOT_BUILT_IN)
7027     {
7028       DECL_BUILT_IN (decl) = 1;
7029       DECL_FUNCTION_CODE (decl) = function_code;
7030     }
7031   return decl;
7032 }
7033 \f
7034 /* When we call finish_struct for an anonymous union, we create
7035    default copy constructors and such.  But, an anonymous union
7036    shouldn't have such things; this function undoes the damage to the
7037    anonymous union type T.
7038
7039    (The reason that we create the synthesized methods is that we don't
7040    distinguish `union { int i; }' from `typedef union { int i; } U'.
7041    The first is an anonymous union; the second is just an ordinary
7042    union type.)  */
7043
7044 void
7045 fixup_anonymous_union (t)
7046      tree t;
7047 {
7048   tree *q;
7049
7050   /* Wipe out memory of synthesized methods */
7051   TYPE_HAS_CONSTRUCTOR (t) = 0;
7052   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
7053   TYPE_HAS_INIT_REF (t) = 0;
7054   TYPE_HAS_CONST_INIT_REF (t) = 0;
7055   TYPE_HAS_ASSIGN_REF (t) = 0;
7056   TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
7057
7058   /* Splice the implicitly generated functions out of the TYPE_METHODS
7059      list.  */
7060   q = &TYPE_METHODS (t);
7061   while (*q)
7062     {
7063       if (DECL_ARTIFICIAL (*q))
7064         *q = TREE_CHAIN (*q);
7065       else
7066         q = &TREE_CHAIN (*q);
7067     }
7068
7069   /* ANSI C++ June 5 1992 WP 9.5.3.  Anonymous unions may not have
7070      function members.  */
7071   if (TYPE_METHODS (t))
7072     error ("an anonymous union cannot have function members");
7073 }
7074
7075 /* Make sure that a declaration with no declarator is well-formed, i.e.
7076    just defines a tagged type or anonymous union.
7077
7078    Returns the type defined, if any.  */
7079
7080 tree
7081 check_tag_decl (declspecs)
7082      tree declspecs;
7083 {
7084   int found_type = 0;
7085   tree ob_modifier = NULL_TREE;
7086   register tree link;
7087   register tree t = NULL_TREE;
7088
7089   for (link = declspecs; link; link = TREE_CHAIN (link))
7090     {
7091       register tree value = TREE_VALUE (link);
7092
7093       if (TYPE_P (value))
7094         {
7095           ++found_type;
7096
7097           if (IS_AGGR_TYPE (value) || TREE_CODE (value) == ENUMERAL_TYPE)
7098             {
7099               my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
7100               t = value;
7101             }
7102         }
7103       else if (value == ridpointers[(int) RID_FRIEND])
7104         {
7105           if (current_class_type == NULL_TREE
7106               || current_scope () != current_class_type)
7107             ob_modifier = value;
7108         }
7109       else if (value == ridpointers[(int) RID_STATIC]
7110                || value == ridpointers[(int) RID_EXTERN]
7111                || value == ridpointers[(int) RID_AUTO]
7112                || value == ridpointers[(int) RID_REGISTER]
7113                || value == ridpointers[(int) RID_INLINE]
7114                || value == ridpointers[(int) RID_VIRTUAL]
7115                || value == ridpointers[(int) RID_CONST]
7116                || value == ridpointers[(int) RID_VOLATILE]
7117                || value == ridpointers[(int) RID_EXPLICIT])
7118         ob_modifier = value;
7119     }
7120
7121   if (found_type > 1)
7122     error ("multiple types in one declaration");
7123
7124   /* Inside a class, we might be in a friend or access declaration.
7125      Until we have a good way of detecting the latter, don't warn.  */
7126   if (t == NULL_TREE && ! current_class_type)
7127     pedwarn ("declaration does not declare anything");
7128
7129   /* Check for an anonymous union.  We're careful
7130      accessing TYPE_IDENTIFIER because some built-in types, like
7131      pointer-to-member types, do not have TYPE_NAME.  */
7132   else if (t && TREE_CODE (t) == UNION_TYPE
7133            && TYPE_NAME (t)
7134            && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
7135     {
7136       /* Anonymous unions are objects, so they can have specifiers.  */;
7137       SET_ANON_UNION_TYPE_P (t);
7138     }
7139
7140   else if (ob_modifier)
7141     {
7142       if (ob_modifier == ridpointers[(int) RID_INLINE]
7143           || ob_modifier == ridpointers[(int) RID_VIRTUAL])
7144         cp_error ("`%D' can only be specified for functions", ob_modifier);
7145       else if (ob_modifier == ridpointers[(int) RID_FRIEND])
7146         cp_error ("`%D' can only be specified inside a class", ob_modifier);
7147       else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
7148         cp_error ("`%D' can only be specified for constructors",
7149                   ob_modifier);
7150       else
7151         cp_error ("`%D' can only be specified for objects and functions",
7152                   ob_modifier);
7153     }
7154
7155   return t;
7156 }
7157
7158 /* Called when a declaration is seen that contains no names to declare.
7159    If its type is a reference to a structure, union or enum inherited
7160    from a containing scope, shadow that tag name for the current scope
7161    with a forward reference.
7162    If its type defines a new named structure or union
7163    or defines an enum, it is valid but we need not do anything here.
7164    Otherwise, it is an error.
7165
7166    C++: may have to grok the declspecs to learn about static,
7167    complain for anonymous unions.  */
7168
7169 void
7170 shadow_tag (declspecs)
7171      tree declspecs;
7172 {
7173   tree t = check_tag_decl (declspecs);
7174
7175   if (t)
7176     maybe_process_partial_specialization (t);
7177
7178   /* This is where the variables in an anonymous union are
7179      declared.  An anonymous union declaration looks like:
7180      union { ... } ;
7181      because there is no declarator after the union, the parser
7182      sends that declaration here.  */
7183   if (t && ANON_UNION_TYPE_P (t))
7184     {
7185       fixup_anonymous_union (t);
7186
7187       if (TYPE_FIELDS (t))
7188         {
7189           tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
7190                                       NULL_TREE);
7191           finish_anon_union (decl);
7192         }
7193     }
7194 }
7195 \f
7196 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
7197
7198 tree
7199 groktypename (typename)
7200      tree typename;
7201 {
7202   if (TREE_CODE (typename) != TREE_LIST)
7203     return typename;
7204   return grokdeclarator (TREE_VALUE (typename),
7205                          TREE_PURPOSE (typename),
7206                          TYPENAME, 0, NULL_TREE);
7207 }
7208
7209 /* Decode a declarator in an ordinary declaration or data definition.
7210    This is called as soon as the type information and variable name
7211    have been parsed, before parsing the initializer if any.
7212    Here we create the ..._DECL node, fill in its type,
7213    and put it on the list of decls for the current context.
7214    The ..._DECL node is returned as the value.
7215
7216    Exception: for arrays where the length is not specified,
7217    the type is left null, to be filled in by `cp_finish_decl'.
7218
7219    Function definitions do not come here; they go to start_function
7220    instead.  However, external and forward declarations of functions
7221    do go through here.  Structure field declarations are done by
7222    grokfield and not through here.  */
7223
7224 /* Set this to zero to debug not using the temporary obstack
7225    to parse initializers.  */
7226 int debug_temp_inits = 1;
7227
7228 tree
7229 start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
7230      tree declarator, declspecs;
7231      int initialized;
7232      tree attributes, prefix_attributes;
7233 {
7234   register tree decl;
7235   register tree type, tem;
7236   tree context;
7237   extern int have_extern_spec;
7238   extern int used_extern_spec;
7239   tree attrlist;
7240
7241 #if 0
7242   /* See code below that used this.  */
7243   int init_written = initialized;
7244 #endif
7245
7246   /* This should only be done once on the top most decl.  */
7247   if (have_extern_spec && !used_extern_spec)
7248     {
7249       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
7250                                   declspecs);
7251       used_extern_spec = 1;
7252     }
7253
7254   if (attributes || prefix_attributes)
7255     attrlist = build_scratch_list (attributes, prefix_attributes);
7256   else
7257     attrlist = NULL_TREE;
7258
7259   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
7260                          attrlist);
7261                          
7262   if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
7263     return NULL_TREE;
7264
7265   type = TREE_TYPE (decl);
7266
7267   if (type == error_mark_node)
7268     return NULL_TREE;
7269
7270   /* Don't lose if destructors must be executed at file-level.  */
7271   if (! processing_template_decl && TREE_STATIC (decl)
7272       && TYPE_NEEDS_DESTRUCTOR (complete_type (type))
7273       && !TREE_PERMANENT (decl))
7274     {
7275       push_obstacks (&permanent_obstack, &permanent_obstack);
7276       decl = copy_node (decl);
7277       if (TREE_CODE (type) == ARRAY_TYPE)
7278         {
7279           tree itype = TYPE_DOMAIN (type);
7280           if (itype && ! TREE_PERMANENT (itype))
7281             {
7282               itype = build_index_type (copy_to_permanent (TYPE_MAX_VALUE (itype)));
7283               type = build_cplus_array_type (TREE_TYPE (type), itype);
7284               TREE_TYPE (decl) = type;
7285             }
7286         }
7287       pop_obstacks ();
7288     }
7289
7290   context
7291     = (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
7292       ? DECL_CLASS_CONTEXT (decl)
7293       : DECL_CONTEXT (decl);
7294
7295   if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
7296       && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
7297     {
7298       /* When parsing the initializer, lookup should use the object's
7299          namespace. */
7300       push_decl_namespace (context);
7301     }
7302
7303   /* We are only interested in class contexts, later. */
7304   if (context && TREE_CODE (context) == NAMESPACE_DECL)
7305     context = NULL_TREE;
7306
7307   if (initialized)
7308     /* Is it valid for this decl to have an initializer at all?
7309        If not, set INITIALIZED to zero, which will indirectly
7310        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
7311     switch (TREE_CODE (decl))
7312       {
7313       case TYPE_DECL:
7314         /* typedef foo = bar  means give foo the same type as bar.
7315            We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
7316            Any other case of an initialization in a TYPE_DECL is an error.  */
7317         if (pedantic || list_length (declspecs) > 1)
7318           {
7319             cp_error ("typedef `%D' is initialized", decl);
7320             initialized = 0;
7321           }
7322         break;
7323
7324       case FUNCTION_DECL:
7325         cp_error ("function `%#D' is initialized like a variable", decl);
7326         initialized = 0;
7327         break;
7328
7329       default:
7330         if (! processing_template_decl)
7331           {
7332             if (type != error_mark_node)
7333               {
7334                 if (TYPE_SIZE (type) != NULL_TREE
7335                     && ! TREE_CONSTANT (TYPE_SIZE (type)))
7336                   {
7337                     cp_error
7338                       ("variable-sized object `%D' may not be initialized",
7339                        decl);
7340                     initialized = 0;
7341                   }
7342
7343                 if (TREE_CODE (type) == ARRAY_TYPE
7344                     && TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
7345                   {
7346                     cp_error
7347                       ("elements of array `%#D' have incomplete type", decl);
7348                     initialized = 0;
7349                   }
7350               }
7351           }
7352       }
7353
7354   if (initialized)
7355     {
7356       if (! toplevel_bindings_p ()
7357           && DECL_EXTERNAL (decl))
7358         cp_warning ("declaration of `%#D' has `extern' and is initialized",
7359                     decl);
7360       DECL_EXTERNAL (decl) = 0;
7361       if (toplevel_bindings_p ())
7362         TREE_STATIC (decl) = 1;
7363
7364       /* Tell `pushdecl' this is an initialized decl
7365          even though we don't yet have the initializer expression.
7366          Also tell `cp_finish_decl' it may store the real initializer.  */
7367       DECL_INITIAL (decl) = error_mark_node;
7368     }
7369
7370 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
7371   SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
7372 #endif
7373   
7374   /* Set attributes here so if duplicate decl, will have proper attributes.  */
7375   cplus_decl_attributes (decl, attributes, prefix_attributes);
7376
7377   if (context && TYPE_SIZE (complete_type (context)) != NULL_TREE)
7378     {
7379       push_nested_class (context, 2);
7380
7381       if (TREE_CODE (decl) == VAR_DECL)
7382         {
7383           tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
7384           if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
7385             cp_error ("`%#D' is not a static member of `%#T'", decl, context);
7386           else
7387             {
7388               if (DECL_CONTEXT (field) != context)
7389                 {
7390                   cp_pedwarn ("ANSI C++ does not permit `%T::%D' to be defined as `%T::%D'",
7391                               DECL_CONTEXT (field), DECL_NAME (decl),
7392                               context, DECL_NAME (decl));
7393                   DECL_CONTEXT (decl) = DECL_CONTEXT (field);
7394                 }
7395               /* Static data member are tricky; an in-class initialization
7396                  still doesn't provide a definition, so the in-class
7397                  declaration will have DECL_EXTERNAL set, but will have an
7398                  initialization.  Thus, duplicate_decls won't warn
7399                  about this situation, and so we check here.  */
7400               if (DECL_INITIAL (decl) && DECL_INITIAL (field))
7401                 cp_error ("duplicate initialization of %D", decl);
7402               if (duplicate_decls (decl, field))
7403                 decl = field;
7404             }
7405         }
7406       else
7407         {
7408           tree field = check_classfn (context, decl);
7409           if (field && duplicate_decls (decl, field))
7410             decl = field;
7411         }
7412
7413       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
7414       DECL_IN_AGGR_P (decl) = 0;
7415       if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl)) 
7416           || CLASSTYPE_USE_TEMPLATE (context))
7417         {
7418           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
7419           /* [temp.expl.spec] An explicit specialization of a static data
7420              member of a template is a definition if the declaration
7421              includes an initializer; otherwise, it is a declaration.
7422
7423              We check for processing_specialization so this only applies
7424              to the new specialization syntax.  */
7425           if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
7426             DECL_EXTERNAL (decl) = 1;
7427         }
7428
7429       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
7430         cp_pedwarn ("declaration of `%#D' outside of class is not definition",
7431                     decl);
7432     }
7433
7434   /* Add this decl to the current binding level, but not if it
7435      comes from another scope, e.g. a static member variable.
7436      TEM may equal DECL or it may be a previous decl of the same name.  */
7437   
7438   if ((TREE_CODE (decl) != PARM_DECL && DECL_CONTEXT (decl) != NULL_TREE 
7439        /* Definitions of namespace members outside their namespace are
7440           possible. */
7441        && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
7442       || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
7443       || TREE_CODE (type) == LANG_TYPE
7444       /* The declaration of template specializations does not affect
7445          the functions available for overload resolution, so we do not
7446          call pushdecl.  */
7447       || (TREE_CODE (decl) == FUNCTION_DECL
7448           && DECL_TEMPLATE_SPECIALIZATION (decl)))
7449     tem = decl;
7450   else
7451     tem = pushdecl (decl);
7452
7453   if (processing_template_decl)
7454     {
7455       if (! current_function_decl)
7456         tem = push_template_decl (tem);
7457       else if (minimal_parse_mode)
7458         DECL_VINDEX (tem)
7459             = build_min_nt (DECL_STMT, copy_to_permanent (declarator),
7460                             copy_to_permanent (declspecs),
7461                             NULL_TREE);
7462     }
7463
7464
7465 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7466   /* Tell the back-end to use or not use .common as appropriate.  If we say
7467      -fconserve-space, we want this to save .data space, at the expense of
7468      wrong semantics.  If we say -fno-conserve-space, we want this to
7469      produce errors about redefs; to do this we force variables into the
7470      data segment.  */
7471   DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
7472 #endif
7473   
7474   if (! processing_template_decl)
7475     start_decl_1 (tem);
7476
7477   /* Corresponding pop_obstacks is done in `cp_finish_decl'.  */
7478   push_obstacks_nochange ();
7479
7480 #if 0
7481   /* We have no way of knowing whether the initializer will need to be
7482      evaluated at run-time or not until we've parsed it, so let's just put
7483      it in the permanent obstack.  (jason) */
7484   if (init_written
7485       && ! (TREE_CODE (tem) == PARM_DECL
7486             || (TREE_READONLY (tem)
7487                 && (TREE_CODE (tem) == VAR_DECL
7488                     || TREE_CODE (tem) == FIELD_DECL))))
7489     {
7490       /* When parsing and digesting the initializer,
7491          use temporary storage.  Do this even if we will ignore the value.  */
7492       if (toplevel_bindings_p () && debug_temp_inits)
7493         {
7494           if (processing_template_decl
7495               || TYPE_NEEDS_CONSTRUCTING (type)
7496               || TREE_CODE (type) == REFERENCE_TYPE)
7497             /* In this case, the initializer must lay down in permanent
7498                storage, since it will be saved until `finish_file' is run.   */
7499             ;
7500           else
7501             temporary_allocation ();
7502         }
7503     }
7504 #endif
7505
7506   return tem;
7507 }
7508
7509 void
7510 start_decl_1 (decl)
7511      tree decl;
7512 {
7513   tree type = TREE_TYPE (decl);
7514   int initialized = (DECL_INITIAL (decl) != NULL_TREE);
7515
7516   if (type == error_mark_node)
7517     return;
7518
7519   /* If this type of object needs a cleanup, and control may
7520      jump past it, make a new binding level so that it is cleaned
7521      up only when it is initialized first.  */
7522   if (TYPE_NEEDS_DESTRUCTOR (type)
7523       && current_binding_level->more_cleanups_ok == 0)
7524     pushlevel_temporary (1);
7525
7526   if (initialized)
7527     /* Is it valid for this decl to have an initializer at all?
7528        If not, set INITIALIZED to zero, which will indirectly
7529        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
7530     {
7531       /* Don't allow initializations for incomplete types except for
7532          arrays which might be completed by the initialization.  */
7533       if (TYPE_SIZE (complete_type (type)) != NULL_TREE)
7534         ;                       /* A complete type is ok.  */
7535       else if (TREE_CODE (type) != ARRAY_TYPE)
7536         {
7537           cp_error ("variable `%#D' has initializer but incomplete type",
7538                     decl);
7539           initialized = 0;
7540           type = TREE_TYPE (decl) = error_mark_node;
7541         }
7542       else if (TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
7543         {
7544           if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
7545             cp_error ("elements of array `%#D' have incomplete type", decl);
7546           /* else we already gave an error in start_decl.  */
7547           initialized = 0;
7548         }
7549     }
7550
7551   if (!initialized
7552       && TREE_CODE (decl) != TYPE_DECL
7553       && TREE_CODE (decl) != TEMPLATE_DECL
7554       && IS_AGGR_TYPE (type) && ! DECL_EXTERNAL (decl))
7555     {
7556       if ((! processing_template_decl || ! uses_template_parms (type))
7557           && TYPE_SIZE (complete_type (type)) == NULL_TREE)
7558         {
7559           cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
7560                  decl);
7561           /* Change the type so that assemble_variable will give
7562              DECL an rtl we can live with: (mem (const_int 0)).  */
7563           type = TREE_TYPE (decl) = error_mark_node;
7564         }
7565       else
7566         {
7567           /* If any base type in the hierarchy of TYPE needs a constructor,
7568              then we set initialized to 1.  This way any nodes which are
7569              created for the purposes of initializing this aggregate
7570              will live as long as it does.  This is necessary for global
7571              aggregates which do not have their initializers processed until
7572              the end of the file.  */
7573           initialized = TYPE_NEEDS_CONSTRUCTING (type);
7574         }
7575     }
7576
7577 #if 0
7578   /* We don't do this yet for GNU C++.  */
7579   /* For a local variable, define the RTL now.  */
7580   if (! toplevel_bindings_p ()
7581       /* But not if this is a duplicate decl
7582          and we preserved the rtl from the previous one
7583          (which may or may not happen).  */
7584       && DECL_RTL (tem) == NULL_RTX)
7585     {
7586       if (TYPE_SIZE (TREE_TYPE (tem)) != NULL_TREE)
7587         expand_decl (tem);
7588       else if (TREE_CODE (TREE_TYPE (tem)) == ARRAY_TYPE
7589                && DECL_INITIAL (tem) != NULL_TREE)
7590         expand_decl (tem);
7591     }
7592 #endif
7593
7594   if (! initialized)
7595     DECL_INITIAL (decl) = NULL_TREE;
7596 }
7597
7598 /* Handle initialization of references.
7599    These three arguments are from `cp_finish_decl', and have the
7600    same meaning here that they do there.
7601
7602    Quotes on semantics can be found in ARM 8.4.3.  */
7603
7604 static void
7605 grok_reference_init (decl, type, init)
7606      tree decl, type, init;
7607 {
7608   tree tmp;
7609
7610   if (init == NULL_TREE)
7611     {
7612       if ((DECL_LANG_SPECIFIC (decl) == 0
7613            || DECL_IN_AGGR_P (decl) == 0)
7614           && ! DECL_THIS_EXTERN (decl))
7615         {
7616           cp_error ("`%D' declared as reference but not initialized", decl);
7617           if (TREE_CODE (decl) == VAR_DECL)
7618             SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
7619         }
7620       return;
7621     }
7622
7623   if (init == error_mark_node)
7624     return;
7625
7626   if (TREE_CODE (type) == REFERENCE_TYPE
7627       && TREE_CODE (init) == CONSTRUCTOR)
7628     {
7629       cp_error ("ANSI C++ forbids use of initializer list to initialize reference `%D'", decl);
7630       return;
7631     }
7632
7633   if (TREE_CODE (init) == TREE_LIST)
7634     init = build_compound_expr (init);
7635
7636   if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
7637     init = convert_from_reference (init);
7638
7639   if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
7640       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
7641     {
7642       /* Note: default conversion is only called in very special cases.  */
7643       init = default_conversion (init);
7644     }
7645
7646   tmp = convert_to_reference
7647     (type, init, CONV_IMPLICIT,
7648      LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
7649
7650   if (tmp == error_mark_node)
7651     goto fail;
7652   else if (tmp != NULL_TREE)
7653     {
7654       init = tmp;
7655       DECL_INITIAL (decl) = save_expr (init);
7656     }
7657   else
7658     {
7659       cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
7660       goto fail;
7661     }
7662
7663   /* ?? Can this be optimized in some cases to
7664      hand back the DECL_INITIAL slot??  */
7665   if (TYPE_SIZE (TREE_TYPE (type)))
7666     {
7667       init = convert_from_reference (decl);
7668       if (TREE_PERMANENT (decl))
7669         init = copy_to_permanent (init);
7670       SET_DECL_REFERENCE_SLOT (decl, init);
7671     }
7672
7673   if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
7674     {
7675       expand_static_init (decl, DECL_INITIAL (decl));
7676       DECL_INITIAL (decl) = NULL_TREE;
7677     }
7678   return;
7679
7680  fail:
7681   if (TREE_CODE (decl) == VAR_DECL)
7682     SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
7683   return;
7684 }
7685
7686 /* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7687    mucking with forces it does not comprehend (i.e. initialization with a
7688    constructor).  If we are at global scope and won't go into COMMON, fill
7689    it in with a dummy CONSTRUCTOR to force the variable into .data;
7690    otherwise we can use error_mark_node.  */
7691
7692 static tree
7693 obscure_complex_init (decl, init)
7694      tree decl, init;
7695 {
7696   if (! flag_no_inline && TREE_STATIC (decl))
7697     {
7698       if (extract_init (decl, init))
7699         return NULL_TREE;
7700     }
7701
7702 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7703   if (toplevel_bindings_p () && ! DECL_COMMON (decl))
7704     DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7705                                  NULL_TREE);
7706   else
7707 #endif
7708     DECL_INITIAL (decl) = error_mark_node;
7709
7710   return init;
7711 }
7712
7713 /* Issue an error message if DECL is an uninitialized const variable.  */
7714
7715 static void
7716 check_for_uninitialized_const_var (decl)
7717      tree decl;
7718 {
7719   tree type = TREE_TYPE (decl);
7720
7721   /* ``Unless explicitly declared extern, a const object does not have
7722      external linkage and must be initialized. ($8.4; $12.1)'' ARM
7723      7.1.6 */
7724   if (TREE_CODE (decl) == VAR_DECL
7725       && TREE_CODE (type) != REFERENCE_TYPE
7726       && CP_TYPE_CONST_P (type)
7727       && !TYPE_NEEDS_CONSTRUCTING (type)
7728       && !DECL_INITIAL (decl))
7729     cp_error ("uninitialized const `%D'", decl);
7730 }
7731
7732 /* Finish processing of a declaration;
7733    install its line number and initial value.
7734    If the length of an array type is not known before,
7735    it must be determined now, from the initial value, or it is an error.
7736
7737    Call `pop_obstacks' iff NEED_POP is nonzero.
7738
7739    For C++, `cp_finish_decl' must be fairly evasive:  it must keep initializers
7740    for aggregates that have constructors alive on the permanent obstack,
7741    so that the global initializing functions can be written at the end.
7742
7743    INIT0 holds the value of an initializer that should be allowed to escape
7744    the normal rules.
7745
7746    FLAGS is LOOKUP_ONLYCONVERTING is the = init syntax was used, else 0
7747    if the (init) syntax was used.
7748
7749    For functions that take default parameters, DECL points to its
7750    "maximal" instantiation.  `cp_finish_decl' must then also declared its
7751    subsequently lower and lower forms of instantiation, checking for
7752    ambiguity as it goes.  This can be sped up later.  */
7753
7754 void
7755 cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
7756      tree decl, init;
7757      tree asmspec_tree;
7758      int need_pop;
7759      int flags;
7760 {
7761   register tree type;
7762   tree cleanup = NULL_TREE, ttype = NULL_TREE;
7763   int was_incomplete;
7764   int temporary = allocation_temporary_p ();
7765   char *asmspec = NULL;
7766   int was_readonly = 0;
7767   int already_used = 0;
7768   tree core_type;
7769
7770   /* If this is 0, then we did not change obstacks.  */
7771   if (! decl)
7772     {
7773       if (init)
7774         error ("assignment (not initialization) in declaration");
7775       return;
7776     }
7777
7778   /* If a name was specified, get the string.  */
7779   if (asmspec_tree)
7780       asmspec = TREE_STRING_POINTER (asmspec_tree);
7781
7782   if (init && TREE_CODE (init) == NAMESPACE_DECL)
7783     {
7784       cp_error ("Cannot initialize `%D' to namespace `%D'",
7785                 decl, init);
7786       init = NULL_TREE;
7787     }
7788
7789   if (current_class_type
7790       && DECL_REAL_CONTEXT (decl) == current_class_type
7791       && TYPE_BEING_DEFINED (current_class_type)
7792       && (DECL_INITIAL (decl) || init))
7793     DECL_DEFINED_IN_CLASS_P (decl) = 1;
7794
7795   if (TREE_CODE (decl) == VAR_DECL 
7796       && DECL_CONTEXT (decl)
7797       && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
7798       && DECL_CONTEXT (decl) != current_namespace
7799       && init)
7800     {
7801       /* Leave the namespace of the object. */
7802       pop_decl_namespace ();
7803     }
7804
7805   /* If the type of the thing we are declaring either has
7806      a constructor, or has a virtual function table pointer,
7807      AND its initialization was accepted by `start_decl',
7808      then we stayed on the permanent obstack through the
7809      declaration, otherwise, changed obstacks as GCC would.  */
7810
7811   type = TREE_TYPE (decl);
7812
7813   if (type == error_mark_node)
7814     {
7815       if (toplevel_bindings_p () && temporary)
7816         end_temporary_allocation ();
7817
7818       return;
7819     }
7820
7821   if (TYPE_HAS_MUTABLE_P (type))
7822     TREE_READONLY (decl) = 0;
7823   
7824   if (processing_template_decl)
7825     {
7826       if (init && DECL_INITIAL (decl))
7827         DECL_INITIAL (decl) = init;
7828       if (minimal_parse_mode && ! DECL_ARTIFICIAL (decl))
7829         {
7830           tree stmt = DECL_VINDEX (decl);
7831           /* If the decl is declaring a member of a local class (in a
7832              template function), the DECL_VINDEX will either be NULL,
7833              or it will be an actual virtual function index, not a
7834              DECL_STMT.  */
7835           if (stmt != NULL_TREE && TREE_CODE (stmt) == DECL_STMT)
7836             {
7837               DECL_VINDEX (decl) = NULL_TREE;
7838               TREE_OPERAND (stmt, 2) = copy_to_permanent (init);
7839               add_tree (stmt);
7840             }
7841         }
7842
7843       goto finish_end0;
7844     }
7845   /* Take care of TYPE_DECLs up front.  */
7846   if (TREE_CODE (decl) == TYPE_DECL)
7847     {
7848       if (init && DECL_INITIAL (decl))
7849         {
7850           /* typedef foo = bar; store the type of bar as the type of foo.  */
7851           TREE_TYPE (decl) = type = TREE_TYPE (init);
7852           DECL_INITIAL (decl) = init = NULL_TREE;
7853         }
7854       if (type != error_mark_node
7855           && IS_AGGR_TYPE (type) && DECL_NAME (decl))
7856         {
7857           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7858             cp_warning ("shadowing previous type declaration of `%#D'", decl);
7859           set_identifier_type_value (DECL_NAME (decl), type);
7860           CLASSTYPE_GOT_SEMICOLON (type) = 1;
7861         }
7862       GNU_xref_decl (current_function_decl, decl);
7863
7864       /* If we have installed this as the canonical typedef for this
7865          type, and that type has not been defined yet, delay emitting
7866          the debug information for it, as we will emit it later.  */
7867       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7868           && TYPE_SIZE (TREE_TYPE (decl)) == NULL_TREE)
7869         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7870
7871       rest_of_decl_compilation (decl, NULL_PTR,
7872                                 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
7873       goto finish_end;
7874     }
7875   if (TREE_CODE (decl) != FUNCTION_DECL)
7876     {
7877       ttype = target_type (type);
7878     }
7879
7880   if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
7881       && TYPE_NEEDS_CONSTRUCTING (type))
7882     {
7883
7884       /* Currently, GNU C++ puts constants in text space, making them
7885          impossible to initialize.  In the future, one would hope for
7886          an operating system which understood the difference between
7887          initialization and the running of a program.  */
7888       was_readonly = 1;
7889       TREE_READONLY (decl) = 0;
7890     }
7891
7892   if (TREE_CODE (decl) == FIELD_DECL)
7893     {
7894       if (init && init != error_mark_node)
7895         my_friendly_assert (TREE_PERMANENT (init), 147);
7896
7897       if (asmspec)
7898         {
7899           /* This must override the asm specifier which was placed
7900              by grokclassfn.  Lay this out fresh.  */
7901           DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
7902           DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7903           make_decl_rtl (decl, asmspec, 0);
7904         }
7905     }
7906   /* If `start_decl' didn't like having an initialization, ignore it now.  */
7907   else if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7908     init = NULL_TREE;
7909   else if (DECL_EXTERNAL (decl))
7910     ;
7911   else if (TREE_CODE (type) == REFERENCE_TYPE
7912            || (TYPE_LANG_SPECIFIC (type) && IS_SIGNATURE_REFERENCE (type)))
7913     {
7914       if (TREE_STATIC (decl))
7915         make_decl_rtl (decl, NULL_PTR,
7916                        toplevel_bindings_p ()
7917                        || pseudo_global_level_p ());
7918       grok_reference_init (decl, type, init);
7919       init = NULL_TREE;
7920     }
7921
7922   GNU_xref_decl (current_function_decl, decl);
7923
7924   core_type = type;
7925   while (TREE_CODE (core_type) == ARRAY_TYPE)
7926     core_type = TREE_TYPE (core_type);
7927   
7928   if (TREE_CODE (decl) == FIELD_DECL)
7929     ;
7930   else if (TREE_CODE (decl) == CONST_DECL)
7931     {
7932       my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7933
7934       DECL_INITIAL (decl) = init;
7935
7936       /* This will keep us from needing to worry about our obstacks.  */
7937       my_friendly_assert (init != NULL_TREE, 149);
7938       init = NULL_TREE;
7939     }
7940   else if (init)
7941     {
7942       if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7943         {
7944           if (TREE_CODE (type) == ARRAY_TYPE)
7945             init = digest_init (type, init, (tree *) 0);
7946           else if (TREE_CODE (init) == CONSTRUCTOR
7947                    && TREE_HAS_CONSTRUCTOR (init))
7948             {
7949               if (TYPE_NON_AGGREGATE_CLASS (type))
7950                 {
7951                   cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7952                             decl);
7953                   init = error_mark_node;
7954                 }
7955               else
7956                 goto dont_use_constructor;
7957             }
7958         }
7959       else
7960         {
7961         dont_use_constructor:
7962           if (TREE_CODE (init) != TREE_VEC)
7963             init = store_init_value (decl, init);
7964         }
7965
7966       if (init)
7967         /* We must hide the initializer so that expand_decl
7968            won't try to do something it does not understand.  */
7969         init = obscure_complex_init (decl, init);
7970     }
7971   else if (DECL_EXTERNAL (decl))
7972     ;
7973   else if (TREE_CODE_CLASS (TREE_CODE (type)) == 't'
7974            && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7975     {
7976       if (! TYPE_NEEDS_CONSTRUCTING (core_type))
7977         {
7978           if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
7979             cp_error ("structure `%D' with uninitialized const members", decl);
7980           if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
7981             cp_error ("structure `%D' with uninitialized reference members",
7982                       decl);
7983         }
7984
7985       check_for_uninitialized_const_var (decl);
7986
7987       if (TYPE_SIZE (type) != NULL_TREE
7988           && TYPE_NEEDS_CONSTRUCTING (type))
7989         init = obscure_complex_init (decl, NULL_TREE);
7990
7991     }
7992   else
7993     check_for_uninitialized_const_var (decl);
7994   
7995   /* For top-level declaration, the initial value was read in
7996      the temporary obstack.  MAXINDEX, rtl, etc. to be made below
7997      must go in the permanent obstack; but don't discard the
7998      temporary data yet.  */
7999
8000   if (toplevel_bindings_p () && temporary)
8001     end_temporary_allocation ();
8002
8003   /* Deduce size of array from initialization, if not already known.  */
8004
8005   if (TREE_CODE (type) == ARRAY_TYPE
8006       && TYPE_DOMAIN (type) == NULL_TREE
8007       && TREE_CODE (decl) != TYPE_DECL)
8008     {
8009       int do_default
8010         = (TREE_STATIC (decl)
8011            /* Even if pedantic, an external linkage array
8012               may have incomplete type at first.  */
8013            ? pedantic && ! DECL_EXTERNAL (decl)
8014            : !DECL_EXTERNAL (decl));
8015       tree initializer = init ? init : DECL_INITIAL (decl);
8016       int failure = complete_array_type (type, initializer, do_default);
8017
8018       if (failure == 1)
8019         cp_error ("initializer fails to determine size of `%D'", decl);
8020
8021       if (failure == 2)
8022         {
8023           if (do_default)
8024             cp_error ("array size missing in `%D'", decl);
8025           /* If a `static' var's size isn't known, make it extern as
8026              well as static, so it does not get allocated.  If it's not
8027              `static', then don't mark it extern; finish_incomplete_decl
8028              will give it a default size and it will get allocated.  */
8029           else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
8030             DECL_EXTERNAL (decl) = 1;
8031         }
8032
8033       if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
8034           && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
8035                               integer_zero_node))
8036         cp_error ("zero-size array `%D'", decl);
8037
8038       layout_decl (decl, 0);
8039     }
8040
8041   if (TREE_CODE (decl) == VAR_DECL)
8042     {
8043       if (DECL_SIZE (decl) == NULL_TREE
8044           && TYPE_SIZE (complete_type (TREE_TYPE (decl))) != NULL_TREE)
8045         layout_decl (decl, 0);
8046
8047       if (TREE_STATIC (decl) && DECL_SIZE (decl) == NULL_TREE)
8048         {
8049           /* A static variable with an incomplete type:
8050              that is an error if it is initialized.
8051              Otherwise, let it through, but if it is not `extern'
8052              then it may cause an error message later.  */
8053           if (DECL_INITIAL (decl) != NULL_TREE)
8054             cp_error ("storage size of `%D' isn't known", decl);
8055           init = NULL_TREE;
8056         }
8057       else if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
8058         {
8059           /* An automatic variable with an incomplete type: that is an error.
8060              Don't talk about array types here, since we took care of that
8061              message in grokdeclarator.  */
8062           cp_error ("storage size of `%D' isn't known", decl);
8063           TREE_TYPE (decl) = error_mark_node;
8064         }
8065       else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
8066         /* Let debugger know it should output info for this type.  */
8067         note_debug_info_needed (ttype);
8068
8069       if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
8070         note_debug_info_needed (DECL_CONTEXT (decl));
8071
8072       if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
8073           && DECL_SIZE (decl) != NULL_TREE
8074           && ! TREE_CONSTANT (DECL_SIZE (decl)))
8075         {
8076           if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
8077             constant_expression_warning (DECL_SIZE (decl));
8078           else
8079             cp_error ("storage size of `%D' isn't constant", decl);
8080         }
8081
8082       if (! DECL_EXTERNAL (decl) && TYPE_NEEDS_DESTRUCTOR (type)
8083           /* Cleanups for static variables are handled by `finish_file'.  */
8084           && ! TREE_STATIC (decl))
8085         {
8086           int yes = suspend_momentary ();
8087           cleanup = maybe_build_cleanup (decl);
8088           resume_momentary (yes);
8089         }
8090     }
8091   /* PARM_DECLs get cleanups, too.  */
8092   else if (TREE_CODE (decl) == PARM_DECL && TYPE_NEEDS_DESTRUCTOR (type))
8093     {
8094       if (temporary)
8095         end_temporary_allocation ();
8096       cleanup = maybe_build_cleanup (decl);
8097       if (temporary)
8098         resume_temporary_allocation ();
8099     }
8100
8101   /* Output the assembler code and/or RTL code for variables and functions,
8102      unless the type is an undefined structure or union.
8103      If not, it will get done when the type is completed.  */
8104
8105   was_incomplete = (DECL_SIZE (decl) == NULL_TREE);
8106
8107   if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
8108       || TREE_CODE (decl) == RESULT_DECL)
8109     {
8110       /* ??? FIXME: What about nested classes?  */
8111       int toplev = toplevel_bindings_p () || pseudo_global_level_p ();
8112       int was_temp
8113         = (TREE_STATIC (decl) && TYPE_NEEDS_DESTRUCTOR (type)
8114            && allocation_temporary_p ());
8115
8116       if (was_temp)
8117         end_temporary_allocation ();
8118
8119       /* Static data in a function with comdat linkage also has comdat
8120          linkage.  */
8121       if (TREE_CODE (decl) == VAR_DECL
8122           && TREE_STATIC (decl)
8123           /* Don't mess with __FUNCTION__.  */
8124           && ! TREE_ASM_WRITTEN (decl)
8125           && current_function_decl
8126           && DECL_CONTEXT (decl) == current_function_decl
8127           && (DECL_THIS_INLINE (current_function_decl)
8128               || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
8129           && TREE_PUBLIC (current_function_decl))
8130         {
8131           /* Rather than try to get this right with inlining, we suppress
8132              inlining of such functions.  */
8133           current_function_cannot_inline
8134             = "function with static variable cannot be inline";
8135
8136           /* If flag_weak, we don't need to mess with this, as we can just
8137              make the function weak, and let it refer to its unique local
8138              copy.  This works because we don't allow the function to be
8139              inlined.  */
8140           if (! flag_weak)
8141             {
8142               if (DECL_INTERFACE_KNOWN (current_function_decl))
8143                 {
8144                   TREE_PUBLIC (decl) = 1;
8145                   DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
8146                 }
8147               else if (DECL_INITIAL (decl) == NULL_TREE
8148                        || DECL_INITIAL (decl) == error_mark_node)
8149                 {
8150                   TREE_PUBLIC (decl) = 1;
8151                   DECL_COMMON (decl) = 1;
8152                 }
8153               /* else we lose. We can only do this if we can use common,
8154                  which we can't if it has been initialized.  */
8155
8156               if (TREE_PUBLIC (decl))
8157                 DECL_ASSEMBLER_NAME (decl)
8158                   = build_static_name (current_function_decl, DECL_NAME (decl));
8159               else if (! DECL_ARTIFICIAL (decl))
8160                 {
8161                   cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
8162                   cp_warning_at ("  you can work around this by removing the initializer", decl);
8163                 }
8164             }
8165         }
8166
8167       else if (TREE_CODE (decl) == VAR_DECL
8168                && DECL_LANG_SPECIFIC (decl)
8169                && DECL_COMDAT (decl))
8170         /* Set it up again; we might have set DECL_INITIAL since the
8171            last time.  */
8172         comdat_linkage (decl);
8173
8174       if (TREE_CODE (decl) == VAR_DECL && DECL_VIRTUAL_P (decl))
8175         make_decl_rtl (decl, NULL_PTR, toplev);
8176       else if (TREE_CODE (decl) == VAR_DECL
8177                && TREE_READONLY (decl)
8178                && DECL_INITIAL (decl) != NULL_TREE
8179                && DECL_INITIAL (decl) != error_mark_node
8180                && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
8181         {
8182           DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
8183
8184           if (asmspec)
8185             DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
8186
8187           if (! toplev
8188               && TREE_STATIC (decl)
8189               && ! TREE_SIDE_EFFECTS (decl)
8190               && ! TREE_PUBLIC (decl)
8191               && ! DECL_EXTERNAL (decl)
8192               && ! TYPE_NEEDS_DESTRUCTOR (type)
8193               && DECL_MODE (decl) != BLKmode)
8194             {
8195               /* If this variable is really a constant, then fill its DECL_RTL
8196                  slot with something which won't take up storage.
8197                  If something later should take its address, we can always give
8198                  it legitimate RTL at that time.  */
8199               DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
8200               store_expr (DECL_INITIAL (decl), DECL_RTL (decl), 0);
8201               TREE_ASM_WRITTEN (decl) = 1;
8202             }
8203           else if (toplev && ! TREE_PUBLIC (decl))
8204             {
8205               /* If this is a static const, change its apparent linkage
8206                  if it belongs to a #pragma interface.  */
8207               if (!interface_unknown)
8208                 {
8209                   TREE_PUBLIC (decl) = 1;
8210                   DECL_EXTERNAL (decl) = interface_only;
8211                 }
8212               make_decl_rtl (decl, asmspec, toplev);
8213             }
8214           else
8215             rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
8216         }
8217       else if (TREE_CODE (decl) == VAR_DECL
8218                && DECL_LANG_SPECIFIC (decl)
8219                && DECL_IN_AGGR_P (decl))
8220         {
8221           if (TREE_STATIC (decl))
8222             {
8223               if (init == NULL_TREE
8224 #ifdef DEFAULT_STATIC_DEFS
8225                   /* If this code is dead, then users must
8226                      explicitly declare static member variables
8227                      outside the class def'n as well.  */
8228                   && TYPE_NEEDS_CONSTRUCTING (type)
8229 #endif
8230                   )
8231                 {
8232                   DECL_EXTERNAL (decl) = 1;
8233                   make_decl_rtl (decl, asmspec, 1);
8234                 }
8235               else
8236                 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
8237             }
8238           else
8239             /* Just a constant field.  Should not need any rtl.  */
8240             goto finish_end0;
8241         }
8242       else
8243         rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
8244
8245       if (was_temp)
8246         resume_temporary_allocation ();
8247
8248       if (type != error_mark_node
8249           && TYPE_LANG_SPECIFIC (core_type)
8250           && CLASSTYPE_ABSTRACT_VIRTUALS (core_type))
8251         abstract_virtuals_error (decl, core_type);
8252       else if ((TREE_CODE (type) == FUNCTION_TYPE
8253                 || TREE_CODE (type) == METHOD_TYPE)
8254                && TYPE_LANG_SPECIFIC (TREE_TYPE (type))
8255                && CLASSTYPE_ABSTRACT_VIRTUALS (TREE_TYPE (type)))
8256         abstract_virtuals_error (decl, TREE_TYPE (type));
8257
8258       if (TYPE_LANG_SPECIFIC (core_type) && IS_SIGNATURE (core_type))
8259         signature_error (decl, core_type);
8260       else if ((TREE_CODE (type) == FUNCTION_TYPE
8261                 || TREE_CODE (type) == METHOD_TYPE)
8262                && TYPE_LANG_SPECIFIC (TREE_TYPE (type))
8263                && IS_SIGNATURE (TREE_TYPE (type)))
8264         signature_error (decl, TREE_TYPE (type));
8265
8266       if (TREE_CODE (decl) == FUNCTION_DECL)
8267         ;
8268       else if (DECL_EXTERNAL (decl)
8269                && ! (DECL_LANG_SPECIFIC (decl)
8270                      && DECL_NOT_REALLY_EXTERN (decl)))
8271         {
8272           if (init)
8273             DECL_INITIAL (decl) = init;
8274         }
8275       else if (TREE_STATIC (decl) && type != error_mark_node)
8276         {
8277           /* Cleanups for static variables are handled by `finish_file'.  */
8278           if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
8279               || TYPE_NEEDS_DESTRUCTOR (type))
8280             expand_static_init (decl, init);
8281         }
8282       else if (! toplev)
8283         {
8284           /* This is a declared decl which must live until the
8285              end of the binding contour.  It may need a cleanup.  */
8286
8287           /* Recompute the RTL of a local array now
8288              if it used to be an incomplete type.  */
8289           if (was_incomplete && ! TREE_STATIC (decl))
8290             {
8291               /* If we used it already as memory, it must stay in memory.  */
8292               TREE_ADDRESSABLE (decl) = TREE_USED (decl);
8293               /* If it's still incomplete now, no init will save it.  */
8294               if (DECL_SIZE (decl) == NULL_TREE)
8295                 DECL_INITIAL (decl) = NULL_TREE;
8296               expand_decl (decl);
8297             }
8298           else if (! TREE_ASM_WRITTEN (decl)
8299                    && (TYPE_SIZE (type) != NULL_TREE
8300                        || TREE_CODE (type) == ARRAY_TYPE))
8301             {
8302               /* Do this here, because we did not expand this decl's
8303                  rtl in start_decl.  */
8304               if (DECL_RTL (decl) == NULL_RTX)
8305                 expand_decl (decl);
8306               else if (cleanup)
8307                 {
8308                   /* XXX: Why don't we use decl here?  */
8309                   /* Ans: Because it was already expanded? */
8310                   if (! expand_decl_cleanup (NULL_TREE, cleanup))
8311                     cp_error ("parser lost in parsing declaration of `%D'",
8312                               decl);
8313                   /* Cleanup used up here.  */
8314                   cleanup = NULL_TREE;
8315                 }
8316             }
8317
8318           if (current_binding_level->is_for_scope)
8319             {
8320               struct binding_level *outer 
8321                 = current_binding_level->level_chain;
8322
8323               /* Check to see if the same name is already bound at
8324                  the outer level, either because it was directly declared,
8325                  or because a dead for-decl got preserved.  In either case,
8326                  the code would not have been valid under the ARM
8327                  scope rules, so clear is_for_scope for the
8328                  current_binding_level.
8329
8330                  Otherwise, we need to preserve the temp slot for decl
8331                  to last into the outer binding level.  */
8332
8333               tree outer_binding 
8334                 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
8335               
8336               if (outer_binding && BINDING_LEVEL (outer_binding) == outer
8337                   && (TREE_CODE (BINDING_VALUE (outer_binding)) 
8338                       == VAR_DECL)
8339                   && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
8340                 {
8341                   BINDING_VALUE (outer_binding)
8342                     = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
8343                   current_binding_level->is_for_scope = 0;
8344                 }
8345               else if (DECL_IN_MEMORY_P (decl))
8346                 preserve_temp_slots (DECL_RTL (decl));
8347             }
8348
8349           expand_start_target_temps ();
8350
8351           if (DECL_SIZE (decl) && type != error_mark_node)
8352             {
8353               /* Compute and store the initial value.  */
8354               expand_decl_init (decl);
8355               already_used = TREE_USED (decl) || TREE_USED (type);
8356
8357               if (init || TYPE_NEEDS_CONSTRUCTING (type))
8358                 {
8359                   emit_line_note (DECL_SOURCE_FILE (decl),
8360                                   DECL_SOURCE_LINE (decl));
8361                   expand_aggr_init (decl, init, flags);
8362                 }
8363
8364               /* Set this to 0 so we can tell whether an aggregate which
8365                  was initialized was ever used.  Don't do this if it has a
8366                  destructor, so we don't complain about the 'resource
8367                  allocation is initialization' idiom.  */
8368               /* Now set attribute((unused)) on types so decls of
8369                  that type will be marked used. (see TREE_USED, above.) 
8370                  This avoids the warning problems this particular code
8371                  tried to work around. */
8372
8373               if (TYPE_NEEDS_CONSTRUCTING (type)
8374                   && ! already_used
8375                   && cleanup == NULL_TREE
8376                   && DECL_NAME (decl))
8377                 TREE_USED (decl) = 0;
8378
8379               if (already_used)
8380                 TREE_USED (decl) = 1;
8381             }
8382
8383           /* Cleanup any temporaries needed for the initial value.  */
8384           expand_end_target_temps ();
8385
8386           if (DECL_SIZE (decl) && type != error_mark_node)
8387             {
8388               /* Store the cleanup, if there was one.  */
8389               if (cleanup)
8390                 {
8391                   if (! expand_decl_cleanup (decl, cleanup))
8392                     cp_error ("parser lost in parsing declaration of `%D'",
8393                               decl);
8394                 }
8395             }
8396         }
8397     finish_end0:
8398
8399       /* Undo call to `pushclass' that was done in `start_decl'
8400          due to initialization of qualified member variable.
8401          I.e., Foo::x = 10;  */
8402       {
8403         tree context = DECL_REAL_CONTEXT (decl);
8404         if (context
8405             && TREE_CODE_CLASS (TREE_CODE (context)) == 't'
8406             && (TREE_CODE (decl) == VAR_DECL
8407                 /* We also have a pushclass done that we need to undo here
8408                    if we're at top level and declare a method.  */
8409                 || TREE_CODE (decl) == FUNCTION_DECL)
8410             /* If size hasn't been set, we're still defining it,
8411                and therefore inside the class body; don't pop
8412                the binding level..  */
8413             && TYPE_SIZE (context) != NULL_TREE
8414             && context == current_class_type)
8415           pop_nested_class ();
8416       }
8417     }
8418
8419  finish_end:
8420
8421   /* If requested, warn about definitions of large data objects.  */
8422
8423   if (warn_larger_than
8424       && ! processing_template_decl
8425       && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
8426       && !DECL_EXTERNAL (decl))
8427     {
8428       register tree decl_size = DECL_SIZE (decl);
8429
8430       if (decl_size && TREE_CODE (decl_size) == INTEGER_CST)
8431         {
8432           unsigned units = TREE_INT_CST_LOW (decl_size) / BITS_PER_UNIT;
8433
8434           if (units > larger_than_size)
8435             warning_with_decl (decl, "size of `%s' is %u bytes", units);
8436         }
8437     }
8438
8439   if (need_pop)
8440     {
8441       /* Resume permanent allocation, if not within a function.  */
8442       /* The corresponding push_obstacks_nochange is in start_decl,
8443          start_method, groktypename, and in grokfield.  */
8444       pop_obstacks ();
8445     }
8446
8447   if (was_readonly)
8448     TREE_READONLY (decl) = 1;
8449 }
8450
8451 /* This is here for a midend callback from c-common.c */
8452
8453 void
8454 finish_decl (decl, init, asmspec_tree)
8455      tree decl, init;
8456      tree asmspec_tree;
8457 {
8458   cp_finish_decl (decl, init, asmspec_tree, 1, 0);
8459 }
8460
8461 void
8462 expand_static_init (decl, init)
8463      tree decl;
8464      tree init;
8465 {
8466   tree oldstatic = value_member (decl, static_aggregates);
8467
8468   if (oldstatic)
8469     {
8470       if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
8471         cp_error ("multiple initializations given for `%D'", decl);
8472     }
8473   else if (! toplevel_bindings_p ())
8474     {
8475       /* Emit code to perform this initialization but once.  */
8476       tree temp;
8477
8478       /* Remember this information until end of file.  */
8479       push_obstacks (&permanent_obstack, &permanent_obstack);
8480
8481       /* Emit code to perform this initialization but once.  This code
8482          looks like:
8483
8484            static int temp = 0;
8485            if (!temp) {
8486              // Do initialization.
8487              temp = 1;
8488              // Register variable for destruction at end of program.
8489            }
8490
8491          Note that the `temp' variable is only set to 1 *after* the
8492          initialization is complete.  This ensures that an exception,
8493          thrown during the construction, will cause the variable to
8494          reinitialized when we pass through this code again, as per:
8495          
8496            [stmt.dcl]
8497
8498            If the initialization exits by throwing an exception, the
8499            initialization is not complete, so it will be tried again
8500            the next time control enters the declaration.
8501
8502          In theory, this process should be thread-safe, too; multiple
8503          threads should not be able to initialize the variable more
8504          than once.  We don't yet attempt to ensure thread-safety.  */
8505       temp = get_temp_name (integer_type_node, 1);
8506       rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
8507
8508       /* Begin the conditional initialization.  */
8509       expand_start_cond (build_binary_op (EQ_EXPR, temp,
8510                                           integer_zero_node), 0);
8511       expand_start_target_temps ();
8512
8513       /* Do the initialization itself.  */
8514       if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
8515           || (init && TREE_CODE (init) == TREE_LIST))
8516         {
8517           expand_aggr_init (decl, init, 0);
8518           do_pending_stack_adjust ();
8519         }
8520       else if (init)
8521         expand_assignment (decl, init, 0, 0);
8522
8523       /* Set TEMP to 1.  */
8524       expand_assignment (temp, integer_one_node, 0, 0);
8525
8526       /* Cleanup any temporaries needed for the initial value.  If
8527          destroying one of the temporaries causes an exception to be
8528          thrown, then the object itself has still been fully
8529          constructed.  */
8530       expand_end_target_temps ();
8531
8532       /* Use atexit to register a function for destroying this static
8533          variable.  */
8534       if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
8535         {
8536           tree cleanup, fcall;
8537           static tree Atexit = 0;
8538           int saved_flag_access_control;
8539
8540           if (Atexit == 0)
8541             {
8542               tree atexit_fndecl, PFV, pfvlist;
8543               /* Remember this information until end of file.  */
8544               push_obstacks (&permanent_obstack, &permanent_obstack);
8545               PFV = build_pointer_type (build_function_type
8546                                         (void_type_node, void_list_node));
8547
8548               pfvlist = tree_cons (NULL_TREE, PFV, void_list_node);
8549
8550               push_lang_context (lang_name_c);
8551               atexit_fndecl
8552                 = builtin_function ("atexit",
8553                                     build_function_type (void_type_node,
8554                                                          pfvlist),
8555                                     NOT_BUILT_IN, NULL_PTR);
8556               mark_used (atexit_fndecl);
8557               Atexit = default_conversion (atexit_fndecl);
8558               pop_lang_context ();
8559               pop_obstacks ();
8560             }
8561               
8562           /* Call build_cleanup before we enter the anonymous function
8563              so that any access checks will be done relative to the
8564              current scope, rather than the scope of the anonymous
8565              function.  */
8566           build_cleanup (decl);
8567
8568           /* Now start the function.  */
8569           cleanup = start_anon_func ();
8570
8571           /* Now, recompute the cleanup.  It may contain SAVE_EXPRs
8572              that refer to the original function, rather than the
8573              anonymous one.  That will make the back-end think that
8574              nested functions are in use, which causes confusion.  */
8575           saved_flag_access_control = flag_access_control;
8576           flag_access_control = 0;
8577           fcall = build_cleanup (decl);
8578           flag_access_control = saved_flag_access_control;
8579
8580           /* Finish off the function.  */
8581           expand_expr_stmt (fcall);
8582           end_anon_func ();
8583
8584           /* Call atexit with the cleanup function.  */
8585           mark_addressable (cleanup);
8586           cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
8587           fcall = build_function_call (Atexit, 
8588                                        expr_tree_cons (NULL_TREE, 
8589                                                        cleanup, 
8590                                                        NULL_TREE));
8591           expand_expr_stmt (fcall);
8592         }
8593
8594       expand_end_cond ();
8595       /* Resume old (possibly temporary) allocation.  */
8596       pop_obstacks ();
8597     }
8598   else
8599     {
8600       /* This code takes into account memory allocation policy of
8601          `start_decl'.  Namely, if TYPE_NEEDS_CONSTRUCTING does not
8602          hold for this object, then we must make permanent the storage
8603          currently in the temporary obstack.  */
8604       if (!TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
8605         preserve_initializer ();
8606       static_aggregates = perm_tree_cons (init, decl, static_aggregates);
8607     }
8608 }
8609 \f
8610 /* Make TYPE a complete type based on INITIAL_VALUE.
8611    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8612    2 if there was no information (in which case assume 0 if DO_DEFAULT).  */
8613
8614 int
8615 complete_array_type (type, initial_value, do_default)
8616      tree type, initial_value;
8617      int do_default;
8618 {
8619   register tree maxindex = NULL_TREE;
8620   int value = 0;
8621   
8622   /* Allocate on the same obstack as TYPE.  */
8623   push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8624   
8625   if (initial_value)
8626     {
8627       /* Note MAXINDEX  is really the maximum index,
8628          one less than the size.  */
8629       if (TREE_CODE (initial_value) == STRING_CST)
8630         {
8631           int eltsize
8632             = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8633           maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8634                                    / eltsize) - 1, 0);
8635         }
8636       else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8637         {
8638           tree elts = CONSTRUCTOR_ELTS (initial_value);
8639           maxindex = size_binop (MINUS_EXPR, integer_zero_node, size_one_node);
8640           for (; elts; elts = TREE_CHAIN (elts))
8641             {
8642               if (TREE_PURPOSE (elts))
8643                 maxindex = TREE_PURPOSE (elts);
8644               else
8645                 maxindex = size_binop (PLUS_EXPR, maxindex, size_one_node);
8646             }
8647           maxindex = copy_node (maxindex);
8648         }
8649       else
8650         {
8651           /* Make an error message unless that happened already.  */
8652           if (initial_value != error_mark_node)
8653             value = 1;
8654           else
8655             initial_value = NULL_TREE;
8656
8657           /* Prevent further error messages.  */
8658           maxindex = build_int_2 (0, 0);
8659         }
8660     }
8661
8662   if (!maxindex)
8663     {
8664       if (do_default)
8665         maxindex = build_int_2 (0, 0);
8666       value = 2;
8667     }
8668
8669   if (maxindex)
8670     {
8671       tree itype;
8672       tree domain;
8673
8674       domain = build_index_type (maxindex);
8675       TYPE_DOMAIN (type) = domain;
8676
8677       if (! TREE_TYPE (maxindex))
8678         TREE_TYPE (maxindex) = domain;
8679       if (initial_value)
8680         itype = TREE_TYPE (initial_value);
8681       else
8682         itype = NULL;
8683       if (itype && !TYPE_DOMAIN (itype))
8684         TYPE_DOMAIN (itype) = domain;
8685       /* The type of the main variant should never be used for arrays
8686          of different sizes.  It should only ever be completed with the
8687          size of the array.  */
8688       if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
8689         TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
8690     }
8691
8692   pop_obstacks();
8693   
8694   /* Lay out the type now that we can get the real answer.  */
8695
8696   layout_type (type);
8697
8698   return value;
8699 }
8700 \f
8701 /* Return zero if something is declared to be a member of type
8702    CTYPE when in the context of CUR_TYPE.  STRING is the error
8703    message to print in that case.  Otherwise, quietly return 1.  */
8704
8705 static int
8706 member_function_or_else (ctype, cur_type, string)
8707      tree ctype, cur_type;
8708      const char *string;
8709 {
8710   if (ctype && ctype != cur_type)
8711     {
8712       error (string, TYPE_NAME_STRING (ctype));
8713       return 0;
8714     }
8715   return 1;
8716 }
8717 \f
8718 /* Subroutine of `grokdeclarator'.  */
8719
8720 /* Generate errors possibly applicable for a given set of specifiers.
8721    This is for ARM $7.1.2.  */
8722
8723 static void
8724 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8725      tree object;
8726      const char *type;
8727      int virtualp, quals, friendp, raises, inlinep;
8728 {
8729   if (virtualp)
8730     cp_error ("`%D' declared as a `virtual' %s", object, type);
8731   if (inlinep)
8732     cp_error ("`%D' declared as an `inline' %s", object, type);
8733   if (quals)
8734     cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
8735               object, type);
8736   if (friendp)
8737     cp_error_at ("invalid friend declaration", object);
8738   if (raises)
8739     cp_error_at ("invalid exception specifications", object);
8740 }
8741
8742 /* CTYPE is class type, or null if non-class.
8743    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8744    or METHOD_TYPE.
8745    DECLARATOR is the function's name.
8746    VIRTUALP is truthvalue of whether the function is virtual or not.
8747    FLAGS are to be passed through to `grokclassfn'.
8748    QUALS are qualifiers indicating whether the function is `const'
8749    or `volatile'.
8750    RAISES is a list of exceptions that this function can raise.
8751    CHECK is 1 if we must find this method in CTYPE, 0 if we should
8752    not look, and -1 if we should not call `grokclassfn' at all.  
8753
8754    Returns `NULL_TREE' if something goes wrong, after issuing
8755    applicable error messages.  */
8756
8757 static tree
8758 grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
8759             raises, check, friendp, publicp, inlinep, funcdef_flag,
8760             template_count, in_namespace)
8761      tree ctype, type;
8762      tree declarator;
8763      tree orig_declarator;
8764      int virtualp;
8765      enum overload_flags flags;
8766      tree quals, raises;
8767      int check, friendp, publicp, inlinep, funcdef_flag, template_count;
8768      tree in_namespace;
8769 {
8770   tree cname, decl;
8771   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8772   int has_default_arg = 0;
8773   tree t;
8774
8775   if (ctype)
8776     cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8777       ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8778   else
8779     cname = NULL_TREE;
8780
8781   if (raises)
8782     {
8783       type = build_exception_variant (type, raises);
8784     }
8785
8786   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8787   /* Propagate volatile out from type to decl. */
8788   if (TYPE_VOLATILE (type))
8789     TREE_THIS_VOLATILE (decl) = 1;
8790
8791   /* If this decl has namespace scope, set that up.  */
8792   if (in_namespace)
8793     set_decl_namespace (decl, in_namespace, friendp);
8794   else if (publicp && ! ctype)
8795     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8796
8797   /* `main' and builtins have implicit 'C' linkage.  */
8798   if ((MAIN_NAME_P (declarator)
8799        || (IDENTIFIER_LENGTH (declarator) > 10
8800            && IDENTIFIER_POINTER (declarator)[0] == '_'
8801            && IDENTIFIER_POINTER (declarator)[1] == '_'
8802            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8803       && current_lang_name == lang_name_cplusplus
8804       && ctype == NULL_TREE
8805       /* NULL_TREE means global namespace.  */
8806       && DECL_CONTEXT (decl) == NULL_TREE)
8807     DECL_LANGUAGE (decl) = lang_c;
8808
8809   /* Should probably propagate const out from type to decl I bet (mrs).  */
8810   if (staticp)
8811     {
8812       DECL_STATIC_FUNCTION_P (decl) = 1;
8813       DECL_CONTEXT (decl) = ctype;
8814     }
8815
8816   if (ctype)
8817     DECL_CLASS_CONTEXT (decl) = ctype;
8818
8819   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8820     {
8821       if (processing_template_decl)
8822         error ("cannot declare `main' to be a template");
8823       if (inlinep)
8824         error ("cannot declare `main' to be inline");
8825       else if (! publicp)
8826         error ("cannot declare `main' to be static");
8827       inlinep = 0;
8828       publicp = 1;
8829     }
8830
8831   /* Members of anonymous types and local classes have no linkage; make
8832      them internal.  */
8833   if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
8834                 || hack_decl_function_context (TYPE_MAIN_DECL (ctype))))
8835     publicp = 0;
8836
8837   if (publicp)
8838     {
8839       /* [basic.link]: A name with no linkage (notably, the name of a class
8840          or enumeration declared in a local scope) shall not be used to
8841          declare an entity with linkage.
8842
8843          Only check this for public decls for now.  */
8844       t = no_linkage_check (TREE_TYPE (decl));
8845       if (t)
8846         {
8847           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8848             {
8849               if (DECL_LANGUAGE (decl) == lang_c)
8850                 /* Allow this; it's pretty common in C.  */;
8851               else
8852                 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8853                             decl);
8854             }
8855           else
8856             cp_pedwarn ("non-local function `%#D' uses local type `%T'",
8857                         decl, t);
8858         }
8859     }
8860
8861   TREE_PUBLIC (decl) = publicp;
8862   if (! publicp)
8863     {
8864       DECL_INTERFACE_KNOWN (decl) = 1;
8865       DECL_NOT_REALLY_EXTERN (decl) = 1;
8866     }
8867
8868   if (inlinep)
8869     DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8870
8871   DECL_EXTERNAL (decl) = 1;
8872   if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8873     {
8874       cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8875                 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8876       quals = NULL_TREE;
8877     }
8878
8879   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8880     grok_op_properties (decl, virtualp, check < 0);
8881
8882   if (ctype && hack_decl_function_context (decl))
8883     DECL_NO_STATIC_CHAIN (decl) = 1;
8884
8885   for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8886     if (TREE_PURPOSE (t)
8887         && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8888       {
8889         has_default_arg = 1;
8890         break;
8891       }
8892
8893   if (friendp
8894       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8895     {
8896       if (funcdef_flag)
8897         cp_error
8898           ("defining explicit specialization `%D' in friend declaration",
8899            orig_declarator);
8900       else
8901         {
8902           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8903             {
8904               /* Something like `template <class T> friend void f<T>()'.  */
8905               cp_error ("template-id `%D' in declaration of primary template", 
8906                         orig_declarator);
8907               return NULL_TREE;
8908             }
8909
8910
8911           /* A friend declaration of the form friend void f<>().  Record
8912              the information in the TEMPLATE_ID_EXPR.  */
8913           SET_DECL_IMPLICIT_INSTANTIATION (decl);
8914           DECL_TEMPLATE_INFO (decl)
8915             = perm_tree_cons (TREE_OPERAND (orig_declarator, 0),
8916                               TREE_OPERAND (orig_declarator, 1),
8917                               NULL_TREE);
8918
8919           if (has_default_arg)
8920             {
8921               cp_error ("default arguments are not allowed in declaration of friend template specialization `%D'",
8922                         decl);
8923               return NULL_TREE;
8924             }
8925
8926           if (inlinep)
8927             {
8928               cp_error ("`inline' is not allowed in declaration of friend template specialization `%D'", 
8929                         decl);
8930               return NULL_TREE;
8931             }
8932         }
8933     }
8934
8935   if (has_default_arg)
8936     add_defarg_fn (decl);
8937
8938   /* Plain overloading: will not be grok'd by grokclassfn.  */
8939   if (! ctype && ! processing_template_decl
8940       && DECL_LANGUAGE (decl) != lang_c
8941       && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
8942     set_mangled_name_for_decl (decl);
8943
8944   if (funcdef_flag)
8945     /* Make the init_value nonzero so pushdecl knows this is not
8946        tentative.  error_mark_node is replaced later with the BLOCK.  */
8947     DECL_INITIAL (decl) = error_mark_node;
8948
8949   /* Caller will do the rest of this.  */
8950   if (check < 0)
8951     return decl;
8952
8953   if (check && funcdef_flag)
8954     DECL_INITIAL (decl) = error_mark_node;
8955
8956   if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
8957     {
8958       tree tmp;
8959       /* Just handle constructors here.  We could do this
8960          inside the following if stmt, but I think
8961          that the code is more legible by breaking this
8962          case out.  See comments below for what each of
8963          the following calls is supposed to do.  */
8964       DECL_CONSTRUCTOR_P (decl) = 1;
8965
8966       grokclassfn (ctype, decl, flags, quals);
8967
8968       decl = check_explicit_specialization (orig_declarator, decl,
8969                                             template_count, 
8970                                             2 * (funcdef_flag != 0) + 
8971                                             4 * (friendp != 0));
8972
8973       if (decl == error_mark_node)
8974         return NULL_TREE;
8975
8976       maybe_vlist_ctor_wrapper (decl, funcdef_flag);
8977
8978       if ((! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8979           && check)
8980         {
8981           tmp = check_classfn (ctype, decl);
8982
8983           if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8984             tmp = DECL_TEMPLATE_RESULT(tmp);
8985
8986           if (tmp && DECL_ARTIFICIAL (tmp))
8987             cp_error ("definition of implicitly-declared `%D'", tmp);
8988           if (tmp && duplicate_decls (decl, tmp))
8989             return tmp;
8990         }
8991       if (! grok_ctor_properties (ctype, decl))
8992         return NULL_TREE;
8993     }
8994   else
8995     {
8996       tree tmp;
8997
8998       /* Function gets the ugly name, field gets the nice one.
8999          This call may change the type of the function (because
9000          of default parameters)!  */
9001       if (ctype != NULL_TREE)
9002         grokclassfn (ctype, decl, flags, quals);
9003
9004       decl = check_explicit_specialization (orig_declarator, decl,
9005                                             template_count, 
9006                                             2 * (funcdef_flag != 0) + 
9007                                             4 * (friendp != 0));
9008       if (decl == error_mark_node)
9009         return NULL_TREE;
9010
9011       if (ctype != NULL_TREE
9012           && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
9013           && check)
9014         {
9015           tmp = check_classfn (ctype, decl);
9016
9017           if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
9018             tmp = DECL_TEMPLATE_RESULT (tmp);
9019               
9020           if (tmp && DECL_STATIC_FUNCTION_P (tmp)
9021               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
9022             {
9023               /* Remove the `this' parm added by grokclassfn.
9024                  XXX Isn't this done in start_function, too?  */
9025               revert_static_member_fn (&decl, NULL, NULL);
9026               last_function_parms = TREE_CHAIN (last_function_parms);
9027             }
9028           if (tmp && DECL_ARTIFICIAL (tmp))
9029             cp_error ("definition of implicitly-declared `%D'", tmp);
9030           if (tmp)
9031             {
9032               /* Attempt to merge the declarations.  This can fail, in
9033                  the case of some illegal specialization declarations.  */
9034               if (!duplicate_decls (decl, tmp))
9035                 cp_error ("no `%#D' member function declared in class `%T'",
9036                           decl, ctype);
9037               return tmp;
9038             }
9039         }
9040
9041       if (ctype == NULL_TREE || check)
9042         return decl;
9043
9044       if (virtualp)
9045         {
9046           DECL_VIRTUAL_P (decl) = 1;
9047           if (DECL_VINDEX (decl) == NULL_TREE)
9048             DECL_VINDEX (decl) = error_mark_node;
9049           IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
9050         }
9051     }
9052   return decl;
9053 }
9054
9055 static tree
9056 grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
9057      tree type;
9058      tree declarator;
9059      RID_BIT_TYPE *specbits_in;
9060      int initialized;
9061      int constp;
9062      tree in_namespace;
9063 {
9064   tree decl;
9065   RID_BIT_TYPE specbits;
9066
9067   specbits = *specbits_in;
9068
9069   if (TREE_CODE (type) == OFFSET_TYPE)
9070     {
9071       /* If you declare a static member so that it
9072          can be initialized, the code will reach here.  */
9073       tree basetype = TYPE_OFFSET_BASETYPE (type);
9074       type = TREE_TYPE (type);
9075       decl = build_lang_field_decl (VAR_DECL, declarator, type);
9076       DECL_CONTEXT (decl) = basetype;
9077       DECL_CLASS_CONTEXT (decl) = basetype;
9078       DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
9079     }
9080   else
9081     {
9082       tree context;
9083
9084       if (in_namespace)
9085         context = in_namespace;
9086       else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
9087         context = current_namespace;
9088       else
9089         context = NULL_TREE;
9090
9091       decl = build_decl (VAR_DECL, declarator, complete_type (type));
9092
9093       if (context)
9094         set_decl_namespace (decl, context, 0);
9095
9096       context = DECL_CONTEXT (decl);
9097       if (declarator && context && current_lang_name != lang_name_c)
9098         DECL_ASSEMBLER_NAME (decl) = build_static_name (context, declarator);
9099     }
9100
9101   if (in_namespace)
9102     set_decl_namespace (decl, in_namespace, 0);
9103
9104   if (RIDBIT_SETP (RID_EXTERN, specbits))
9105     {
9106       DECL_THIS_EXTERN (decl) = 1;
9107       DECL_EXTERNAL (decl) = !initialized;
9108     }
9109
9110   /* In class context, static means one per class,
9111      public access, and static storage.  */
9112   if (DECL_CLASS_SCOPE_P (decl))
9113     {
9114       TREE_PUBLIC (decl) = 1;
9115       TREE_STATIC (decl) = 1;
9116       DECL_EXTERNAL (decl) = 0;
9117     }
9118   /* At top level, either `static' or no s.c. makes a definition
9119      (perhaps tentative), and absence of `static' makes it public.  */
9120   else if (toplevel_bindings_p ())
9121     {
9122       TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
9123                             && (DECL_THIS_EXTERN (decl) || ! constp));
9124       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
9125     }
9126   /* Not at top level, only `static' makes a static definition.  */
9127   else
9128     {
9129       TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
9130       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
9131     }
9132
9133   if (TREE_PUBLIC (decl))
9134     {
9135       /* [basic.link]: A name with no linkage (notably, the name of a class
9136          or enumeration declared in a local scope) shall not be used to
9137          declare an entity with linkage.
9138
9139          Only check this for public decls for now.  */
9140       tree t = no_linkage_check (TREE_TYPE (decl));
9141       if (t)
9142         {
9143           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
9144             /* Ignore for now; `enum { foo } e' is pretty common.  */;
9145           else
9146             cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
9147                         decl, t);
9148         }
9149     }
9150
9151   return decl;
9152 }
9153
9154 /* Create and return a canonical pointer to member function type, for
9155    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
9156
9157 tree
9158 build_ptrmemfunc_type (type)
9159      tree type;
9160 {
9161   tree fields[4];
9162   tree t;
9163   tree u;
9164
9165   /* If a canonical type already exists for this type, use it.  We use
9166      this method instead of type_hash_canon, because it only does a
9167      simple equality check on the list of field members.  */
9168
9169   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
9170     return t;
9171
9172   push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
9173
9174   u = make_lang_type (UNION_TYPE);
9175   SET_IS_AGGR_TYPE (u, 0);
9176   fields[0] = build_lang_field_decl (FIELD_DECL, pfn_identifier, type);
9177   fields[1] = build_lang_field_decl (FIELD_DECL, delta2_identifier,
9178                                      delta_type_node);
9179   finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
9180   TYPE_NAME (u) = NULL_TREE;
9181
9182   t = make_lang_type (RECORD_TYPE);
9183
9184   /* Let the front-end know this is a pointer to member function...  */
9185   TYPE_PTRMEMFUNC_FLAG (t) = 1;
9186   /* ... and not really an aggregate.  */
9187   SET_IS_AGGR_TYPE (t, 0);
9188
9189   fields[0] = build_lang_field_decl (FIELD_DECL, delta_identifier,
9190                                      delta_type_node);
9191   fields[1] = build_lang_field_decl (FIELD_DECL, index_identifier,
9192                                      delta_type_node);
9193   fields[2] = build_lang_field_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
9194   finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
9195
9196   pop_obstacks ();
9197
9198   /* Zap out the name so that the back-end will give us the debugging
9199      information for this anonymous RECORD_TYPE.  */
9200   TYPE_NAME (t) = NULL_TREE;
9201
9202   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
9203
9204   /* Seems to be wanted.  */
9205   CLASSTYPE_GOT_SEMICOLON (t) = 1;
9206   return t;
9207 }
9208
9209 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9210    Check to see that the definition is valid.  Issue appropriate error
9211    messages.  Return 1 if the definition is particularly bad, or 0
9212    otherwise.  */
9213
9214 int
9215 check_static_variable_definition (decl, type)
9216      tree decl;
9217      tree type;
9218 {
9219   /* Motion 10 at San Diego: If a static const integral data member is
9220      initialized with an integral constant expression, the initializer
9221      may appear either in the declaration (within the class), or in
9222      the definition, but not both.  If it appears in the class, the
9223      member is a member constant.  The file-scope definition is always
9224      required.  */
9225   if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
9226     {
9227       cp_error ("in-class initialization of static data member of non-integral type `%T'", 
9228                 type);
9229       /* If we just return the declaration, crashes will sometimes
9230          occur.  We therefore return void_type_node, as if this was a
9231          friend declaration, to cause callers to completely ignore
9232          this declaration.  */
9233       return 1;
9234     }
9235   else if (!CP_TYPE_CONST_P (type))
9236     cp_error ("ANSI C++ forbids in-class initialization of non-const static member `%D'",
9237               decl);
9238   else if (pedantic && !INTEGRAL_TYPE_P (type))
9239     cp_pedwarn ("ANSI C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
9240
9241   return 0;
9242 }
9243
9244 /* Given declspecs and a declarator,
9245    determine the name and type of the object declared
9246    and construct a ..._DECL node for it.
9247    (In one case we can return a ..._TYPE node instead.
9248     For invalid input we sometimes return 0.)
9249
9250    DECLSPECS is a chain of tree_list nodes whose value fields
9251     are the storage classes and type specifiers.
9252
9253    DECL_CONTEXT says which syntactic context this declaration is in:
9254      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
9255      FUNCDEF for a function definition.  Like NORMAL but a few different
9256       error messages in each case.  Return value may be zero meaning
9257       this definition is too screwy to try to parse.
9258      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
9259       handle member functions (which have FIELD context).
9260       Return value may be zero meaning this definition is too screwy to
9261       try to parse.
9262      PARM for a parameter declaration (either within a function prototype
9263       or before a function body).  Make a PARM_DECL, or return void_type_node.
9264      CATCHPARM for a parameter declaration before a catch clause.
9265      TYPENAME if for a typename (in a cast or sizeof).
9266       Don't make a DECL node; just return the ..._TYPE node.
9267      FIELD for a struct or union field; make a FIELD_DECL.
9268      BITFIELD for a field with specified width.
9269    INITIALIZED is 1 if the decl has an initializer.
9270
9271    ATTRLIST is a TREE_LIST node with prefix attributes in TREE_VALUE and
9272    normal attributes in TREE_PURPOSE, or NULL_TREE.
9273
9274    In the TYPENAME case, DECLARATOR is really an absolute declarator.
9275    It may also be so in the PARM case, for a prototype where the
9276    argument type is specified but not the name.
9277
9278    This function is where the complicated C meanings of `static'
9279    and `extern' are interpreted.
9280
9281    For C++, if there is any monkey business to do, the function which
9282    calls this one must do it, i.e., prepending instance variables,
9283    renaming overloaded function names, etc.
9284
9285    Note that for this C++, it is an error to define a method within a class
9286    which does not belong to that class.
9287
9288    Except in the case where SCOPE_REFs are implicitly known (such as
9289    methods within a class being redundantly qualified),
9290    declarations which involve SCOPE_REFs are returned as SCOPE_REFs
9291    (class_name::decl_name).  The caller must also deal with this.
9292
9293    If a constructor or destructor is seen, and the context is FIELD,
9294    then the type gains the attribute TREE_HAS_x.  If such a declaration
9295    is erroneous, NULL_TREE is returned.
9296
9297    QUALS is used only for FUNCDEF and MEMFUNCDEF cases.  For a member
9298    function, these are the qualifiers to give to the `this' pointer.
9299
9300    May return void_type_node if the declarator turned out to be a friend.
9301    See grokfield for details.  */
9302
9303 enum return_types { return_normal, return_ctor, return_dtor, return_conversion };
9304
9305 tree
9306 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
9307      tree declspecs;
9308      tree declarator;
9309      enum decl_context decl_context;
9310      int initialized;
9311      tree attrlist;
9312 {
9313   RID_BIT_TYPE specbits;
9314   int nclasses = 0;
9315   tree spec;
9316   tree type = NULL_TREE;
9317   int longlong = 0;
9318   int constp;
9319   int restrictp;
9320   int volatilep;
9321   int type_quals;
9322   int virtualp, explicitp, friendp, inlinep, staticp;
9323   int explicit_int = 0;
9324   int explicit_char = 0;
9325   int defaulted_int = 0;
9326   int opaque_typedef = 0;
9327   tree typedef_decl = NULL_TREE;
9328   char *name;
9329   tree typedef_type = NULL_TREE;
9330   int funcdef_flag = 0;
9331   enum tree_code innermost_code = ERROR_MARK;
9332   int bitfield = 0;
9333 #if 0
9334   /* See the code below that used this.  */
9335   tree decl_machine_attr = NULL_TREE;
9336 #endif
9337   /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
9338      All FIELD_DECLs we build here have `init' put into their DECL_INITIAL.  */
9339   tree init = NULL_TREE;
9340
9341   /* Keep track of what sort of function is being processed
9342      so that we can warn about default return values, or explicit
9343      return values which do not match prescribed defaults.  */
9344   enum return_types return_type = return_normal;
9345
9346   tree dname = NULL_TREE;
9347   tree ctype = current_class_type;
9348   tree ctor_return_type = NULL_TREE;
9349   enum overload_flags flags = NO_SPECIAL;
9350   tree quals = NULL_TREE;
9351   tree raises = NULL_TREE;
9352   int template_count = 0;
9353   tree in_namespace = NULL_TREE;
9354   tree inner_attrs;
9355   int ignore_attrs;
9356
9357   RIDBIT_RESET_ALL (specbits);
9358   if (decl_context == FUNCDEF)
9359     funcdef_flag = 1, decl_context = NORMAL;
9360   else if (decl_context == MEMFUNCDEF)
9361     funcdef_flag = -1, decl_context = FIELD;
9362   else if (decl_context == BITFIELD)
9363     bitfield = 1, decl_context = FIELD;
9364
9365   /* Look inside a declarator for the name being declared
9366      and get it as a string, for an error message.  */
9367   {
9368     tree *next = &declarator;
9369     register tree decl;
9370     name = NULL;
9371
9372     while (next && *next)
9373       {
9374         decl = *next;
9375         switch (TREE_CODE (decl))
9376           {
9377           case TREE_LIST:
9378             /* For attributes.  */
9379             next = &TREE_VALUE (decl);
9380             break;
9381
9382           case COND_EXPR:
9383             ctype = NULL_TREE;
9384             next = &TREE_OPERAND (decl, 0);
9385             break;
9386
9387           case BIT_NOT_EXPR:    /* For C++ destructors!  */
9388             {
9389               tree name = TREE_OPERAND (decl, 0);
9390               tree rename = NULL_TREE;
9391
9392               my_friendly_assert (flags == NO_SPECIAL, 152);
9393               flags = DTOR_FLAG;
9394               return_type = return_dtor;
9395               if (TREE_CODE (name) == TYPE_DECL)
9396                 TREE_OPERAND (decl, 0) = name = constructor_name (name);
9397               my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
9398               if (ctype == NULL_TREE)
9399                 {
9400                   if (current_class_type == NULL_TREE)
9401                     {
9402                       error ("destructors must be member functions");
9403                       flags = NO_SPECIAL;
9404                     }
9405                   else
9406                     {
9407                       tree t = constructor_name (current_class_name);
9408                       if (t != name)
9409                         rename = t;
9410                     }
9411                 }
9412               else
9413                 {
9414                   tree t = constructor_name (ctype);
9415                   if (t != name)
9416                     rename = t;
9417                 }
9418
9419               if (rename)
9420                 {
9421                   cp_error ("destructor `%T' must match class name `%T'",
9422                             name, rename);
9423                   TREE_OPERAND (decl, 0) = rename;
9424                 }
9425               next = &name;
9426             }
9427             break;
9428
9429           case ADDR_EXPR:       /* C++ reference declaration */
9430             /* Fall through. */
9431           case ARRAY_REF:
9432           case INDIRECT_REF:
9433             ctype = NULL_TREE;
9434             innermost_code = TREE_CODE (decl);
9435             next = &TREE_OPERAND (decl, 0);
9436             break;
9437
9438           case CALL_EXPR:
9439             if (parmlist_is_exprlist (TREE_OPERAND (decl, 1)))
9440               {
9441                 /* This is actually a variable declaration using
9442                    constructor syntax.  We need to call start_decl and
9443                    cp_finish_decl so we can get the variable
9444                    initialized...  */
9445
9446                 tree attributes, prefix_attributes;
9447
9448                 *next = TREE_OPERAND (decl, 0);
9449                 init = TREE_OPERAND (decl, 1);
9450
9451                 if (attrlist)
9452                   {
9453                     attributes = TREE_PURPOSE (attrlist);
9454                     prefix_attributes = TREE_VALUE (attrlist);
9455                   }
9456                 else
9457                   {
9458                     attributes = NULL_TREE;
9459                     prefix_attributes = NULL_TREE;
9460                   }
9461
9462                 decl = start_decl (declarator, declspecs, 1,
9463                                    attributes, prefix_attributes);
9464                 if (decl)
9465                   {
9466                     /* Look for __unused__ attribute */
9467                     if (TREE_USED (TREE_TYPE (decl)))
9468                       TREE_USED (decl) = 1;
9469                     finish_decl (decl, init, NULL_TREE);
9470                   }
9471                 else
9472                   cp_error ("invalid declarator");
9473                 return 0;
9474               }
9475             innermost_code = TREE_CODE (decl);
9476             if (decl_context == FIELD && ctype == NULL_TREE)
9477               ctype = current_class_type;
9478             if (ctype
9479                 && TREE_OPERAND (decl, 0)
9480                 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
9481                     && ((DECL_NAME (TREE_OPERAND (decl, 0))
9482                          == constructor_name_full (ctype))
9483                         || (DECL_NAME (TREE_OPERAND (decl, 0))
9484                             == constructor_name (ctype)))))
9485               TREE_OPERAND (decl, 0) = constructor_name (ctype);
9486             next = &TREE_OPERAND (decl, 0);
9487             decl = *next;
9488             if (ctype != NULL_TREE
9489                 && decl != NULL_TREE && flags != DTOR_FLAG
9490                 && decl == constructor_name (ctype))
9491               {
9492                 return_type = return_ctor;
9493                 ctor_return_type = ctype;
9494               }
9495             ctype = NULL_TREE;
9496             break;
9497             
9498           case TEMPLATE_ID_EXPR:
9499               {
9500                 tree fns = TREE_OPERAND (decl, 0);
9501
9502                 if (TREE_CODE (fns) == LOOKUP_EXPR)
9503                   fns = TREE_OPERAND (fns, 0);
9504
9505                 dname = fns;
9506                 if (TREE_CODE (dname) == COMPONENT_REF)
9507                   dname = TREE_OPERAND (dname, 1);
9508                 if (TREE_CODE (dname) != IDENTIFIER_NODE)
9509                   {
9510                     my_friendly_assert (is_overloaded_fn (dname),
9511                                         19990331);
9512                     dname = DECL_NAME (get_first_fn (dname));
9513                   }
9514               }
9515           /* Fall through. */
9516
9517           case IDENTIFIER_NODE:
9518             if (TREE_CODE (decl) == IDENTIFIER_NODE)
9519               dname = decl;
9520
9521             next = 0;
9522
9523             if (is_rid (dname))
9524               {
9525                 cp_error ("declarator-id missing; using reserved word `%D'",
9526                           dname);
9527                 name = IDENTIFIER_POINTER (dname);
9528               }
9529             if (! IDENTIFIER_OPNAME_P (dname)
9530                 /* GNU/Linux headers use '__op'.  Arrgh.  */
9531                 || (IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname)))
9532               name = IDENTIFIER_POINTER (dname);
9533             else
9534               {
9535                 if (IDENTIFIER_TYPENAME_P (dname))
9536                   {
9537                     my_friendly_assert (flags == NO_SPECIAL, 154);
9538                     flags = TYPENAME_FLAG;
9539                     ctor_return_type = TREE_TYPE (dname);
9540                     return_type = return_conversion;
9541                   }
9542                 name = operator_name_string (dname);
9543               }
9544             break;
9545
9546             /* C++ extension */
9547           case SCOPE_REF:
9548             {
9549               /* Perform error checking, and decide on a ctype.  */
9550               tree cname = TREE_OPERAND (decl, 0);
9551               if (cname == NULL_TREE)
9552                 ctype = NULL_TREE;
9553               else if (TREE_CODE (cname) == NAMESPACE_DECL)
9554                 {
9555                   ctype = NULL_TREE;
9556                   in_namespace = TREE_OPERAND (decl, 0);
9557                   TREE_OPERAND (decl, 0) = NULL_TREE;
9558                 }
9559               else if (! is_aggr_type (cname, 1))
9560                 TREE_OPERAND (decl, 0) = NULL_TREE;
9561               /* Must test TREE_OPERAND (decl, 1), in case user gives
9562                  us `typedef (class::memfunc)(int); memfunc *memfuncptr;'  */
9563               else if (TREE_OPERAND (decl, 1)
9564                        && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9565                 ctype = cname;
9566               else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
9567                        || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
9568                 {
9569                   cp_error ("`%T::%D' is not a valid declarator", cname,
9570                             TREE_OPERAND (decl, 1));
9571                   cp_error ("  perhaps you want `typename %T::%D' to make it a type",
9572                             cname, TREE_OPERAND (decl, 1));
9573                   return void_type_node;
9574                 }
9575               else if (ctype == NULL_TREE)
9576                 ctype = cname;
9577               else if (TREE_COMPLEXITY (decl) == current_class_depth)
9578                 TREE_OPERAND (decl, 0) = ctype;
9579               else
9580                 {
9581                   if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
9582                     {
9583                       cp_error ("type `%T' is not derived from type `%T'",
9584                                 cname, ctype);
9585                       TREE_OPERAND (decl, 0) = NULL_TREE;
9586                     }
9587                   else
9588                     ctype = cname;
9589                 }
9590
9591               if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
9592                   && ((DECL_NAME (TREE_OPERAND (decl, 1))
9593                        == constructor_name_full (ctype))
9594                       || (DECL_NAME (TREE_OPERAND (decl, 1))
9595                           == constructor_name (ctype))))
9596                 TREE_OPERAND (decl, 1) = constructor_name (ctype);
9597               next = &TREE_OPERAND (decl, 1);
9598               decl = *next;
9599               if (ctype)
9600                 {
9601                   if (TREE_CODE (decl) == IDENTIFIER_NODE
9602                       && constructor_name (ctype) == decl)
9603                     {
9604                       return_type = return_ctor;
9605                       ctor_return_type = ctype;
9606                     }
9607                   else if (TREE_CODE (decl) == BIT_NOT_EXPR
9608                            && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9609                            && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9610                                || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9611                     {
9612                       return_type = return_dtor;
9613                       ctor_return_type = ctype;
9614                       flags = DTOR_FLAG;
9615                       TREE_OPERAND (decl, 0) = constructor_name (ctype);
9616                       next = &TREE_OPERAND (decl, 0);
9617                     }
9618                 }
9619             }
9620             break;
9621
9622           case ERROR_MARK:
9623             next = 0;
9624             break;
9625
9626           case TYPE_DECL:
9627             /* Parse error puts this typespec where
9628                a declarator should go.  */
9629             cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
9630             if (TREE_TYPE (decl) == current_class_type)
9631               cp_error ("  perhaps you want `%T' for a constructor",
9632                         current_class_name);
9633             dname = DECL_NAME (decl);
9634             name = IDENTIFIER_POINTER (dname);
9635
9636             /* Avoid giving two errors for this.  */
9637             IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9638
9639             declspecs = temp_tree_cons (NULL_TREE, integer_type_node,
9640                                         declspecs);
9641             *next = dname;
9642             next = 0;
9643             break;
9644
9645           default:
9646             cp_compiler_error ("`%D' as declarator", decl);
9647             return 0; /* We used to do a 155 abort here.  */
9648           }
9649       }
9650     if (name == NULL)
9651       name = "type name";
9652   }
9653
9654   /* A function definition's declarator must have the form of
9655      a function declarator.  */
9656
9657   if (funcdef_flag && innermost_code != CALL_EXPR)
9658     return 0;
9659
9660   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9661       && innermost_code != CALL_EXPR
9662       && ! (ctype && declspecs == NULL_TREE))
9663     {
9664       cp_error ("declaration of `%D' as non-function", dname);
9665       return void_type_node;
9666     }
9667
9668   /* Anything declared one level down from the top level
9669      must be one of the parameters of a function
9670      (because the body is at least two levels down).  */
9671
9672   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9673      by not allowing C++ class definitions to specify their parameters
9674      with xdecls (must be spec.d in the parmlist).
9675
9676      Since we now wait to push a class scope until we are sure that
9677      we are in a legitimate method context, we must set oldcname
9678      explicitly (since current_class_name is not yet alive).
9679
9680      We also want to avoid calling this a PARM if it is in a namespace.  */
9681
9682   if (decl_context == NORMAL && ! namespace_bindings_p ()
9683       && ! pseudo_global_level_p ())
9684     {
9685       struct binding_level *b = current_binding_level;
9686       current_binding_level = b->level_chain;
9687       if (current_binding_level != 0 && toplevel_bindings_p ())
9688         decl_context = PARM;
9689       current_binding_level = b;
9690     }
9691
9692   /* Look through the decl specs and record which ones appear.
9693      Some typespecs are defined as built-in typenames.
9694      Others, the ones that are modifiers of other types,
9695      are represented by bits in SPECBITS: set the bits for
9696      the modifiers that appear.  Storage class keywords are also in SPECBITS.
9697
9698      If there is a typedef name or a type, store the type in TYPE.
9699      This includes builtin typedefs such as `int'.
9700
9701      Set EXPLICIT_INT if the type is `int' or `char' and did not
9702      come from a user typedef.
9703
9704      Set LONGLONG if `long' is mentioned twice.
9705
9706      For C++, constructors and destructors have their own fast treatment.  */
9707
9708   for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9709     {
9710       register int i;
9711       register tree id;
9712
9713       /* Certain parse errors slip through.  For example,
9714          `int class;' is not caught by the parser. Try
9715          weakly to recover here.  */
9716       if (TREE_CODE (spec) != TREE_LIST)
9717         return 0;
9718
9719       id = TREE_VALUE (spec);
9720
9721       if (TREE_CODE (id) == IDENTIFIER_NODE)
9722         {
9723           if (id == ridpointers[(int) RID_INT]
9724               || id == ridpointers[(int) RID_CHAR]
9725               || id == ridpointers[(int) RID_BOOL]
9726               || id == ridpointers[(int) RID_WCHAR])
9727             {
9728               if (type)
9729                 {
9730                   if (id == ridpointers[(int) RID_BOOL])
9731                     error ("`bool' is now a keyword");
9732                   else
9733                     cp_error ("extraneous `%T' ignored", id);
9734                 }
9735               else
9736                 {
9737                   if (id == ridpointers[(int) RID_INT])
9738                     explicit_int = 1;
9739                   else if (id == ridpointers[(int) RID_CHAR])
9740                     explicit_char = 1;
9741                   type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
9742                 }
9743               goto found;
9744             }
9745           /* C++ aggregate types.  */
9746           if (IDENTIFIER_HAS_TYPE_VALUE (id))
9747             {
9748               if (type)
9749                 cp_error ("multiple declarations `%T' and `%T'", type, id);
9750               else
9751                 type = IDENTIFIER_TYPE_VALUE (id);
9752               goto found;
9753             }
9754
9755           for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
9756             {
9757               if (ridpointers[i] == id)
9758                 {
9759                   if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
9760                     {
9761                       if (pedantic && ! in_system_header && warn_long_long)
9762                         pedwarn ("ANSI C++ does not support `long long'");
9763                       if (longlong)
9764                         error ("`long long long' is too long for GCC");
9765                       else
9766                         longlong = 1;
9767                     }
9768                   else if (RIDBIT_SETP (i, specbits))
9769                     pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
9770                   RIDBIT_SET (i, specbits);
9771                   goto found;
9772                 }
9773             }
9774         }
9775       /* C++ aggregate types.  */
9776       else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
9777         {
9778           if (type)
9779             cp_error ("multiple declarations `%T' and `%T'", type,
9780                       TREE_TYPE (id));
9781           else
9782             {
9783               type = TREE_TYPE (id);
9784               TREE_VALUE (spec) = type;
9785             }
9786           goto found;
9787         }
9788       if (type)
9789         error ("two or more data types in declaration of `%s'", name);
9790       else if (TREE_CODE (id) == IDENTIFIER_NODE)
9791         {
9792           register tree t = lookup_name (id, 1);
9793           if (!t || TREE_CODE (t) != TYPE_DECL)
9794             error ("`%s' fails to be a typedef or built in type",
9795                    IDENTIFIER_POINTER (id));
9796           else
9797             {
9798               type = TREE_TYPE (t);
9799 #if 0
9800               /* See the code below that used this.  */
9801               decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
9802 #endif
9803               typedef_decl = t;
9804             }
9805         }
9806       else if (id != error_mark_node)
9807         /* Can't change CLASS nodes into RECORD nodes here!  */
9808         type = id;
9809
9810     found: ;
9811     }
9812
9813   typedef_type = type;
9814
9815   /* No type at all: default to `int', and set DEFAULTED_INT
9816      because it was not a user-defined typedef.
9817      Except when we have a `typedef' inside a signature, in
9818      which case the type defaults to `unknown type' and is
9819      instantiated when assigning to a signature pointer or ref.  */
9820
9821   if (type == NULL_TREE
9822       && (RIDBIT_SETP (RID_SIGNED, specbits)
9823           || RIDBIT_SETP (RID_UNSIGNED, specbits)
9824           || RIDBIT_SETP (RID_LONG, specbits)
9825           || RIDBIT_SETP (RID_SHORT, specbits)))
9826     {
9827       /* These imply 'int'.  */
9828       type = integer_type_node;
9829       defaulted_int = 1;
9830     }
9831
9832   if (type == NULL_TREE)
9833     {
9834       explicit_int = -1;
9835       if (return_type == return_dtor)
9836         type = void_type_node;
9837       else if (return_type == return_ctor)
9838         type = build_pointer_type (ctor_return_type);
9839       else if (return_type == return_conversion)
9840         type = ctor_return_type;
9841       else if (current_class_type
9842                && IS_SIGNATURE (current_class_type)
9843                && RIDBIT_SETP (RID_TYPEDEF, specbits)
9844                && (decl_context == FIELD || decl_context == NORMAL))
9845         {
9846           explicit_int = 0;
9847           opaque_typedef = 1;
9848           type = copy_node (opaque_type_node);
9849         }
9850       else
9851         {
9852           /* We handle `main' specially here, because 'main () { }' is so
9853              common.  With no options, it is allowed.  With -Wreturn-type,
9854              it is a warning.  It is only an error with -pedantic-errors.  */
9855           int is_main = (funcdef_flag
9856                          && MAIN_NAME_P (dname)
9857                          && ctype == NULL_TREE
9858                          && in_namespace == NULL_TREE
9859                          && current_namespace == global_namespace);
9860
9861           if (in_system_header)
9862             /* Allow it, sigh.  */;
9863           else if (pedantic || ! is_main)
9864             cp_pedwarn ("ANSI C++ forbids declaration `%D' with no type",
9865                         dname);
9866           else if (warn_return_type)
9867             cp_warning ("ANSI C++ forbids declaration `%D' with no type",
9868                         dname);
9869
9870           type = integer_type_node;
9871         }
9872     }
9873   else if (return_type == return_dtor)
9874     {
9875       error ("return type specification for destructor invalid");
9876       type = void_type_node;
9877     }
9878   else if (return_type == return_ctor)
9879     {
9880       error ("return type specification for constructor invalid");
9881       type = build_pointer_type (ctor_return_type);
9882     }
9883   else if (return_type == return_conversion)
9884     {
9885       if (!same_type_p (type, ctor_return_type))
9886         cp_error ("operator `%T' declared to return `%T'",
9887                   ctor_return_type, type);
9888       else
9889         cp_pedwarn ("return type specified for `operator %T'",
9890                     ctor_return_type);
9891
9892       type = ctor_return_type;
9893     }
9894
9895   ctype = NULL_TREE;
9896
9897   /* Now process the modifiers that were specified
9898      and check for invalid combinations.  */
9899
9900   /* Long double is a special combination.  */
9901
9902   if (RIDBIT_SETP (RID_LONG, specbits)
9903       && TYPE_MAIN_VARIANT (type) == double_type_node)
9904     {
9905       RIDBIT_RESET (RID_LONG, specbits);
9906       type = build_qualified_type (long_double_type_node, 
9907                                    CP_TYPE_QUALS (type));
9908     }
9909
9910   /* Check all other uses of type modifiers.  */
9911
9912   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9913       || RIDBIT_SETP (RID_SIGNED, specbits)
9914       || RIDBIT_SETP (RID_LONG, specbits)
9915       || RIDBIT_SETP (RID_SHORT, specbits))
9916     {
9917       int ok = 0;
9918
9919       if (TREE_CODE (type) == REAL_TYPE)
9920         error ("short, signed or unsigned invalid for `%s'", name);
9921       else if (TREE_CODE (type) != INTEGER_TYPE)
9922         error ("long, short, signed or unsigned invalid for `%s'", name);
9923       else if (RIDBIT_SETP (RID_LONG, specbits)
9924                && RIDBIT_SETP (RID_SHORT, specbits))
9925         error ("long and short specified together for `%s'", name);
9926       else if ((RIDBIT_SETP (RID_LONG, specbits)
9927                 || RIDBIT_SETP (RID_SHORT, specbits))
9928                && explicit_char)
9929         error ("long or short specified with char for `%s'", name);
9930       else if ((RIDBIT_SETP (RID_LONG, specbits)
9931                 || RIDBIT_SETP (RID_SHORT, specbits))
9932                && TREE_CODE (type) == REAL_TYPE)
9933         error ("long or short specified with floating type for `%s'", name);
9934       else if (RIDBIT_SETP (RID_SIGNED, specbits)
9935                && RIDBIT_SETP (RID_UNSIGNED, specbits))
9936         error ("signed and unsigned given together for `%s'", name);
9937       else
9938         {
9939           ok = 1;
9940           if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
9941             {
9942               pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
9943                        name);
9944               if (flag_pedantic_errors)
9945                 ok = 0;
9946             }
9947         }
9948
9949       /* Discard the type modifiers if they are invalid.  */
9950       if (! ok)
9951         {
9952           RIDBIT_RESET (RID_UNSIGNED, specbits);
9953           RIDBIT_RESET (RID_SIGNED, specbits);
9954           RIDBIT_RESET (RID_LONG, specbits);
9955           RIDBIT_RESET (RID_SHORT, specbits);
9956           longlong = 0;
9957         }
9958     }
9959
9960   if (RIDBIT_SETP (RID_COMPLEX, specbits)
9961       && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9962     {
9963       error ("complex invalid for `%s'", name);
9964       RIDBIT_RESET (RID_COMPLEX, specbits);
9965     }
9966
9967   /* Decide whether an integer type is signed or not.
9968      Optionally treat bitfields as signed by default.  */
9969   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9970       || (bitfield && ! flag_signed_bitfields
9971           && (explicit_int || defaulted_int || explicit_char
9972               /* A typedef for plain `int' without `signed'
9973                  can be controlled just like plain `int'.  */
9974               || ! (typedef_decl != NULL_TREE
9975                     && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
9976           && TREE_CODE (type) != ENUMERAL_TYPE
9977           && RIDBIT_NOTSETP (RID_SIGNED, specbits)))
9978     {
9979       if (longlong)
9980         type = long_long_unsigned_type_node;
9981       else if (RIDBIT_SETP (RID_LONG, specbits))
9982         type = long_unsigned_type_node;
9983       else if (RIDBIT_SETP (RID_SHORT, specbits))
9984         type = short_unsigned_type_node;
9985       else if (type == char_type_node)
9986         type = unsigned_char_type_node;
9987       else if (typedef_decl)
9988         type = unsigned_type (type);
9989       else
9990         type = unsigned_type_node;
9991     }
9992   else if (RIDBIT_SETP (RID_SIGNED, specbits)
9993            && type == char_type_node)
9994     type = signed_char_type_node;
9995   else if (longlong)
9996     type = long_long_integer_type_node;
9997   else if (RIDBIT_SETP (RID_LONG, specbits))
9998     type = long_integer_type_node;
9999   else if (RIDBIT_SETP (RID_SHORT, specbits))
10000     type = short_integer_type_node;
10001
10002   if (RIDBIT_SETP (RID_COMPLEX, specbits))
10003     {
10004       /* If we just have "complex", it is equivalent to
10005          "complex double", but if any modifiers at all are specified it is
10006          the complex form of TYPE.  E.g, "complex short" is
10007          "complex short int".  */
10008
10009       if (defaulted_int && ! longlong
10010           && ! (RIDBIT_SETP (RID_LONG, specbits)
10011                 || RIDBIT_SETP (RID_SHORT, specbits)
10012                 || RIDBIT_SETP (RID_SIGNED, specbits)
10013                 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
10014         type = complex_double_type_node;
10015       else if (type == integer_type_node)
10016         type = complex_integer_type_node;
10017       else if (type == float_type_node)
10018         type = complex_float_type_node;
10019       else if (type == double_type_node)
10020         type = complex_double_type_node;
10021       else if (type == long_double_type_node)
10022         type = complex_long_double_type_node;
10023       else
10024         type = build_complex_type (type);
10025     }
10026
10027   if (return_type == return_conversion 
10028       && (RIDBIT_SETP (RID_CONST, specbits)
10029           || RIDBIT_SETP (RID_VOLATILE, specbits)
10030           || RIDBIT_SETP (RID_RESTRICT, specbits)))
10031     cp_error ("qualifiers are not allowed on declaration of `operator %T'",
10032               ctor_return_type);
10033
10034   /* Set CONSTP if this declaration is `const', whether by
10035      explicit specification or via a typedef.
10036      Likewise for VOLATILEP.  */
10037
10038   constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
10039   restrictp = 
10040     !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
10041   volatilep = 
10042     !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
10043   type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10044                 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10045                 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10046   type = cp_build_qualified_type (type, type_quals);
10047   staticp = 0;
10048   inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
10049   virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
10050   RIDBIT_RESET (RID_VIRTUAL, specbits);
10051   explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
10052   RIDBIT_RESET (RID_EXPLICIT, specbits);
10053
10054   if (RIDBIT_SETP (RID_STATIC, specbits))
10055     staticp = 1 + (decl_context == FIELD);
10056
10057   if (virtualp && staticp == 2)
10058     {
10059       cp_error ("member `%D' cannot be declared both virtual and static",
10060                 dname);
10061       staticp = 0;
10062     }
10063   friendp = RIDBIT_SETP (RID_FRIEND, specbits);
10064   RIDBIT_RESET (RID_FRIEND, specbits);
10065
10066   /* $7.1.2, Function specifiers */
10067   if (friendp && explicitp)
10068     error ("only declarations of constructors can be `explicit'");
10069
10070   if (RIDBIT_SETP (RID_MUTABLE, specbits))
10071     {
10072       if (decl_context == PARM)
10073         {
10074           error ("non-member `%s' cannot be declared `mutable'", name);
10075           RIDBIT_RESET (RID_MUTABLE, specbits);
10076         }
10077       else if (friendp || decl_context == TYPENAME)
10078         {
10079           error ("non-object member `%s' cannot be declared `mutable'", name);
10080           RIDBIT_RESET (RID_MUTABLE, specbits);
10081         }
10082     }
10083
10084   /* Warn if two storage classes are given. Default to `auto'.  */
10085
10086   if (RIDBIT_ANY_SET (specbits))
10087     {
10088       if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
10089       if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
10090       if (decl_context == PARM && nclasses > 0)
10091         error ("storage class specifiers invalid in parameter declarations");
10092       if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10093         {
10094           if (decl_context == PARM)
10095             error ("typedef declaration invalid in parameter declaration");
10096           nclasses++;
10097         }
10098       if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
10099       if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
10100     }
10101
10102   /* Give error if `virtual' is used outside of class declaration.  */
10103   if (virtualp
10104       && (current_class_name == NULL_TREE || decl_context != FIELD))
10105     {
10106       error ("virtual outside class declaration");
10107       virtualp = 0;
10108     }
10109   if (current_class_name == NULL_TREE && RIDBIT_SETP (RID_MUTABLE, specbits))
10110     {
10111       error ("only members can be declared mutable");
10112       RIDBIT_RESET (RID_MUTABLE, specbits);
10113     }
10114
10115   /* Static anonymous unions are dealt with here.  */
10116   if (staticp && decl_context == TYPENAME
10117       && TREE_CODE (declspecs) == TREE_LIST
10118       && ANON_UNION_TYPE_P (TREE_VALUE (declspecs)))
10119     decl_context = FIELD;
10120
10121   /* Give error if `const,' `volatile,' `inline,' `friend,' or `virtual'
10122      is used in a signature member function declaration.  */
10123   if (decl_context == FIELD
10124       && IS_SIGNATURE (current_class_type)
10125       && RIDBIT_NOTSETP (RID_TYPEDEF, specbits))
10126     {
10127       if (type_quals != TYPE_UNQUALIFIED)
10128         {
10129           error ("type qualifiers specified for signature member function `%s'", name);
10130           type_quals = TYPE_UNQUALIFIED;
10131         }
10132       if (inlinep)
10133         {
10134           error ("`inline' specified for signature member function `%s'", name);
10135           /* Later, we'll make signature member functions inline.  */
10136           inlinep = 0;
10137         }
10138       if (friendp)
10139         {
10140           error ("`friend' declaration in signature definition");
10141           friendp = 0;
10142         }
10143       if (virtualp)
10144         {
10145           error ("`virtual' specified for signature member function `%s'",
10146                  name);
10147           /* Later, we'll make signature member functions virtual.  */
10148           virtualp = 0;
10149         }
10150     }
10151
10152   /* Warn about storage classes that are invalid for certain
10153      kinds of declarations (parameters, typenames, etc.).  */
10154
10155   if (nclasses > 1)
10156     error ("multiple storage classes in declaration of `%s'", name);
10157   else if (decl_context != NORMAL && nclasses > 0)
10158     {
10159       if ((decl_context == PARM || decl_context == CATCHPARM)
10160           && (RIDBIT_SETP (RID_REGISTER, specbits)
10161               || RIDBIT_SETP (RID_AUTO, specbits)))
10162         ;
10163       else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10164         ;
10165       else if (decl_context == FIELD
10166                && ! IS_SIGNATURE (current_class_type)
10167                /* C++ allows static class elements  */
10168                && RIDBIT_SETP (RID_STATIC, specbits))
10169         /* C++ also allows inlines and signed and unsigned elements,
10170            but in those cases we don't come in here.  */
10171         ;
10172       else
10173         {
10174           if (decl_context == FIELD)
10175             {
10176               tree tmp = NULL_TREE;
10177               register int op = 0;
10178
10179               if (declarator)
10180                 {
10181                   /* Avoid trying to get an operand off an identifier node.  */ 
10182                   if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10183                     tmp = declarator;
10184                   else
10185                     tmp = TREE_OPERAND (declarator, 0);
10186                   op = IDENTIFIER_OPNAME_P (tmp);
10187                 }
10188               error ("storage class specified for %s `%s'",
10189                      IS_SIGNATURE (current_class_type)
10190                      ? (op
10191                         ? "signature member operator"
10192                         : "signature member function")
10193                      : (op ? "member operator" : "field"),
10194                      op ? operator_name_string (tmp) : name);
10195             }
10196           else
10197             error (((decl_context == PARM || decl_context == CATCHPARM)
10198                     ? "storage class specified for parameter `%s'"
10199                     : "storage class specified for typename"), name);
10200           RIDBIT_RESET (RID_REGISTER, specbits);
10201           RIDBIT_RESET (RID_AUTO, specbits);
10202           RIDBIT_RESET (RID_EXTERN, specbits);
10203
10204           if (decl_context == FIELD && IS_SIGNATURE (current_class_type))
10205             {
10206               RIDBIT_RESET (RID_STATIC, specbits);
10207               staticp = 0;
10208             }
10209         }
10210     }
10211   else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
10212     {
10213       if (toplevel_bindings_p ())
10214         {
10215           /* It's common practice (and completely valid) to have a const
10216              be initialized and declared extern.  */
10217           if (!(type_quals & TYPE_QUAL_CONST))
10218             warning ("`%s' initialized and declared `extern'", name);
10219         }
10220       else
10221         error ("`%s' has both `extern' and initializer", name);
10222     }
10223   else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
10224            && ! toplevel_bindings_p ())
10225     error ("nested function `%s' declared `extern'", name);
10226   else if (toplevel_bindings_p ())
10227     {
10228       if (RIDBIT_SETP (RID_AUTO, specbits))
10229         error ("top-level declaration of `%s' specifies `auto'", name);
10230     }
10231
10232   if (nclasses > 0 && friendp)
10233     error ("storage class specifiers invalid in friend function declarations");
10234
10235   /* Now figure out the structure of the declarator proper.
10236      Descend through it, creating more complex types, until we reach
10237      the declared identifier (or NULL_TREE, in an absolute declarator).  */
10238
10239   inner_attrs = NULL_TREE;
10240   ignore_attrs = 0;  
10241
10242   while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
10243          && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
10244     {
10245       /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
10246          an INDIRECT_REF (for *...),
10247          a CALL_EXPR (for ...(...)),
10248          an identifier (for the name being declared)
10249          or a null pointer (for the place in an absolute declarator
10250          where the name was omitted).
10251          For the last two cases, we have just exited the loop.
10252
10253          For C++ it could also be
10254          a SCOPE_REF (for class :: ...).  In this case, we have converted
10255          sensible names to types, and those are the values we use to
10256          qualify the member name.
10257          an ADDR_EXPR (for &...),
10258          a BIT_NOT_EXPR (for destructors)
10259
10260          At this point, TYPE is the type of elements of an array,
10261          or for a function to return, or for a pointer to point to.
10262          After this sequence of ifs, TYPE is the type of the
10263          array or function or pointer, and DECLARATOR has had its
10264          outermost layer removed.  */
10265
10266       if (type == error_mark_node)
10267         {
10268           if (TREE_CODE (declarator) == SCOPE_REF)
10269             declarator = TREE_OPERAND (declarator, 1);
10270           else
10271             declarator = TREE_OPERAND (declarator, 0);
10272           continue;
10273         }
10274       if (quals != NULL_TREE
10275           && (declarator == NULL_TREE
10276               || TREE_CODE (declarator) != SCOPE_REF))
10277         {
10278           if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
10279             ctype = TYPE_METHOD_BASETYPE (type);
10280           if (ctype != NULL_TREE)
10281             {
10282               tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
10283               ctype = grok_method_quals (ctype, dummy, quals);
10284               type = TREE_TYPE (dummy);
10285               quals = NULL_TREE;
10286             }
10287         }
10288
10289       /* See the comment for the TREE_LIST case, below.  */
10290       if (ignore_attrs)
10291         ignore_attrs = 0;
10292       else if (inner_attrs)
10293         {
10294           decl_attributes (type, inner_attrs, NULL_TREE);
10295           inner_attrs = NULL_TREE;
10296         }
10297
10298       switch (TREE_CODE (declarator))
10299         {
10300         case TREE_LIST:
10301           {
10302             /* We encode a declarator with embedded attributes using
10303                a TREE_LIST.  The attributes apply to the declarator
10304                directly inside them, so we have to skip an iteration
10305                before applying them to the type.  If the declarator just
10306                inside is the declarator-id, we apply the attrs to the
10307                decl itself.  */
10308             inner_attrs = TREE_PURPOSE (declarator);
10309             ignore_attrs = 1;
10310             declarator = TREE_VALUE (declarator);
10311           }
10312           break;
10313
10314         case ARRAY_REF:
10315           {
10316             register tree itype = NULL_TREE;
10317             register tree size = TREE_OPERAND (declarator, 1);
10318             /* The index is a signed object `sizetype' bits wide.  */
10319             tree index_type = signed_type (sizetype);
10320
10321             declarator = TREE_OPERAND (declarator, 0);
10322
10323             /* Check for some types that there cannot be arrays of.  */
10324
10325             if (TREE_CODE (type) == VOID_TYPE)
10326               {
10327                 cp_error ("declaration of `%D' as array of voids", dname);
10328                 type = error_mark_node;
10329               }
10330
10331             if (TREE_CODE (type) == FUNCTION_TYPE)
10332               {
10333                 cp_error ("declaration of `%D' as array of functions", dname);
10334                 type = error_mark_node;
10335               }
10336
10337             /* ARM $8.4.3: Since you can't have a pointer to a reference,
10338                you can't have arrays of references.  If we allowed them,
10339                then we'd be saying x[i] is valid for an array x, but
10340                then you'd have to ask: what does `*(x + i)' mean?  */
10341             if (TREE_CODE (type) == REFERENCE_TYPE)
10342               {
10343                 if (decl_context == TYPENAME)
10344                   cp_error ("cannot make arrays of references");
10345                 else
10346                   cp_error ("declaration of `%D' as array of references",
10347                             dname);
10348                 type = error_mark_node;
10349               }
10350
10351             if (TREE_CODE (type) == OFFSET_TYPE)
10352               {
10353                   cp_error ("declaration of `%D' as array of data members",
10354                             dname);
10355                 type = error_mark_node;
10356               }
10357
10358             if (TREE_CODE (type) == METHOD_TYPE)
10359               {
10360                 cp_error ("declaration of `%D' as array of function members",
10361                           dname);
10362                 type = error_mark_node;
10363               }
10364
10365             if (size == error_mark_node)
10366               type = error_mark_node;
10367             else if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
10368               {
10369                 /* [dcl.array]
10370
10371                    the constant expressions that specify the bounds of
10372                    the arrays can be omitted only for the first member
10373                    of the sequence.  */
10374                 cp_error ("declaration of `%D' as multidimensional array",
10375                           dname);
10376                 cp_error ("must have bounds for all dimensions except the first");
10377                 type = error_mark_node;
10378               }
10379
10380             if (type == error_mark_node)
10381               continue;
10382
10383             /* VC++ spells a zero-sized array with [].  */
10384             if (size == NULL_TREE && decl_context == FIELD && ! staticp
10385                 && ! RIDBIT_SETP (RID_TYPEDEF, specbits))
10386               size = integer_zero_node;
10387
10388             if (size)
10389               {
10390                 /* Must suspend_momentary here because the index
10391                    type may need to live until the end of the function.
10392                    For example, it is used in the declaration of a
10393                    variable which requires destructing at the end of
10394                    the function; then build_vec_delete will need this
10395                    value.  */
10396                 int yes = suspend_momentary ();
10397                 /* Might be a cast. */
10398                 if (TREE_CODE (size) == NOP_EXPR
10399                     && TREE_TYPE (size) == TREE_TYPE (TREE_OPERAND (size, 0)))
10400                   size = TREE_OPERAND (size, 0);
10401
10402                 /* If this involves a template parameter, it will be a
10403                    constant at instantiation time, but we don't know
10404                    what the value is yet.  Even if no template
10405                    parameters are involved, we may an expression that
10406                    is not a constant; we don't even simplify `1 + 2'
10407                    when processing a template.  */
10408                 if (processing_template_decl)
10409                   {
10410                     /* Resolve a qualified reference to an enumerator or
10411                        static const data member of ours.  */
10412                     if (TREE_CODE (size) == SCOPE_REF
10413                         && TREE_OPERAND (size, 0) == current_class_type)
10414                       {
10415                         tree t = lookup_field (current_class_type,
10416                                                TREE_OPERAND (size, 1), 0, 0);
10417                         if (t)
10418                           size = t;
10419                       }
10420
10421                     itype = build_index_type (build_min
10422                       (MINUS_EXPR, sizetype, size, integer_one_node));
10423                     goto dont_grok_size;
10424                   }
10425
10426                 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
10427                     && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
10428                     && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
10429                   {
10430                     cp_error ("size of array `%D' has non-integer type",
10431                               dname);
10432                     size = integer_one_node;
10433                   }
10434                 if (TREE_READONLY_DECL_P (size))
10435                   size = decl_constant_value (size);
10436                 if (pedantic && integer_zerop (size))
10437                   cp_pedwarn ("ANSI C++ forbids zero-size array `%D'", dname);
10438                 if (TREE_CONSTANT (size))
10439                   {
10440                     int old_flag_pedantic_errors = flag_pedantic_errors;
10441                     int old_pedantic = pedantic;
10442                     pedantic = flag_pedantic_errors = 1;
10443                     /* Always give overflow errors on array subscripts.  */
10444                     constant_expression_warning (size);
10445                     pedantic = old_pedantic;
10446                     flag_pedantic_errors = old_flag_pedantic_errors;
10447                     if (INT_CST_LT (size, integer_zero_node))
10448                       {
10449                         cp_error ("size of array `%D' is negative", dname);
10450                         size = integer_one_node;
10451                       }
10452                   }
10453                 else
10454                   {
10455                     if (pedantic)
10456                       {
10457                         if (dname)
10458                           cp_pedwarn ("ANSI C++ forbids variable-size array `%D'",
10459                                       dname);
10460                         else
10461                           cp_pedwarn ("ANSI C++ forbids variable-size array");
10462                       }
10463                   }
10464
10465                 itype
10466                   = fold (build_binary_op (MINUS_EXPR,
10467                                            cp_convert (index_type, size),
10468                                            cp_convert (index_type,
10469                                                        integer_one_node)));
10470                 if (! TREE_CONSTANT (itype))
10471                   itype = variable_size (itype);
10472                 else if (TREE_OVERFLOW (itype))
10473                   {
10474                     error ("overflow in array dimension");
10475                     TREE_OVERFLOW (itype) = 0;
10476                   }
10477
10478                 /* If we're a parm, we need to have a permanent type so
10479                    mangling checks for re-use will work right.  If both the
10480                    element and index types are permanent, the array type
10481                    will be, too.  */
10482                 if (decl_context == PARM
10483                     && allocation_temporary_p () && TREE_PERMANENT (type))
10484                   {
10485                     push_obstacks (&permanent_obstack, &permanent_obstack);
10486                     itype = build_index_type (itype);
10487                     pop_obstacks ();
10488                   }
10489                 else
10490                   itype = build_index_type (itype);
10491
10492               dont_grok_size:
10493                 resume_momentary (yes);
10494               }
10495
10496             type = build_cplus_array_type (type, itype);
10497             ctype = NULL_TREE;
10498           }
10499           break;
10500
10501         case CALL_EXPR:
10502           {
10503             tree arg_types;
10504             int funcdecl_p;
10505             tree inner_parms = TREE_OPERAND (declarator, 1);
10506             tree inner_decl = TREE_OPERAND (declarator, 0);
10507
10508             /* Declaring a function type.
10509                Make sure we have a valid type for the function to return.  */
10510
10511             /* We now know that the TYPE_QUALS don't apply to the
10512                decl, but to its return type.  */
10513             type_quals = TYPE_UNQUALIFIED;
10514
10515             /* Warn about some types functions can't return.  */
10516
10517             if (TREE_CODE (type) == FUNCTION_TYPE)
10518               {
10519                 error ("`%s' declared as function returning a function", name);
10520                 type = integer_type_node;
10521               }
10522             if (TREE_CODE (type) == ARRAY_TYPE)
10523               {
10524                 error ("`%s' declared as function returning an array", name);
10525                 type = integer_type_node;
10526               }
10527
10528             if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
10529               inner_decl = TREE_OPERAND (inner_decl, 1);
10530
10531             if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR) 
10532               inner_decl = dname;
10533
10534             /* Pick up type qualifiers which should be applied to `this'.  */
10535             quals = TREE_OPERAND (declarator, 2);
10536
10537             /* Pick up the exception specifications.  */
10538             raises = TREE_TYPE (declarator);
10539
10540             /* Say it's a definition only for the CALL_EXPR
10541                closest to the identifier.  */
10542             funcdecl_p
10543               = inner_decl 
10544               && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
10545                   || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR 
10546                   || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
10547             
10548             if (ctype == NULL_TREE
10549                 && decl_context == FIELD
10550                 && funcdecl_p
10551                 && (friendp == 0 || dname == current_class_name))
10552               ctype = current_class_type;
10553
10554             if (ctype && return_type == return_conversion)
10555               TYPE_HAS_CONVERSION (ctype) = 1;
10556             if (ctype && constructor_name (ctype) == dname)
10557               {
10558                 /* We are within a class's scope. If our declarator name
10559                    is the same as the class name, and we are defining
10560                    a function, then it is a constructor/destructor, and
10561                    therefore returns a void type.  */
10562
10563                 if (flags == DTOR_FLAG)
10564                   {
10565                     /* ANSI C++ June 5 1992 WP 12.4.1.  A destructor may
10566                        not be declared const or volatile.  A destructor
10567                        may not be static.  */
10568                     if (staticp == 2)
10569                       error ("destructor cannot be static member function");
10570                     if (quals)
10571                       {
10572                         cp_error ("destructors may not be `%s'",
10573                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10574                         quals = NULL_TREE;
10575                       }
10576                     if (decl_context == FIELD)
10577                       {
10578                         if (! member_function_or_else (ctype, current_class_type,
10579                                                        "destructor for alien class `%s' cannot be a member"))
10580                           return void_type_node;
10581                       }
10582                   }
10583                 else            /* It's a constructor.  */
10584                   {
10585                     if (explicitp == 1)
10586                       explicitp = 2;
10587                     /* ANSI C++ June 5 1992 WP 12.1.2.  A constructor may
10588                        not be declared const or volatile.  A constructor may
10589                        not be virtual.  A constructor may not be static.  */
10590                     if (staticp == 2)
10591                       error ("constructor cannot be static member function");
10592                     if (virtualp)
10593                       {
10594                         pedwarn ("constructors cannot be declared virtual");
10595                         virtualp = 0;
10596                       }
10597                     if (quals)
10598                       {
10599                         cp_error ("constructors may not be `%s'",
10600                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10601                         quals = NULL_TREE;
10602                       }
10603                     {
10604                       RID_BIT_TYPE tmp_bits;
10605                       bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
10606                       RIDBIT_RESET (RID_INLINE, tmp_bits);
10607                       RIDBIT_RESET (RID_STATIC, tmp_bits);
10608                       if (RIDBIT_ANY_SET (tmp_bits))
10609                         error ("return value type specifier for constructor ignored");
10610                     }
10611                     type = build_pointer_type (ctype);
10612                     if (decl_context == FIELD
10613                         && IS_SIGNATURE (current_class_type))
10614                       {
10615                         error ("constructor not allowed in signature");
10616                         return void_type_node;
10617                       }                   
10618                     else if (decl_context == FIELD)
10619                       {
10620                         if (! member_function_or_else (ctype, current_class_type,
10621                                                        "constructor for alien class `%s' cannot be member"))
10622                           return void_type_node;
10623                         TYPE_HAS_CONSTRUCTOR (ctype) = 1;
10624                         if (return_type != return_ctor)
10625                           return NULL_TREE;
10626                       }
10627                   }
10628                 if (decl_context == FIELD)
10629                   staticp = 0;
10630               }
10631             else if (friendp)
10632               {
10633                 if (initialized)
10634                   error ("can't initialize friend function `%s'", name);
10635                 if (virtualp)
10636                   {
10637                     /* Cannot be both friend and virtual.  */
10638                     error ("virtual functions cannot be friends");
10639                     RIDBIT_RESET (RID_FRIEND, specbits);
10640                     friendp = 0;
10641                   }
10642                 if (decl_context == NORMAL)
10643                   error ("friend declaration not in class definition");
10644                 if (current_function_decl && funcdef_flag)
10645                   cp_error ("can't define friend function `%s' in a local class definition",
10646                             name);
10647               }
10648
10649             /* Construct the function type and go to the next
10650                inner layer of declarator.  */
10651
10652             declarator = TREE_OPERAND (declarator, 0);
10653
10654             /* FIXME: This is where default args should be fully
10655                processed.  */
10656
10657             arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
10658
10659             if (declarator && flags == DTOR_FLAG)
10660               {
10661                 /* A destructor declared in the body of a class will
10662                    be represented as a BIT_NOT_EXPR.  But, we just
10663                    want the underlying IDENTIFIER.  */
10664                 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
10665                   declarator = TREE_OPERAND (declarator, 0);
10666                 
10667                 if (strict_prototype == 0 && arg_types == NULL_TREE)
10668                   arg_types = void_list_node;
10669                 else if (arg_types == NULL_TREE
10670                          || arg_types != void_list_node)
10671                   {
10672                     cp_error ("destructors may not have parameters");
10673                     arg_types = void_list_node;
10674                     last_function_parms = NULL_TREE;
10675                   }
10676               }
10677
10678             /* ANSI says that `const int foo ();'
10679                does not make the function foo const.  */
10680             type = build_function_type (type, arg_types);
10681
10682             {
10683               tree t;
10684               for (t = arg_types; t; t = TREE_CHAIN (t))
10685                 if (TREE_PURPOSE (t)
10686                     && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10687                   {
10688                     add_defarg_fn (type);
10689                     break;
10690                   }
10691             }
10692           }
10693           break;
10694
10695         case ADDR_EXPR:
10696         case INDIRECT_REF:
10697           /* Filter out pointers-to-references and references-to-references.
10698              We can get these if a TYPE_DECL is used.  */
10699
10700           if (TREE_CODE (type) == REFERENCE_TYPE)
10701             {
10702               error ("cannot declare %s to references",
10703                      TREE_CODE (declarator) == ADDR_EXPR
10704                      ? "references" : "pointers");
10705               declarator = TREE_OPERAND (declarator, 0);
10706               continue;
10707             }
10708
10709           if (TREE_CODE (type) == OFFSET_TYPE
10710               && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10711                   || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10712             {
10713               cp_error ("cannot declare pointer to `%#T' member",
10714                         TREE_TYPE (type));
10715               type = TREE_TYPE (type);
10716             }
10717
10718           /* Merge any constancy or volatility into the target type
10719              for the pointer.  */
10720
10721           /* We now know that the TYPE_QUALS don't apply to the decl,
10722              but to the target of the pointer.  */
10723           type_quals = TYPE_UNQUALIFIED;
10724
10725           if (IS_SIGNATURE (type))
10726             {
10727               if (TREE_CODE (declarator) == ADDR_EXPR)
10728                 {
10729                   if (CLASSTYPE_METHOD_VEC (type) == NULL_TREE
10730                       && TYPE_SIZE (type))
10731                     cp_warning ("empty signature `%T' used in signature reference declaration",
10732                                 type);
10733 #if 0
10734                   type = build_signature_reference_type (type);
10735 #else
10736                   sorry ("signature reference");
10737                   return NULL_TREE;
10738 #endif
10739                 }
10740               else
10741                 {
10742                   if (CLASSTYPE_METHOD_VEC (type) == NULL_TREE
10743                       && TYPE_SIZE (type))
10744                     cp_warning ("empty signature `%T' used in signature pointer declaration",
10745                                 type);
10746                   type = build_signature_pointer_type (type);
10747                 }
10748             }
10749           else if (TREE_CODE (declarator) == ADDR_EXPR)
10750             {
10751               if (TREE_CODE (type) == VOID_TYPE)
10752                 error ("invalid type: `void &'");
10753               else
10754                 type = build_reference_type (type);
10755             }
10756           else if (TREE_CODE (type) == METHOD_TYPE)
10757             type = build_ptrmemfunc_type (build_pointer_type (type));
10758           else
10759             type = build_pointer_type (type);
10760
10761           /* Process a list of type modifier keywords (such as
10762              const or volatile) that were given inside the `*' or `&'.  */
10763
10764           if (TREE_TYPE (declarator))
10765             {
10766               register tree typemodlist;
10767               int erred = 0;
10768
10769               constp = 0;
10770               volatilep = 0;
10771               restrictp = 0;
10772               for (typemodlist = TREE_TYPE (declarator); typemodlist;
10773                    typemodlist = TREE_CHAIN (typemodlist))
10774                 {
10775                   tree qualifier = TREE_VALUE (typemodlist);
10776
10777                   if (qualifier == ridpointers[(int) RID_CONST])
10778                     constp++;
10779                   else if (qualifier == ridpointers[(int) RID_VOLATILE])
10780                     volatilep++;
10781                   else if (qualifier == ridpointers[(int) RID_RESTRICT])
10782                     restrictp++;
10783                   else if (!erred)
10784                     {
10785                       erred = 1;
10786                       error ("invalid type modifier within pointer declarator");
10787                     }
10788                 }
10789               if (constp > 1)
10790                 pedwarn ("duplicate `const'");
10791               if (volatilep > 1)
10792                 pedwarn ("duplicate `volatile'");
10793               if (restrictp > 1)
10794                 pedwarn ("duplicate `restrict'");
10795
10796               type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10797                             | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10798                             | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10799               if (TREE_CODE (declarator) == ADDR_EXPR
10800                   && (constp || volatilep))
10801                 {
10802                   if (constp)
10803                     pedwarn ("discarding `const' applied to a reference");
10804                   if (volatilep)
10805                     pedwarn ("discarding `volatile' applied to a reference");
10806                   type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
10807                 }
10808               type = cp_build_qualified_type (type, type_quals);
10809             }
10810           declarator = TREE_OPERAND (declarator, 0);
10811           ctype = NULL_TREE;
10812           break;
10813
10814         case SCOPE_REF:
10815           {
10816             /* We have converted type names to NULL_TREE if the
10817                name was bogus, or to a _TYPE node, if not.
10818
10819                The variable CTYPE holds the type we will ultimately
10820                resolve to.  The code here just needs to build
10821                up appropriate member types.  */
10822             tree sname = TREE_OPERAND (declarator, 1);
10823             tree t;
10824
10825             /* Destructors can have their visibilities changed as well.  */
10826             if (TREE_CODE (sname) == BIT_NOT_EXPR)
10827               sname = TREE_OPERAND (sname, 0);
10828
10829             if (TREE_COMPLEXITY (declarator) == 0)
10830               /* This needs to be here, in case we are called
10831                  multiple times.  */ ;
10832             else if (TREE_COMPLEXITY (declarator) == -1)
10833               /* Namespace member. */
10834               pop_decl_namespace ();
10835             else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
10836               /* Don't fall out into global scope. Hides real bug? --eichin */ ;
10837             else if (! IS_AGGR_TYPE_CODE
10838                      (TREE_CODE (TREE_OPERAND (declarator, 0))))
10839               ;
10840             else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10841               {
10842                 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10843                    that refer to ctype.  They couldn't be resolved earlier
10844                    because we hadn't pushed into the class yet.
10845                    Example: resolve 'B<T>::type' in
10846                    'B<typename B<T>::type> B<T>::f () { }'.  */
10847                 if (current_template_parms
10848                     && uses_template_parms (type)
10849                     && uses_template_parms (current_class_type))
10850                   {
10851                     tree args = current_template_args ();
10852                     type = tsubst (type, args, /*complain=*/1, NULL_TREE);
10853                   }
10854
10855                 /* This pop_nested_class corresponds to the
10856                    push_nested_class used to push into class scope for
10857                    parsing the argument list of a function decl, in
10858                    qualified_id.  */
10859                 pop_nested_class ();
10860                 TREE_COMPLEXITY (declarator) = current_class_depth;
10861               }
10862             else
10863               my_friendly_abort (16);
10864
10865             if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10866               {
10867                 /* We had a reference to a global decl, or
10868                    perhaps we were given a non-aggregate typedef,
10869                    in which case we cleared this out, and should just
10870                    keep going as though it wasn't there.  */
10871                 declarator = sname;
10872                 continue;
10873               }
10874             ctype = TREE_OPERAND (declarator, 0);
10875
10876             t = ctype;
10877             while (t != NULL_TREE && CLASS_TYPE_P (t)) 
10878               {
10879                 if (CLASSTYPE_TEMPLATE_INFO (t) &&
10880                     !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
10881                   template_count += 1;
10882                 t = TYPE_MAIN_DECL (t);
10883                 if (DECL_LANG_SPECIFIC (t))
10884                   t = DECL_CLASS_CONTEXT (t);
10885                 else
10886                   t = NULL_TREE;
10887               }
10888
10889             if (sname == NULL_TREE)
10890               goto done_scoping;
10891
10892             if (TREE_CODE (sname) == IDENTIFIER_NODE)
10893               {
10894                 /* This is the `standard' use of the scoping operator:
10895                    basetype :: member .  */
10896
10897                 if (ctype == current_class_type)
10898                   {
10899                     /* class A {
10900                          void A::f ();
10901                        };
10902
10903                        Is this ill-formed?  */
10904
10905                     if (pedantic)
10906                       cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
10907                                   ctype, name);
10908                   }
10909                 else if (TREE_CODE (type) == FUNCTION_TYPE)
10910                   {
10911                     if (current_class_type == NULL_TREE
10912                         || friendp)
10913                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10914                                                       TYPE_ARG_TYPES (type));
10915                     else
10916                       {
10917                         cp_error ("cannot declare member function `%T::%s' within `%T'",
10918                                   ctype, name, current_class_type);
10919                         return void_type_node;
10920                       }
10921                   }
10922                 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
10923                          || TYPE_SIZE (complete_type (ctype)) != NULL_TREE)
10924                   {
10925                     /* Have to move this code elsewhere in this function.
10926                        this code is used for i.e., typedef int A::M; M *pm;
10927
10928                        It is?  How? jason 10/2/94 */
10929
10930                     if (current_class_type)
10931                       {
10932                         cp_error ("cannot declare member `%T::%s' within `%T'",
10933                                   ctype, name, current_class_type);
10934                         return void_type_node;
10935                       }
10936                     type = build_offset_type (ctype, type);
10937                   }
10938                 else if (uses_template_parms (ctype))
10939                   {
10940                     if (TREE_CODE (type) == FUNCTION_TYPE)
10941                       type
10942                         = build_cplus_method_type (ctype, TREE_TYPE (type),
10943                                                    TYPE_ARG_TYPES (type));
10944                   }
10945                 else
10946                   {
10947                     cp_error ("structure `%T' not yet defined", ctype);
10948                     return error_mark_node;
10949                   }
10950
10951                 declarator = sname;
10952               }
10953             else if (TREE_CODE (sname) == SCOPE_REF)
10954               my_friendly_abort (17);
10955             else
10956               {
10957               done_scoping:
10958                 declarator = TREE_OPERAND (declarator, 1);
10959                 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10960                   /* In this case, we will deal with it later.  */
10961                   ;
10962                 else
10963                   {
10964                     if (TREE_CODE (type) == FUNCTION_TYPE)
10965                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10966                                                       TYPE_ARG_TYPES (type));
10967                     else
10968                       type = build_offset_type (ctype, type);
10969                   }
10970               }
10971           }
10972           break;
10973
10974         case BIT_NOT_EXPR:
10975           declarator = TREE_OPERAND (declarator, 0);
10976           break;
10977
10978         case RECORD_TYPE:
10979         case UNION_TYPE:
10980         case ENUMERAL_TYPE:
10981           declarator = NULL_TREE;
10982           break;
10983
10984         case ERROR_MARK:
10985           declarator = NULL_TREE;
10986           break;
10987
10988         default:
10989           my_friendly_abort (158);
10990         }
10991     }
10992
10993   /* See the comment for the TREE_LIST case, above.  */
10994   if (inner_attrs)
10995     {
10996       if (! ignore_attrs)
10997         decl_attributes (type, inner_attrs, NULL_TREE);
10998       else if (attrlist)
10999         TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
11000       else
11001         attrlist = build_decl_list (NULL_TREE, inner_attrs);
11002     }
11003
11004   /* Now TYPE has the actual type.  */
11005
11006   if (explicitp == 1)
11007     {
11008       error ("only constructors can be declared `explicit'");
11009       explicitp = 0;
11010     }
11011
11012   if (RIDBIT_SETP (RID_MUTABLE, specbits))
11013     {
11014       if (type_quals & TYPE_QUAL_CONST)
11015         {
11016           error ("const `%s' cannot be declared `mutable'", name);
11017           RIDBIT_RESET (RID_MUTABLE, specbits);
11018         }
11019       else if (staticp)
11020         {
11021           error ("static `%s' cannot be declared `mutable'", name);
11022           RIDBIT_RESET (RID_MUTABLE, specbits);
11023         }
11024     }
11025
11026   if (declarator == NULL_TREE
11027       || TREE_CODE (declarator) == IDENTIFIER_NODE
11028       || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
11029           && (TREE_CODE (type) == FUNCTION_TYPE
11030               || TREE_CODE (type) == METHOD_TYPE)))
11031     /* OK */;
11032   else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11033     {
11034       cp_error ("template-id `%D' used as a declarator", declarator);
11035       declarator = dname;
11036     }
11037   else
11038     /* Unexpected declarator format.  */
11039     my_friendly_abort (990210);
11040
11041   /* If this is declaring a typedef name, return a TYPE_DECL.  */
11042
11043   if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
11044     {
11045       tree decl;
11046
11047       /* Note that the grammar rejects storage classes
11048          in typenames, fields or parameters.  */
11049       if (current_lang_name == lang_name_java)
11050         TYPE_FOR_JAVA (type) = 1;
11051
11052       if (decl_context == FIELD)
11053         {
11054           if (declarator == constructor_name (current_class_type))
11055             cp_pedwarn ("ANSI C++ forbids nested type `%D' with same name as enclosing class",
11056                         declarator);
11057           decl = build_lang_decl (TYPE_DECL, declarator, type);
11058           if (IS_SIGNATURE (current_class_type) && opaque_typedef)
11059             SIGNATURE_HAS_OPAQUE_TYPEDECLS (current_class_type) = 1;
11060         }
11061       else
11062         {
11063           /* Make sure this typedef lives as long as its type,
11064              since it might be used as a template parameter. */
11065           if (type != error_mark_node)
11066             push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
11067           decl = build_decl (TYPE_DECL, declarator, type);
11068           if (type != error_mark_node)
11069             pop_obstacks ();
11070         }
11071
11072       /* If the user declares "struct {...} foo" then `foo' will have
11073          an anonymous name.  Fill that name in now.  Nothing can
11074          refer to it, so nothing needs know about the name change.
11075          The TYPE_NAME field was filled in by build_struct_xref.  */
11076       if (type != error_mark_node
11077           && TYPE_NAME (type)
11078           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
11079           && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type)))
11080         {
11081           tree oldname = TYPE_NAME (type);
11082           tree t;
11083
11084           /* FIXME: This is bogus; we should not be doing this for
11085                     cv-qualified types.  */
11086
11087           /* Replace the anonymous name with the real name everywhere.  */
11088           lookup_tag_reverse (type, declarator);
11089           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
11090             if (TYPE_NAME (t) == oldname)
11091               TYPE_NAME (t) = decl;
11092
11093           if (TYPE_LANG_SPECIFIC (type))
11094             TYPE_WAS_ANONYMOUS (type) = 1;
11095
11096           /* If this is a typedef within a template class, the nested
11097              type is a (non-primary) template.  The name for the
11098              template needs updating as well.  */
11099           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
11100             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)) 
11101               = TYPE_IDENTIFIER (type);
11102
11103           /* XXX Temporarily set the scope. 
11104              When returning, start_decl expects it as NULL_TREE,
11105              and will then then set it using pushdecl. */
11106           my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 980404);
11107           if (current_class_type)
11108             DECL_CONTEXT (decl) = current_class_type;
11109           else
11110             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
11111
11112           DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
11113           DECL_ASSEMBLER_NAME (decl)
11114             = get_identifier (build_overload_name (type, 1, 1));
11115           DECL_CONTEXT (decl) = NULL_TREE;
11116
11117           /* FIXME remangle member functions; member functions of a
11118              type with external linkage have external linkage.  */
11119         }
11120
11121       if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
11122         {
11123           cp_error_at ("typedef name may not be class-qualified", decl);
11124           return NULL_TREE;
11125         }
11126       else if (quals)
11127         {
11128           if (ctype == NULL_TREE)
11129             {
11130               if (TREE_CODE (type) != METHOD_TYPE)
11131                 cp_error_at ("invalid type qualifier for non-method type", decl);
11132               else
11133                 ctype = TYPE_METHOD_BASETYPE (type);
11134             }
11135           if (ctype != NULL_TREE)
11136             grok_method_quals (ctype, decl, quals);
11137         }
11138
11139       if (RIDBIT_SETP (RID_SIGNED, specbits)
11140           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
11141         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
11142
11143       if (RIDBIT_SETP (RID_MUTABLE, specbits))
11144         error ("non-object member `%s' cannot be declared mutable", name);
11145
11146       bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
11147                       inlinep, friendp, raises != NULL_TREE);
11148
11149       if (initialized)
11150         error ("typedef declaration includes an initializer");
11151
11152       return decl;
11153     }
11154
11155   /* Detect the case of an array type of unspecified size
11156      which came, as such, direct from a typedef name.
11157      We must copy the type, so that each identifier gets
11158      a distinct type, so that each identifier's size can be
11159      controlled separately by its own initializer.  */
11160
11161   if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
11162       && TYPE_DOMAIN (type) == NULL_TREE)
11163     {
11164       type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
11165     }
11166
11167   /* If this is a type name (such as, in a cast or sizeof),
11168      compute the type and return it now.  */
11169
11170   if (decl_context == TYPENAME)
11171     {
11172       /* Note that the grammar rejects storage classes
11173          in typenames, fields or parameters.  */
11174       if (type_quals != TYPE_UNQUALIFIED)
11175         {
11176           if (IS_SIGNATURE (type))
11177             error ("type qualifiers specified for signature type");
11178           type_quals = TYPE_UNQUALIFIED;
11179         }
11180
11181       /* Special case: "friend class foo" looks like a TYPENAME context.  */
11182       if (friendp)
11183         {
11184           if (type_quals != TYPE_UNQUALIFIED)
11185             {
11186               cp_error ("type qualifiers specified for friend class declaration");
11187               type_quals = TYPE_UNQUALIFIED;
11188             }
11189           if (inlinep)
11190             {
11191               cp_error ("`inline' specified for friend class declaration");
11192               inlinep = 0;
11193             }
11194
11195           /* Only try to do this stuff if we didn't already give up.  */
11196           if (type != integer_type_node)
11197             {
11198               /* A friendly class?  */
11199               if (current_class_type)
11200                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
11201               else
11202                 error ("trying to make class `%s' a friend of global scope",
11203                        TYPE_NAME_STRING (type));
11204               type = void_type_node;
11205             }
11206         }
11207       else if (quals)
11208         {
11209           tree dummy = build_decl (TYPE_DECL, declarator, type);
11210           if (ctype == NULL_TREE)
11211             {
11212               my_friendly_assert (TREE_CODE (type) == METHOD_TYPE, 159);
11213               ctype = TYPE_METHOD_BASETYPE (type);
11214             }
11215           grok_method_quals (ctype, dummy, quals);
11216           type = TREE_TYPE (dummy);
11217         }
11218
11219       return type;
11220     }
11221   else if (declarator == NULL_TREE && decl_context != PARM
11222            && decl_context != CATCHPARM
11223            && TREE_CODE (type) != UNION_TYPE
11224            && ! bitfield)
11225     {
11226       cp_error ("abstract declarator `%T' used as declaration", type);
11227       declarator = make_anon_name ();
11228     }
11229
11230   /* `void' at top level (not within pointer)
11231      is allowed only in typedefs or type names.
11232      We don't complain about parms either, but that is because
11233      a better error message can be made later.  */
11234
11235   if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
11236     {
11237       if (! declarator)
11238         error ("unnamed variable or field declared void");
11239       else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
11240         {
11241           if (IDENTIFIER_OPNAME_P (declarator))
11242             my_friendly_abort (356);
11243           else
11244             error ("variable or field `%s' declared void", name);
11245         }
11246       else
11247         error ("variable or field declared void");
11248       type = integer_type_node;
11249     }
11250
11251   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
11252      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
11253
11254   if (decl_context == PARM || decl_context == CATCHPARM)
11255     {
11256       if (ctype || in_namespace)
11257         error ("cannot use `::' in parameter declaration");
11258
11259       /* A parameter declared as an array of T is really a pointer to T.
11260          One declared as a function is really a pointer to a function.
11261          One declared as a member is really a pointer to member.  */
11262
11263       if (TREE_CODE (type) == ARRAY_TYPE)
11264         {
11265           /* Transfer const-ness of array into that of type pointed to.  */
11266           type = build_pointer_type (TREE_TYPE (type));
11267           type_quals = TYPE_UNQUALIFIED;
11268         }
11269       else if (TREE_CODE (type) == FUNCTION_TYPE)
11270         type = build_pointer_type (type);
11271       else if (TREE_CODE (type) == OFFSET_TYPE)
11272         type = build_pointer_type (type);
11273       else if (TREE_CODE (type) == VOID_TYPE && declarator)
11274         {
11275           error ("declaration of `%s' as void", name);
11276           return NULL_TREE;
11277         }
11278     }
11279   
11280   {
11281     register tree decl;
11282
11283     if (decl_context == PARM)
11284       {
11285         decl = build_decl (PARM_DECL, declarator, type);
11286
11287         bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
11288                         inlinep, friendp, raises != NULL_TREE);
11289         if (current_class_type
11290             && IS_SIGNATURE (current_class_type))
11291           {
11292             if (inlinep)
11293               error ("parameter of signature member function declared `inline'");
11294             if (RIDBIT_SETP (RID_AUTO, specbits))
11295               error ("parameter of signature member function declared `auto'");
11296             if (RIDBIT_SETP (RID_REGISTER, specbits))
11297               error ("parameter of signature member function declared `register'");
11298           }
11299
11300         /* Compute the type actually passed in the parmlist,
11301            for the case where there is no prototype.
11302            (For example, shorts and chars are passed as ints.)
11303            When there is a prototype, this is overridden later.  */
11304
11305         DECL_ARG_TYPE (decl) = type_promotes_to (type);
11306       }
11307     else if (decl_context == FIELD)
11308       {
11309         if (type == error_mark_node)
11310           {
11311             /* Happens when declaring arrays of sizes which
11312                are error_mark_node, for example.  */
11313             decl = NULL_TREE;
11314           }
11315         else if (in_namespace && !friendp)
11316           {
11317             /* Something like struct S { int N::j; };  */
11318             cp_error ("invalid use of `::'");
11319             decl = NULL_TREE;
11320           }
11321         else if (TREE_CODE (type) == FUNCTION_TYPE)
11322           {
11323             int publicp = 0;
11324             tree function_context;
11325
11326             /* We catch the others as conflicts with the builtin
11327                typedefs.  */
11328             if (friendp && declarator == ridpointers[(int) RID_SIGNED])
11329               {
11330                 cp_error ("function `%D' cannot be declared friend",
11331                           declarator);
11332                 friendp = 0;
11333               }
11334
11335             if (friendp == 0)
11336               {
11337                 if (ctype == NULL_TREE)
11338                   ctype = current_class_type;
11339
11340                 if (ctype == NULL_TREE)
11341                   {
11342                     cp_error ("can't make `%D' into a method -- not in a class",
11343                               declarator);
11344                     return void_type_node;
11345                   }
11346
11347                 /* ``A union may [ ... ] not [ have ] virtual functions.''
11348                    ARM 9.5 */
11349                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
11350                   {
11351                     cp_error ("function `%D' declared virtual inside a union",
11352                               declarator);
11353                     return void_type_node;
11354                   }
11355
11356                 if (declarator == ansi_opname[(int) NEW_EXPR]
11357                     || declarator == ansi_opname[(int) VEC_NEW_EXPR]
11358                     || declarator == ansi_opname[(int) DELETE_EXPR]
11359                     || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
11360                   {
11361                     if (virtualp)
11362                       {
11363                         cp_error ("`%D' cannot be declared virtual, since it is always static",
11364                                   declarator);
11365                         virtualp = 0;
11366                       }
11367                   }
11368                 else if (staticp < 2)
11369                   type = build_cplus_method_type (ctype, TREE_TYPE (type),
11370                                                   TYPE_ARG_TYPES (type));
11371               }
11372
11373             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
11374             function_context = (ctype != NULL_TREE) ? 
11375               hack_decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
11376             publicp = (! friendp || ! staticp)
11377               && function_context == NULL_TREE;
11378             decl = grokfndecl (ctype, type, 
11379                                TREE_CODE (declarator) != TEMPLATE_ID_EXPR
11380                                ? declarator : dname,
11381                                declarator,
11382                                virtualp, flags, quals, raises,
11383                                friendp ? -1 : 0, friendp, publicp, inlinep,
11384                                funcdef_flag, template_count, in_namespace);
11385             if (decl == NULL_TREE)
11386               return decl;
11387 #if 0
11388             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
11389             /* The decl and setting of decl_machine_attr is also turned off.  */
11390             decl = build_decl_attribute_variant (decl, decl_machine_attr);
11391 #endif
11392
11393             /* [class.conv.ctor]
11394
11395                A constructor declared without the function-specifier
11396                explicit that can be called with a single parameter
11397                specifies a conversion from the type of its first
11398                parameter to the type of its class.  Such a constructor
11399                is called a converting constructor.  */
11400             if (explicitp == 2)
11401               DECL_NONCONVERTING_P (decl) = 1;
11402             else if (DECL_CONSTRUCTOR_P (decl))
11403               {
11404                 /* The constructor can be called with exactly one
11405                    parameter if there is at least one parameter, and
11406                    any subsequent parameters have default arguments.
11407                    We don't look at the first parameter, which is
11408                    really just the `this' parameter for the new
11409                    object.  */
11410                 tree arg_types = 
11411                   TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)));
11412
11413                 /* Skip the `in_chrg' argument too, if present.  */
11414                 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (decl)))
11415                   arg_types = TREE_CHAIN (arg_types);
11416
11417                 /* And the `vlist' argument. */
11418                 if (TYPE_USES_PVBASES (DECL_CONTEXT (decl)))
11419                   arg_types = TREE_CHAIN (arg_types);
11420
11421                 if (arg_types == void_list_node
11422                     || (arg_types 
11423                         && TREE_CHAIN (arg_types) 
11424                         && TREE_CHAIN (arg_types) != void_list_node
11425                         && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
11426                   DECL_NONCONVERTING_P (decl) = 1;
11427               }
11428           }
11429         else if (TREE_CODE (type) == METHOD_TYPE)
11430           {
11431             /* We only get here for friend declarations of
11432                members of other classes.  */
11433             /* All method decls are public, so tell grokfndecl to set
11434                TREE_PUBLIC, also.  */
11435             decl = grokfndecl (ctype, type, declarator, declarator,
11436                                virtualp, flags, quals, raises,
11437                                friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
11438                                template_count, in_namespace);
11439             if (decl == NULL_TREE)
11440               return NULL_TREE;
11441           }
11442         else if (!staticp && ! processing_template_decl
11443                  && TYPE_SIZE (complete_type (type)) == NULL_TREE
11444                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
11445           {
11446             if (declarator)
11447               cp_error ("field `%D' has incomplete type", declarator);
11448             else
11449               cp_error ("name `%T' has incomplete type", type);
11450
11451             /* If we're instantiating a template, tell them which
11452                instantiation made the field's type be incomplete.  */
11453             if (current_class_type
11454                 && TYPE_NAME (current_class_type)
11455                 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
11456                 && declspecs && TREE_VALUE (declspecs)
11457                 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
11458               cp_error ("  in instantiation of template `%T'",
11459                         current_class_type);
11460
11461             type = error_mark_node;
11462             decl = NULL_TREE;
11463           }
11464         else
11465           {
11466             if (friendp)
11467               {
11468                 error ("`%s' is neither function nor method; cannot be declared friend",
11469                        IDENTIFIER_POINTER (declarator));
11470                 friendp = 0;
11471               }
11472             decl = NULL_TREE;
11473           }
11474
11475         if (friendp)
11476           {
11477             /* Friends are treated specially.  */
11478             if (ctype == current_class_type)
11479               warning ("member functions are implicitly friends of their class");
11480             else
11481               {
11482                 tree t = NULL_TREE;
11483                 if (decl && DECL_NAME (decl))
11484                   {
11485                     if (template_class_depth (current_class_type) == 0)
11486                       {
11487                         decl 
11488                           = check_explicit_specialization 
11489                           (declarator, decl,
11490                            template_count, 2 * (funcdef_flag != 0) + 4);
11491                         if (decl == error_mark_node)
11492                           return error_mark_node;
11493                       }
11494
11495                     t = do_friend (ctype, declarator, decl,
11496                                    last_function_parms, attrlist, flags, quals,
11497                                    funcdef_flag);
11498                   }
11499                 if (t && funcdef_flag)
11500                   return t;
11501                 
11502                 return void_type_node;
11503               }
11504           }
11505
11506         /* Structure field.  It may not be a function, except for C++ */
11507
11508         if (decl == NULL_TREE)
11509           {
11510             if (initialized)
11511               {
11512                 if (!staticp)
11513                   {
11514                     /* An attempt is being made to initialize a non-static
11515                        member.  But, from [class.mem]:
11516                        
11517                        4 A member-declarator can contain a
11518                        constant-initializer only if it declares a static
11519                        member (_class.static_) of integral or enumeration
11520                        type, see _class.static.data_.  
11521
11522                        This used to be relatively common practice, but
11523                        the rest of the compiler does not correctly
11524                        handle the initialization unless the member is
11525                        static so we make it static below.  */
11526                     cp_pedwarn ("ANSI C++ forbids initialization of member `%D'",
11527                                 declarator);
11528                     cp_pedwarn ("making `%D' static", declarator);
11529                     staticp = 1;
11530                   }
11531
11532                 if (uses_template_parms (type))
11533                   /* We'll check at instantiation time.  */
11534                   ;
11535                 else if (check_static_variable_definition (declarator,
11536                                                            type))
11537                   /* If we just return the declaration, crashes
11538                      will sometimes occur.  We therefore return
11539                      void_type_node, as if this was a friend
11540                      declaration, to cause callers to completely
11541                      ignore this declaration.  */
11542                   return void_type_node;
11543               }
11544
11545             /* 9.2p13 [class.mem] */
11546             if (declarator == constructor_name (current_class_type)
11547                 /* Divergence from the standard:  In extern "C", we
11548                    allow non-static data members here, because C does
11549                    and /usr/include/netinet/in.h uses that.  */
11550                 && (staticp || ! in_system_header))
11551               cp_pedwarn ("ANSI C++ forbids data member `%D' with same name as enclosing class",
11552                           declarator);
11553
11554             if (staticp)
11555               {
11556                 /* C++ allows static class members.
11557                    All other work for this is done by grokfield.
11558                    This VAR_DCL is built by build_lang_field_decl.
11559                    All other VAR_DECLs are built by build_decl.  */
11560                 decl = build_lang_field_decl (VAR_DECL, declarator, type);
11561                 TREE_STATIC (decl) = 1;
11562                 /* In class context, 'static' means public access.  */
11563                 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
11564               }
11565             else
11566               {
11567                 decl = build_lang_field_decl (FIELD_DECL, declarator, type);
11568                 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11569                   {
11570                     DECL_MUTABLE_P (decl) = 1;
11571                     RIDBIT_RESET (RID_MUTABLE, specbits);
11572                   }
11573               }
11574
11575             bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
11576                             inlinep, friendp, raises != NULL_TREE);
11577           }
11578       }
11579     else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
11580       {
11581         tree original_name;
11582         int publicp = 0;
11583
11584         if (! declarator)
11585           return NULL_TREE;
11586
11587         if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11588           original_name = dname;
11589         else
11590           original_name = declarator;
11591
11592         if (RIDBIT_SETP (RID_AUTO, specbits))
11593           error ("storage class `auto' invalid for function `%s'", name);
11594         else if (RIDBIT_SETP (RID_REGISTER, specbits))
11595           error ("storage class `register' invalid for function `%s'", name);
11596
11597         /* Function declaration not at top level.
11598            Storage classes other than `extern' are not allowed
11599            and `extern' makes no difference.  */
11600         if (! toplevel_bindings_p ()
11601             && (RIDBIT_SETP (RID_STATIC, specbits)
11602                 || RIDBIT_SETP (RID_INLINE, specbits))
11603             && pedantic)
11604           {
11605             if (RIDBIT_SETP (RID_STATIC, specbits))
11606               pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
11607             else
11608               pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
11609           }
11610         
11611         if (ctype == NULL_TREE)
11612           {
11613             if (virtualp)
11614               {
11615                 error ("virtual non-class function `%s'", name);
11616                 virtualp = 0;
11617               }
11618           }
11619         else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
11620           type = build_cplus_method_type (ctype, TREE_TYPE (type),
11621                                           TYPE_ARG_TYPES (type));
11622
11623         /* Record presence of `static'.  */
11624         publicp = (ctype != NULL_TREE
11625                    || RIDBIT_SETP (RID_EXTERN, specbits)
11626                    || !RIDBIT_SETP (RID_STATIC, specbits));
11627
11628         decl = grokfndecl (ctype, type, original_name, declarator,
11629                            virtualp, flags, quals, raises,
11630                            1, friendp,
11631                            publicp, inlinep, funcdef_flag, 
11632                            template_count, in_namespace);
11633         if (decl == NULL_TREE)
11634           return NULL_TREE;
11635
11636         if (staticp == 1)
11637           {
11638             int illegal_static = 0;
11639
11640             /* Don't allow a static member function in a class, and forbid
11641                declaring main to be static.  */
11642             if (TREE_CODE (type) == METHOD_TYPE)
11643               {
11644                 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
11645                 illegal_static = 1;
11646               }
11647             else if (current_function_decl)
11648               {
11649                 /* FIXME need arm citation */
11650                 error ("cannot declare static function inside another function");
11651                 illegal_static = 1;
11652               }
11653
11654             if (illegal_static)
11655               {
11656                 staticp = 0;
11657                 RIDBIT_RESET (RID_STATIC, specbits);
11658               }
11659           }
11660       }
11661     else
11662       {
11663         /* It's a variable.  */
11664
11665         /* An uninitialized decl with `extern' is a reference.  */
11666         decl = grokvardecl (type, declarator, &specbits, 
11667                             initialized, 
11668                             (type_quals & TYPE_QUAL_CONST) != 0, 
11669                             in_namespace);
11670         bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11671                         inlinep, friendp, raises != NULL_TREE);
11672
11673         if (ctype)
11674           {
11675             DECL_CONTEXT (decl) = ctype;
11676             if (staticp == 1)
11677               {
11678                 cp_pedwarn ("static member `%D' re-declared as static", decl);
11679                 staticp = 0;
11680                 RIDBIT_RESET (RID_STATIC, specbits);
11681               }
11682             if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11683               {
11684                 cp_error ("static member `%D' declared `register'", decl);
11685                 RIDBIT_RESET (RID_REGISTER, specbits);
11686               }
11687             if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
11688               {
11689                 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
11690                             decl);
11691                 RIDBIT_RESET (RID_EXTERN, specbits);
11692               }
11693           }
11694       }
11695
11696     if (RIDBIT_SETP (RID_MUTABLE, specbits))
11697       {
11698         error ("`%s' cannot be declared mutable", name);
11699       }
11700
11701     /* Record `register' declaration for warnings on &
11702        and in case doing stupid register allocation.  */
11703
11704     if (RIDBIT_SETP (RID_REGISTER, specbits))
11705       DECL_REGISTER (decl) = 1;
11706
11707     if (RIDBIT_SETP (RID_EXTERN, specbits))
11708       DECL_THIS_EXTERN (decl) = 1;
11709
11710     if (RIDBIT_SETP (RID_STATIC, specbits))
11711       DECL_THIS_STATIC (decl) = 1;
11712
11713     /* Record constancy and volatility.  */
11714     /* FIXME: Disallow `restrict' pointer-to-member declarations.  */
11715     c_apply_type_quals_to_decl (type_quals, decl);
11716
11717     return decl;
11718   }
11719 }
11720 \f
11721 /* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11722    An empty exprlist is a parmlist.  An exprlist which
11723    contains only identifiers at the global level
11724    is a parmlist.  Otherwise, it is an exprlist.  */
11725
11726 int
11727 parmlist_is_exprlist (exprs)
11728      tree exprs;
11729 {
11730   if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11731     return 0;
11732
11733   if (toplevel_bindings_p ())
11734     {
11735       /* At the global level, if these are all identifiers,
11736          then it is a parmlist.  */
11737       while (exprs)
11738         {
11739           if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11740             return 1;
11741           exprs = TREE_CHAIN (exprs);
11742         }
11743       return 0;
11744     }
11745   return 1;
11746 }
11747
11748 /* Subroutine of start_function.  Ensure that each of the parameter
11749    types (as listed in PARMS) is complete, as is required for a
11750    function definition.  */
11751
11752 static void
11753 require_complete_types_for_parms (parms)
11754      tree parms;
11755 {
11756   while (parms)
11757     {
11758       tree type = TREE_TYPE (parms);
11759       if (TYPE_SIZE (complete_type (type)) == NULL_TREE)
11760         {
11761           if (DECL_NAME (parms))
11762             error ("parameter `%s' has incomplete type",
11763                    IDENTIFIER_POINTER (DECL_NAME (parms)));
11764           else
11765             error ("parameter has incomplete type");
11766           TREE_TYPE (parms) = error_mark_node;
11767         }
11768       else
11769         layout_decl (parms, 0);
11770
11771       parms = TREE_CHAIN (parms);
11772     }
11773 }
11774
11775 /* Returns DECL if DECL is a local variable (or parameter).  Returns
11776    NULL_TREE otherwise.  */
11777
11778 static tree
11779 local_variable_p (t)
11780      tree t;
11781 {
11782   if ((TREE_CODE (t) == VAR_DECL 
11783        /* A VAR_DECL with a context that is a _TYPE is a static data
11784           member.  */
11785        && !TYPE_P (CP_DECL_CONTEXT (t))
11786        /* Any other non-local variable must be at namespace scope.  */
11787        && TREE_CODE (CP_DECL_CONTEXT (t)) != NAMESPACE_DECL)
11788       || (TREE_CODE (t) == PARM_DECL))
11789     return t;
11790
11791   return NULL_TREE;
11792 }
11793
11794 /* Check that ARG, which is a default-argument expression for a
11795    parameter DECL, is legal.  Returns ARG, or ERROR_MARK_NODE, if
11796    something goes wrong.  DECL may also be a _TYPE node, rather than a
11797    DECL, if there is no DECL available.  */
11798
11799 tree
11800 check_default_argument (decl, arg)
11801      tree decl;
11802      tree arg;
11803 {
11804   tree var;
11805   tree decl_type;
11806
11807   if (TREE_CODE (arg) == DEFAULT_ARG)
11808     /* We get a DEFAULT_ARG when looking at an in-class declaration
11809        with a default argument.  Ignore the argument for now; we'll
11810        deal with it after the class is complete.  */
11811     return arg;
11812
11813   if (processing_template_decl || uses_template_parms (arg))
11814     /* We don't do anything checking until instantiation-time.  Note
11815        that there may be uninstantiated arguments even for an
11816        instantiated function, since default arguments are not
11817        instantiated until they are needed.  */
11818     return arg;
11819
11820   if (TYPE_P (decl))
11821     {
11822       decl_type = decl;
11823       decl = NULL_TREE;
11824     }
11825   else
11826     decl_type = TREE_TYPE (decl);
11827
11828   if (arg == error_mark_node 
11829       || decl == error_mark_node
11830       || TREE_TYPE (arg) == error_mark_node
11831       || decl_type == error_mark_node)
11832     /* Something already went wrong.  There's no need to check
11833        further.  */
11834     return error_mark_node;
11835
11836   /* [dcl.fct.default]
11837      
11838      A default argument expression is implicitly converted to the
11839      parameter type.  */
11840   if (!TREE_TYPE (arg)
11841       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
11842     {
11843       if (decl)
11844         cp_error ("default argument for `%#D' has type `%T'", 
11845                   decl, TREE_TYPE (arg));
11846       else
11847         cp_error ("default argument for paramter of type `%T' has type `%T'",
11848                   decl_type, TREE_TYPE (arg));
11849
11850       return error_mark_node;
11851     }
11852
11853   /* [dcl.fct.default]
11854
11855      Local variables shall not be used in default argument
11856      expressions. 
11857
11858      The keyword `this' shall not be used in a default argument of a
11859      member function.  */
11860   var = search_tree (arg, local_variable_p);
11861   if (var)
11862     {
11863       cp_error ("default argument `%E' uses local variable `%D'",
11864                 arg, var);
11865       return error_mark_node;
11866     }
11867
11868   /* All is well.  */
11869   return arg;
11870 }
11871
11872 /* Decode the list of parameter types for a function type.
11873    Given the list of things declared inside the parens,
11874    return a list of types.
11875
11876    The list we receive can have three kinds of elements:
11877    an IDENTIFIER_NODE for names given without types,
11878    a TREE_LIST node for arguments given as typespecs or names with typespecs,
11879    or void_type_node, to mark the end of an argument list
11880    when additional arguments are not permitted (... was not used).
11881
11882    FUNCDEF_FLAG is nonzero for a function definition, 0 for
11883    a mere declaration.  A nonempty identifier-list gets an error message
11884    when FUNCDEF_FLAG is zero.
11885    If FUNCDEF_FLAG is 1, then parameter types must be complete.
11886    If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
11887
11888    If all elements of the input list contain types,
11889    we return a list of the types.
11890    If all elements contain no type (except perhaps a void_type_node
11891    at the end), we return a null list.
11892    If some have types and some do not, it is an error, and we
11893    return a null list.
11894
11895    Also set last_function_parms to either
11896    a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
11897    A list of names is converted to a chain of PARM_DECLs
11898    by store_parm_decls so that ultimately it is always a chain of decls.
11899
11900    Note that in C++, parameters can take default values.  These default
11901    values are in the TREE_PURPOSE field of the TREE_LIST.  It is
11902    an error to specify default values which are followed by parameters
11903    that have no default values, or an ELLIPSES.  For simplicities sake,
11904    only parameters which are specified with their types can take on
11905    default values.  */
11906
11907 static tree
11908 grokparms (first_parm, funcdef_flag)
11909      tree first_parm;
11910      int funcdef_flag;
11911 {
11912   tree result = NULL_TREE;
11913   tree decls = NULL_TREE;
11914
11915   if (first_parm != NULL_TREE
11916       && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
11917     {
11918       if (! funcdef_flag)
11919         pedwarn ("parameter names (without types) in function declaration");
11920       last_function_parms = first_parm;
11921       return NULL_TREE;
11922     }
11923   else if (first_parm != NULL_TREE
11924            && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
11925            && TREE_CODE (TREE_VALUE (first_parm)) != VOID_TYPE)
11926     my_friendly_abort (145);
11927   else
11928     {
11929       /* Types were specified.  This is a list of declarators
11930          each represented as a TREE_LIST node.  */
11931       register tree parm, chain;
11932       int any_init = 0, any_error = 0;
11933
11934       if (first_parm != NULL_TREE)
11935         {
11936           tree last_result = NULL_TREE;
11937           tree last_decl = NULL_TREE;
11938
11939           for (parm = first_parm; parm != NULL_TREE; parm = chain)
11940             {
11941               tree type = NULL_TREE, list_node = parm;
11942               register tree decl = TREE_VALUE (parm);
11943               tree init = TREE_PURPOSE (parm);
11944
11945               chain = TREE_CHAIN (parm);
11946               /* @@ weak defense against parse errors.  */
11947               if (TREE_CODE (decl) != VOID_TYPE 
11948                   && TREE_CODE (decl) != TREE_LIST)
11949                 {
11950                   /* Give various messages as the need arises.  */
11951                   if (TREE_CODE (decl) == STRING_CST)
11952                     cp_error ("invalid string constant `%E'", decl);
11953                   else if (TREE_CODE (decl) == INTEGER_CST)
11954                     error ("invalid integer constant in parameter list, did you forget to give parameter name?");
11955                   continue;
11956                 }
11957
11958               if (TREE_CODE (decl) != VOID_TYPE)
11959                 {
11960                   decl = grokdeclarator (TREE_VALUE (decl),
11961                                          TREE_PURPOSE (decl),
11962                                          PARM, init != NULL_TREE,
11963                                          NULL_TREE);
11964                   if (! decl || TREE_TYPE (decl) == error_mark_node)
11965                     continue;
11966
11967                   /* Top-level qualifiers on the parameters are
11968                      ignored for function types.  */
11969                   type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
11970
11971                   if (TREE_CODE (type) == VOID_TYPE)
11972                     decl = void_type_node;
11973                   else if (TREE_CODE (type) == METHOD_TYPE)
11974                     {
11975                       if (DECL_NAME (decl))
11976                         /* Cannot use the decl here because
11977                            we don't have DECL_CONTEXT set up yet.  */
11978                         cp_error ("parameter `%D' invalidly declared method type",
11979                                   DECL_NAME (decl));
11980                       else
11981                         error ("parameter invalidly declared method type");
11982                       type = build_pointer_type (type);
11983                       TREE_TYPE (decl) = type;
11984                     }
11985                   else if (TREE_CODE (type) == OFFSET_TYPE)
11986                     {
11987                       if (DECL_NAME (decl))
11988                         cp_error ("parameter `%D' invalidly declared offset type",
11989                                   DECL_NAME (decl));
11990                       else
11991                         error ("parameter invalidly declared offset type");
11992                       type = build_pointer_type (type);
11993                       TREE_TYPE (decl) = type;
11994                     }
11995                   else if (TREE_CODE (type) == RECORD_TYPE
11996                            && TYPE_LANG_SPECIFIC (type)
11997                            && CLASSTYPE_ABSTRACT_VIRTUALS (type))
11998                     {
11999                       abstract_virtuals_error (decl, type);
12000                       any_error = 1;  /* Seems like a good idea. */
12001                     }
12002                   else if (TREE_CODE (type) == RECORD_TYPE
12003                            && TYPE_LANG_SPECIFIC (type)
12004                            && IS_SIGNATURE (type))
12005                     {
12006                       signature_error (decl, type);
12007                       any_error = 1;  /* Seems like a good idea. */
12008                     }
12009                   else if (POINTER_TYPE_P (type))
12010                     {
12011                       tree t = type;
12012                       while (POINTER_TYPE_P (t)
12013                              || (TREE_CODE (t) == ARRAY_TYPE
12014                                  && TYPE_DOMAIN (t) != NULL_TREE))
12015                         t = TREE_TYPE (t);
12016                       if (TREE_CODE (t) == ARRAY_TYPE)
12017                         cp_error ("parameter type `%T' includes %s to array of unknown bound",
12018                                   type,
12019                                   TYPE_PTR_P (type) ? "pointer" : "reference");
12020                     }
12021                 }
12022
12023               if (TREE_CODE (decl) == VOID_TYPE)
12024                 {
12025                   if (result == NULL_TREE)
12026                     {
12027                       result = void_list_node;
12028                       last_result = result;
12029                     }
12030                   else
12031                     {
12032                       TREE_CHAIN (last_result) = void_list_node;
12033                       last_result = void_list_node;
12034                     }
12035                   if (chain
12036                       && (chain != void_list_node || TREE_CHAIN (chain)))
12037                     error ("`void' in parameter list must be entire list");
12038                   break;
12039                 }
12040
12041               /* Since there is a prototype, args are passed in their own types.  */
12042               DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
12043 #ifdef PROMOTE_PROTOTYPES
12044               if ((TREE_CODE (type) == INTEGER_TYPE
12045                    || TREE_CODE (type) == ENUMERAL_TYPE)
12046                   && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
12047                 DECL_ARG_TYPE (decl) = integer_type_node;
12048 #endif
12049               if (!any_error && init)
12050                 {
12051                   any_init++;
12052                   init = check_default_argument (decl, init);
12053                 }
12054               else
12055                 init = NULL_TREE;
12056
12057               if (decls == NULL_TREE)
12058                 {
12059                   decls = decl;
12060                   last_decl = decls;
12061                 }
12062               else
12063                 {
12064                   TREE_CHAIN (last_decl) = decl;
12065                   last_decl = decl;
12066                 }
12067               if (! current_function_decl && TREE_PERMANENT (list_node))
12068                 {
12069                   TREE_PURPOSE (list_node) = init;
12070                   TREE_VALUE (list_node) = type;
12071                   TREE_CHAIN (list_node) = NULL_TREE;
12072                 }
12073               else
12074                 list_node = saveable_tree_cons (init, type, NULL_TREE);
12075               if (result == NULL_TREE)
12076                 {
12077                   result = list_node;
12078                   last_result = result;
12079                 }
12080               else
12081                 {
12082                   TREE_CHAIN (last_result) = list_node;
12083                   last_result = list_node;
12084                 }
12085             }
12086           if (last_result)
12087             TREE_CHAIN (last_result) = NULL_TREE;
12088           /* If there are no parameters, and the function does not end
12089              with `...', then last_decl will be NULL_TREE.  */
12090           if (last_decl != NULL_TREE)
12091             TREE_CHAIN (last_decl) = NULL_TREE;
12092         }
12093     }
12094
12095   last_function_parms = decls;
12096
12097   return result;
12098 }
12099
12100 /* Called from the parser to update an element of TYPE_ARG_TYPES for some
12101    FUNCTION_TYPE with the newly parsed version of its default argument, which
12102    was previously digested as text.  See snarf_defarg et al in lex.c.  */
12103
12104 void
12105 replace_defarg (arg, init)
12106      tree arg, init;
12107 {
12108   if (! processing_template_decl
12109       && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
12110     cp_pedwarn ("invalid type `%T' for default argument to `%T'",
12111                 TREE_TYPE (init), TREE_VALUE (arg));
12112   TREE_PURPOSE (arg) = init;
12113 }
12114 \f
12115 /* Return 1 if D copies its arguments. This is used to test for copy
12116    constructors and copy assignment operators.  */
12117
12118 int
12119 copy_args_p (d)
12120      tree d;
12121 {
12122   tree t = FUNCTION_ARG_CHAIN (d);
12123   if (DECL_CONSTRUCTOR_P (d)
12124       && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (d)))
12125     { 
12126       t = TREE_CHAIN (t);
12127       if (TYPE_USES_PVBASES (DECL_CONTEXT (d)))
12128         t = TREE_CHAIN (t);
12129     }
12130   
12131   if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
12132       && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
12133           == DECL_CLASS_CONTEXT (d))
12134       && (TREE_CHAIN (t) == NULL_TREE
12135           || TREE_CHAIN (t) == void_list_node
12136           || TREE_PURPOSE (TREE_CHAIN (t))))
12137     return 1;
12138   return 0;
12139 }
12140
12141 /* These memoizing functions keep track of special properties which
12142    a class may have.  `grok_ctor_properties' notices whether a class
12143    has a constructor of the form X(X&), and also complains
12144    if the class has a constructor of the form X(X).
12145    `grok_op_properties' takes notice of the various forms of
12146    operator= which are defined, as well as what sorts of type conversion
12147    may apply.  Both functions take a FUNCTION_DECL as an argument.  */
12148
12149 int
12150 grok_ctor_properties (ctype, decl)
12151      tree ctype, decl;
12152 {
12153   tree parmtypes = FUNCTION_ARG_CHAIN (decl);
12154   tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
12155
12156   /* When a type has virtual baseclasses, a magical first int argument is
12157      added to any ctor so we can tell if the class has been initialized
12158      yet.  This could screw things up in this function, so we deliberately
12159      ignore the leading int if we're in that situation.  */
12160   if (TYPE_USES_VIRTUAL_BASECLASSES (ctype)
12161       && !CLASSTYPE_IS_TEMPLATE (ctype))
12162     {
12163       my_friendly_assert (parmtypes
12164                           && TREE_VALUE (parmtypes) == integer_type_node,
12165                           980529);
12166       parmtypes = TREE_CHAIN (parmtypes);
12167       parmtype = TREE_VALUE (parmtypes);
12168     }
12169
12170   if (TYPE_USES_PVBASES (ctype))
12171     {
12172       my_friendly_assert (parmtypes
12173                           && TREE_VALUE (parmtypes) == vlist_type_node,
12174                           980529);
12175       parmtypes = TREE_CHAIN (parmtypes);
12176       parmtype = TREE_VALUE (parmtypes);
12177     }
12178
12179   maybe_vlist_ctor_wrapper (decl, 0);
12180
12181   /* [class.copy]
12182
12183      A non-template constructor for class X is a copy constructor if
12184      its first parameter is of type X&, const X&, volatile X& or const
12185      volatile X&, and either there are no other parameters or else all
12186      other parameters have default arguments.  */
12187   if (TREE_CODE (parmtype) == REFERENCE_TYPE
12188       && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
12189       && (TREE_CHAIN (parmtypes) == NULL_TREE
12190           || TREE_CHAIN (parmtypes) == void_list_node
12191           || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
12192       && !(DECL_TEMPLATE_INSTANTIATION (decl)
12193            && is_member_template (DECL_TI_TEMPLATE (decl))))
12194     {
12195       TYPE_HAS_INIT_REF (ctype) = 1;
12196       if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
12197         TYPE_HAS_CONST_INIT_REF (ctype) = 1;
12198     }
12199   /* [class.copy]
12200
12201      A declaration of a constructor for a class X is ill-formed if its
12202      first parameter is of type (optionally cv-qualified) X and either
12203      there are no other parameters or else all other parameters have
12204      default arguments.  
12205
12206      We *don't* complain about member template instantiations that
12207      have this form, though; they can occur as we try to decide what
12208      constructor to use during overload resolution.  Since overload
12209      resolution will never prefer such a constructor to the
12210      non-template copy constructor (which is either explicitly or
12211      implicitly defined), there's no need to worry about their
12212      existence.  Theoretically, they should never even be
12213      instantiated, but that's hard to forestall.  */
12214   else if (TYPE_MAIN_VARIANT (parmtype) == ctype
12215            && (TREE_CHAIN (parmtypes) == NULL_TREE
12216                || TREE_CHAIN (parmtypes) == void_list_node
12217                || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
12218            && !(DECL_TEMPLATE_INSTANTIATION (decl)
12219                 && is_member_template (DECL_TI_TEMPLATE (decl))))
12220     {
12221       cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
12222                 ctype, ctype);
12223       SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
12224       return 0;
12225     }
12226   else if (TREE_CODE (parmtype) == VOID_TYPE
12227            || TREE_PURPOSE (parmtypes) != NULL_TREE)
12228     TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
12229
12230   return 1;
12231 }
12232
12233 /* An operator with this name can be either unary or binary.  */
12234
12235 static int
12236 ambi_op_p (name)
12237      tree name;
12238 {
12239   return (name == ansi_opname [(int) INDIRECT_REF]
12240           || name == ansi_opname [(int) ADDR_EXPR]
12241           || name == ansi_opname [(int) NEGATE_EXPR]
12242           || name == ansi_opname[(int) POSTINCREMENT_EXPR]
12243           || name == ansi_opname[(int) POSTDECREMENT_EXPR]
12244           || name == ansi_opname [(int) CONVERT_EXPR]);
12245 }
12246
12247 /* An operator with this name can only be unary.  */
12248
12249 static int
12250 unary_op_p (name)
12251      tree name;
12252 {
12253   return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
12254           || name == ansi_opname [(int) BIT_NOT_EXPR]
12255           || name == ansi_opname [(int) COMPONENT_REF]
12256           || IDENTIFIER_TYPENAME_P (name));
12257 }
12258
12259 /* Do a little sanity-checking on how they declared their operator.  */
12260
12261 void
12262 grok_op_properties (decl, virtualp, friendp)
12263      tree decl;
12264      int virtualp, friendp;
12265 {
12266   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
12267   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
12268   tree name = DECL_NAME (decl);
12269
12270   if (current_class_type == NULL_TREE)
12271     friendp = 1;
12272
12273   if (! friendp)
12274     {
12275       /* [class.copy]
12276
12277          A user-declared copy assignment operator X::operator= is a
12278          non-static non-template member function of class X with
12279          exactly one parameter of type X, X&, const X&, volatile X& or
12280          const volatile X&.  */
12281       if (name == ansi_opname[(int) MODIFY_EXPR]
12282           && !(DECL_TEMPLATE_INSTANTIATION (decl)
12283                && is_member_template (DECL_TI_TEMPLATE (decl))))
12284         ;
12285       else if (name == ansi_opname[(int) CALL_EXPR])
12286         TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
12287       else if (name == ansi_opname[(int) ARRAY_REF])
12288         TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
12289       else if (name == ansi_opname[(int) COMPONENT_REF]
12290                || name == ansi_opname[(int) MEMBER_REF])
12291         TYPE_OVERLOADS_ARROW (current_class_type) = 1;
12292       else if (name == ansi_opname[(int) NEW_EXPR])
12293         TYPE_GETS_NEW (current_class_type) |= 1;
12294       else if (name == ansi_opname[(int) DELETE_EXPR])
12295         TYPE_GETS_DELETE (current_class_type) |= 1;
12296       else if (name == ansi_opname[(int) VEC_NEW_EXPR])
12297         TYPE_GETS_NEW (current_class_type) |= 2;
12298       else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
12299         TYPE_GETS_DELETE (current_class_type) |= 2;
12300     }
12301
12302   if (name == ansi_opname[(int) NEW_EXPR]
12303       || name == ansi_opname[(int) VEC_NEW_EXPR])
12304     {
12305       /* When the compiler encounters the definition of A::operator new, it
12306          doesn't look at the class declaration to find out if it's static.  */
12307       if (methodp)
12308         revert_static_member_fn (&decl, NULL, NULL);
12309      
12310       /* Take care of function decl if we had syntax errors.  */
12311       if (argtypes == NULL_TREE)
12312         TREE_TYPE (decl)
12313           = build_function_type (ptr_type_node,
12314                                  hash_tree_chain (integer_type_node,
12315                                                   void_list_node));
12316       else
12317         TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
12318     }
12319   else if (name == ansi_opname[(int) DELETE_EXPR]
12320            || name == ansi_opname[(int) VEC_DELETE_EXPR])
12321     {
12322       if (methodp)
12323         revert_static_member_fn (&decl, NULL, NULL);
12324      
12325       if (argtypes == NULL_TREE)
12326         TREE_TYPE (decl)
12327           = build_function_type (void_type_node,
12328                                  hash_tree_chain (ptr_type_node,
12329                                                   void_list_node));
12330       else
12331         {
12332           TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
12333
12334           if (! friendp && name == ansi_opname[(int) VEC_DELETE_EXPR]
12335               && (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
12336                   != void_list_node))
12337             TYPE_VEC_DELETE_TAKES_SIZE (current_class_type) = 1;
12338         }
12339     }
12340   else
12341     {
12342       /* An operator function must either be a non-static member function
12343          or have at least one parameter of a class, a reference to a class,
12344          an enumeration, or a reference to an enumeration.  13.4.0.6 */
12345       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
12346         {
12347           if (IDENTIFIER_TYPENAME_P (name)
12348               || name == ansi_opname[(int) CALL_EXPR]
12349               || name == ansi_opname[(int) MODIFY_EXPR]
12350               || name == ansi_opname[(int) COMPONENT_REF]
12351               || name == ansi_opname[(int) ARRAY_REF])
12352             cp_error ("`%D' must be a nonstatic member function", decl);
12353           else
12354             {
12355               tree p = argtypes;
12356
12357               if (DECL_STATIC_FUNCTION_P (decl))
12358                 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
12359
12360               if (p)
12361                 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
12362                   {
12363                     tree arg = TREE_VALUE (p);
12364                     if (TREE_CODE (arg) == REFERENCE_TYPE)
12365                       arg = TREE_TYPE (arg);
12366
12367                     /* This lets bad template code slip through.  */
12368                     if (IS_AGGR_TYPE (arg)
12369                         || TREE_CODE (arg) == ENUMERAL_TYPE
12370                         || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
12371                         || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
12372                       goto foundaggr;
12373                   }
12374               cp_error
12375                 ("`%D' must have an argument of class or enumerated type",
12376                  decl);
12377             foundaggr:
12378               ;
12379             }
12380         }
12381       
12382       if (name == ansi_opname[(int) CALL_EXPR])
12383         return;                 /* No restrictions on args. */
12384
12385       if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
12386         {
12387           tree t = TREE_TYPE (name);
12388           if (TREE_CODE (t) == VOID_TYPE)
12389             pedwarn ("void is not a valid type conversion operator");
12390           else if (! friendp)
12391             {
12392               int ref = (TREE_CODE (t) == REFERENCE_TYPE);
12393               const char *what = 0;
12394               if (ref)
12395                 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
12396
12397               if (t == current_class_type)
12398                 what = "the same type";
12399               /* Don't force t to be complete here.  */
12400               else if (IS_AGGR_TYPE (t)
12401                        && TYPE_SIZE (t)
12402                        && DERIVED_FROM_P (t, current_class_type))
12403                 what = "a base class";
12404
12405               if (what)
12406                 warning ("conversion to %s%s will never use a type conversion operator",
12407                          ref ? "a reference to " : "", what);
12408             }
12409         }
12410
12411       if (name == ansi_opname[(int) MODIFY_EXPR])
12412         {
12413           tree parmtype;
12414
12415           if (list_length (argtypes) != 3 && methodp)
12416             {
12417               cp_error ("`%D' must take exactly one argument", decl);
12418               return;
12419             }
12420           parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
12421
12422           if (copy_assignment_arg_p (parmtype, virtualp)
12423               && ! friendp)
12424             {
12425               TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
12426               if (TREE_CODE (parmtype) != REFERENCE_TYPE
12427                   || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
12428                 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
12429             }
12430         }
12431       else if (name == ansi_opname[(int) COND_EXPR])
12432         {
12433           /* 13.4.0.3 */
12434           pedwarn ("ANSI C++ prohibits overloading operator ?:");
12435           if (list_length (argtypes) != 4)
12436             cp_error ("`%D' must take exactly three arguments", decl);
12437         }         
12438       else if (ambi_op_p (name))
12439         {
12440           if (list_length (argtypes) == 2)
12441             /* prefix */;
12442           else if (list_length (argtypes) == 3)
12443             {
12444               if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
12445                    || name == ansi_opname[(int) POSTDECREMENT_EXPR])
12446                   && ! processing_template_decl
12447                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
12448                 {
12449                   if (methodp)
12450                     cp_error ("postfix `%D' must take `int' as its argument",
12451                               decl);
12452                   else
12453                     cp_error
12454                       ("postfix `%D' must take `int' as its second argument",
12455                        decl);
12456                 }
12457             }
12458           else
12459             {
12460               if (methodp)
12461                 cp_error ("`%D' must take either zero or one argument", decl);
12462               else
12463                 cp_error ("`%D' must take either one or two arguments", decl);
12464             }
12465
12466           /* More Effective C++ rule 6.  */
12467           if (warn_ecpp
12468               && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12469                   || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
12470             {
12471               tree arg = TREE_VALUE (argtypes);
12472               tree ret = TREE_TYPE (TREE_TYPE (decl));
12473               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
12474                 arg = TREE_TYPE (arg);
12475               arg = TYPE_MAIN_VARIANT (arg);
12476               if (list_length (argtypes) == 2)
12477                 {
12478                   if (TREE_CODE (ret) != REFERENCE_TYPE
12479                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
12480                                        arg))
12481                     cp_warning ("prefix `%D' should return `%T'", decl,
12482                                 build_reference_type (arg));
12483                 }
12484               else
12485                 {
12486                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
12487                     cp_warning ("postfix `%D' should return `%T'", decl, arg);
12488                 }
12489             }
12490         }
12491       else if (unary_op_p (name))
12492         {
12493           if (list_length (argtypes) != 2)
12494             {
12495               if (methodp)
12496                 cp_error ("`%D' must take `void'", decl);
12497               else
12498                 cp_error ("`%D' must take exactly one argument", decl);
12499             }
12500         }
12501       else /* if (binary_op_p (name)) */
12502         {
12503           if (list_length (argtypes) != 3)
12504             {
12505               if (methodp)
12506                 cp_error ("`%D' must take exactly one argument", decl);
12507               else
12508                 cp_error ("`%D' must take exactly two arguments", decl);
12509             }
12510
12511           /* More Effective C++ rule 7.  */
12512           if (warn_ecpp
12513               && (name == ansi_opname [TRUTH_ANDIF_EXPR]
12514                   || name == ansi_opname [TRUTH_ORIF_EXPR]
12515                   || name == ansi_opname [COMPOUND_EXPR]))
12516             cp_warning ("user-defined `%D' always evaluates both arguments",
12517                         decl);
12518         }
12519
12520       /* Effective C++ rule 23.  */
12521       if (warn_ecpp
12522           && list_length (argtypes) == 3
12523           && (name == ansi_opname [PLUS_EXPR]
12524               || name == ansi_opname [MINUS_EXPR]
12525               || name == ansi_opname [TRUNC_DIV_EXPR]
12526               || name == ansi_opname [MULT_EXPR])
12527           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
12528         cp_warning ("`%D' should return by value", decl);
12529
12530       /* 13.4.0.8 */
12531       if (argtypes)
12532         for (; argtypes != void_list_node ; argtypes = TREE_CHAIN (argtypes))
12533           if (TREE_PURPOSE (argtypes))
12534             {
12535               TREE_PURPOSE (argtypes) = NULL_TREE;
12536               if (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12537                   || name == ansi_opname[(int) POSTDECREMENT_EXPR])
12538                 {
12539                   if (pedantic)
12540                     cp_pedwarn ("`%D' cannot have default arguments", decl);
12541                 }
12542               else
12543                 cp_error ("`%D' cannot have default arguments", decl);
12544             }
12545     }
12546 }
12547 \f
12548 static const char *
12549 tag_name (code)
12550      enum tag_types code;
12551 {
12552   switch (code)
12553     {
12554     case record_type:
12555       return "struct";
12556     case class_type:
12557       return "class";
12558     case union_type:
12559       return "union ";
12560     case enum_type:
12561       return "enum";
12562     case signature_type:
12563       return "signature";
12564     default:
12565       my_friendly_abort (981122);
12566     }
12567 }
12568
12569 /* Get the struct, enum or union (CODE says which) with tag NAME.
12570    Define the tag as a forward-reference if it is not defined.
12571
12572    C++: If a class derivation is given, process it here, and report
12573    an error if multiple derivation declarations are not identical.
12574
12575    If this is a definition, come in through xref_tag and only look in
12576    the current frame for the name (since C++ allows new names in any
12577    scope.)  */
12578
12579 tree
12580 xref_tag (code_type_node, name, globalize)
12581      tree code_type_node;
12582      tree name;
12583      int globalize;
12584 {
12585   enum tag_types tag_code;
12586   enum tree_code code;
12587   int temp = 0;
12588   register tree ref, t;
12589   struct binding_level *b = current_binding_level;
12590   int got_type = 0;
12591   tree attributes = NULL_TREE;
12592   tree context = NULL_TREE;
12593
12594   /* If we are called from the parser, code_type_node will sometimes be a
12595      TREE_LIST.  This indicates that the user wrote
12596      "class __attribute__ ((foo)) bar".  Extract the attributes so we can
12597      use them later.  */
12598   if (TREE_CODE (code_type_node) == TREE_LIST)
12599     {
12600       attributes = TREE_PURPOSE (code_type_node);
12601       code_type_node = TREE_VALUE (code_type_node);
12602     }
12603
12604   tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12605   switch (tag_code)
12606     {
12607     case record_type:
12608     case class_type:
12609     case signature_type:
12610       code = RECORD_TYPE;
12611       break;
12612     case union_type:
12613       code = UNION_TYPE;
12614       break;
12615     case enum_type:
12616       code = ENUMERAL_TYPE;
12617       break;
12618     default:
12619       my_friendly_abort (18);
12620     }
12621
12622   /* If a cross reference is requested, look up the type
12623      already defined for this tag and return it.  */
12624   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
12625     {
12626       t = name;
12627       name = TYPE_IDENTIFIER (t);
12628       got_type = 1;
12629     }
12630   else
12631     t = IDENTIFIER_TYPE_VALUE (name);
12632
12633   if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
12634       && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
12635     t = NULL_TREE;
12636
12637   if (! globalize)
12638     {
12639       /* If we know we are defining this tag, only look it up in
12640          this scope and don't try to find it as a type.  */
12641       ref = lookup_tag (code, name, b, 1);
12642     }
12643   else
12644     {
12645       if (t)
12646         {
12647           /* [dcl.type.elab] If the identifier resolves to a
12648              typedef-name or a template type-parameter, the
12649              elaborated-type-specifier is ill-formed.  */
12650           if (t != TYPE_MAIN_VARIANT (t)
12651               || (CLASS_TYPE_P (t) && TYPE_WAS_ANONYMOUS (t)))
12652             cp_pedwarn ("using typedef-name `%D' after `%s'",
12653                         TYPE_NAME (t), tag_name (tag_code));
12654           else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
12655             cp_error ("using template type parameter `%T' after `%s'",
12656                       t, tag_name (tag_code));
12657
12658           ref = t;
12659         }
12660       else
12661         ref = lookup_tag (code, name, b, 0);
12662           
12663       if (! ref)
12664         {
12665           /* Try finding it as a type declaration.  If that wins,
12666              use it.  */ 
12667           ref = lookup_name (name, 1);
12668
12669           if (ref != NULL_TREE
12670               && processing_template_decl
12671               && DECL_CLASS_TEMPLATE_P (ref)
12672               && template_class_depth (current_class_type) == 0)
12673             /* Since GLOBALIZE is true, we're declaring a global
12674                template, so we want this type.  */
12675             ref = DECL_RESULT (ref);
12676
12677           if (ref && TREE_CODE (ref) == TYPE_DECL
12678               && TREE_CODE (TREE_TYPE (ref)) == code)
12679             ref = TREE_TYPE (ref);
12680           else
12681             ref = NULL_TREE;
12682         }
12683
12684       if (ref && current_class_type 
12685           && template_class_depth (current_class_type) 
12686           && PROCESSING_REAL_TEMPLATE_DECL_P ()) 
12687         {
12688           /* Since GLOBALIZE is non-zero, we are not looking at a
12689              definition of this tag.  Since, in addition, we are currently
12690              processing a (member) template declaration of a template
12691              class, we must be very careful; consider:
12692
12693                template <class X>
12694                struct S1
12695
12696                template <class U>
12697                struct S2
12698                { template <class V>
12699                friend struct S1; };
12700
12701              Here, the S2::S1 declaration should not be confused with the
12702              outer declaration.  In particular, the inner version should
12703              have a template parameter of level 2, not level 1.  This
12704              would be particularly important if the member declaration
12705              were instead:
12706
12707                template <class V = U> friend struct S1;
12708
12709              say, when we should tsubst into `U' when instantiating
12710              S2.  On the other hand, when presented with:
12711
12712                  template <class T>
12713                  struct S1 {
12714                    template <class U>
12715                    struct S2 {};
12716                    template <class U>
12717                    friend struct S2;
12718                  };
12719
12720               we must find the inner binding eventually.  We
12721               accomplish this by making sure that the new type we
12722               create to represent this declaration has the right
12723               TYPE_CONTEXT.  */
12724           context = TYPE_CONTEXT (ref);
12725           ref = NULL_TREE;
12726         }
12727     }
12728
12729   push_obstacks_nochange ();
12730
12731   if (! ref)
12732     {
12733       /* If no such tag is yet defined, create a forward-reference node
12734          and record it as the "definition".
12735          When a real declaration of this type is found,
12736          the forward-reference will be altered into a real type.  */
12737
12738       /* In C++, since these migrate into the global scope, we must
12739          build them on the permanent obstack.  */
12740
12741       temp = allocation_temporary_p ();
12742       if (temp)
12743         end_temporary_allocation ();
12744
12745       if (code == ENUMERAL_TYPE)
12746         {
12747           cp_error ("use of enum `%#D' without previous declaration", name);
12748
12749           ref = make_node (ENUMERAL_TYPE);
12750
12751           /* Give the type a default layout like unsigned int
12752              to avoid crashing if it does not get defined.  */
12753           TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12754           TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
12755           TREE_UNSIGNED (ref) = 1;
12756           TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12757           TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12758           TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12759
12760           /* Enable us to recognize when a type is created in class context.
12761              To do nested classes correctly, this should probably be cleared
12762              out when we leave this classes scope.  Currently this in only
12763              done in `start_enum'.  */
12764
12765           pushtag (name, ref, globalize);
12766         }
12767       else
12768         {
12769           struct binding_level *old_b = class_binding_level;
12770
12771           ref = make_lang_type (code);
12772           TYPE_CONTEXT (ref) = context;
12773
12774           if (tag_code == signature_type)
12775             {
12776               SET_SIGNATURE (ref);
12777               /* Since a signature type will be turned into the type
12778                  of signature tables, it's not only an interface.  */
12779               CLASSTYPE_INTERFACE_ONLY (ref) = 0;
12780               SET_CLASSTYPE_INTERFACE_KNOWN (ref);
12781               /* A signature doesn't have a vtable.  */
12782               CLASSTYPE_VTABLE_NEEDS_WRITING (ref) = 0;
12783             }
12784
12785 #ifdef NONNESTED_CLASSES
12786           /* Class types don't nest the way enums do.  */
12787           class_binding_level = (struct binding_level *)0;
12788 #endif
12789           pushtag (name, ref, globalize);
12790           class_binding_level = old_b;
12791         }
12792     }
12793   else
12794     {
12795       /* If it no longer looks like a nested type, make sure it's
12796          in global scope.  
12797          If it is not an IDENTIFIER, this is not a declaration */
12798       if (b->namespace_p && !class_binding_level
12799           && TREE_CODE (name) == IDENTIFIER_NODE)
12800         {
12801           if (IDENTIFIER_NAMESPACE_VALUE (name) == NULL_TREE)
12802             SET_IDENTIFIER_NAMESPACE_VALUE (name, TYPE_NAME (ref));
12803         }
12804
12805       if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
12806         redeclare_class_template (ref, current_template_parms);
12807     }
12808
12809   /* Until the type is defined, tentatively accept whatever
12810      structure tag the user hands us.  */
12811   if (TYPE_SIZE (ref) == NULL_TREE
12812       && ref != current_class_type
12813       /* Have to check this, in case we have contradictory tag info.  */
12814       && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12815     {
12816       if (tag_code == class_type)
12817         CLASSTYPE_DECLARED_CLASS (ref) = 1;
12818       else if (tag_code == record_type || tag_code == signature_type)
12819         CLASSTYPE_DECLARED_CLASS (ref) = 0;
12820     }
12821
12822   pop_obstacks ();
12823
12824   TREE_TYPE (ref) = attributes;
12825
12826   return ref;
12827 }
12828
12829 tree
12830 xref_tag_from_type (old, id, globalize)
12831      tree old, id;
12832      int globalize;
12833 {
12834   tree code_type_node;
12835
12836   if (TREE_CODE (old) == RECORD_TYPE)
12837     code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12838                       ? class_type_node : record_type_node);
12839   else
12840     code_type_node = union_type_node;
12841
12842   if (id == NULL_TREE)
12843     id = TYPE_IDENTIFIER (old);
12844
12845   return xref_tag (code_type_node, id, globalize);
12846 }
12847
12848 /* REF is a type (named NAME), for which we have just seen some
12849    baseclasses.  BINFO is a list of those baseclasses; the
12850    TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
12851    the base-class.  CODE_TYPE_NODE indicates whether REF is a class,
12852    struct, or union.  */
12853
12854 void
12855 xref_basetypes (code_type_node, name, ref, binfo)
12856      tree code_type_node;
12857      tree name, ref;
12858      tree binfo;
12859 {
12860   /* In the declaration `A : X, Y, ... Z' we mark all the types
12861      (A, X, Y, ..., Z) so we can check for duplicates.  */
12862   tree binfos;
12863   tree base;
12864
12865   int i, len;
12866   enum tag_types tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12867
12868   if (tag_code == union_type)
12869     {
12870       cp_error ("derived union `%T' invalid", ref);
12871       return;
12872     }
12873
12874   len = list_length (binfo);
12875   push_obstacks (TYPE_OBSTACK (ref), TYPE_OBSTACK (ref));
12876
12877   /* First, make sure that any templates in base-classes are
12878      instantiated.  This ensures that if we call ourselves recursively
12879      we do not get confused about which classes are marked and which
12880      are not.  */
12881   for (base = binfo; base; base = TREE_CHAIN (base))
12882     complete_type (TREE_VALUE (base));
12883
12884   SET_CLASSTYPE_MARKED (ref);
12885   BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12886
12887   for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12888     {
12889       /* The base of a derived struct is public by default.  */
12890       int via_public
12891         = (TREE_PURPOSE (binfo) == access_public_node
12892            || TREE_PURPOSE (binfo) == access_public_virtual_node
12893            || (tag_code != class_type
12894                && (TREE_PURPOSE (binfo) == access_default_node
12895                    || TREE_PURPOSE (binfo) == access_default_virtual_node)));
12896       int via_protected
12897         = (TREE_PURPOSE (binfo) == access_protected_node
12898            || TREE_PURPOSE (binfo) == access_protected_virtual_node);
12899       int via_virtual
12900         = (TREE_PURPOSE (binfo) == access_private_virtual_node
12901            || TREE_PURPOSE (binfo) == access_protected_virtual_node
12902            || TREE_PURPOSE (binfo) == access_public_virtual_node
12903            || TREE_PURPOSE (binfo) == access_default_virtual_node);
12904       tree basetype = TREE_VALUE (binfo);
12905       tree base_binfo;
12906
12907       if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12908         basetype = TREE_TYPE (basetype);
12909       if (!basetype
12910           || (TREE_CODE (basetype) != RECORD_TYPE
12911               && TREE_CODE (basetype) != TYPENAME_TYPE
12912               && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
12913               && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
12914         {
12915           cp_error ("base type `%T' fails to be a struct or class type",
12916                     TREE_VALUE (binfo));
12917           continue;
12918         }
12919
12920       GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
12921
12922       /* This code replaces similar code in layout_basetypes.
12923          We put the complete_type first for implicit `typename'.  */
12924       if (TYPE_SIZE (basetype) == NULL_TREE
12925           && ! (current_template_parms && uses_template_parms (basetype)))
12926         {
12927           cp_error ("base class `%T' has incomplete type", basetype);
12928           continue;
12929         }
12930       else
12931         {
12932           if (CLASSTYPE_MARKED (basetype))
12933             {
12934               if (basetype == ref)
12935                 cp_error ("recursive type `%T' undefined", basetype);
12936               else
12937                 cp_error ("duplicate base type `%T' invalid", basetype);
12938               continue;
12939             }
12940
12941           if (TYPE_FOR_JAVA (basetype)
12942               && current_lang_stack == current_lang_base)
12943             TYPE_FOR_JAVA (ref) = 1;
12944
12945           /* Note that the BINFO records which describe individual
12946              inheritances are *not* shared in the lattice!  They
12947              cannot be shared because a given baseclass may be
12948              inherited with different `accessibility' by different
12949              derived classes.  (Each BINFO record describing an
12950              individual inheritance contains flags which say what
12951              the `accessibility' of that particular inheritance is.)  */
12952   
12953           base_binfo 
12954             = make_binfo (integer_zero_node, basetype,
12955                           CLASS_TYPE_P (basetype)
12956                           ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12957                           CLASS_TYPE_P (basetype)
12958                           ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
12959  
12960           TREE_VEC_ELT (binfos, i) = base_binfo;
12961           TREE_VIA_PUBLIC (base_binfo) = via_public;
12962           TREE_VIA_PROTECTED (base_binfo) = via_protected;
12963           TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12964           BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12965
12966           /* We need to unshare the binfos now so that lookups during class
12967              definition work.  */
12968           unshare_base_binfos (base_binfo);
12969
12970           SET_CLASSTYPE_MARKED (basetype);
12971
12972           /* We are free to modify these bits because they are meaningless
12973              at top level, and BASETYPE is a top-level type.  */
12974           if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
12975             {
12976               TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
12977               TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12978               /* The PVBASES flag is never set for templates; we know
12979                  only for instantiations whether the virtual bases are
12980                  polymorphic. */
12981               if (flag_vtable_thunks >= 2 && !CLASSTYPE_IS_TEMPLATE (ref))
12982                 {
12983                   if (via_virtual && TYPE_VIRTUAL_P (basetype))
12984                     TYPE_USES_PVBASES (ref) = 1;
12985                   else if (TYPE_USES_PVBASES (basetype))
12986                     TYPE_USES_PVBASES (ref) = 1;
12987                 }
12988             }
12989
12990           if (CLASS_TYPE_P (basetype))
12991             {
12992               TYPE_GETS_NEW (ref) |= TYPE_GETS_NEW (basetype);
12993               TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12994             }
12995
12996           i += 1;
12997         }
12998     }
12999   if (i)
13000     TREE_VEC_LENGTH (binfos) = i;
13001   else
13002     BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
13003
13004   if (i > 1)
13005     TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
13006   else if (i == 1)
13007     {
13008       tree basetype = BINFO_TYPE (TREE_VEC_ELT (binfos, 0));
13009       
13010       if (CLASS_TYPE_P (basetype))
13011         TYPE_USES_MULTIPLE_INHERITANCE (ref)
13012           = TYPE_USES_MULTIPLE_INHERITANCE (basetype);
13013     }
13014
13015   if (TYPE_USES_MULTIPLE_INHERITANCE (ref))
13016     TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
13017
13018   /* Unmark all the types.  */
13019   while (--i >= 0)
13020     CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
13021   CLEAR_CLASSTYPE_MARKED (ref);
13022
13023   /* Now that we know all the base-classes, set up the list of virtual
13024      bases.  */
13025   CLASSTYPE_VBASECLASSES (ref) = get_vbase_types (ref);
13026
13027   pop_obstacks ();
13028 }
13029   
13030 \f
13031 /* Begin compiling the definition of an enumeration type.
13032    NAME is its name (or null if anonymous).
13033    Returns the type object, as yet incomplete.
13034    Also records info about it so that build_enumerator
13035    may be used to declare the individual values as they are read.  */
13036
13037 tree
13038 start_enum (name)
13039      tree name;
13040 {
13041   register tree enumtype = NULL_TREE;
13042   struct binding_level *b = current_binding_level;
13043
13044   /* We are wasting space here and putting these on the permanent_obstack so
13045      that typeid(local enum) will work correctly. */
13046   push_obstacks (&permanent_obstack, &permanent_obstack);
13047
13048   /* If this is the real definition for a previous forward reference,
13049      fill in the contents in the same object that used to be the
13050      forward reference.  */
13051
13052   if (name != NULL_TREE)
13053     enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
13054
13055   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
13056     cp_error ("multiple definition of `%#T'", enumtype);
13057   else
13058     {
13059       enumtype = make_node (ENUMERAL_TYPE);
13060       pushtag (name, enumtype, 0);
13061     }
13062
13063   if (current_class_type)
13064     TREE_ADDRESSABLE (b->tags) = 1;
13065
13066   /* We don't copy this value because build_enumerator needs to do it.  */
13067   enum_next_value = integer_zero_node;
13068   enum_overflow = 0;
13069
13070   GNU_xref_decl (current_function_decl, enumtype);
13071   return enumtype;
13072 }
13073
13074 /* After processing and defining all the values of an enumeration type,
13075    install their decls in the enumeration type and finish it off.
13076    ENUMTYPE is the type object and VALUES a list of name-value pairs.
13077    Returns ENUMTYPE.  */
13078
13079 tree
13080 finish_enum (enumtype)
13081      tree enumtype;
13082 {
13083   register tree minnode = NULL_TREE, maxnode = NULL_TREE;
13084   /* Calculate the maximum value of any enumerator in this type.  */
13085
13086   tree values = TYPE_VALUES (enumtype);
13087   if (values)
13088     {
13089       tree pair;
13090
13091       for (pair = values; pair; pair = TREE_CHAIN (pair))
13092         {
13093           tree decl;
13094           tree value;
13095
13096           /* The TREE_VALUE is a CONST_DECL for this enumeration
13097              constant.  */
13098           decl = TREE_VALUE (pair);
13099
13100           /* The DECL_INITIAL will be NULL if we are processing a
13101              template declaration and this enumeration constant had no
13102              explicit initializer.  */
13103           value = DECL_INITIAL (decl);
13104           if (value && !processing_template_decl)
13105             {
13106               /* Set the TREE_TYPE for the VALUE as well.  That's so
13107                  that when we call decl_constant_value we get an
13108                  entity of the right type (but with the constant
13109                  value).  Since we shouldn't ever call
13110                  decl_constant_value on a template type, there's no
13111                  reason to do that when processing_template_decl.
13112                  And, if the expression is something like a
13113                  TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
13114                  wreak havoc on the intended type of the expression.  
13115
13116                  Of course, there's also no point in trying to compute
13117                  minimum or maximum values if we're in a template.  */
13118               TREE_TYPE (value) = enumtype;
13119
13120               if (!minnode)
13121                 minnode = maxnode = value;
13122               else if (tree_int_cst_lt (maxnode, value))
13123                 maxnode = value;
13124               else if (tree_int_cst_lt (value, minnode))
13125                 minnode = value;
13126             }
13127
13128           if (processing_template_decl) 
13129             /* If this is just a template, leave the CONST_DECL
13130                alone.  That way tsubst_copy will find CONST_DECLs for
13131                CONST_DECLs, and not INTEGER_CSTs.  */
13132             ;
13133           else
13134             /* In the list we're building up, we want the enumeration
13135                values, not the CONST_DECLs.  */
13136             TREE_VALUE (pair) = value;
13137         }
13138     }
13139   else
13140     maxnode = minnode = integer_zero_node;
13141
13142   TYPE_VALUES (enumtype) = nreverse (values);
13143
13144   if (processing_template_decl)
13145     {
13146       tree scope = current_scope ();
13147       if (scope && TREE_CODE (scope) == FUNCTION_DECL)
13148         add_tree (build_min (TAG_DEFN, enumtype));
13149     }
13150   else
13151     {
13152       int unsignedp = tree_int_cst_sgn (minnode) >= 0;
13153       int lowprec = min_precision (minnode, unsignedp);
13154       int highprec = min_precision (maxnode, unsignedp);
13155       int precision = MAX (lowprec, highprec);
13156       tree tem;
13157
13158       TYPE_SIZE (enumtype) = NULL_TREE;
13159
13160       /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'.  */
13161
13162       TYPE_PRECISION (enumtype) = precision;
13163       if (unsignedp)
13164         fixup_unsigned_type (enumtype);
13165       else
13166         fixup_signed_type (enumtype);
13167
13168       if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
13169         /* Use the width of the narrowest normal C type which is wide
13170            enough.  */ 
13171         TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
13172                                                     (precision, 1));
13173       else
13174         TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
13175
13176       TYPE_SIZE (enumtype) = 0;
13177       layout_type (enumtype);
13178     
13179       /* Fix up all variant types of this enum type.  */
13180       for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
13181            tem = TYPE_NEXT_VARIANT (tem))
13182         {
13183           TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
13184           TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
13185           TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
13186           TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
13187           TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
13188           TYPE_MODE (tem) = TYPE_MODE (enumtype);
13189           TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
13190           TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
13191           TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
13192         }
13193
13194       /* Finish debugging output for this type.  */
13195       rest_of_type_compilation (enumtype, namespace_bindings_p ());
13196     }
13197
13198   /* In start_enum we pushed obstacks.  Here, we must pop them.  */
13199   pop_obstacks ();
13200
13201   return enumtype;
13202 }
13203
13204 /* Build and install a CONST_DECL for an enumeration constant of the
13205    enumeration type TYPE whose NAME and VALUE (if any) are provided.
13206    Assignment of sequential values by default is handled here.  */
13207
13208 tree
13209 build_enumerator (name, value, type)
13210      tree name;
13211      tree value;
13212      tree type;
13213 {
13214   tree decl, result;
13215   tree context;
13216
13217   /* Remove no-op casts from the value.  */
13218   if (value)
13219     STRIP_TYPE_NOPS (value);
13220
13221  if (! processing_template_decl)
13222    {
13223      /* Validate and default VALUE.  */
13224      if (value != NULL_TREE)
13225        {
13226          if (TREE_READONLY_DECL_P (value))
13227            value = decl_constant_value (value);
13228
13229          if (TREE_CODE (value) == INTEGER_CST)
13230            {
13231              value = default_conversion (value);
13232              constant_expression_warning (value);
13233            }
13234          else
13235            {
13236              cp_error ("enumerator value for `%D' not integer constant", name);
13237              value = NULL_TREE;
13238            }
13239        }
13240
13241      /* Default based on previous value.  */
13242      if (value == NULL_TREE && ! processing_template_decl)
13243        {
13244          value = enum_next_value;
13245          if (enum_overflow)
13246            cp_error ("overflow in enumeration values at `%D'", name);
13247        }
13248
13249      /* Remove no-op casts from the value.  */
13250      if (value)
13251        STRIP_TYPE_NOPS (value);
13252 #if 0
13253      /* To fix MAX_VAL enum consts. (bkoz)  */
13254      TREE_TYPE (value) = integer_type_node;
13255 #endif
13256    }
13257
13258  /* We always have to copy here; not all INTEGER_CSTs are unshared.
13259     Even in other cases, we will later (in finish_enum) be setting the
13260     type of VALUE.  */
13261  if (value != NULL_TREE)
13262    value = copy_node (value);
13263
13264   /* C++ associates enums with global, function, or class declarations.  */
13265  
13266  context = current_scope ();
13267  if (context && context == current_class_type)
13268    /* This enum declaration is local to the class.  */
13269    decl = build_lang_field_decl (CONST_DECL, name, type);
13270  else
13271    /* It's a global enum, or it's local to a function.  (Note local to
13272       a function could mean local to a class method.  */
13273    decl = build_decl (CONST_DECL, name, type);
13274
13275  DECL_CONTEXT (decl) = FROB_CONTEXT (context);
13276  DECL_INITIAL (decl) = value;
13277  TREE_READONLY (decl) = 1;
13278
13279  if (context && context == current_class_type)
13280    /* In something like `struct S { enum E { i = 7 }; };' we put `i'
13281       on the TYPE_FIELDS list for `S'.  (That's so that you can say
13282       things like `S::i' later.)  */
13283    finish_member_declaration (decl);
13284  else
13285    {
13286      pushdecl (decl);
13287      GNU_xref_decl (current_function_decl, decl);
13288    }
13289
13290  if (! processing_template_decl)
13291    {
13292      /* Set basis for default for next value.  */
13293      enum_next_value = build_binary_op_nodefault (PLUS_EXPR, value,
13294                                                   integer_one_node, PLUS_EXPR);
13295      enum_overflow = tree_int_cst_lt (enum_next_value, value);
13296    }
13297
13298   result = saveable_tree_cons (name, decl, NULL_TREE);
13299   return result;
13300 }
13301
13302 \f
13303 static int function_depth;
13304
13305 /* Create the FUNCTION_DECL for a function definition.
13306    DECLSPECS and DECLARATOR are the parts of the declaration;
13307    they describe the function's name and the type it returns,
13308    but twisted together in a fashion that parallels the syntax of C.
13309
13310    If PRE_PARSED_P is non-zero then DECLARATOR is really the DECL for
13311    the function we are about to process; DECLSPECS are ignored.  For
13312    example, we set PRE_PARSED_P when processing the definition of
13313    inline function that was defined in-class; the definition is
13314    actually processed when the class is complete.  In this case,
13315    PRE_PARSED_P is 2.  We also set PRE_PARSED_P when instanting the
13316    body of a template function, and when constructing thunk functions
13317    and such; in these cases PRE_PARSED_P is 1.
13318    
13319    This function creates a binding context for the function body
13320    as well as setting up the FUNCTION_DECL in current_function_decl.
13321
13322    Returns 1 on success.  If the DECLARATOR is not suitable for a function
13323    (it defines a datum instead), we return 0, which tells
13324    yyparse to report a parse error.
13325
13326    For C++, we must first check whether that datum makes any sense.
13327    For example, "class A local_a(1,2);" means that variable local_a
13328    is an aggregate of type A, which should have a constructor
13329    applied to it with the argument list [1, 2].
13330
13331    @@ There is currently no way to retrieve the storage
13332    @@ allocated to FUNCTION (or all of its parms) if we return
13333    @@ something we had previously.  */
13334
13335 int
13336 start_function (declspecs, declarator, attrs, pre_parsed_p)
13337      tree declspecs, declarator, attrs;
13338      int pre_parsed_p;
13339 {
13340   tree decl1;
13341   tree ctype = NULL_TREE;
13342   tree fntype;
13343   tree restype;
13344   extern int have_extern_spec;
13345   extern int used_extern_spec;
13346   int doing_friend = 0;
13347
13348   /* Sanity check.  */
13349   my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
13350   my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
13351
13352   /* Assume, until we see it does.  */
13353   current_function_returns_value = 0;
13354   current_function_returns_null = 0;
13355   named_labels = 0;
13356   shadowed_labels = 0;
13357   current_function_assigns_this = 0;
13358   current_function_just_assigned_this = 0;
13359   current_function_parms_stored = 0;
13360   original_result_rtx = NULL_RTX;
13361   base_init_expr = NULL_TREE;
13362   current_base_init_list = NULL_TREE;
13363   current_member_init_list = NULL_TREE;
13364   ctor_label = dtor_label = NULL_TREE;
13365   static_labelno = 0;
13366
13367   clear_temp_name ();
13368
13369   /* This should only be done once on the top most decl.  */
13370   if (have_extern_spec && !used_extern_spec)
13371     {
13372       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
13373       used_extern_spec = 1;
13374     }
13375
13376   if (pre_parsed_p)
13377     {
13378       decl1 = declarator;
13379
13380 #if 0
13381       /* What was this testing for, exactly?  */
13382       if (! DECL_ARGUMENTS (decl1)
13383           && !DECL_STATIC_FUNCTION_P (decl1)
13384           && !DECL_ARTIFICIAL (decl1)
13385           && DECL_CLASS_SCOPE_P (decl1)
13386           && TYPE_IDENTIFIER (DECL_CONTEXT (decl1))
13387           && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (DECL_CONTEXT (decl1))))
13388         {
13389           tree binding = binding_for_name (DECL_NAME (decl1), 
13390                                            current_namespace);
13391           cp_error ("redeclaration of `%#D'", decl1);
13392           if (IDENTIFIER_CLASS_VALUE (DECL_NAME (decl1)))
13393             cp_error_at ("previous declaration here", IDENTIFIER_CLASS_VALUE (DECL_NAME (decl1)));
13394           else if (BINDING_VALUE (binding))
13395             cp_error_at ("previous declaration here", BINDING_VALUE (binding));
13396         }
13397 #endif
13398
13399       fntype = TREE_TYPE (decl1);
13400       if (TREE_CODE (fntype) == METHOD_TYPE)
13401         ctype = TYPE_METHOD_BASETYPE (fntype);
13402
13403       /* ANSI C++ June 5 1992 WP 11.4.5.  A friend function defined in a
13404          class is in the (lexical) scope of the class in which it is
13405          defined.  */
13406       if (!ctype && DECL_FRIEND_P (decl1))
13407         {
13408           ctype = DECL_CLASS_CONTEXT (decl1);
13409
13410           /* CTYPE could be null here if we're dealing with a template;
13411              for example, `inline friend float foo()' inside a template
13412              will have no CTYPE set.  */
13413           if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
13414             ctype = NULL_TREE;
13415           else
13416             doing_friend = 1;
13417         }
13418
13419       last_function_parms = DECL_ARGUMENTS (decl1);
13420       last_function_parm_tags = NULL_TREE;
13421     }
13422   else
13423     {
13424       decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
13425       /* If the declarator is not suitable for a function definition,
13426          cause a syntax error.  */
13427       if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
13428
13429       fntype = TREE_TYPE (decl1);
13430
13431       restype = TREE_TYPE (fntype);
13432       if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
13433         {
13434           cp_error ("semicolon missing after declaration of `%#T'", restype);
13435           shadow_tag (build_expr_list (NULL_TREE, restype));
13436           CLASSTYPE_GOT_SEMICOLON (restype) = 1;
13437           if (TREE_CODE (fntype) == FUNCTION_TYPE)
13438             fntype = build_function_type (integer_type_node,
13439                                           TYPE_ARG_TYPES (fntype));
13440           else
13441             fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
13442                                               integer_type_node,
13443                                               TYPE_ARG_TYPES (fntype));
13444           TREE_TYPE (decl1) = fntype;
13445         }
13446
13447       if (TREE_CODE (fntype) == METHOD_TYPE)
13448         ctype = TYPE_METHOD_BASETYPE (fntype);
13449       else if (DECL_MAIN_P (decl1))
13450         {
13451           /* If this doesn't return integer_type, complain.  */
13452           if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
13453             {
13454               if (pedantic || warn_return_type)
13455                 pedwarn ("return type for `main' changed to `int'");
13456               TREE_TYPE (decl1) = fntype = default_function_type;
13457             }
13458         }
13459     }
13460
13461   /* Warn if function was previously implicitly declared
13462      (but not if we warned then).  */
13463   if (! warn_implicit
13464       && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
13465     cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
13466
13467   announce_function (decl1);
13468
13469   /* Set up current_class_type, and enter the scope of the class, if
13470      appropriate.  */
13471   if (ctype)
13472     push_nested_class (ctype, 1);
13473   else if (DECL_STATIC_FUNCTION_P (decl1))
13474     push_nested_class (DECL_CONTEXT (decl1), 2);
13475
13476   /* Now that we have entered the scope of the class, we must restore
13477      the bindings for any template parameters surrounding DECL1, if it
13478      is an inline member template.  (Order is important; consider the
13479      case where a template parameter has the same name as a field of
13480      the class.)  It is not until after this point that
13481      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
13482   if (pre_parsed_p == 2)
13483     maybe_begin_member_template_processing (decl1);
13484
13485   /* We are now in the scope of the function being defined.  */
13486   current_function_decl = decl1;
13487
13488   /* Save the parm names or decls from this function's declarator
13489      where store_parm_decls will find them.  */
13490   current_function_parms = last_function_parms;
13491   current_function_parm_tags = last_function_parm_tags;
13492
13493   if (! processing_template_decl)
13494     {
13495       /* In a function definition, arg types must be complete.  */
13496       require_complete_types_for_parms (current_function_parms);
13497
13498       if (TYPE_SIZE (complete_type (TREE_TYPE (fntype))) == NULL_TREE)
13499         {
13500           cp_error ("return-type `%#T' is an incomplete type",
13501                     TREE_TYPE (fntype));
13502
13503           /* Make it return void instead, but don't change the
13504              type of the DECL_RESULT, in case we have a named return value.  */
13505           if (ctype)
13506             TREE_TYPE (decl1)
13507               = build_cplus_method_type (build_type_variant (ctype,
13508                                                              TREE_READONLY (decl1),
13509                                                              TREE_SIDE_EFFECTS (decl1)),
13510                                          void_type_node,
13511                                          FUNCTION_ARG_CHAIN (decl1));
13512           else
13513             TREE_TYPE (decl1)
13514               = build_function_type (void_type_node,
13515                                      TYPE_ARG_TYPES (TREE_TYPE (decl1)));
13516           DECL_RESULT (decl1)
13517             = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (TREE_TYPE (fntype)));
13518           TREE_READONLY (DECL_RESULT (decl1))
13519             = CP_TYPE_CONST_P (TREE_TYPE (fntype));
13520           TREE_THIS_VOLATILE (DECL_RESULT (decl1))
13521             = CP_TYPE_VOLATILE_P (TREE_TYPE (fntype));
13522         }
13523
13524       if (TYPE_LANG_SPECIFIC (TREE_TYPE (fntype))
13525           && CLASSTYPE_ABSTRACT_VIRTUALS (TREE_TYPE (fntype)))
13526         abstract_virtuals_error (decl1, TREE_TYPE (fntype));
13527     }
13528
13529   /* Effective C++ rule 15.  See also c_expand_return.  */
13530   if (warn_ecpp
13531       && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
13532       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
13533     cp_warning ("`operator=' should return a reference to `*this'");
13534
13535   /* Make the init_value nonzero so pushdecl knows this is not tentative.
13536      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
13537   DECL_INITIAL (decl1) = error_mark_node;
13538
13539 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
13540   SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
13541 #endif
13542   
13543   /* This function exists in static storage.
13544      (This does not mean `static' in the C sense!)  */
13545   TREE_STATIC (decl1) = 1;
13546
13547   /* We must call push_template_decl after current_class_type is set
13548      up.  (If we are processing inline definitions after exiting a
13549      class scope, current_class_type will be NULL_TREE until set above
13550      by push_nested_class.)  */
13551   if (processing_template_decl)
13552     decl1 = push_template_decl (decl1);
13553
13554   /* Record the decl so that the function name is defined.
13555      If we already have a decl for this name, and it is a FUNCTION_DECL,
13556      use the old decl.  */
13557   if (!processing_template_decl && pre_parsed_p == 0)
13558     {
13559       /* A specialization is not used to guide overload resolution.  */
13560       if ((flag_guiding_decls 
13561            || !DECL_TEMPLATE_SPECIALIZATION (decl1))
13562           && ! DECL_FUNCTION_MEMBER_P (decl1))
13563         decl1 = pushdecl (decl1);
13564       else
13565         {
13566           /* We need to set the DECL_CONTEXT. */
13567           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13568             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13569           /* And make sure we have enough default args.  */
13570           check_default_args (decl1);
13571         }
13572       DECL_MAIN_VARIANT (decl1) = decl1;
13573       fntype = TREE_TYPE (decl1);
13574     }
13575
13576   current_function_decl = decl1;
13577
13578   if (DECL_INTERFACE_KNOWN (decl1))
13579     {
13580       tree ctx = hack_decl_function_context (decl1);
13581
13582       if (DECL_NOT_REALLY_EXTERN (decl1))
13583         DECL_EXTERNAL (decl1) = 0;
13584
13585       if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx) 
13586           && TREE_PUBLIC (ctx))
13587         /* This is a function in a local class in an extern inline
13588            function.  */
13589         comdat_linkage (decl1);
13590     }
13591   /* If this function belongs to an interface, it is public.
13592      If it belongs to someone else's interface, it is also external.
13593      This only affects inlines and template instantiations.  */
13594   else if (interface_unknown == 0
13595            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13596                || flag_alt_external_templates))
13597     {
13598       if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
13599           || processing_template_decl)
13600         {
13601           DECL_EXTERNAL (decl1)
13602             = (interface_only
13603                || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines
13604                    && !DECL_VINDEX (decl1)));
13605
13606           /* For WIN32 we also want to put these in linkonce sections.  */
13607           maybe_make_one_only (decl1);
13608         }
13609       else
13610         DECL_EXTERNAL (decl1) = 0;
13611       DECL_NOT_REALLY_EXTERN (decl1) = 0;
13612       DECL_INTERFACE_KNOWN (decl1) = 1;
13613     }
13614   else if (interface_unknown && interface_only
13615            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13616                || flag_alt_external_templates))
13617     {
13618       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13619          interface, we will have interface_only set but not
13620          interface_known.  In that case, we don't want to use the normal
13621          heuristics because someone will supply a #pragma implementation
13622          elsewhere, and deducing it here would produce a conflict.  */
13623       comdat_linkage (decl1);
13624       DECL_EXTERNAL (decl1) = 0;
13625       DECL_INTERFACE_KNOWN (decl1) = 1;
13626       DECL_DEFER_OUTPUT (decl1) = 1;
13627     }
13628   else
13629     {
13630       /* This is a definition, not a reference.
13631          So clear DECL_EXTERNAL.  */
13632       DECL_EXTERNAL (decl1) = 0;
13633
13634       if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
13635           && ! DECL_INTERFACE_KNOWN (decl1)
13636           /* Don't try to defer nested functions for now.  */
13637           && ! hack_decl_function_context (decl1))
13638         DECL_DEFER_OUTPUT (decl1) = 1;
13639       else
13640         DECL_INTERFACE_KNOWN (decl1) = 1;
13641     }
13642
13643   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1))
13644     {
13645       if (TREE_CODE (fntype) == METHOD_TYPE)
13646         TREE_TYPE (decl1) = fntype
13647           = build_function_type (TREE_TYPE (fntype),
13648                                  TREE_CHAIN (TYPE_ARG_TYPES (fntype)));
13649       current_function_parms = TREE_CHAIN (current_function_parms);
13650       DECL_ARGUMENTS (decl1) = current_function_parms;
13651       ctype = NULL_TREE;
13652     }
13653   restype = TREE_TYPE (fntype);
13654
13655   if (ctype)
13656     {
13657       /* If we're compiling a friend function, neither of the variables
13658          current_class_ptr nor current_class_type will have values.  */
13659       if (! doing_friend)
13660         {
13661           /* We know that this was set up by `grokclassfn'.
13662              We do not wait until `store_parm_decls', since evil
13663              parse errors may never get us to that point.  Here
13664              we keep the consistency between `current_class_type'
13665              and `current_class_ptr'.  */
13666           tree t = current_function_parms;
13667
13668           my_friendly_assert (t != NULL_TREE
13669                               && TREE_CODE (t) == PARM_DECL, 162);
13670
13671           if (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE)
13672             {
13673               int i;
13674
13675               if (! hack_decl_function_context (decl1))
13676                 temporary_allocation ();
13677               i = suspend_momentary ();
13678
13679               /* Normally, build_indirect_ref returns
13680                  current_class_ref whenever current_class_ptr is
13681                  dereferenced.  This time, however, we want it to
13682                  *create* current_class_ref, so we temporarily clear
13683                  current_class_ptr to fool it.  */
13684               current_class_ptr = NULL_TREE;
13685               current_class_ref = build_indirect_ref (t, NULL_PTR);
13686               current_class_ptr = t;
13687
13688               resume_momentary (i);
13689               if (! hack_decl_function_context (decl1))
13690                 end_temporary_allocation ();
13691             }
13692           else
13693             /* We're having a signature pointer here.  */
13694             current_class_ref = current_class_ptr = t;
13695
13696         }
13697     }
13698   else
13699     current_class_ptr = current_class_ref = NULL_TREE;
13700
13701   pushlevel (0);
13702   current_binding_level->parm_flag = 1;
13703
13704   GNU_xref_function (decl1, current_function_parms);
13705
13706   if (attrs)
13707     cplus_decl_attributes (decl1, NULL_TREE, attrs);
13708   
13709   make_function_rtl (decl1);
13710
13711   /* Promote the value to int before returning it.  */
13712   if (C_PROMOTING_INTEGER_TYPE_P (restype))
13713     restype = type_promotes_to (restype);
13714
13715   /* If this fcn was already referenced via a block-scope `extern' decl
13716      (or an implicit decl), propagate certain information about the usage.  */
13717   if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
13718     TREE_ADDRESSABLE (decl1) = 1;
13719
13720   if (DECL_RESULT (decl1) == NULL_TREE)
13721     {
13722       DECL_RESULT (decl1)
13723         = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13724       TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13725       TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
13726     }
13727
13728   /* Allocate further tree nodes temporarily during compilation
13729      of this function only.  Tiemann moved up here from bottom of fn.  */
13730   /* If this is a nested function, then we must continue to allocate RTL
13731      on the permanent obstack in case we need to inline it later.  */
13732   if (! hack_decl_function_context (decl1))
13733     temporary_allocation ();
13734
13735   if (processing_template_decl)
13736     {
13737       ++minimal_parse_mode;
13738       last_tree = DECL_SAVED_TREE (decl1)
13739         = build_nt (EXPR_STMT, void_zero_node);
13740     }
13741
13742   ++function_depth;
13743
13744   if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl1))
13745       && DECL_LANGUAGE (decl1) == lang_cplusplus)
13746     {
13747       dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13748       ctor_label = NULL_TREE;
13749     }
13750   else
13751     {
13752       dtor_label = NULL_TREE;
13753       if (DECL_CONSTRUCTOR_P (decl1))
13754         ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13755     }
13756
13757   return 1;
13758 }
13759 \f
13760 /* Called after store_parm_decls for a function-try-block.  We need to update
13761    last_parm_cleanup_insn so that the base initializers for a constructor
13762    are run within this block, not before it.  */
13763
13764 void
13765 expand_start_early_try_stmts ()
13766 {
13767   expand_start_try_stmts ();
13768   last_parm_cleanup_insn = get_last_insn ();
13769 }
13770
13771 /* Store the parameter declarations into the current function declaration.
13772    This is called after parsing the parameter declarations, before
13773    digesting the body of the function.
13774
13775    Also install to binding contour return value identifier, if any.  */
13776
13777 void
13778 store_parm_decls ()
13779 {
13780   register tree fndecl = current_function_decl;
13781   register tree parm;
13782   int parms_have_cleanups = 0;
13783   tree cleanups = NULL_TREE;
13784
13785   /* This is either a chain of PARM_DECLs (when a prototype is used).  */
13786   tree specparms = current_function_parms;
13787
13788   /* This is a list of types declared among parms in a prototype.  */
13789   tree parmtags = current_function_parm_tags;
13790
13791   /* This is a chain of any other decls that came in among the parm
13792      declarations.  If a parm is declared with  enum {foo, bar} x;
13793      then CONST_DECLs for foo and bar are put here.  */
13794   tree nonparms = NULL_TREE;
13795
13796   if (toplevel_bindings_p ())
13797     fatal ("parse errors have confused me too much");
13798
13799   /* Initialize RTL machinery.  */
13800   init_function_start (fndecl, input_filename, lineno);
13801
13802   /* Create a binding level for the parms.  */
13803   expand_start_bindings (0);
13804
13805   if (specparms != NULL_TREE)
13806     {
13807       /* This case is when the function was defined with an ANSI prototype.
13808          The parms already have decls, so we need not do anything here
13809          except record them as in effect
13810          and complain if any redundant old-style parm decls were written.  */
13811
13812       register tree next;
13813
13814       /* Must clear this because it might contain TYPE_DECLs declared
13815          at class level.  */
13816       storedecls (NULL_TREE);
13817
13818       for (parm = nreverse (specparms); parm; parm = next)
13819         {
13820           next = TREE_CHAIN (parm);
13821           if (TREE_CODE (parm) == PARM_DECL)
13822             {
13823               tree cleanup;
13824               if (DECL_NAME (parm) == NULL_TREE)
13825                 {
13826                   pushdecl (parm);
13827                 }
13828               else if (TREE_CODE (TREE_TYPE (parm)) == VOID_TYPE)
13829                 cp_error ("parameter `%D' declared void", parm);
13830               else
13831                 {
13832                   /* Now fill in DECL_REFERENCE_SLOT for any of the parm decls.
13833                      A parameter is assumed not to have any side effects.
13834                      If this should change for any reason, then this
13835                      will have to wrap the bashed reference type in a save_expr.
13836                      
13837                      Also, if the parameter type is declared to be an X
13838                      and there is an X(X&) constructor, we cannot lay it
13839                      into the stack (any more), so we make this parameter
13840                      look like it is really of reference type.  Functions
13841                      which pass parameters to this function will know to
13842                      create a temporary in their frame, and pass a reference
13843                      to that.  */
13844
13845                   if (TREE_CODE (TREE_TYPE (parm)) == REFERENCE_TYPE
13846                       && TYPE_SIZE (TREE_TYPE (TREE_TYPE (parm))))
13847                     SET_DECL_REFERENCE_SLOT (parm, convert_from_reference (parm));
13848
13849                   pushdecl (parm);
13850                 }
13851               if (! processing_template_decl
13852                   && (cleanup = maybe_build_cleanup (parm), cleanup))
13853                 {
13854                   expand_decl (parm);
13855                   parms_have_cleanups = 1;
13856
13857                   /* Keep track of the cleanups.  */
13858                   cleanups = tree_cons (parm, cleanup, cleanups);
13859                 }
13860             }
13861           else
13862             {
13863               /* If we find an enum constant or a type tag,
13864                  put it aside for the moment.  */
13865               TREE_CHAIN (parm) = NULL_TREE;
13866               nonparms = chainon (nonparms, parm);
13867             }
13868         }
13869
13870       /* Get the decls in their original chain order
13871          and record in the function.  This is all and only the
13872          PARM_DECLs that were pushed into scope by the loop above.  */
13873       DECL_ARGUMENTS (fndecl) = getdecls ();
13874
13875       storetags (chainon (parmtags, gettags ()));
13876     }
13877   else
13878     DECL_ARGUMENTS (fndecl) = NULL_TREE;
13879
13880   /* Now store the final chain of decls for the arguments
13881      as the decl-chain of the current lexical scope.
13882      Put the enumerators in as well, at the front so that
13883      DECL_ARGUMENTS is not modified.  */
13884
13885   storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
13886
13887   /* Declare __FUNCTION__ and __PRETTY_FUNCTION__ for this function.  */
13888   declare_function_name ();
13889
13890   /* Initialize the RTL code for the function.  */
13891   DECL_SAVED_INSNS (fndecl) = NULL_RTX;
13892   if (! processing_template_decl)
13893     expand_function_start (fndecl, parms_have_cleanups);
13894
13895   current_function_parms_stored = 1;
13896
13897   /* If this function is `main', emit a call to `__main'
13898      to run global initializers, etc.  */
13899   if (DECL_MAIN_P (fndecl))
13900     expand_main_function ();
13901
13902   /* Now that we have initialized the parms, we can start their
13903      cleanups.  We cannot do this before, since expand_decl_cleanup
13904      should not be called before the parm can be used.  */
13905   if (cleanups
13906       && ! processing_template_decl)      
13907     {
13908       for (cleanups = nreverse (cleanups); cleanups; cleanups = TREE_CHAIN (cleanups))
13909         {
13910           if (! expand_decl_cleanup (TREE_PURPOSE (cleanups), TREE_VALUE (cleanups)))
13911             cp_error ("parser lost in parsing declaration of `%D'",
13912                       TREE_PURPOSE (cleanups));
13913         }
13914     }
13915
13916   /* Create a binding contour which can be used to catch
13917      cleanup-generated temporaries.  Also, if the return value needs or
13918      has initialization, deal with that now.  */
13919   if (parms_have_cleanups)
13920     {
13921       pushlevel (0);
13922       expand_start_bindings (0);
13923     }
13924
13925   if (! processing_template_decl && flag_exceptions)
13926     {
13927       /* Do the starting of the exception specifications, if we have any.  */
13928       if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13929         expand_start_eh_spec ();
13930     }
13931
13932   last_parm_cleanup_insn = get_last_insn ();
13933   last_dtor_insn = get_last_insn ();
13934 }
13935
13936 /* Bind a name and initialization to the return value of
13937    the current function.  */
13938
13939 void
13940 store_return_init (return_id, init)
13941      tree return_id, init;
13942 {
13943   tree decl = DECL_RESULT (current_function_decl);
13944
13945   if (pedantic)
13946     /* Give this error as many times as there are occurrences,
13947        so that users can use Emacs compilation buffers to find
13948        and fix all such places.  */
13949     pedwarn ("ANSI C++ does not permit named return values");
13950
13951   if (return_id != NULL_TREE)
13952     {
13953       if (DECL_NAME (decl) == NULL_TREE)
13954         {
13955           DECL_NAME (decl) = return_id;
13956           DECL_ASSEMBLER_NAME (decl) = return_id;
13957         }
13958       else
13959         cp_error ("return identifier `%D' already in place", decl);
13960     }
13961
13962   /* Can't let this happen for constructors.  */
13963   if (DECL_CONSTRUCTOR_P (current_function_decl))
13964     {
13965       error ("can't redefine default return value for constructors");
13966       return;
13967     }
13968
13969   /* If we have a named return value, put that in our scope as well.  */
13970   if (DECL_NAME (decl) != NULL_TREE)
13971     {
13972       /* If this named return value comes in a register,
13973          put it in a pseudo-register.  */
13974       if (DECL_REGISTER (decl))
13975         {
13976           original_result_rtx = DECL_RTL (decl);
13977           DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
13978         }
13979
13980       /* Let `cp_finish_decl' know that this initializer is ok.  */
13981       DECL_INITIAL (decl) = init;
13982       pushdecl (decl);
13983
13984       if (minimal_parse_mode)
13985         add_tree (build_min_nt (RETURN_INIT, return_id,
13986                                 copy_to_permanent (init)));
13987       else
13988         cp_finish_decl (decl, init, NULL_TREE, 0, 0);
13989     }
13990 }
13991
13992 \f
13993 /* Emit implicit code for a destructor. This is a subroutine of
13994    finish_function.  */
13995
13996 static void
13997 finish_dtor ()
13998 {
13999   tree binfo = TYPE_BINFO (current_class_type);
14000   tree cond = integer_one_node;
14001   tree exprstmt;
14002   tree in_charge_node = lookup_name (in_charge_identifier, 0);
14003   tree virtual_size;
14004   int ok_to_optimize_dtor = 0;
14005   int empty_dtor = get_last_insn () == last_dtor_insn;
14006   rtx insns, last_parm_insn;
14007  
14008   if (current_function_assigns_this)
14009     cond = build (NE_EXPR, boolean_type_node,
14010                   current_class_ptr, integer_zero_node);
14011   else
14012     {
14013       int n_baseclasses = CLASSTYPE_N_BASECLASSES (current_class_type);
14014
14015       /* If this destructor is empty, then we don't need to check
14016          whether `this' is NULL in some cases.  */
14017       if ((flag_this_is_variable & 1) == 0)
14018         ok_to_optimize_dtor = 1;
14019       else if (empty_dtor)
14020         ok_to_optimize_dtor
14021           = (n_baseclasses == 0
14022              || (n_baseclasses == 1
14023                  && TYPE_HAS_DESTRUCTOR (TYPE_BINFO_BASETYPE (current_class_type, 0))));
14024     }
14025
14026   /* If this has a vlist1 parameter, allocate the corresponding vlist
14027      parameter.  */
14028   if (DECL_DESTRUCTOR_FOR_PVBASE_P (current_function_decl))
14029     {
14030       /* _Vlist __vlist; */
14031       tree vlist;
14032
14033       mark_all_temps_used();
14034       vlist = pushdecl (build_decl (VAR_DECL, vlist_identifier,
14035                                          vlist_type_node));
14036       TREE_USED (vlist) = 1;
14037       DECL_ARTIFICIAL (vlist) = 1;
14038       expand_decl (vlist);
14039       expand_decl_init (vlist);
14040     }
14041
14042   /* These initializations might go inline.  Protect
14043      the binding level of the parms.  */
14044   pushlevel (0);
14045   expand_start_bindings (0);
14046
14047   if (current_function_assigns_this)
14048     {
14049       current_function_assigns_this = 0;
14050       current_function_just_assigned_this = 0;
14051     }
14052
14053   /* Generate the code to call destructor on base class.
14054      If this destructor belongs to a class with virtual
14055      functions, then set the virtual function table
14056      pointer to represent the type of our base class.  */
14057
14058   /* This side-effect makes call to `build_delete' generate the
14059      code we have to have at the end of this destructor.
14060      `build_delete' will set the flag again.  */
14061   TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
14062
14063   /* These are two cases where we cannot delegate deletion.  */
14064   if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)
14065       || TYPE_GETS_REG_DELETE (current_class_type))
14066     exprstmt = build_delete 
14067       (current_class_type, current_class_ref, integer_zero_node,
14068        LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
14069   else
14070     exprstmt = build_delete 
14071       (current_class_type, current_class_ref, in_charge_node,
14072        LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
14073
14074   /* If we did not assign to this, then `this' is non-zero at
14075      the end of a destructor.  As a special optimization, don't
14076      emit test if this is an empty destructor.  If it does nothing,
14077      it does nothing.  If it calls a base destructor, the base
14078      destructor will perform the test.  */
14079
14080   if (exprstmt != error_mark_node
14081       && (TREE_CODE (exprstmt) != NOP_EXPR
14082           || TREE_OPERAND (exprstmt, 0) != integer_zero_node
14083           || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
14084     {
14085       expand_label (dtor_label);
14086       if (cond != integer_one_node)
14087         expand_start_cond (cond, 0);
14088       if (exprstmt != void_zero_node)
14089         /* Don't call `expand_expr_stmt' if we're not going to do
14090            anything, since -Wall will give a diagnostic.  */
14091         expand_expr_stmt (exprstmt);
14092
14093       /* Run destructor on all virtual baseclasses.  */
14094       if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
14095         {
14096           tree vbases = nreverse 
14097             (copy_list (CLASSTYPE_VBASECLASSES (current_class_type)));
14098           expand_start_cond (build (BIT_AND_EXPR, integer_type_node,
14099                                     in_charge_node, integer_two_node), 0);
14100           while (vbases)
14101             {
14102               if (TYPE_NEEDS_DESTRUCTOR (BINFO_TYPE (vbases)))
14103                 {
14104                   tree vb = get_vbase
14105                     (BINFO_TYPE (vbases),
14106                      TYPE_BINFO (current_class_type));
14107
14108                   expand_expr_stmt
14109                     (build_base_dtor_call (current_class_ref, 
14110                                            vb, integer_zero_node));
14111                 }
14112               vbases = TREE_CHAIN (vbases);
14113             }
14114           expand_end_cond ();
14115         }
14116
14117       do_pending_stack_adjust ();
14118       if (cond != integer_one_node)
14119         expand_end_cond ();
14120     }
14121
14122   virtual_size = c_sizeof (current_class_type);
14123
14124   /* At the end, call delete if that's what's requested.  */
14125
14126   /* FDIS sez: At the point of definition of a virtual destructor
14127      (including an implicit definition), non-placement operator
14128      delete shall be looked up in the scope of the destructor's
14129      class and if found shall be accessible and unambiguous.
14130
14131      This is somewhat unclear, but I take it to mean that if the
14132      class only defines placement deletes we don't do anything here.
14133      So we pass LOOKUP_SPECULATIVELY; delete_sanity will complain
14134      for us if they ever try to delete one of these.  */
14135
14136   if (TYPE_GETS_REG_DELETE (current_class_type)
14137       || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
14138     exprstmt = build_op_delete_call
14139       (DELETE_EXPR, current_class_ptr, virtual_size,
14140        LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
14141   else
14142     exprstmt = NULL_TREE;
14143
14144   if (exprstmt)
14145     {
14146       cond = build (BIT_AND_EXPR, integer_type_node,
14147                     in_charge_node, integer_one_node);
14148       expand_start_cond (cond, 0);
14149       expand_expr_stmt (exprstmt);
14150       expand_end_cond ();
14151     }
14152
14153   /* End of destructor.  */
14154   expand_end_bindings (NULL_TREE, getdecls () != NULL_TREE, 0);
14155   poplevel (getdecls () != NULL_TREE, 0, 0);
14156
14157   /* Back to the top of destructor.  */
14158   /* Don't execute destructor code if `this' is NULL.  */
14159
14160   start_sequence ();
14161
14162   /* If we need thunk-style vlists, initialize them if the caller did
14163      not pass them. This requires a new temporary. The generated code
14164      looks like
14165        if (!(__in_charge & 4))
14166          __vlist = __vl.<type> + sizeof(__vl.<type>);
14167        else
14168          __vlist = __vlist1; 
14169   */
14170   if (TYPE_USES_PVBASES (current_class_type))
14171     {
14172       tree vlist = lookup_name (vlist_identifier, 0);
14173       tree vlist1 = lookup_name (get_identifier (VLIST1_NAME), 0);
14174       cond = build (BIT_AND_EXPR, integer_type_node,
14175                     in_charge_node, build_int_2 (4, 0));
14176       cond = build1 (TRUTH_NOT_EXPR, boolean_type_node, cond);
14177       expand_start_cond (cond, 0);
14178       init_vlist (current_class_type);
14179       expand_start_else ();
14180       expand_expr_stmt (build_modify_expr (vlist, NOP_EXPR, vlist1));
14181       expand_end_cond ();
14182     }
14183           
14184   /* If the dtor is empty, and we know there is not possible way we
14185      could use any vtable entries, before they are possibly set by
14186      a base class dtor, we don't have to setup the vtables, as we
14187      know that any base class dtoring will set up any vtables it
14188      needs.  We avoid MI, because one base class dtor can do a
14189      virtual dispatch to an overridden function that would need to
14190      have a non-related vtable set up, we cannot avoid setting up
14191      vtables in that case.  We could change this to see if there is
14192      just one vtable.  */
14193   if (! empty_dtor || TYPE_USES_COMPLEX_INHERITANCE (current_class_type))
14194     {
14195       /* Make all virtual function table pointers in non-virtual base
14196          classes point to CURRENT_CLASS_TYPE's virtual function
14197          tables.  */
14198       expand_direct_vtbls_init (binfo, binfo, 1, 0, current_class_ptr);
14199
14200       if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
14201         expand_indirect_vtbls_init (binfo, current_class_ref, current_class_ptr);
14202     }
14203
14204   if (! ok_to_optimize_dtor)
14205     {
14206       cond = build_binary_op (NE_EXPR,
14207                               current_class_ptr, integer_zero_node);
14208       expand_start_cond (cond, 0);
14209     }
14210
14211   insns = get_insns ();
14212   end_sequence ();
14213
14214   last_parm_insn = get_first_nonparm_insn ();
14215   if (last_parm_insn == NULL_RTX)
14216     last_parm_insn = get_last_insn ();
14217   else
14218     last_parm_insn = previous_insn (last_parm_insn);
14219
14220   emit_insns_after (insns, last_parm_insn);
14221
14222   if (! ok_to_optimize_dtor)
14223     expand_end_cond ();
14224 }
14225
14226 /* Emit implicit code for a constructor. This is a subroutine of
14227    finish_function. CALL_POPLEVEL is the same variable in
14228    finish_function.  */
14229
14230 static void
14231 finish_ctor (call_poplevel)
14232      int call_poplevel;
14233 {
14234   register tree fndecl = current_function_decl;
14235   tree cond = NULL_TREE, thenclause = NULL_TREE;
14236   rtx insns;
14237   tree decls;
14238
14239   /* Allow constructor for a type to get a new instance of the object
14240      using `build_new'.  */
14241   tree abstract_virtuals = CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type);
14242   CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = NULL_TREE;
14243
14244   if (flag_this_is_variable > 0)
14245     {
14246       cond = build_binary_op (EQ_EXPR, current_class_ptr, integer_zero_node);
14247       thenclause = 
14248         build_modify_expr (current_class_ptr, NOP_EXPR,
14249                            build_new (NULL_TREE, current_class_type, 
14250                                       void_type_node, 0));
14251     }
14252
14253   CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = abstract_virtuals;
14254
14255   start_sequence ();
14256
14257   if (flag_this_is_variable > 0)
14258     {
14259       expand_start_cond (cond, 0);
14260       expand_expr_stmt (thenclause);
14261       expand_end_cond ();
14262     }
14263
14264   /* Emit insns from `emit_base_init' which sets up virtual
14265      function table pointer(s).  */
14266   if (base_init_expr)
14267     {
14268       expand_expr_stmt (base_init_expr);
14269       base_init_expr = NULL_TREE;
14270     }
14271
14272   insns = get_insns ();
14273   end_sequence ();
14274
14275   /* This is where the body of the constructor begins.  */
14276
14277   emit_insns_after (insns, last_parm_cleanup_insn);
14278
14279   end_protect_partials ();
14280
14281   /* This is where the body of the constructor ends.  */
14282   expand_label (ctor_label);
14283   ctor_label = NULL_TREE;
14284
14285   if (call_poplevel)
14286     {
14287       decls = getdecls ();
14288       expand_end_bindings (decls, decls != NULL_TREE, 0);
14289       poplevel (decls != NULL_TREE, 1, 0);
14290     }
14291
14292   /* c_expand_return knows to return 'this' from a constructor.  */
14293   c_expand_return (NULL_TREE);
14294
14295   current_function_assigns_this = 0;
14296   current_function_just_assigned_this = 0;
14297 }
14298
14299
14300 /* Finish up a function declaration and compile that function
14301    all the way to assembler language output.  The free the storage
14302    for the function definition.
14303
14304    This is called after parsing the body of the function definition.
14305    LINENO is the current line number.
14306
14307    FLAGS is a bitwise or of the following values: 
14308      1 - CALL_POPLEVEL 
14309        An extra call to poplevel (and expand_end_bindings) must be
14310        made to take care of the binding contour for the base
14311        initializers.  This is only relevant for constructors.
14312      2 - INCLASS_INLINE
14313        We just finished processing the body of an in-class inline
14314        function definition.  (This processing will have taken place
14315        after the class definition is complete.)
14316
14317    NESTED is nonzero if we were in the middle of compiling another function
14318    when we started on this one.  */
14319
14320 void
14321 finish_function (lineno, flags, nested)
14322      int lineno;
14323      int flags;
14324      int nested;
14325 {
14326   register tree fndecl = current_function_decl;
14327   tree fntype, ctype = NULL_TREE;
14328   /* Label to use if this function is supposed to return a value.  */
14329   tree no_return_label = NULL_TREE;
14330   tree decls = NULL_TREE;
14331   int call_poplevel = (flags & 1) != 0;
14332   int inclass_inline = (flags & 2) != 0;
14333   int in_template;
14334
14335   /* When we get some parse errors, we can end up without a
14336      current_function_decl, so cope.  */
14337   if (fndecl == NULL_TREE)
14338     return;
14339
14340   if (function_depth > 1)
14341     nested = 1;
14342
14343   fntype = TREE_TYPE (fndecl);
14344
14345 /*  TREE_READONLY (fndecl) = 1;
14346     This caused &foo to be of type ptr-to-const-function
14347     which then got a warning when stored in a ptr-to-function variable.  */
14348
14349   /* This happens on strange parse errors.  */
14350   if (! current_function_parms_stored)
14351     {
14352       call_poplevel = 0;
14353       store_parm_decls ();
14354     }
14355
14356   if (processing_template_decl)
14357     {
14358       if (DECL_CONSTRUCTOR_P (fndecl) && call_poplevel)
14359         {
14360           decls = getdecls ();
14361           expand_end_bindings (decls, decls != NULL_TREE, 0);
14362           poplevel (decls != NULL_TREE, 0, 0);
14363         }
14364     }
14365   else
14366     {
14367       if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
14368         {
14369           tree ttype = target_type (fntype);
14370           tree parmdecl;
14371
14372           if (IS_AGGR_TYPE (ttype))
14373             /* Let debugger know it should output info for this type.  */
14374             note_debug_info_needed (ttype);
14375
14376           for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
14377             {
14378               ttype = target_type (TREE_TYPE (parmdecl));
14379               if (IS_AGGR_TYPE (ttype))
14380                 /* Let debugger know it should output info for this type.  */
14381                 note_debug_info_needed (ttype);
14382             }
14383         }
14384
14385       /* Clean house because we will need to reorder insns here.  */
14386       do_pending_stack_adjust ();
14387
14388       if (dtor_label)
14389         finish_dtor ();
14390       else if (current_function_assigns_this)
14391         {
14392           /* Does not need to call emit_base_init, because
14393              that is done (if needed) just after assignment to this
14394              is seen.  */
14395
14396           if (DECL_CONSTRUCTOR_P (current_function_decl))
14397             {
14398               end_protect_partials ();
14399               expand_label (ctor_label);
14400               ctor_label = NULL_TREE;
14401
14402               if (call_poplevel)
14403                 {
14404                   decls = getdecls ();
14405                   expand_end_bindings (decls, decls != NULL_TREE, 0);
14406                   poplevel (decls != NULL_TREE, 0, 0);
14407                 }
14408               /* c_expand_return knows to return 'this' from a constructor.  */
14409               c_expand_return (NULL_TREE);
14410             }
14411           else if (TREE_CODE (TREE_TYPE (DECL_RESULT (current_function_decl))) != VOID_TYPE
14412                    && return_label != NULL_RTX)
14413             no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
14414
14415           current_function_assigns_this = 0;
14416           current_function_just_assigned_this = 0;
14417           base_init_expr = NULL_TREE;
14418         }
14419       else if (DECL_CONSTRUCTOR_P (fndecl)
14420                && !DECL_VLIST_CTOR_WRAPPER_P (fndecl))
14421         finish_ctor (call_poplevel);
14422       else if (DECL_MAIN_P (fndecl))
14423         {
14424           /* Make it so that `main' always returns 0 by default.  */
14425 #ifdef VMS
14426           c_expand_return (integer_one_node);
14427 #else
14428           c_expand_return (integer_zero_node);
14429 #endif
14430         }
14431       else if (return_label != NULL_RTX
14432                && current_function_return_value == NULL_TREE
14433                && ! DECL_NAME (DECL_RESULT (current_function_decl)))
14434         no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
14435
14436       if (flag_exceptions)
14437         expand_exception_blocks ();
14438
14439       /* If this function is supposed to return a value, ensure that
14440          we do not fall into the cleanups by mistake.  The end of our
14441          function will look like this:
14442          
14443          user code (may have return stmt somewhere)
14444          goto no_return_label
14445          cleanup_label:
14446          cleanups
14447          goto return_label
14448          no_return_label:
14449          NOTE_INSN_FUNCTION_END
14450          return_label:
14451          things for return
14452          
14453          If the user omits a return stmt in the USER CODE section, we
14454          will have a control path which reaches NOTE_INSN_FUNCTION_END.
14455          Otherwise, we won't.  */
14456       if (no_return_label)
14457         {
14458           DECL_CONTEXT (no_return_label) = fndecl;
14459           DECL_INITIAL (no_return_label) = error_mark_node;
14460           DECL_SOURCE_FILE (no_return_label) = input_filename;
14461           DECL_SOURCE_LINE (no_return_label) = lineno;
14462           expand_goto (no_return_label);
14463         }
14464
14465       if (cleanup_label)
14466         {
14467           /* Remove the binding contour which is used
14468              to catch cleanup-generated temporaries.  */
14469           expand_end_bindings (0, 0, 0);
14470           poplevel (0, 0, 0);
14471
14472           /* Emit label at beginning of cleanup code for parameters.  */
14473           emit_label (cleanup_label);
14474         }
14475
14476       /* Get return value into register if that's where it's supposed to be.  */
14477       if (original_result_rtx)
14478         fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
14479
14480       /* Finish building code that will trigger warnings if users forget
14481          to make their functions return values.  */
14482       if (no_return_label || cleanup_label)
14483         emit_jump (return_label);
14484       if (no_return_label)
14485         {
14486           /* We don't need to call `expand_*_return' here because we
14487              don't need any cleanups here--this path of code is only
14488              for error checking purposes.  */
14489           expand_label (no_return_label);
14490         }
14491
14492       /* Generate rtl for function exit.  */
14493       expand_function_end (input_filename, lineno, 1);
14494     }
14495   
14496   /* If we're processing a template, squirrel away the definition
14497      until we do an instantiation.  */
14498   if (processing_template_decl)
14499     {
14500       --minimal_parse_mode;
14501       DECL_SAVED_TREE (fndecl) = TREE_CHAIN (DECL_SAVED_TREE (fndecl));
14502       /* We have to save this value here in case
14503          maybe_end_member_template_processing decides to pop all the
14504          template parameters.  */
14505       in_template = 1;
14506     }
14507   else
14508     in_template = 0;
14509
14510   /* This must come after expand_function_end because cleanups might
14511      have declarations (from inline functions) that need to go into
14512      this function's blocks.  */
14513   if (current_binding_level->parm_flag != 1)
14514     my_friendly_abort (122);
14515   poplevel (1, 0, 1);
14516
14517   /* If this is a in-class inline definition, we may have to pop the
14518      bindings for the template parameters that we added in
14519      maybe_begin_member_template_processing when start_function was
14520      called.  */
14521   if (inclass_inline)
14522     maybe_end_member_template_processing ();
14523
14524   /* Reset scope for C++: if we were in the scope of a class,
14525      then when we finish this function, we are not longer so.
14526      This cannot be done until we know for sure that no more
14527      class members will ever be referenced in this function
14528      (i.e., calls to destructors).  */
14529   if (current_class_name)
14530     {
14531       ctype = current_class_type;
14532       pop_nested_class ();
14533     }
14534
14535   /* Must mark the RESULT_DECL as being in this function.  */
14536   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
14537
14538   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
14539      to the FUNCTION_DECL node itself.  */
14540   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
14541
14542   if (!in_template)
14543     {
14544       int saved_flag_keep_inline_functions =
14545         flag_keep_inline_functions;
14546
14547       /* So we can tell if jump_optimize sets it to 1.  */
14548       can_reach_end = 0;
14549
14550       if (DECL_CONTEXT (fndecl) != NULL_TREE
14551           && hack_decl_function_context (fndecl))
14552         /* Trick rest_of_compilation into not deferring output of this
14553            function, even if it is inline, since the rtl_obstack for
14554            this function is the function_obstack of the enclosing
14555            function and will be deallocated when the enclosing
14556            function is gone.  See save_tree_status.  */
14557         flag_keep_inline_functions = 1;
14558
14559       /* Run the optimizers and output the assembler code for this
14560          function.  */
14561
14562       if (DECL_ARTIFICIAL (fndecl))
14563         {
14564           /* Do we really *want* to inline this synthesized method?  */
14565
14566           int save_fif = flag_inline_functions;
14567           flag_inline_functions = 1;
14568
14569           /* Turn off DECL_INLINE for the moment so function_cannot_inline_p
14570              will check our size.  */
14571           DECL_INLINE (fndecl) = 0;
14572
14573           rest_of_compilation (fndecl);
14574           flag_inline_functions = save_fif;
14575         }
14576       else
14577         rest_of_compilation (fndecl);
14578
14579       flag_keep_inline_functions = saved_flag_keep_inline_functions;
14580
14581       if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
14582         {
14583           /* Set DECL_EXTERNAL so that assemble_external will be called as
14584              necessary.  We'll clear it again in finish_file.  */
14585           if (! DECL_EXTERNAL (fndecl))
14586             DECL_NOT_REALLY_EXTERN (fndecl) = 1;
14587           DECL_EXTERNAL (fndecl) = 1;
14588           mark_inline_for_output (fndecl);
14589         }
14590
14591       if (ctype && TREE_ASM_WRITTEN (fndecl))
14592         note_debug_info_needed (ctype);
14593
14594       current_function_returns_null |= can_reach_end;
14595
14596       /* Since we don't normally go through c_expand_return for constructors,
14597          this normally gets the wrong value.
14598          Also, named return values have their return codes emitted after
14599          NOTE_INSN_FUNCTION_END, confusing jump.c.  */
14600       if (DECL_CONSTRUCTOR_P (fndecl)
14601           || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
14602         current_function_returns_null = 0;
14603
14604       if (TREE_THIS_VOLATILE (fndecl) && current_function_returns_null)
14605         cp_warning ("`noreturn' function `%D' does return", fndecl);
14606       else if ((warn_return_type || pedantic)
14607                && current_function_returns_null
14608                && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE)
14609         {
14610           /* If this function returns non-void and control can drop through,
14611              complain.  */
14612           cp_warning ("control reaches end of non-void function `%D'", fndecl);
14613         }
14614       /* With just -W, complain only if function returns both with
14615          and without a value.  */
14616       else if (extra_warnings
14617                && current_function_returns_value && current_function_returns_null)
14618         warning ("this function may return with or without a value");
14619     }
14620
14621   --function_depth;
14622
14623   /* Free all the tree nodes making up this function.  */
14624   /* Switch back to allocating nodes permanently
14625      until we start another function.  */
14626   if (! nested)
14627     permanent_allocation (1);
14628
14629   if (DECL_SAVED_INSNS (fndecl) == NULL_RTX)
14630     {
14631       tree t;
14632
14633       /* Stop pointing to the local nodes about to be freed.  */
14634       /* But DECL_INITIAL must remain nonzero so we know this
14635          was an actual function definition.  */
14636       DECL_INITIAL (fndecl) = error_mark_node;
14637       for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
14638         DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
14639     }
14640
14641   if (DECL_STATIC_CONSTRUCTOR (fndecl))
14642     static_ctors = perm_tree_cons (NULL_TREE, fndecl, static_ctors);
14643   if (DECL_STATIC_DESTRUCTOR (fndecl))
14644     static_dtors = perm_tree_cons (NULL_TREE, fndecl, static_dtors);
14645
14646   if (! nested)
14647     {
14648       /* Let the error reporting routines know that we're outside a
14649          function.  For a nested function, this value is used in
14650          pop_cp_function_context and then reset via pop_function_context.  */
14651       current_function_decl = NULL_TREE;
14652     }
14653
14654   named_label_uses = NULL;
14655   current_class_ptr = NULL_TREE;
14656   current_class_ref = NULL_TREE;
14657 }
14658 \f
14659 /* Create the FUNCTION_DECL for a function definition.
14660    DECLSPECS and DECLARATOR are the parts of the declaration;
14661    they describe the return type and the name of the function,
14662    but twisted together in a fashion that parallels the syntax of C.
14663
14664    This function creates a binding context for the function body
14665    as well as setting up the FUNCTION_DECL in current_function_decl.
14666
14667    Returns a FUNCTION_DECL on success.
14668
14669    If the DECLARATOR is not suitable for a function (it defines a datum
14670    instead), we return 0, which tells yyparse to report a parse error.
14671
14672    May return void_type_node indicating that this method is actually
14673    a friend.  See grokfield for more details.
14674
14675    Came here with a `.pushlevel' .
14676
14677    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14678    CHANGES TO CODE IN `grokfield'.  */
14679
14680 tree
14681 start_method (declspecs, declarator, attrlist)
14682      tree declarator, declspecs, attrlist;
14683 {
14684   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
14685                                 attrlist);
14686
14687   /* Something too ugly to handle.  */
14688   if (fndecl == NULL_TREE)
14689     return NULL_TREE;
14690
14691   /* Pass friends other than inline friend functions back.  */
14692   if (fndecl == void_type_node)
14693     return fndecl;
14694
14695   if (TREE_CODE (fndecl) != FUNCTION_DECL)
14696     /* Not a function, tell parser to report parse error.  */
14697     return NULL_TREE;
14698
14699   if (IS_SIGNATURE (current_class_type))
14700     IS_DEFAULT_IMPLEMENTATION (fndecl) = 1;
14701
14702   if (DECL_IN_AGGR_P (fndecl))
14703     {
14704       if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
14705         {
14706           if (DECL_CONTEXT (fndecl) 
14707               && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
14708             cp_error ("`%D' is already defined in class %s", fndecl,
14709                              TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
14710         }
14711       return void_type_node;
14712     }
14713
14714   check_template_shadow (fndecl);
14715
14716   DECL_THIS_INLINE (fndecl) = 1;
14717
14718   if (flag_default_inline)
14719     DECL_INLINE (fndecl) = 1;
14720
14721   /* We process method specializations in finish_struct_1.  */
14722   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
14723     fndecl = push_template_decl (fndecl);
14724
14725   /* We read in the parameters on the maybepermanent_obstack,
14726      but we won't be getting back to them until after we
14727      may have clobbered them.  So the call to preserve_data
14728      will keep them safe.  */
14729   preserve_data ();
14730
14731   if (! DECL_FRIEND_P (fndecl))
14732     {
14733       if (TREE_CHAIN (fndecl))
14734         {
14735           fndecl = copy_node (fndecl);
14736           TREE_CHAIN (fndecl) = NULL_TREE;
14737         }
14738
14739       if (DECL_CONSTRUCTOR_P (fndecl))
14740         {
14741           if (! grok_ctor_properties (current_class_type, fndecl))
14742             return void_type_node;
14743         }
14744       else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
14745         grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
14746     }
14747
14748   cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0, 0);
14749
14750   /* Make a place for the parms */
14751   pushlevel (0);
14752   current_binding_level->parm_flag = 1;
14753   
14754   DECL_IN_AGGR_P (fndecl) = 1;
14755   return fndecl;
14756 }
14757
14758 /* Go through the motions of finishing a function definition.
14759    We don't compile this method until after the whole class has
14760    been processed.
14761
14762    FINISH_METHOD must return something that looks as though it
14763    came from GROKFIELD (since we are defining a method, after all).
14764
14765    This is called after parsing the body of the function definition.
14766    STMTS is the chain of statements that makes up the function body.
14767
14768    DECL is the ..._DECL that `start_method' provided.  */
14769
14770 tree
14771 finish_method (decl)
14772      tree decl;
14773 {
14774   register tree fndecl = decl;
14775   tree old_initial;
14776
14777   register tree link;
14778
14779   if (decl == void_type_node)
14780     return decl;
14781
14782   old_initial = DECL_INITIAL (fndecl);
14783
14784   /* Undo the level for the parms (from start_method).
14785      This is like poplevel, but it causes nothing to be
14786      saved.  Saving information here confuses symbol-table
14787      output routines.  Besides, this information will
14788      be correctly output when this method is actually
14789      compiled.  */
14790
14791   /* Clear out the meanings of the local variables of this level;
14792      also record in each decl which block it belongs to.  */
14793
14794   for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
14795     {
14796       if (DECL_NAME (link) != NULL_TREE)
14797         pop_binding (DECL_NAME (link), link);
14798       my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
14799       DECL_CONTEXT (link) = NULL_TREE;
14800     }
14801
14802   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
14803                       (HOST_WIDE_INT) current_binding_level->level_chain,
14804                       current_binding_level->parm_flag,
14805                       current_binding_level->keep);
14806
14807   poplevel (0, 0, 0);
14808
14809   DECL_INITIAL (fndecl) = old_initial;
14810
14811   /* We used to check if the context of FNDECL was different from
14812      current_class_type as another way to get inside here.  This didn't work
14813      for String.cc in libg++.  */
14814   if (DECL_FRIEND_P (fndecl))
14815     {
14816       CLASSTYPE_INLINE_FRIENDS (current_class_type)
14817         = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
14818       decl = void_type_node;
14819     }
14820
14821   return decl;
14822 }
14823 \f
14824 /* Called when a new struct TYPE is defined.
14825    If this structure or union completes the type of any previous
14826    variable declaration, lay it out and output its rtl.  */
14827
14828 void
14829 hack_incomplete_structures (type)
14830      tree type;
14831 {
14832   tree *list;
14833
14834   if (current_binding_level->incomplete == NULL_TREE)
14835     return;
14836
14837   if (!type) /* Don't do this for class templates.  */
14838     return;
14839
14840   for (list = &current_binding_level->incomplete; *list; )
14841     {
14842       tree decl = TREE_VALUE (*list);
14843       if ((decl && TREE_TYPE (decl) == type)
14844           || (TREE_TYPE (decl)
14845               && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14846               && TREE_TYPE (TREE_TYPE (decl)) == type))
14847         {
14848           int toplevel = toplevel_bindings_p ();
14849           if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14850               && TREE_TYPE (TREE_TYPE (decl)) == type)
14851             layout_type (TREE_TYPE (decl));
14852           layout_decl (decl, 0);
14853           rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
14854           if (! toplevel)
14855             {
14856               tree cleanup;
14857               expand_decl (decl);
14858               cleanup = maybe_build_cleanup (decl);
14859               expand_decl_init (decl);
14860               if (! expand_decl_cleanup (decl, cleanup))
14861                 cp_error ("parser lost in parsing declaration of `%D'",
14862                           decl);
14863             }
14864           *list = TREE_CHAIN (*list);
14865         }
14866       else
14867         list = &TREE_CHAIN (*list);
14868     }
14869 }
14870
14871 /* If DECL is of a type which needs a cleanup, build that cleanup here.
14872    See build_delete for information about AUTO_DELETE.
14873
14874    Don't build these on the momentary obstack; they must live
14875    the life of the binding contour.  */
14876
14877 static tree
14878 maybe_build_cleanup_1 (decl, auto_delete)
14879      tree decl, auto_delete;
14880 {
14881   tree type = TREE_TYPE (decl);
14882   if (type != error_mark_node && TYPE_NEEDS_DESTRUCTOR (type))
14883     {
14884       int temp = 0, flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
14885       tree rval;
14886
14887       if (TREE_CODE (decl) != PARM_DECL)
14888         temp = suspend_momentary ();
14889
14890       if (TREE_CODE (type) == ARRAY_TYPE)
14891         rval = decl;
14892       else
14893         {
14894           mark_addressable (decl);
14895           rval = build_unary_op (ADDR_EXPR, decl, 0);
14896         }
14897
14898       /* Optimize for space over speed here.  */
14899       if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14900           || flag_expensive_optimizations)
14901         flags |= LOOKUP_NONVIRTUAL;
14902
14903       rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
14904
14905       if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14906           && ! TYPE_HAS_DESTRUCTOR (type))
14907         rval = build_compound_expr (expr_tree_cons (NULL_TREE, rval,
14908                                                build_expr_list (NULL_TREE, build_vbase_delete (type, decl))));
14909
14910       if (TREE_CODE (decl) != PARM_DECL)
14911         resume_momentary (temp);
14912
14913       return rval;
14914     }
14915   return 0;
14916 }
14917
14918 /* If DECL is of a type which needs a cleanup, build that cleanup
14919    here.  The cleanup does free the storage with a call to delete.  */
14920
14921 tree
14922 maybe_build_cleanup_and_delete (decl)
14923      tree decl;
14924 {
14925   return maybe_build_cleanup_1 (decl, integer_three_node);
14926 }
14927
14928 /* If DECL is of a type which needs a cleanup, build that cleanup
14929    here.  The cleanup does not free the storage with a call a delete.  */
14930
14931 tree
14932 maybe_build_cleanup (decl)
14933      tree decl;
14934 {
14935   return maybe_build_cleanup_1 (decl, integer_two_node);
14936 }
14937 \f
14938 /* Expand a C++ expression at the statement level.
14939    This is needed to ferret out nodes which have UNKNOWN_TYPE.
14940    The C++ type checker should get all of these out when
14941    expressions are combined with other, type-providing, expressions,
14942    leaving only orphan expressions, such as:
14943
14944    &class::bar;         / / takes its address, but does nothing with it.  */
14945
14946 void
14947 cplus_expand_expr_stmt (exp)
14948      tree exp;
14949 {
14950   if (processing_template_decl)
14951     {
14952       add_tree (build_min_nt (EXPR_STMT, exp));
14953       return;
14954     }
14955
14956   /* Arrange for all temps to disappear.  */
14957   expand_start_target_temps ();
14958
14959   exp = require_complete_type_in_void (exp);
14960   
14961   if (TREE_CODE (exp) == FUNCTION_DECL)
14962     {
14963       cp_warning ("reference, not call, to function `%D'", exp);
14964       warning ("at this point in file");
14965     }
14966
14967 #if 0
14968   /* We should do this eventually, but right now this causes regex.o from
14969      libg++ to miscompile, and tString to core dump.  */
14970   exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
14971 #endif
14972
14973   /* Strip unused implicit INDIRECT_REFs of references.  */
14974   if (TREE_CODE (exp) == INDIRECT_REF
14975       && TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 0))) == REFERENCE_TYPE)
14976     exp = TREE_OPERAND (exp, 0);
14977
14978   /* If we don't do this, we end up down inside expand_expr
14979      trying to do TYPE_MODE on the ERROR_MARK, and really
14980      go outside the bounds of the type.  */
14981   if (exp != error_mark_node)
14982     expand_expr_stmt (break_out_cleanups (exp));
14983
14984   /* Clean up any pending cleanups.  This happens when a function call
14985      returns a cleanup-needing value that nobody uses.  */
14986   expand_end_target_temps ();
14987 }
14988
14989 /* When a stmt has been parsed, this function is called.
14990
14991    Currently, this function only does something within a
14992    constructor's scope: if a stmt has just assigned to this,
14993    and we are in a derived class, we call `emit_base_init'.  */
14994
14995 void
14996 finish_stmt ()
14997 {
14998   extern struct nesting *cond_stack, *loop_stack, *case_stack;
14999
15000   
15001   if (current_function_assigns_this
15002       || ! current_function_just_assigned_this)
15003     return;
15004   if (DECL_CONSTRUCTOR_P (current_function_decl))
15005     {
15006       /* Constructors must wait until we are out of control
15007          zones before calling base constructors.  */
15008       if (cond_stack || loop_stack || case_stack)
15009         return;
15010       expand_expr_stmt (base_init_expr);
15011       check_base_init (current_class_type);
15012     }
15013   current_function_assigns_this = 1;
15014 }
15015
15016 /* Change a static member function definition into a FUNCTION_TYPE, instead
15017    of the METHOD_TYPE that we create when it's originally parsed.
15018
15019    WARNING: DO NOT pass &TREE_TYPE (decl) to FN or &TYPE_ARG_TYPES
15020    (TREE_TYPE (decl)) to ARGTYPES, as doing so will corrupt the types of
15021    other decls.  Either pass the addresses of local variables or NULL.  */
15022
15023 void
15024 revert_static_member_fn (decl, fn, argtypes)
15025      tree *decl, *fn, *argtypes;
15026 {
15027   tree tmp;
15028   tree function = fn ? *fn : TREE_TYPE (*decl);
15029   tree args = argtypes ? *argtypes : TYPE_ARG_TYPES (function);
15030
15031   if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args))) 
15032       != TYPE_UNQUALIFIED)
15033     cp_error ("static member function `%#D' declared with type qualifiers", 
15034               *decl);
15035
15036   args = TREE_CHAIN (args);
15037   tmp = build_function_type (TREE_TYPE (function), args);
15038   tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
15039   tmp = build_exception_variant (tmp,
15040                                  TYPE_RAISES_EXCEPTIONS (function));
15041   TREE_TYPE (*decl) = tmp;
15042   if (DECL_ARGUMENTS (*decl))
15043     DECL_ARGUMENTS (*decl) = TREE_CHAIN (DECL_ARGUMENTS (*decl));
15044   DECL_STATIC_FUNCTION_P (*decl) = 1;
15045   if (fn)
15046     *fn = tmp;
15047   if (argtypes)
15048     *argtypes = args;
15049 }
15050
15051 struct cp_function
15052 {
15053   int returns_value;
15054   int returns_null;
15055   int assigns_this;
15056   int just_assigned_this;
15057   int parms_stored;
15058   int temp_name_counter;
15059   tree named_labels;
15060   struct named_label_list *named_label_uses;
15061   tree shadowed_labels;
15062   tree ctor_label;
15063   tree dtor_label;
15064   rtx last_dtor_insn;
15065   rtx last_parm_cleanup_insn;
15066   tree base_init_list;
15067   tree member_init_list;
15068   tree base_init_expr;
15069   tree current_class_ptr;
15070   tree current_class_ref;
15071   rtx result_rtx;
15072   struct cp_function *next;
15073   struct binding_level *binding_level;
15074   int static_labelno;
15075 };
15076
15077 static struct cp_function *cp_function_chain;
15078
15079 extern int temp_name_counter;
15080
15081 /* Save and reinitialize the variables
15082    used during compilation of a C++ function.  */
15083
15084 void
15085 push_cp_function_context (context)
15086      tree context;
15087 {
15088   struct cp_function *p
15089     = (struct cp_function *) xmalloc (sizeof (struct cp_function));
15090
15091   push_function_context_to (context);
15092
15093   p->next = cp_function_chain;
15094   cp_function_chain = p;
15095
15096   p->named_labels = named_labels;
15097   p->named_label_uses = named_label_uses;
15098   p->shadowed_labels = shadowed_labels;
15099   p->returns_value = current_function_returns_value;
15100   p->returns_null = current_function_returns_null;
15101   p->binding_level = current_binding_level;
15102   p->ctor_label = ctor_label;
15103   p->dtor_label = dtor_label;
15104   p->last_dtor_insn = last_dtor_insn;
15105   p->last_parm_cleanup_insn = last_parm_cleanup_insn;
15106   p->assigns_this = current_function_assigns_this;
15107   p->just_assigned_this = current_function_just_assigned_this;
15108   p->parms_stored = current_function_parms_stored;
15109   p->result_rtx = original_result_rtx;
15110   p->base_init_expr = base_init_expr;
15111   p->temp_name_counter = temp_name_counter;
15112   p->base_init_list = current_base_init_list;
15113   p->member_init_list = current_member_init_list;
15114   p->current_class_ptr = current_class_ptr;
15115   p->current_class_ref = current_class_ref;
15116   p->static_labelno = static_labelno;
15117 }
15118
15119 /* Restore the variables used during compilation of a C++ function.  */
15120
15121 void
15122 pop_cp_function_context (context)
15123      tree context;
15124 {
15125   struct cp_function *p = cp_function_chain;
15126   tree link;
15127
15128   /* Bring back all the labels that were shadowed.  */
15129   for (link = shadowed_labels; link; link = TREE_CHAIN (link))
15130     if (DECL_NAME (TREE_VALUE (link)) != 0)
15131       SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link)),
15132                                   TREE_VALUE (link));
15133
15134   pop_function_context_from (context);
15135
15136   cp_function_chain = p->next;
15137
15138   named_labels = p->named_labels;
15139   named_label_uses = p->named_label_uses;
15140   shadowed_labels = p->shadowed_labels;
15141   current_function_returns_value = p->returns_value;
15142   current_function_returns_null = p->returns_null;
15143   current_binding_level = p->binding_level;
15144   ctor_label = p->ctor_label;
15145   dtor_label = p->dtor_label;
15146   last_dtor_insn = p->last_dtor_insn;
15147   last_parm_cleanup_insn = p->last_parm_cleanup_insn;
15148   current_function_assigns_this = p->assigns_this;
15149   current_function_just_assigned_this = p->just_assigned_this;
15150   current_function_parms_stored = p->parms_stored;
15151   original_result_rtx = p->result_rtx;
15152   base_init_expr = p->base_init_expr;
15153   temp_name_counter = p->temp_name_counter;
15154   current_base_init_list = p->base_init_list;
15155   current_member_init_list = p->member_init_list;
15156   current_class_ptr = p->current_class_ptr;
15157   current_class_ref = p->current_class_ref;
15158   static_labelno = p->static_labelno;
15159
15160   free (p);
15161 }
15162
15163 int
15164 in_function_p ()
15165 {
15166   return function_depth != 0;
15167 }