OSDN Git Service

* call.c: Include defaults.h instead of expr.h.
[pf3gnuchains/gcc-fork.git] / gcc / cp / decl.c
1 /* Process declarations and variables for C compiler.
2    Copyright (C) 1988, 92-98, 1999 Free Software Foundation, Inc.
3    Contributed by Michael Tiemann (tiemann@cygnus.com)
4
5 This file is part of GNU CC.
6
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING.  If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA.  */
21
22
23 /* Process declarations and symbol lookup for C front end.
24    Also constructs types; the standard scalar types at initialization,
25    and structure, union, array and enum types when they are declared.  */
26
27 /* ??? not all decl nodes are given the most useful possible
28    line numbers.  For example, the CONST_DECLs for enum values.  */
29
30 #include "config.h"
31 #include "system.h"
32 #include "tree.h"
33 #include "rtl.h"
34 #include "flags.h"
35 #include "cp-tree.h"
36 #include "decl.h"
37 #include "lex.h"
38 #include <signal.h>
39 #include "obstack.h"
40 #include "defaults.h"
41 #include "output.h"
42 #include "except.h"
43 #include "toplev.h"
44 #include "../hash.h"
45 #include "defaults.h"
46
47 #define obstack_chunk_alloc xmalloc
48 #define obstack_chunk_free free
49
50 extern struct obstack permanent_obstack;
51 extern struct obstack* saveable_obstack;
52
53 extern int current_class_depth;
54
55 extern tree static_ctors, static_dtors;
56
57 extern int static_labelno;
58
59 extern tree current_namespace;
60 extern tree global_namespace;
61
62 extern void (*print_error_function) PROTO((char *));
63 extern int (*valid_lang_attribute) PROTO ((tree, tree, tree, tree));
64
65 /* Obstack used for remembering local class declarations (like
66    enums and static (const) members.  */
67 #include "stack.h"
68 struct obstack decl_obstack;
69 static struct stack_level *decl_stack;
70
71 #ifndef CHAR_TYPE_SIZE
72 #define CHAR_TYPE_SIZE BITS_PER_UNIT
73 #endif
74
75 #ifndef SHORT_TYPE_SIZE
76 #define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2))
77 #endif
78
79 #ifndef INT_TYPE_SIZE
80 #define INT_TYPE_SIZE BITS_PER_WORD
81 #endif
82
83 #ifndef LONG_TYPE_SIZE
84 #define LONG_TYPE_SIZE BITS_PER_WORD
85 #endif
86
87 #ifndef LONG_LONG_TYPE_SIZE
88 #define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
89 #endif
90
91 #ifndef WCHAR_UNSIGNED
92 #define WCHAR_UNSIGNED 0
93 #endif
94
95 #ifndef FLOAT_TYPE_SIZE
96 #define FLOAT_TYPE_SIZE BITS_PER_WORD
97 #endif
98
99 #ifndef DOUBLE_TYPE_SIZE
100 #define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
101 #endif
102
103 #ifndef LONG_DOUBLE_TYPE_SIZE
104 #define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
105 #endif
106
107 #ifndef BOOL_TYPE_SIZE
108 #ifdef SLOW_BYTE_ACCESS
109 #define BOOL_TYPE_SIZE ((SLOW_BYTE_ACCESS) ? (POINTER_SIZE) : (CHAR_TYPE_SIZE))
110 #else
111 #define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
112 #endif
113 #endif
114
115 /* We let tm.h override the types used here, to handle trivial differences
116    such as the choice of unsigned int or long unsigned int for size_t.
117    When machines start needing nontrivial differences in the size type,
118    it would be best to do something here to figure out automatically
119    from other information what type to use.  */
120
121 #ifndef SIZE_TYPE
122 #define SIZE_TYPE "long unsigned int"
123 #endif
124
125 #ifndef PTRDIFF_TYPE
126 #define PTRDIFF_TYPE "long int"
127 #endif
128
129 #ifndef WCHAR_TYPE
130 #define WCHAR_TYPE "int"
131 #endif
132
133 static tree grokparms                           PROTO((tree, int));
134 static const char *redeclaration_error_message  PROTO((tree, tree));
135
136 static struct stack_level *push_decl_level PROTO((struct stack_level *,
137                                                   struct obstack *));
138 static void push_binding_level PROTO((struct binding_level *, int,
139                                       int));
140 static void pop_binding_level PROTO((void));
141 static void suspend_binding_level PROTO((void));
142 static void resume_binding_level PROTO((struct binding_level *));
143 static struct binding_level *make_binding_level PROTO((void));
144 static void declare_namespace_level PROTO((void));
145 static void signal_catch PROTO((int)) ATTRIBUTE_NORETURN;
146 static void storedecls PROTO((tree));
147 static void require_complete_types_for_parms PROTO((tree));
148 static void push_overloaded_decl_1 PROTO((tree));
149 static int ambi_op_p PROTO((tree));
150 static int unary_op_p PROTO((tree));
151 static tree store_bindings PROTO((tree, tree));
152 static tree lookup_tag_reverse PROTO((tree, tree));
153 static tree obscure_complex_init PROTO((tree, tree));
154 static tree maybe_build_cleanup_1 PROTO((tree, tree));
155 static tree lookup_name_real PROTO((tree, int, int, int));
156 static void warn_extern_redeclared_static PROTO((tree, tree));
157 static void grok_reference_init PROTO((tree, tree, tree));
158 static tree grokfndecl PROTO((tree, tree, tree, tree, int,
159                               enum overload_flags, tree,
160                               tree, int, int, int, int, int, int, tree));
161 static tree grokvardecl PROTO((tree, tree, RID_BIT_TYPE *, int, int, tree));
162 static tree lookup_tag PROTO((enum tree_code, tree,
163                               struct binding_level *, int));
164 static void set_identifier_type_value_with_scope
165         PROTO((tree, tree, struct binding_level *));
166 static void record_builtin_type PROTO((enum rid, const char *, tree));
167 static void record_unknown_type PROTO((tree, const char *));
168 static int member_function_or_else PROTO((tree, tree, const char *));
169 static void bad_specifiers PROTO((tree, const char *, int, int, int, int,
170                                   int));
171 static void lang_print_error_function PROTO((char *));
172 static tree maybe_process_template_type_declaration PROTO((tree, int, struct binding_level*));
173 static void check_for_uninitialized_const_var PROTO((tree));
174 static unsigned long typename_hash PROTO((hash_table_key));
175 static boolean typename_compare PROTO((hash_table_key, hash_table_key));
176 static void push_binding PROTO((tree, tree, struct binding_level*));
177 static int add_binding PROTO((tree, tree));
178 static void pop_binding PROTO((tree, tree));
179 static tree local_variable_p PROTO((tree));
180 static tree find_binding PROTO((tree, tree));
181 static tree select_decl PROTO((tree, int));
182 static tree unqualified_namespace_lookup PROTO((tree, int));
183 static int lookup_flags PROTO((int, int));
184 static tree qualify_lookup PROTO((tree, int));
185 static tree record_builtin_java_type PROTO((const char *, int));
186 static const char *tag_name PROTO((enum tag_types code));
187 static void find_class_binding_level PROTO((void));
188 static struct binding_level *innermost_nonclass_level PROTO((void));
189 static tree poplevel_class PROTO((void));
190 static void warn_about_implicit_typename_lookup PROTO((tree, tree));
191 static int walk_namespaces_r PROTO((tree, walk_namespaces_fn, void *));
192 static int walk_globals_r PROTO((tree, void *));
193
194 #if defined (DEBUG_CP_BINDING_LEVELS)
195 static void indent PROTO((void));
196 #endif
197
198 /* A node which has tree code ERROR_MARK, and whose type is itself.
199    All erroneous expressions are replaced with this node.  All functions
200    that accept nodes as arguments should avoid generating error messages
201    if this node is one of the arguments, since it is undesirable to get
202    multiple error messages from one error in the input.  */
203
204 tree error_mark_node;
205
206 /* Erroneous argument lists can use this *IFF* they do not modify it.  */
207 tree error_mark_list;
208
209 /* The following symbols are subsumed in the cp_global_trees array, and
210    listed here individually for documentation purposes. 
211
212    C++ extensions
213         tree wchar_decl_node;
214         tree void_zero_node;
215
216         tree vtable_entry_type;
217         tree delta_type_node;
218 #if 0
219    Old rtti stuff.
220         tree __baselist_desc_type_node;
221         tree __i_desc_type_node, __m_desc_type_node;
222         tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
223 #endif
224         tree __t_desc_type_node;
225 #if 0
226         tree __tp_desc_type_node;
227 #endif
228         tree __access_mode_type_node;
229         tree __bltn_desc_type_node, __user_desc_type_node, __class_desc_type_node;
230         tree __ptr_desc_type_node, __attr_desc_type_node, __func_desc_type_node;
231         tree __ptmf_desc_type_node, __ptmd_desc_type_node;
232 #if 0
233    Not needed yet?  May be needed one day?
234         tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
235         tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
236         tree __ptmf_desc_array_type, __ptmd_desc_array_type;
237 #endif
238
239         tree class_star_type_node;
240         tree class_type_node, record_type_node, union_type_node, enum_type_node;
241         tree unknown_type_node;
242         tree opaque_type_node, signature_type_node;
243         tree sigtable_entry_type;
244
245    Array type `vtable_entry_type[]'
246
247         tree vtbl_type_node;
248         tree vtbl_ptr_type_node;
249
250    Nnamespace std
251
252         tree std_node;
253
254    A FUNCTION_DECL which can call `abort'.  Not necessarily the
255    one that the user will declare, but sufficient to be called
256    by routines that want to abort the program.
257
258         tree abort_fndecl;
259
260    The FUNCTION_DECL for the default `::operator delete'.
261
262         tree global_delete_fndecl;
263
264    Used by RTTI
265         tree type_info_type_node, tinfo_fn_id, tinfo_fn_type;
266
267 */
268
269 tree cp_global_trees[CPTI_MAX];
270
271 /* These can't be part of the above array, since they are declared
272    individually in tree.h, and used by the debug output routines.  */
273
274 tree void_type_node;
275 tree char_type_node;
276 tree integer_type_node;
277 tree unsigned_type_node;
278
279 /* These can't be part of the above array, since they are declared
280    individially in tree.h and used by the target routines.  */
281
282 tree ptr_type_node;
283 tree va_list_type_node;
284
285 /* Indicates that there is a type value in some namespace, although
286    that is not necessarily in scope at the moment.  */
287
288 static tree global_type_node;
289
290 /* Namespace std.  */
291 int in_std = 0;
292
293 /* Expect only namespace names now. */
294 static int only_namespace_names;
295
296 /* In a destructor, the point at which all derived class destroying
297    has been done, just before any base class destroying will be done.  */
298
299 tree dtor_label;
300
301 /* In a destructor, the last insn emitted after the start of the
302    function and the parms.  */
303
304 static rtx last_dtor_insn;
305
306 /* In a constructor, the last insn emitted after the start of the
307    function and the parms, the exception specification and any
308    function-try-block.  The constructor initializers are emitted after
309    this insn.  */
310
311 static rtx last_parm_cleanup_insn;
312
313 /* In a constructor, the point at which we are ready to return
314    the pointer to the initialized object.  */
315
316 tree ctor_label;
317
318 extern rtx cleanup_label, return_label;
319
320 /* If original DECL_RESULT of current function was a register,
321    but due to being an addressable named return value, would up
322    on the stack, this variable holds the named return value's
323    original location.  */
324 static rtx original_result_rtx;
325
326 /* Sequence of insns which represents base initialization.  */
327 tree base_init_expr;
328
329 /* C++: Keep these around to reduce calls to `get_identifier'.
330    Identifiers for `this' in member functions and the auto-delete
331    parameter for destructors.  */
332 tree this_identifier, in_charge_identifier;
333 tree ctor_identifier, dtor_identifier;
334 /* Used in pointer to member functions, in vtables, and in sigtables.  */
335 tree pfn_identifier, index_identifier, delta_identifier, delta2_identifier;
336 tree pfn_or_delta2_identifier, tag_identifier;
337 tree vt_off_identifier;
338
339 struct named_label_list
340 {
341   struct binding_level *binding_level;
342   tree names_in_scope;
343   tree label_decl;
344   char *filename_o_goto;
345   int lineno_o_goto;
346   struct named_label_list *next;
347 };
348
349 /* A list (chain of TREE_LIST nodes) of named label uses.
350    The TREE_PURPOSE field is the list of variables defined
351    in the label's scope defined at the point of use.
352    The TREE_VALUE field is the LABEL_DECL used.
353    The TREE_TYPE field holds `current_binding_level' at the
354    point of the label's use.
355
356    BWAHAHAAHAHahhahahahaah.  No, no, no, said the little chicken.
357
358    Look at the pretty struct named_label_list. See the pretty struct
359    with the pretty named fields that describe what they do. See the
360    pretty lack of gratuitous casts. Notice the code got a lot cleaner.
361
362    Used only for jumps to as-yet undefined labels, since
363    jumps to defined labels can have their validity checked
364    by stmt.c.  */
365
366 static struct named_label_list *named_label_uses = NULL;
367
368 /* A list of objects which have constructors or destructors
369    which reside in the global scope.  The decl is stored in
370    the TREE_VALUE slot and the initializer is stored
371    in the TREE_PURPOSE slot.  */
372 tree static_aggregates;
373
374 /* -- end of C++ */
375
376 /* Two expressions that are constants with value zero.
377    The first is of type `int', the second of type `void *'.  */
378
379 tree integer_zero_node;
380 tree null_pointer_node;
381
382 /* The value for __null (NULL), namely, a zero of an integer type with
383    the same number of bits as a pointer.  */
384 tree null_node;
385
386 /* A node for the integer constants 1, 2, and 3.  */
387
388 tree integer_one_node, integer_two_node, integer_three_node;
389
390 /* While defining an enum type, this is 1 plus the last enumerator
391    constant value.  */
392
393 static tree enum_next_value;
394
395 /* Nonzero means that there was overflow computing enum_next_value.  */
396
397 static int enum_overflow;
398
399 /* Parsing a function declarator leaves a list of parameter names
400    or a chain or parameter decls here.  */
401
402 tree last_function_parms;
403
404 /* Parsing a function declarator leaves here a chain of structure
405    and enum types declared in the parmlist.  */
406
407 static tree last_function_parm_tags;
408
409 /* After parsing the declarator that starts a function definition,
410    `start_function' puts here the list of parameter names or chain of decls.
411    `store_parm_decls' finds it here.  */
412
413 static tree current_function_parms;
414
415 /* Similar, for last_function_parm_tags.  */
416 static tree current_function_parm_tags;
417
418 /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
419    that have names.  Here so we can clear out their names' definitions
420    at the end of the function.  */
421
422 static tree named_labels;
423
424 /* A list of LABEL_DECLs from outer contexts that are currently shadowed.  */
425
426 static tree shadowed_labels;
427
428 /* The FUNCTION_DECL for the function currently being compiled,
429    or 0 if between functions.  */
430 tree current_function_decl;
431
432 /* Set to 0 at beginning of a function definition, set to 1 if
433    a return statement that specifies a return value is seen.  */
434
435 int current_function_returns_value;
436
437 /* Set to 0 at beginning of a function definition, set to 1 if
438    a return statement with no argument is seen.  */
439
440 int current_function_returns_null;
441
442 /* Set to 0 at beginning of a function definition, and whenever
443    a label (case or named) is defined.  Set to value of expression
444    returned from function when that value can be transformed into
445    a named return value.  */
446
447 tree current_function_return_value;
448
449 /* Nonzero means give `double' the same size as `float'.  */
450
451 extern int flag_short_double;
452
453 /* Nonzero means don't recognize any builtin functions.  */
454
455 extern int flag_no_builtin;
456
457 /* Nonzero means don't recognize the non-ANSI builtin functions.
458    -ansi sets this.  */
459
460 extern int flag_no_nonansi_builtin;
461
462 /* Nonzero means enable obscure ANSI features and disable GNU extensions
463    that might cause ANSI-compliant code to be miscompiled.  */
464
465 extern int flag_ansi;
466
467 /* Nonzero if we want to support huge (> 2^(sizeof(short)*8-1) bytes)
468    objects.  */
469 extern int flag_huge_objects;
470
471 /* Nonzero if we want to conserve space in the .o files.  We do this
472    by putting uninitialized data and runtime initialized data into
473    .common instead of .data at the expense of not flagging multiple
474    definitions.  */
475 extern int flag_conserve_space;
476
477 /* Pointers to the base and current top of the language name stack.  */
478
479 extern tree *current_lang_base, *current_lang_stack;
480 \f
481 /* C and C++ flags are in decl2.c.  */
482
483 /* Set to 0 at beginning of a constructor, set to 1
484    if that function does an allocation before referencing its
485    instance variable.  */
486 static int current_function_assigns_this;
487 int current_function_just_assigned_this;
488
489 /* Set to 0 at beginning of a function.  Set non-zero when
490    store_parm_decls is called.  Don't call store_parm_decls
491    if this flag is non-zero!  */
492 int current_function_parms_stored;
493
494 /* Flag used when debugging spew.c */
495
496 extern int spew_debug;
497
498 /* This is a copy of the class_shadowed list of the previous class binding
499    contour when at global scope.  It's used to reset IDENTIFIER_CLASS_VALUEs
500    when entering another class scope (i.e. a cache miss).  */
501 extern tree previous_class_values;
502
503 /* A expression of value 0 with the same precision as a sizetype
504    node, but signed.  */
505 tree signed_size_zero_node;
506
507 /* The name of the anonymous namespace, throughout this translation
508    unit.  */
509 tree anonymous_namespace_name;
510
511 \f
512 /* Allocate a level of searching.  */
513
514 static
515 struct stack_level *
516 push_decl_level (stack, obstack)
517      struct stack_level *stack;
518      struct obstack *obstack;
519 {
520   struct stack_level tem;
521   tem.prev = stack;
522
523   return push_stack_level (obstack, (char *)&tem, sizeof (tem));
524 }
525 \f
526 /* For each binding contour we allocate a binding_level structure
527    which records the names defined in that contour.
528    Contours include:
529     0) the global one
530     1) one for each function definition,
531        where internal declarations of the parameters appear.
532     2) one for each compound statement,
533        to record its declarations.
534
535    The current meaning of a name can be found by searching the levels
536    from the current one out to the global one.
537
538    Off to the side, may be the class_binding_level.  This exists only
539    to catch class-local declarations.  It is otherwise nonexistent.
540
541    Also there may be binding levels that catch cleanups that must be
542    run when exceptions occur.  Thus, to see whether a name is bound in
543    the current scope, it is not enough to look in the
544    CURRENT_BINDING_LEVEL.  You should use lookup_name_current_level
545    instead.  */
546
547 /* Note that the information in the `names' component of the global contour
548    is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers.  */
549
550 struct binding_level
551   {
552     /* A chain of _DECL nodes for all variables, constants, functions,
553        and typedef types.  These are in the reverse of the order
554        supplied.  There may be OVERLOADs on this list, too, but they
555        are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD.  */
556     tree names;
557
558     /* A list of structure, union and enum definitions, for looking up
559        tag names.
560        It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
561        or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
562        or ENUMERAL_TYPE node.
563
564        C++: the TREE_VALUE nodes can be simple types for
565        component_bindings.  */
566     tree tags;
567
568     /* A list of USING_DECL nodes. */
569     tree usings;
570
571     /* A list of used namespaces. PURPOSE is the namespace,
572        VALUE the common ancestor with this binding_level's namespace. */
573     tree using_directives;
574
575     /* If this binding level is the binding level for a class, then
576        class_shadowed is a TREE_LIST.  The TREE_PURPOSE of each node
577        is the name of an entity bound in the class; the TREE_VALUE is
578        the IDENTIFIER_CLASS_VALUE before we entered the class.  Thus,
579        when leaving class scope, we can restore the
580        IDENTIFIER_CLASS_VALUE by walking this list.  The TREE_TYPE is
581        the DECL bound by this name in the class.  */
582     tree class_shadowed;
583
584     /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
585        is used for all binding levels.  */
586     tree type_shadowed;
587
588     /* For each level (except not the global one),
589        a chain of BLOCK nodes for all the levels
590        that were entered and exited one level down.  */
591     tree blocks;
592
593     /* The BLOCK node for this level, if one has been preallocated.
594        If 0, the BLOCK is allocated (if needed) when the level is popped.  */
595     tree this_block;
596
597     /* The binding level which this one is contained in (inherits from).  */
598     struct binding_level *level_chain;
599
600     /* List of decls in `names' that have incomplete
601        structure or union types.  */
602     tree incomplete;
603
604     /* List of VAR_DECLS saved from a previous for statement.
605        These would be dead in ANSI-conforming code, but might
606        be referenced in ARM-era code.  These are stored in a
607        TREE_LIST; the TREE_VALUE is the actual declaration.  */
608     tree dead_vars_from_for;
609
610     /* 1 for the level that holds the parameters of a function.
611        2 for the level that holds a class declaration.
612        3 for levels that hold parameter declarations.  */
613     unsigned parm_flag : 4;
614
615     /* 1 means make a BLOCK for this level regardless of all else.
616        2 for temporary binding contours created by the compiler.  */
617     unsigned keep : 3;
618
619     /* Nonzero if this level "doesn't exist" for tags.  */
620     unsigned tag_transparent : 1;
621
622     /* Nonzero if this level can safely have additional
623        cleanup-needing variables added to it.  */
624     unsigned more_cleanups_ok : 1;
625     unsigned have_cleanups : 1;
626
627     /* Nonzero if this level is for storing the decls for template
628        parameters and generic decls; these decls will be discarded and
629        replaced with a TEMPLATE_DECL.  */
630     unsigned pseudo_global : 1;
631
632     /* This is set for a namespace binding level.  */
633     unsigned namespace_p : 1;
634
635     /* True if this level is that of a for-statement where we need to
636        worry about ambiguous (ARM or ANSI) scope rules.  */
637     unsigned is_for_scope : 1;
638
639     /* Two bits left for this word.  */
640
641 #if defined(DEBUG_CP_BINDING_LEVELS)
642     /* Binding depth at which this level began.  */
643     unsigned binding_depth;
644 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
645   };
646
647 #define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
648   
649 /* The binding level currently in effect.  */
650
651 static struct binding_level *current_binding_level;
652
653 /* The binding level of the current class, if any.  */
654
655 static struct binding_level *class_binding_level;
656
657 /* A chain of binding_level structures awaiting reuse.  */
658
659 static struct binding_level *free_binding_level;
660
661 /* The outermost binding level, for names of file scope.
662    This is created when the compiler is started and exists
663    through the entire run.  */
664
665 static struct binding_level *global_binding_level;
666
667 /* Binding level structures are initialized by copying this one.  */
668
669 static struct binding_level clear_binding_level;
670
671 /* Nonzero means unconditionally make a BLOCK for the next level pushed.  */
672
673 static int keep_next_level_flag;
674
675 #if defined(DEBUG_CP_BINDING_LEVELS)
676 static int binding_depth = 0;
677 static int is_class_level = 0;
678
679 static void
680 indent ()
681 {
682   register unsigned i;
683
684   for (i = 0; i < binding_depth*2; i++)
685     putc (' ', stderr);
686 }
687 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
688
689 static tree pushdecl_with_scope PROTO((tree, struct binding_level *));
690
691 static void
692 push_binding_level (newlevel, tag_transparent, keep)
693      struct binding_level *newlevel;
694      int tag_transparent, keep;
695 {
696   /* Add this level to the front of the chain (stack) of levels that
697      are active.  */
698   *newlevel = clear_binding_level;
699   newlevel->level_chain = current_binding_level;
700   current_binding_level = newlevel;
701   newlevel->tag_transparent = tag_transparent;
702   newlevel->more_cleanups_ok = 1;
703   newlevel->keep = keep;
704 #if defined(DEBUG_CP_BINDING_LEVELS)
705   newlevel->binding_depth = binding_depth;
706   indent ();
707   fprintf (stderr, "push %s level 0x%08x line %d\n",
708            (is_class_level) ? "class" : "block", newlevel, lineno);
709   is_class_level = 0;
710   binding_depth++;
711 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
712 }
713
714 /* Find the innermost enclosing class scope, and reset
715    CLASS_BINDING_LEVEL appropriately.  */
716
717 static void
718 find_class_binding_level ()
719 {
720   struct binding_level *level = current_binding_level;
721
722   while (level && level->parm_flag != 2)
723     level = level->level_chain;
724   if (level && level->parm_flag == 2)
725     class_binding_level = level;
726   else
727     class_binding_level = 0;
728 }
729
730 static void
731 pop_binding_level ()
732 {
733   if (global_binding_level)
734     {
735       /* Cannot pop a level, if there are none left to pop.  */
736       if (current_binding_level == global_binding_level)
737         my_friendly_abort (123);
738     }
739   /* Pop the current level, and free the structure for reuse.  */
740 #if defined(DEBUG_CP_BINDING_LEVELS)
741   binding_depth--;
742   indent ();
743   fprintf (stderr, "pop  %s level 0x%08x line %d\n",
744           (is_class_level) ? "class" : "block",
745           current_binding_level, lineno);
746   if (is_class_level != (current_binding_level == class_binding_level))
747     {
748       indent ();
749       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
750     }
751   is_class_level = 0;
752 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
753   {
754     register struct binding_level *level = current_binding_level;
755     current_binding_level = current_binding_level->level_chain;
756     level->level_chain = free_binding_level;
757 #if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
758     if (level->binding_depth != binding_depth)
759       abort ();
760 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
761     free_binding_level = level;
762     find_class_binding_level ();
763   }
764 }
765
766 static void
767 suspend_binding_level ()
768 {
769   if (class_binding_level)
770     current_binding_level = class_binding_level;
771
772   if (global_binding_level)
773     {
774       /* Cannot suspend a level, if there are none left to suspend.  */
775       if (current_binding_level == global_binding_level)
776         my_friendly_abort (123);
777     }
778   /* Suspend the current level.  */
779 #if defined(DEBUG_CP_BINDING_LEVELS)
780   binding_depth--;
781   indent ();
782   fprintf (stderr, "suspend  %s level 0x%08x line %d\n",
783           (is_class_level) ? "class" : "block",
784           current_binding_level, lineno);
785   if (is_class_level != (current_binding_level == class_binding_level))
786     {
787       indent ();
788       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
789     }
790   is_class_level = 0;
791 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
792   current_binding_level = current_binding_level->level_chain;
793   find_class_binding_level ();
794 }
795
796 static void
797 resume_binding_level (b)
798      struct binding_level *b;
799 {
800   /* Resuming binding levels is meant only for namespaces,
801      and those cannot nest into classes. */
802   my_friendly_assert(!class_binding_level, 386);
803   /* Also, resuming a non-directly nested namespace is a no-no.  */
804   my_friendly_assert(b->level_chain == current_binding_level, 386);
805   current_binding_level = b;
806 #if defined(DEBUG_CP_BINDING_LEVELS)
807   b->binding_depth = binding_depth;
808   indent ();
809   fprintf (stderr, "resume %s level 0x%08x line %d\n",
810            (is_class_level) ? "class" : "block", b, lineno);
811   is_class_level = 0;
812   binding_depth++;
813 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
814 }
815 \f
816 /* Create a new `struct binding_level'.  */
817
818 static
819 struct binding_level *
820 make_binding_level ()
821 {
822   /* NOSTRICT */
823   return (struct binding_level *) xmalloc (sizeof (struct binding_level));
824 }
825
826 /* Nonzero if we are currently in the global binding level.  */
827
828 int
829 global_bindings_p ()
830 {
831   return current_binding_level == global_binding_level;
832 }
833
834 /* Return the innermost binding level that is not for a class scope.  */
835
836 static struct binding_level *
837 innermost_nonclass_level ()
838 {
839   struct binding_level *b;
840
841   b = current_binding_level;
842   while (b->parm_flag == 2)
843     b = b->level_chain;
844
845   return b;
846 }
847
848 /* Nonzero if we are currently in a toplevel binding level.  This
849    means either the global binding level or a namespace in a toplevel
850    binding level.  Since there are no non-toplevel namespace levels,
851    this really means any namespace or pseudo-global level.  We also
852    include a class whose context is toplevel.  */
853
854 int
855 toplevel_bindings_p ()
856 {
857   struct binding_level *b = innermost_nonclass_level ();
858
859   return b->namespace_p || b->pseudo_global;
860 }
861
862 /* Nonzero if this is a namespace scope, or if we are defining a class
863    which is itself at namespace scope, or whose enclosing class is
864    such a class, etc.  */
865
866 int
867 namespace_bindings_p ()
868 {
869   struct binding_level *b = innermost_nonclass_level ();
870
871   return b->namespace_p;
872 }
873
874 void
875 keep_next_level ()
876 {
877   keep_next_level_flag = 1;
878 }
879
880 /* Nonzero if the current level needs to have a BLOCK made.  */
881
882 int
883 kept_level_p ()
884 {
885   return (current_binding_level->blocks != NULL_TREE
886           || current_binding_level->keep
887           || current_binding_level->names != NULL_TREE
888           || (current_binding_level->tags != NULL_TREE
889               && !current_binding_level->tag_transparent));
890 }
891
892 /* Identify this binding level as a level of parameters.  */
893
894 void
895 declare_parm_level ()
896 {
897   current_binding_level->parm_flag = 1;
898 }
899
900 void
901 declare_pseudo_global_level ()
902 {
903   current_binding_level->pseudo_global = 1;
904 }
905
906 static void
907 declare_namespace_level ()
908 {
909   current_binding_level->namespace_p = 1;
910 }
911
912 int
913 pseudo_global_level_p ()
914 {
915   struct binding_level *b = innermost_nonclass_level ();
916
917   return b->pseudo_global;
918 }
919
920 void
921 set_class_shadows (shadows)
922      tree shadows;
923 {
924   class_binding_level->class_shadowed = shadows;
925 }
926
927 /* Enter a new binding level.
928    If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
929    not for that of tags.  */
930
931 void
932 pushlevel (tag_transparent)
933      int tag_transparent;
934 {
935   register struct binding_level *newlevel = NULL_BINDING_LEVEL;
936
937   /* If this is the top level of a function,
938      just make sure that NAMED_LABELS is 0.
939      They should have been set to 0 at the end of the previous function.  */
940
941   if (current_binding_level == global_binding_level)
942     my_friendly_assert (named_labels == NULL_TREE, 134);
943
944   /* Reuse or create a struct for this binding level.  */
945
946 #if defined(DEBUG_CP_BINDING_LEVELS)
947   if (0)
948 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
949   if (free_binding_level)
950 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
951     {
952       newlevel = free_binding_level;
953       free_binding_level = free_binding_level->level_chain;
954     }
955   else
956     {
957       newlevel = make_binding_level ();
958     }
959
960   push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
961   GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
962   keep_next_level_flag = 0;
963 }
964
965 void
966 note_level_for_for ()
967 {
968   current_binding_level->is_for_scope = 1;
969 }
970
971 void
972 pushlevel_temporary (tag_transparent)
973      int tag_transparent;
974 {
975   pushlevel (tag_transparent);
976   current_binding_level->keep = 2;
977   clear_last_expr ();
978
979   /* Note we don't call push_momentary() here.  Otherwise, it would cause
980      cleanups to be allocated on the momentary obstack, and they will be
981      overwritten by the next statement.  */
982
983   expand_start_bindings (0);
984 }
985
986 /* For a binding between a name and an entity at a block scope,
987    this is the `struct binding_level' for the block.  */
988 #define BINDING_LEVEL(NODE) \
989    (((struct tree_binding*)NODE)->scope.level)
990
991 /* These are currently unused, but permanent, CPLUS_BINDING nodes.
992    They are kept here because they are allocated from the permanent
993    obstack and cannot be easily freed.  */
994 static tree free_binding_nodes;
995
996 /* Make DECL the innermost binding for ID.  The LEVEL is the binding
997    level at which this declaration is being bound.  */
998
999 static void
1000 push_binding (id, decl, level)
1001      tree id;
1002      tree decl;
1003      struct binding_level* level;
1004 {
1005   tree binding;
1006
1007   if (!free_binding_nodes)
1008     {
1009       /* There are no free nodes, so we must build one here.  */
1010       push_obstacks_nochange ();
1011       end_temporary_allocation ();
1012       binding = make_node (CPLUS_BINDING);
1013       pop_obstacks ();
1014     }
1015   else
1016     {
1017       /* There are nodes on the free list.  Grab the first one.  */
1018       binding = free_binding_nodes;
1019       
1020       /* And update the free list.  */
1021       free_binding_nodes = TREE_CHAIN (free_binding_nodes);
1022     }
1023
1024   /* Now, fill in the binding information.  */
1025   BINDING_VALUE (binding) = decl;
1026   BINDING_TYPE (binding) = NULL_TREE;
1027   BINDING_LEVEL (binding) = level;
1028   INHERITED_VALUE_BINDING_P (binding) = 0;
1029   LOCAL_BINDING_P (binding) = (level != class_binding_level);
1030
1031   /* And put it on the front of the list of bindings for ID.  */
1032   TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
1033   IDENTIFIER_BINDING (id) = binding;
1034 }
1035
1036 /* ID is already bound in the current scope.  But, DECL is an
1037    additional binding for ID in the same scope.  This is the `struct
1038    stat' hack whereby a non-typedef class-name or enum-name can be
1039    bound at the same level as some other kind of entity.  It's the
1040    responsibility of the caller to check that inserting this name is
1041    legal here.  Returns nonzero if the new binding was successful.  */
1042 static int
1043 add_binding (id, decl)
1044      tree id;
1045      tree decl;
1046 {
1047   tree binding = IDENTIFIER_BINDING (id);
1048   int ok = 1;
1049
1050   if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
1051     /* The new name is the type name.  */
1052     BINDING_TYPE (binding) = decl;
1053   else if (!BINDING_VALUE (binding))
1054     /* This situation arises when push_class_level_binding moves an
1055        inherited type-binding out of the way to make room for a new
1056        value binding.  */
1057     BINDING_VALUE (binding) = decl;
1058   else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
1059            && DECL_ARTIFICIAL (BINDING_VALUE (binding)))
1060     {
1061       /* The old binding was a type name.  It was placed in
1062          BINDING_VALUE because it was thought, at the point it was
1063          declared, to be the only entity with such a name.  Move the
1064          type name into the type slot; it is now hidden by the new
1065          binding.  */
1066       BINDING_TYPE (binding) = BINDING_VALUE (binding);
1067       BINDING_VALUE (binding) = decl;
1068       INHERITED_VALUE_BINDING_P (binding) = 0;
1069     }
1070   else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
1071            && TREE_CODE (decl) == TYPE_DECL
1072            && DECL_NAME (decl) == DECL_NAME (BINDING_VALUE (binding))
1073            && same_type_p (TREE_TYPE (decl),
1074                            TREE_TYPE (BINDING_VALUE (binding))))
1075     /* We have two typedef-names, both naming the same type to have
1076        the same name.  This is OK because of:
1077
1078          [dcl.typedef]
1079
1080          In a given scope, a typedef specifier can be used to redefine
1081          the name of any type declared in that scope to refer to the
1082          type to which it already refers.  */
1083     ok = 0;
1084   else
1085     {
1086       cp_error ("declaration of `%#D'", decl);
1087       cp_error_at ("conflicts with previous declaration `%#D'",
1088                    BINDING_VALUE (binding));
1089       ok = 0;
1090     }
1091
1092   return ok;
1093 }
1094
1095 /* Bind DECL to ID in the current_binding_level.
1096    If PUSH_USING is set in FLAGS, we know that DECL doesn't really belong
1097    to this binding level, that it got here through a using-declaration.  */
1098
1099 void
1100 push_local_binding (id, decl, flags)
1101      tree id;
1102      tree decl;
1103      int flags;
1104 {
1105   struct binding_level *b;
1106
1107   /* Skip over any local classes.  This makes sense if we call
1108      push_local_binding with a friend decl of a local class.  */
1109   b = current_binding_level;
1110   while (b->parm_flag == 2)
1111     b = b->level_chain;
1112
1113   if (lookup_name_current_level (id))
1114     {
1115       /* Supplement the existing binding.  */
1116       if (!add_binding (id, decl))
1117         /* It didn't work.  Something else must be bound at this
1118            level.  Do not add DECL to the list of things to pop
1119            later.  */
1120         return;
1121     }
1122   else
1123     /* Create a new binding.  */
1124     push_binding (id, decl, b);
1125
1126   if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
1127     /* We must put the OVERLOAD into a TREE_LIST since the
1128        TREE_CHAIN of an OVERLOAD is already used.  Similarly for
1129        decls that got here through a using-declaration.  */
1130     decl = build_tree_list (NULL_TREE, decl);
1131
1132   /* And put DECL on the list of things declared by the current
1133      binding level.  */
1134   TREE_CHAIN (decl) = b->names;
1135   b->names = decl;
1136 }
1137
1138 /* Bind DECL to ID in the class_binding_level.  Returns nonzero if the
1139    binding was successful.  */
1140
1141 int
1142 push_class_binding (id, decl)
1143      tree id;
1144      tree decl;
1145 {
1146   int result = 1;
1147   tree binding = IDENTIFIER_BINDING (id);
1148   tree context;
1149
1150   /* Note that we declared this value so that we can issue an error if
1151      this an illegal redeclaration of a name already used for some
1152      other purpose.  */
1153   note_name_declared_in_class (id, decl);
1154
1155   if (binding && BINDING_LEVEL (binding) == class_binding_level)
1156     /* Supplement the existing binding.  */
1157     result = add_binding (id, decl);
1158   else
1159     /* Create a new binding.  */
1160     push_binding (id, decl, class_binding_level);
1161
1162   /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
1163      class-level declaration.  Note that we do not use DECL here
1164      because of the possibility of the `struct stat' hack; if DECL is
1165      a class-name or enum-name we might prefer a field-name, or some
1166      such.  */
1167   IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
1168
1169   /* If this is a binding from a base class, mark it as such.  */
1170   binding = IDENTIFIER_BINDING (id);
1171   if (BINDING_VALUE (binding) == decl && TREE_CODE (decl) != TREE_LIST)
1172     {
1173       /* Any implicit typename must be from a base-class.  The
1174          context for an implicit typename declaration is always
1175          the derived class in which the lookup was done, so the checks
1176          based on the context of DECL below will not trigger.  */
1177       if (IMPLICIT_TYPENAME_TYPE_DECL_P (decl))
1178         INHERITED_VALUE_BINDING_P (binding) = 1;
1179       else
1180         {
1181           if (TREE_CODE (decl) == OVERLOAD)
1182             context = DECL_REAL_CONTEXT (OVL_CURRENT (decl));
1183           else
1184             {
1185               my_friendly_assert (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd',
1186                                   0);
1187               context = DECL_REAL_CONTEXT (decl);
1188             }
1189
1190           if (is_properly_derived_from (current_class_type, context))
1191             INHERITED_VALUE_BINDING_P (binding) = 1;
1192           else
1193             INHERITED_VALUE_BINDING_P (binding) = 0;
1194         }
1195     }
1196   else if (BINDING_VALUE (binding) == decl)
1197     /* We only encounter a TREE_LIST when push_class_decls detects an
1198        ambiguity.  Such an ambiguity can be overridden by a definition
1199        in this class.  */
1200     INHERITED_VALUE_BINDING_P (binding) = 1;
1201
1202   return result;
1203 }
1204
1205 /* Remove the binding for DECL which should be the innermost binding
1206    for ID.  */
1207
1208 static void 
1209 pop_binding (id, decl) 
1210      tree id;
1211      tree decl;
1212 {
1213   tree binding;
1214     
1215   if (id == NULL_TREE)
1216     /* It's easiest to write the loops that call this function without
1217        checking whether or not the entities involved have names.  We
1218        get here for such an entity.  */
1219     return;
1220
1221   /* Get the innermost binding for ID.  */
1222   binding = IDENTIFIER_BINDING (id);
1223
1224   /* The name should be bound.  */
1225   my_friendly_assert (binding != NULL_TREE, 0);
1226
1227   /* The DECL will be either the ordinary binding or the type
1228      binding for this identifier.  Remove that binding.  */
1229   if (BINDING_VALUE (binding) == decl)
1230     BINDING_VALUE (binding) = NULL_TREE;
1231   else if (BINDING_TYPE (binding) == decl)
1232     BINDING_TYPE (binding) = NULL_TREE;
1233   else
1234     my_friendly_abort (0);
1235
1236   if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
1237     {
1238       /* We're completely done with the innermost binding for this
1239          identifier.  Unhook it from the list of bindings.  */
1240       IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
1241
1242       /* And place it on the free list.  */
1243       TREE_CHAIN (binding) = free_binding_nodes;
1244       free_binding_nodes = binding;
1245     }
1246 }
1247
1248 /* Exit a binding level.
1249    Pop the level off, and restore the state of the identifier-decl mappings
1250    that were in effect when this level was entered.
1251
1252    If KEEP == 1, this level had explicit declarations, so
1253    and create a "block" (a BLOCK node) for the level
1254    to record its declarations and subblocks for symbol table output.
1255
1256    If FUNCTIONBODY is nonzero, this level is the body of a function,
1257    so create a block as if KEEP were set and also clear out all
1258    label names.
1259
1260    If REVERSE is nonzero, reverse the order of decls before putting
1261    them into the BLOCK.  */
1262
1263 tree
1264 poplevel (keep, reverse, functionbody)
1265      int keep;
1266      int reverse;
1267      int functionbody;
1268 {
1269   register tree link;
1270   /* The chain of decls was accumulated in reverse order.
1271      Put it into forward order, just for cleanliness.  */
1272   tree decls;
1273   int tmp = functionbody;
1274   int real_functionbody = current_binding_level->keep == 2
1275     ? ((functionbody = 0), tmp) : functionbody;
1276   tree tags = functionbody >= 0 ? current_binding_level->tags : 0;
1277   tree subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1278   tree block = NULL_TREE;
1279   tree decl;
1280   int block_previously_created;
1281   int leaving_for_scope;
1282
1283   if (current_binding_level->parm_flag == 2)
1284     return poplevel_class ();
1285
1286   my_friendly_assert (!current_binding_level->class_shadowed,
1287                       19990414);
1288
1289   /* We used to use KEEP == 2 to indicate that the new block should go
1290      at the beginning of the list of blocks at this binding level,
1291      rather than the end.  This hack is no longer used.  */
1292   my_friendly_assert (keep == 0 || keep == 1, 0);
1293
1294   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1295                       (HOST_WIDE_INT) current_binding_level->level_chain,
1296                       current_binding_level->parm_flag,
1297                       current_binding_level->keep);
1298
1299   if (current_binding_level->keep == 1)
1300     keep = 1;
1301
1302   /* Get the decls in the order they were written.
1303      Usually current_binding_level->names is in reverse order.
1304      But parameter decls were previously put in forward order.  */
1305
1306   if (reverse)
1307     current_binding_level->names
1308       = decls = nreverse (current_binding_level->names);
1309   else
1310     decls = current_binding_level->names;
1311
1312   /* Output any nested inline functions within this block
1313      if they weren't already output.  */
1314
1315   for (decl = decls; decl; decl = TREE_CHAIN (decl))
1316     if (TREE_CODE (decl) == FUNCTION_DECL
1317         && ! TREE_ASM_WRITTEN (decl)
1318         && DECL_INITIAL (decl) != NULL_TREE
1319         && TREE_ADDRESSABLE (decl)
1320         && decl_function_context (decl) == current_function_decl)
1321       {
1322         /* If this decl was copied from a file-scope decl
1323            on account of a block-scope extern decl,
1324            propagate TREE_ADDRESSABLE to the file-scope decl.  */
1325         if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1326           TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1327         else
1328           {
1329             push_function_context ();
1330             output_inline_function (decl);
1331             pop_function_context ();
1332           }
1333       }
1334
1335   /* If there were any declarations or structure tags in that level,
1336      or if this level is a function body,
1337      create a BLOCK to record them for the life of this function.  */
1338
1339   block = NULL_TREE;
1340   block_previously_created = (current_binding_level->this_block != NULL_TREE);
1341   if (block_previously_created)
1342     block = current_binding_level->this_block;
1343   else if (keep == 1 || functionbody)
1344     block = make_node (BLOCK);
1345   if (block != NULL_TREE)
1346     {
1347       if (block_previously_created)
1348         {
1349           if (decls || tags || subblocks)
1350             {
1351               if (BLOCK_VARS (block) || BLOCK_TYPE_TAGS (block))
1352                 warning ("internal compiler error: debugging info corrupted");
1353
1354               BLOCK_VARS (block) = decls;
1355               BLOCK_TYPE_TAGS (block) = tags;
1356
1357               /* We can have previous subblocks and new subblocks when
1358                  doing fixup_gotos with complex cleanups.  We chain the new
1359                  subblocks onto the end of any pre-existing subblocks.  */
1360               BLOCK_SUBBLOCKS (block) = chainon (BLOCK_SUBBLOCKS (block),
1361                                                  subblocks);
1362             }
1363           /* If we created the block earlier on, and we are just
1364              diddling it now, then it already should have a proper
1365              BLOCK_END_NOTE value associated with it.  */
1366         }
1367       else
1368         {
1369           BLOCK_VARS (block) = decls;
1370           BLOCK_TYPE_TAGS (block) = tags;
1371           BLOCK_SUBBLOCKS (block) = subblocks;
1372           /* Otherwise, for a new block, install a new BLOCK_END_NOTE
1373              value.  */ 
1374           remember_end_note (block);
1375         }
1376     }
1377
1378   /* In each subblock, record that this is its superior.  */
1379
1380   if (keep >= 0)
1381     for (link = subblocks; link; link = TREE_CHAIN (link))
1382       BLOCK_SUPERCONTEXT (link) = block;
1383
1384   /* We still support the old for-scope rules, whereby the variables
1385      in a for-init statement were in scope after the for-statement
1386      ended.  We only use the new rules in flag_new_for_scope is
1387      nonzero.  */
1388   leaving_for_scope 
1389     = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1390
1391   /* Remove declarations for all the DECLs in this level.  */
1392   for (link = decls; link; link = TREE_CHAIN (link))
1393     {
1394       if (leaving_for_scope && TREE_CODE (link) == VAR_DECL)
1395         {
1396           tree outer_binding 
1397             = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1398           tree ns_binding;
1399
1400           if (!outer_binding)
1401             ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
1402           else
1403             ns_binding = NULL_TREE;
1404
1405           if (outer_binding 
1406               && (BINDING_LEVEL (outer_binding) 
1407                   == current_binding_level->level_chain))
1408             /* We have something like:
1409                
1410                  int i;
1411                  for (int i; ;);
1412                  
1413                and we are leaving the `for' scope.  There's no reason to
1414                keep the binding of the inner `i' in this case.  */
1415             pop_binding (DECL_NAME (link), link);
1416           else if ((outer_binding 
1417                     && (TREE_CODE (BINDING_VALUE (outer_binding)) 
1418                         == TYPE_DECL))
1419                    || (ns_binding 
1420                        && TREE_CODE (ns_binding) == TYPE_DECL))
1421             /* Here, we have something like:
1422
1423                  typedef int I;
1424
1425                  void f () {
1426                    for (int I; ;);
1427                  }
1428
1429                We must pop the for-scope binding so we know what's a
1430                type and what isn't.  */
1431             pop_binding (DECL_NAME (link), link);
1432           else
1433             {
1434               /* Mark this VAR_DECL as dead so that we can tell we left it
1435                  there only for backward compatibility.  */
1436               DECL_DEAD_FOR_LOCAL (link) = 1;
1437               
1438               /* Keep track of what should of have happenned when we
1439                  popped the binding.  */
1440               if (outer_binding && BINDING_VALUE (outer_binding))
1441                 DECL_SHADOWED_FOR_VAR (link) 
1442                   = BINDING_VALUE (outer_binding);
1443
1444               /* Add it to the list of dead variables in the next
1445                  outermost binding to that we can remove these when we
1446                  leave that binding.  */
1447               current_binding_level->level_chain->dead_vars_from_for
1448                 = tree_cons (NULL_TREE, link,
1449                              current_binding_level->level_chain->
1450                              dead_vars_from_for);
1451
1452               /* Although we don't pop the CPLUS_BINDING, we do clear
1453                  its BINDING_LEVEL since the level is going away now.  */
1454               BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1455                 = 0;
1456             }
1457         }
1458       else 
1459         {
1460           /* Remove the binding.  */
1461           decl = link;
1462           if (TREE_CODE (decl) == TREE_LIST)
1463             decl = TREE_VALUE (decl);
1464           if (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd')
1465             pop_binding (DECL_NAME (decl), decl);
1466           else if (TREE_CODE (decl) == OVERLOAD)
1467             pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
1468           else 
1469             my_friendly_abort (0);
1470         }
1471     }
1472
1473   /* Remove declarations for any `for' variables from inner scopes
1474      that we kept around.  */
1475   for (link = current_binding_level->dead_vars_from_for;
1476        link; link = TREE_CHAIN (link))
1477     pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
1478
1479   /* Restore the IDENTIFIER_TYPE_VALUEs.  */
1480   for (link = current_binding_level->type_shadowed;
1481        link; link = TREE_CHAIN (link))
1482     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
1483   
1484   /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1485      list if a `using' declaration put them there.  The debugging
1486      back-ends won't understand OVERLOAD, so we remove them here.
1487      Because the BLOCK_VARS are (temporarily) shared with
1488      CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1489      popped all the bindings.  */
1490   if (block)
1491     {
1492       tree* d;
1493
1494       for (d = &BLOCK_VARS (block); *d; )
1495         {
1496           if (TREE_CODE (*d) == TREE_LIST)
1497             *d = TREE_CHAIN (*d);
1498           else
1499             d = &TREE_CHAIN (*d);
1500         }
1501     }
1502
1503   /* If the level being exited is the top level of a function,
1504      check over all the labels.  */
1505
1506   if (functionbody)
1507     {
1508       /* If this is the top level block of a function,
1509          the vars are the function's parameters.
1510          Don't leave them in the BLOCK because they are
1511          found in the FUNCTION_DECL instead.  */
1512
1513       BLOCK_VARS (block) = 0;
1514
1515       /* Clear out the definitions of all label names,
1516          since their scopes end here.  */
1517
1518       for (link = named_labels; link; link = TREE_CHAIN (link))
1519         {
1520           register tree label = TREE_VALUE (link);
1521
1522           if (DECL_INITIAL (label) == NULL_TREE)
1523             {
1524               cp_error_at ("label `%D' used but not defined", label);
1525               /* Avoid crashing later.  */
1526               define_label (input_filename, 1, DECL_NAME (label));
1527             }
1528           else if (warn_unused && !TREE_USED (label))
1529             cp_warning_at ("label `%D' defined but not used", label);
1530           SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), NULL_TREE);
1531
1532           /* Put the labels into the "variables" of the
1533              top-level block, so debugger can see them.  */
1534           TREE_CHAIN (label) = BLOCK_VARS (block);
1535           BLOCK_VARS (block) = label;
1536         }
1537
1538       named_labels = NULL_TREE;
1539     }
1540
1541   /* Any uses of undefined labels now operate under constraints
1542      of next binding contour.  */
1543   {
1544     struct binding_level *level_chain;
1545     level_chain = current_binding_level->level_chain;
1546     if (level_chain)
1547       {
1548         struct named_label_list *labels;
1549         for (labels = named_label_uses; labels; labels = labels->next)
1550           if (labels->binding_level == current_binding_level)
1551             {
1552               labels->binding_level = level_chain;
1553               labels->names_in_scope = level_chain->names;
1554             }
1555       }
1556   }
1557
1558   tmp = current_binding_level->keep;
1559
1560   pop_binding_level ();
1561   if (functionbody)
1562     DECL_INITIAL (current_function_decl) = block;
1563   else if (block)
1564     {
1565       if (!block_previously_created)
1566         current_binding_level->blocks
1567           = chainon (current_binding_level->blocks, block);
1568     }
1569   /* If we did not make a block for the level just exited,
1570      any blocks made for inner levels
1571      (since they cannot be recorded as subblocks in that level)
1572      must be carried forward so they will later become subblocks
1573      of something else.  */
1574   else if (subblocks)
1575     current_binding_level->blocks
1576       = chainon (current_binding_level->blocks, subblocks);
1577
1578   /* Take care of compiler's internal binding structures.  */
1579   if (tmp == 2)
1580     {
1581       expand_end_bindings (getdecls (), keep, 1);
1582       /* Each and every BLOCK node created here in `poplevel' is important
1583          (e.g. for proper debugging information) so if we created one
1584          earlier, mark it as "used".  */
1585       if (block)
1586         TREE_USED (block) = 1;
1587       block = poplevel (keep, reverse, real_functionbody);
1588     }
1589
1590   /* Each and every BLOCK node created here in `poplevel' is important
1591      (e.g. for proper debugging information) so if we created one
1592      earlier, mark it as "used".  */
1593   if (block)
1594     TREE_USED (block) = 1;
1595   return block;
1596 }
1597
1598 /* Delete the node BLOCK from the current binding level.
1599    This is used for the block inside a stmt expr ({...})
1600    so that the block can be reinserted where appropriate.  */
1601
1602 void
1603 delete_block (block)
1604      tree block;
1605 {
1606   tree t;
1607   if (current_binding_level->blocks == block)
1608     current_binding_level->blocks = TREE_CHAIN (block);
1609   for (t = current_binding_level->blocks; t;)
1610     {
1611       if (TREE_CHAIN (t) == block)
1612         TREE_CHAIN (t) = TREE_CHAIN (block);
1613       else
1614         t = TREE_CHAIN (t);
1615     }
1616   TREE_CHAIN (block) = NULL_TREE;
1617   /* Clear TREE_USED which is always set by poplevel.
1618      The flag is set again if insert_block is called.  */
1619   TREE_USED (block) = 0;
1620 }
1621
1622 /* Insert BLOCK at the end of the list of subblocks of the
1623    current binding level.  This is used when a BIND_EXPR is expanded,
1624    to handle the BLOCK node inside the BIND_EXPR.  */
1625
1626 void
1627 insert_block (block)
1628      tree block;
1629 {
1630   TREE_USED (block) = 1;
1631   current_binding_level->blocks
1632     = chainon (current_binding_level->blocks, block);
1633 }
1634
1635 /* Set the BLOCK node for the innermost scope
1636    (the one we are currently in).  */
1637
1638 void
1639 set_block (block)
1640     register tree block;
1641 {
1642   current_binding_level->this_block = block;
1643 }
1644
1645 /* Do a pushlevel for class declarations.  */
1646
1647 void
1648 pushlevel_class ()
1649 {
1650   register struct binding_level *newlevel;
1651
1652   /* Reuse or create a struct for this binding level.  */
1653 #if defined(DEBUG_CP_BINDING_LEVELS)
1654   if (0)
1655 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1656   if (free_binding_level)
1657 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1658     {
1659       newlevel = free_binding_level;
1660       free_binding_level = free_binding_level->level_chain;
1661     }
1662   else
1663     newlevel = make_binding_level ();
1664
1665 #if defined(DEBUG_CP_BINDING_LEVELS)
1666   is_class_level = 1;
1667 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1668
1669   push_binding_level (newlevel, 0, 0);
1670
1671   decl_stack = push_decl_level (decl_stack, &decl_obstack);
1672   class_binding_level = current_binding_level;
1673   class_binding_level->parm_flag = 2;
1674 }
1675
1676 /* ...and a poplevel for class declarations.  */
1677
1678 static tree
1679 poplevel_class ()
1680 {
1681   register struct binding_level *level = class_binding_level;
1682   tree shadowed;
1683
1684   my_friendly_assert (level != 0, 354);
1685   
1686   decl_stack = pop_stack_level (decl_stack);
1687   /* If we're leaving a toplevel class, don't bother to do the setting
1688      of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
1689      shouldn't even be used when current_class_type isn't set, and second,
1690      if we don't touch it here, we're able to use the cache effect if the
1691      next time we're entering a class scope, it is the same class.  */
1692   if (current_class_depth != 1)
1693     {
1694       struct binding_level* b;
1695
1696       /* Clear out our IDENTIFIER_CLASS_VALUEs.  */
1697       for (shadowed = level->class_shadowed;
1698            shadowed;
1699            shadowed = TREE_CHAIN (shadowed))
1700         IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = NULL_TREE;
1701         
1702       /* Find the next enclosing class, and recreate
1703          IDENTIFIER_CLASS_VALUEs appropriate for that class.  */
1704       b = level->level_chain;
1705       while (b && b->parm_flag != 2)
1706         b = b->level_chain;
1707
1708       if (b)
1709         for (shadowed = b->class_shadowed; 
1710              shadowed; 
1711              shadowed = TREE_CHAIN (shadowed))
1712           {
1713             tree t;
1714
1715             t = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
1716             while (t && BINDING_LEVEL (t) != b)
1717               t = TREE_CHAIN (t);
1718       
1719             if (t)
1720               IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) 
1721                 = BINDING_VALUE (t);
1722           }
1723     }
1724   else
1725     /* Remember to save what IDENTIFIER's were bound in this scope so we
1726        can recover from cache misses.  */
1727     {
1728       previous_class_type = current_class_type;
1729       previous_class_values = class_binding_level->class_shadowed;
1730     }
1731   for (shadowed = level->type_shadowed;
1732        shadowed;
1733        shadowed = TREE_CHAIN (shadowed))
1734     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
1735
1736   /* Remove the bindings for all of the class-level declarations.  */
1737   for (shadowed = level->class_shadowed; 
1738        shadowed; 
1739        shadowed = TREE_CHAIN (shadowed))
1740     pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
1741
1742   GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1743                       (HOST_WIDE_INT) class_binding_level->level_chain,
1744                       class_binding_level->parm_flag,
1745                       class_binding_level->keep);
1746
1747   /* Now, pop out of the binding level which we created up in the
1748      `pushlevel_class' routine.  */
1749 #if defined(DEBUG_CP_BINDING_LEVELS)
1750   is_class_level = 1;
1751 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1752
1753   pop_binding_level ();
1754
1755   return NULL_TREE;
1756 }
1757
1758 /* We are entering the scope of a class.  Clear IDENTIFIER_CLASS_VALUE
1759    for any names in enclosing classes.  */
1760
1761 void
1762 clear_identifier_class_values ()
1763 {
1764   tree t;
1765
1766   if (!class_binding_level)
1767     return;
1768
1769   for (t = class_binding_level->class_shadowed;
1770        t;
1771        t = TREE_CHAIN (t))
1772     IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
1773 }
1774
1775 /* Returns non-zero if T is a virtual function table.  */
1776
1777 int
1778 vtable_decl_p (t, data)
1779      tree t;
1780      void *data ATTRIBUTE_UNUSED;
1781 {
1782   return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
1783 }
1784
1785 /* Returns non-zero if T is a TYPE_DECL for a type with virtual
1786    functions.  */
1787
1788 int
1789 vtype_decl_p (t, data)
1790      tree t;
1791      void *data ATTRIBUTE_UNUSED;
1792 {
1793   return (TREE_CODE (t) == TYPE_DECL
1794           && TREE_TYPE (t) != error_mark_node
1795           && TYPE_LANG_SPECIFIC (TREE_TYPE (t))
1796           && CLASSTYPE_VSIZE (TREE_TYPE (t)));
1797 }
1798
1799 /* Returns non-zero if T is a signature table.  */
1800
1801 int 
1802 sigtable_decl_p (t, data)
1803      tree t;
1804      void *data ATTRIBUTE_UNUSED;
1805 {
1806   return (TREE_CODE (t) == VAR_DECL
1807           && TREE_TYPE (t) != error_mark_node
1808           && IS_SIGNATURE (TREE_TYPE (t)));
1809 }
1810
1811 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
1812    itself, calling F for each.  The DATA is passed to F as well.  */
1813
1814 static int
1815 walk_namespaces_r (namespace, f, data)
1816      tree namespace;
1817      walk_namespaces_fn f;
1818      void *data;
1819 {
1820   tree current;
1821   int result = 0;
1822
1823   result |= (*f) (namespace, data);
1824
1825   for (current = NAMESPACE_LEVEL (namespace)->names;
1826        current;
1827        current = TREE_CHAIN (current))
1828     {
1829       if (TREE_CODE (current) != NAMESPACE_DECL
1830           || DECL_NAMESPACE_ALIAS (current))
1831         continue;
1832       if (!DECL_LANG_SPECIFIC (current))
1833         {
1834           /* Hmm. std. */
1835           my_friendly_assert (current == std_node, 393);
1836           continue;
1837         }
1838
1839       /* We found a namespace.  */
1840       result |= walk_namespaces_r (current, f, data);
1841     }
1842
1843   return result;
1844 }
1845
1846 /* Walk all the namespaces, calling F for each.  The DATA is passed to
1847    F as well.  */
1848
1849 int
1850 walk_namespaces (f, data)
1851      walk_namespaces_fn f;
1852      void *data;
1853 {
1854   return walk_namespaces_r (global_namespace, f, data);
1855 }
1856
1857 struct walk_globals_data {
1858   walk_globals_pred p;
1859   walk_globals_fn f;
1860   void *data;
1861 };
1862
1863 /* Walk the global declarations in NAMESPACE.  Whenever one is found
1864    for which P returns non-zero, call F with its address.  If any call
1865    to F returns a non-zero value, return a non-zero value.  */
1866
1867 static int 
1868 walk_globals_r (namespace, data)
1869      tree namespace;
1870      void *data;
1871 {
1872   struct walk_globals_data* wgd = (struct walk_globals_data *) data;
1873   walk_globals_pred p = wgd->p;
1874   walk_globals_fn f = wgd->f;
1875   void *d = wgd->data;
1876   tree *t;
1877   int result = 0;
1878
1879   t = &NAMESPACE_LEVEL (namespace)->names;
1880
1881   while (*t)
1882     {
1883       tree glbl = *t;
1884
1885       if ((*p) (glbl, d))
1886         result |= (*f) (t, d);
1887
1888       /* If F changed *T, then *T still points at the next item to
1889          examine.  */
1890       if (*t == glbl)
1891         t = &TREE_CHAIN (*t);
1892     }
1893
1894   return result;
1895 }
1896
1897 /* Walk the global declarations.  Whenever one is found for which P
1898    returns non-zero, call F with its address.  If any call to F
1899    returns a non-zero value, return a non-zero value.  */
1900
1901 int
1902 walk_globals (p, f, data)
1903      walk_globals_pred p;
1904      walk_globals_fn f;
1905      void *data;
1906 {
1907   struct walk_globals_data wgd;
1908   wgd.p = p;
1909   wgd.f = f;
1910   wgd.data = data;
1911
1912   return walk_namespaces (walk_globals_r, &wgd);
1913 }
1914
1915 /* Call wrapup_globals_declarations for the globals in NAMESPACE.  If
1916    DATA is non-NULL, this is the last time we will call
1917    wrapup_global_declarations for this NAMESPACE.  */
1918
1919 int
1920 wrapup_globals_for_namespace (namespace, data)
1921      tree namespace;
1922      void *data;
1923 {
1924   tree globals = NAMESPACE_LEVEL (namespace)->names;
1925   int len = list_length (globals);
1926   tree *vec = (tree *) alloca (sizeof (tree) * len);
1927   int i;
1928   int result;
1929   tree decl;
1930   int last_time = (data != 0);
1931
1932   if (last_time && namespace == global_namespace)
1933     /* Let compile_file handle the global namespace.  */
1934     return 0;
1935
1936   /* Process the decls in reverse order--earliest first.
1937      Put them into VEC from back to front, then take out from front.  */
1938   
1939   for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
1940     vec[len - i - 1] = decl;
1941   
1942   if (last_time)
1943     {
1944       check_global_declarations (vec, len);
1945       return 0;
1946     }
1947
1948   /* Temporarily mark vtables as external.  That prevents
1949      wrapup_global_declarations from writing them out; we must process
1950      them ourselves in finish_vtable_vardecl.  */
1951   for (i = 0; i < len; ++i)
1952     if (vtable_decl_p (vec[i], /*data=*/0) && !DECL_EXTERNAL (vec[i]))
1953       {
1954         DECL_NOT_REALLY_EXTERN (vec[i]) = 1;
1955         DECL_EXTERNAL (vec[i]) = 1;
1956       }
1957
1958   /* Write out any globals that need to be output.  */
1959   result = wrapup_global_declarations (vec, len);
1960
1961   /* Undo the hack to DECL_EXTERNAL above.  */
1962   for (i = 0; i < len; ++i)
1963     if (vtable_decl_p (vec[i], /*data=*/0)
1964         && DECL_NOT_REALLY_EXTERN (vec[i]))
1965       {
1966         DECL_NOT_REALLY_EXTERN (vec[i]) = 0;
1967         DECL_EXTERNAL (vec[i]) = 0;
1968       }
1969
1970   return result;
1971 }
1972
1973 \f
1974 /* For debugging.  */
1975 static int no_print_functions = 0;
1976 static int no_print_builtins = 0;
1977
1978 void
1979 print_binding_level (lvl)
1980      struct binding_level *lvl;
1981 {
1982   tree t;
1983   int i = 0, len;
1984   fprintf (stderr, " blocks=");
1985   fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
1986   fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
1987            list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
1988   if (lvl->tag_transparent)
1989     fprintf (stderr, " tag-transparent");
1990   if (lvl->more_cleanups_ok)
1991     fprintf (stderr, " more-cleanups-ok");
1992   if (lvl->have_cleanups)
1993     fprintf (stderr, " have-cleanups");
1994   fprintf (stderr, "\n");
1995   if (lvl->names)
1996     {
1997       fprintf (stderr, " names:\t");
1998       /* We can probably fit 3 names to a line?  */
1999       for (t = lvl->names; t; t = TREE_CHAIN (t))
2000         {
2001           if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL)) 
2002             continue;
2003           if (no_print_builtins
2004               && (TREE_CODE (t) == TYPE_DECL)
2005               && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
2006             continue;
2007
2008           /* Function decls tend to have longer names.  */
2009           if (TREE_CODE (t) == FUNCTION_DECL)
2010             len = 3;
2011           else
2012             len = 2;
2013           i += len;
2014           if (i > 6)
2015             {
2016               fprintf (stderr, "\n\t");
2017               i = len;
2018             }
2019           print_node_brief (stderr, "", t, 0);
2020           if (t == error_mark_node)
2021             break;
2022         }
2023       if (i)
2024         fprintf (stderr, "\n");
2025     }
2026   if (lvl->tags)
2027     {
2028       fprintf (stderr, " tags:\t");
2029       i = 0;
2030       for (t = lvl->tags; t; t = TREE_CHAIN (t))
2031         {
2032           if (TREE_PURPOSE (t) == NULL_TREE)
2033             len = 3;
2034           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2035             len = 2;
2036           else
2037             len = 4;
2038           i += len;
2039           if (i > 5)
2040             {
2041               fprintf (stderr, "\n\t");
2042               i = len;
2043             }
2044           if (TREE_PURPOSE (t) == NULL_TREE)
2045             {
2046               print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
2047               fprintf (stderr, ">");
2048             }
2049           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2050             print_node_brief (stderr, "", TREE_VALUE (t), 0);
2051           else
2052             {
2053               print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
2054               print_node_brief (stderr, "", TREE_VALUE (t), 0);
2055               fprintf (stderr, ">");
2056             }
2057         }
2058       if (i)
2059         fprintf (stderr, "\n");
2060     }
2061   if (lvl->class_shadowed)
2062     {
2063       fprintf (stderr, " class-shadowed:");
2064       for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
2065         {
2066           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2067         }
2068       fprintf (stderr, "\n");
2069     }
2070   if (lvl->type_shadowed)
2071     {
2072       fprintf (stderr, " type-shadowed:");
2073       for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
2074         {
2075           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2076         }
2077       fprintf (stderr, "\n");
2078     }
2079 }
2080
2081 void
2082 print_other_binding_stack (stack)
2083      struct binding_level *stack;
2084 {
2085   struct binding_level *level;
2086   for (level = stack; level != global_binding_level; level = level->level_chain)
2087     {
2088       fprintf (stderr, "binding level ");
2089       fprintf (stderr, HOST_PTR_PRINTF, level);
2090       fprintf (stderr, "\n");
2091       print_binding_level (level);
2092     }
2093 }
2094
2095 void
2096 print_binding_stack ()
2097 {
2098   struct binding_level *b;
2099   fprintf (stderr, "current_binding_level=");
2100   fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
2101   fprintf (stderr, "\nclass_binding_level=");
2102   fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
2103   fprintf (stderr, "\nglobal_binding_level=");
2104   fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
2105   fprintf (stderr, "\n");
2106   if (class_binding_level)
2107     {
2108       for (b = class_binding_level; b; b = b->level_chain)
2109         if (b == current_binding_level)
2110           break;
2111       if (b)
2112         b = class_binding_level;
2113       else
2114         b = current_binding_level;
2115     }
2116   else
2117     b = current_binding_level;
2118   print_other_binding_stack (b);
2119   fprintf (stderr, "global:\n");
2120   print_binding_level (global_binding_level);
2121 }
2122
2123 /* Namespace binding access routines: The namespace_bindings field of
2124    the identifier is polymorphic, with three possible values:
2125    NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
2126    indicating the BINDING_VALUE of global_namespace. */
2127
2128 /* Check whether the a binding for the name to scope is known.
2129    Assumes that the bindings of the name are already a list
2130    of bindings. Returns the binding found, or NULL_TREE. */
2131
2132 static tree
2133 find_binding (name, scope)
2134      tree name;
2135      tree scope;
2136 {
2137   tree iter, prev = NULL_TREE;
2138
2139   scope = ORIGINAL_NAMESPACE (scope);
2140   
2141   for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
2142        iter = TREE_CHAIN (iter))
2143     {
2144       my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
2145       if (BINDING_SCOPE (iter) == scope)
2146         {
2147           /* Move binding found to the fron of the list, so
2148              subsequent lookups will find it faster. */
2149           if (prev)
2150             {
2151               TREE_CHAIN (prev) = TREE_CHAIN (iter);
2152               TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
2153               IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
2154             }
2155           return iter;
2156         }
2157       prev = iter;
2158     }
2159   return NULL_TREE;
2160 }
2161
2162 /* Always returns a binding for name in scope. If the
2163    namespace_bindings is not a list, convert it to one first.
2164    If no binding is found, make a new one. */
2165
2166 tree
2167 binding_for_name (name, scope)
2168      tree name;
2169      tree scope;
2170 {
2171   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2172   tree result;
2173
2174   scope = ORIGINAL_NAMESPACE (scope);
2175   
2176   if (b && TREE_CODE (b) != CPLUS_BINDING)
2177     {
2178       /* Get rid of optimization for global scope. */
2179       IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
2180       BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
2181       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2182     }
2183   if (b && (result = find_binding (name, scope)))
2184     return result;
2185   /* Not found, make a new permanent one. */
2186   push_obstacks (&permanent_obstack, &permanent_obstack);
2187   result = make_node (CPLUS_BINDING);
2188   TREE_CHAIN (result) = b;
2189   IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
2190   BINDING_SCOPE (result) = scope;
2191   BINDING_TYPE (result) = NULL_TREE;
2192   BINDING_VALUE (result) = NULL_TREE;
2193   pop_obstacks ();
2194   return result;
2195 }
2196
2197 /* Return the binding value for name in scope, considering that
2198    namespace_binding may or may not be a list of CPLUS_BINDINGS. */
2199
2200 tree
2201 namespace_binding (name, scope)
2202      tree name;
2203      tree scope;
2204 {
2205   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2206   if (b == NULL_TREE)
2207     return NULL_TREE;
2208   if (scope == NULL_TREE)
2209     scope = global_namespace;
2210   if (TREE_CODE (b) != CPLUS_BINDING)
2211     return (scope == global_namespace) ? b : NULL_TREE;
2212   name = find_binding (name,scope);
2213   if (name == NULL_TREE)
2214     return name;
2215   return BINDING_VALUE (name);
2216 }
2217
2218 /* Set the binding value for name in scope. If modifying the binding
2219    of global_namespace is attempted, try to optimize it. */
2220
2221 void
2222 set_namespace_binding (name, scope, val)
2223      tree name;
2224      tree scope;
2225      tree val;
2226 {
2227   tree b;
2228
2229   if (scope == NULL_TREE)
2230     scope = global_namespace;
2231   
2232   if (scope == global_namespace)
2233     {
2234       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2235       if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
2236         {
2237           IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
2238           return;
2239         }
2240     }
2241   b = binding_for_name (name, scope);
2242   BINDING_VALUE (b) = val;
2243 }
2244
2245 /* Push into the scope of the NAME namespace.  If NAME is NULL_TREE, then we
2246    select a name that is unique to this compilation unit.  */
2247
2248 void
2249 push_namespace (name)
2250      tree name;
2251 {
2252   tree d = NULL_TREE;
2253   int need_new = 1;
2254   int implicit_use = 0;
2255   int global = 0;
2256   if (!global_namespace)
2257     {
2258       /* This must be ::. */
2259       my_friendly_assert (name == get_identifier ("::"), 377);
2260       global = 1;
2261     }
2262   else if (!name)
2263     {
2264       /* The name of anonymous namespace is unique for the translation
2265          unit.  */
2266       if (!anonymous_namespace_name)
2267         anonymous_namespace_name = get_file_function_name ('N');
2268       name = anonymous_namespace_name;
2269       d = IDENTIFIER_NAMESPACE_VALUE (name);
2270       if (d)
2271         /* Reopening anonymous namespace.  */
2272         need_new = 0;
2273       implicit_use = 1;
2274     }
2275   else if (current_namespace == global_namespace
2276            && name == DECL_NAME (std_node))
2277     {
2278       in_std++;
2279       return;
2280     }
2281   else
2282     {
2283       /* Check whether this is an extended namespace definition. */
2284       d = IDENTIFIER_NAMESPACE_VALUE (name);
2285       if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
2286         {
2287           need_new = 0;
2288           if (DECL_NAMESPACE_ALIAS (d))
2289             {
2290               cp_error ("namespace alias `%D' not allowed here, assuming `%D'",
2291                         d, DECL_NAMESPACE_ALIAS (d));
2292               d = DECL_NAMESPACE_ALIAS (d);
2293             }
2294         }
2295     }
2296   
2297   if (need_new)
2298     {
2299       /* Make a new namespace, binding the name to it. */
2300       d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2301       /* The global namespace is not pushed, and the global binding
2302          level is set elsewhere.  */
2303       if (!global)
2304         {
2305           d = pushdecl (d);
2306           pushlevel (0);
2307           declare_namespace_level ();
2308           NAMESPACE_LEVEL (d) = current_binding_level;
2309         }
2310     }
2311   else
2312     resume_binding_level (NAMESPACE_LEVEL (d));
2313
2314   if (implicit_use)
2315     do_using_directive (d);
2316   /* Enter the name space. */
2317   current_namespace = d;
2318 }
2319
2320 /* Pop from the scope of the current namespace.  */
2321
2322 void
2323 pop_namespace ()
2324 {
2325   if (current_namespace == global_namespace)
2326     {
2327       my_friendly_assert (in_std>0, 980421);
2328       in_std--;
2329       return;
2330     }
2331   current_namespace = CP_DECL_CONTEXT (current_namespace);
2332   /* The binding level is not popped, as it might be re-opened later.  */
2333   suspend_binding_level ();
2334 }
2335
2336 /* Push into the scope of the namespace NS, even if it is deeply
2337    nested within another namespace.  */
2338
2339 void
2340 push_nested_namespace (ns)
2341      tree ns;
2342 {
2343   if (ns == global_namespace)
2344     push_to_top_level ();
2345   else
2346     {
2347       push_nested_namespace (CP_DECL_CONTEXT (ns));
2348       push_namespace (DECL_NAME (ns));
2349     }
2350 }
2351
2352 /* Pop back from the scope of the namespace NS, which was previously
2353    entered with push_nested_namespace.  */
2354      
2355 void
2356 pop_nested_namespace (ns)
2357      tree ns;
2358 {
2359   while (ns != global_namespace)
2360     {
2361       pop_namespace ();
2362       ns = CP_DECL_CONTEXT (ns);
2363     }
2364
2365   pop_from_top_level ();
2366 }
2367
2368 \f
2369 /* Subroutines for reverting temporarily to top-level for instantiation
2370    of templates and such.  We actually need to clear out the class- and
2371    local-value slots of all identifiers, so that only the global values
2372    are at all visible.  Simply setting current_binding_level to the global
2373    scope isn't enough, because more binding levels may be pushed.  */
2374 struct saved_scope {
2375   struct binding_level *old_binding_level;
2376   tree old_bindings;
2377   tree old_namespace;
2378   struct saved_scope *prev;
2379   tree class_name, class_type;
2380   tree access_specifier;
2381   tree function_decl;
2382   struct binding_level *class_bindings;
2383   tree *lang_base, *lang_stack, lang_name;
2384   int lang_stacksize;
2385   int minimal_parse_mode;
2386   tree last_function_parms;
2387   tree template_parms;
2388   HOST_WIDE_INT processing_template_decl;
2389   tree previous_class_type, previous_class_values;
2390   int processing_specialization;
2391   int processing_explicit_instantiation;
2392   char *class_cache_firstobj;
2393 };
2394 static struct saved_scope *current_saved_scope;
2395
2396 /* A chain of the binding vecs created by store_bindings.  We create a
2397    whole bunch of these during compilation, on permanent_obstack, so we
2398    can't just throw them away.  */
2399 static tree free_binding_vecs;
2400
2401 static tree
2402 store_bindings (names, old_bindings)
2403      tree names, old_bindings;
2404 {
2405   tree t;
2406   for (t = names; t; t = TREE_CHAIN (t))
2407     {
2408       tree binding, t1, id;
2409
2410       if (TREE_CODE (t) == TREE_LIST)
2411         id = TREE_PURPOSE (t);
2412       else
2413         id = DECL_NAME (t);
2414
2415       if (!id 
2416           /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2417              we have no IDENTIFIER_BINDING if we have left the class
2418              scope, but cached the class-level declarations.  */
2419           || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
2420         continue;
2421
2422       for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
2423         if (TREE_VEC_ELT (t1, 0) == id)
2424           goto skip_it;
2425
2426       if (free_binding_vecs)
2427         {
2428           binding = free_binding_vecs;
2429           free_binding_vecs = TREE_CHAIN (free_binding_vecs);
2430         }
2431       else
2432         binding = make_tree_vec (4);
2433
2434       if (id)
2435         {
2436           my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
2437           TREE_VEC_ELT (binding, 0) = id;
2438           TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
2439           TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
2440           TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
2441           IDENTIFIER_BINDING (id) = NULL_TREE;
2442           IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
2443         }
2444       TREE_CHAIN (binding) = old_bindings;
2445       old_bindings = binding;
2446     skip_it:
2447       ;
2448     }
2449   return old_bindings;
2450 }
2451
2452 void
2453 maybe_push_to_top_level (pseudo)
2454      int pseudo;
2455 {
2456   extern int current_lang_stacksize;
2457   struct saved_scope *s
2458     = (struct saved_scope *) xmalloc (sizeof (struct saved_scope));
2459   struct binding_level *b = current_binding_level;
2460   tree old_bindings = NULL_TREE;
2461
2462   push_cp_function_context (NULL_TREE);
2463
2464   if (previous_class_type)
2465     old_bindings = store_bindings (previous_class_values, old_bindings);
2466
2467   /* Have to include global_binding_level, because class-level decls
2468      aren't listed anywhere useful.  */
2469   for (; b; b = b->level_chain)
2470     {
2471       tree t;
2472
2473       /* Template IDs are inserted into the global level. If they were
2474          inserted into namespace level, finish_file wouldn't find them
2475          when doing pending instantiations. Therefore, don't stop at
2476          namespace level, but continue until :: .  */
2477       if (b == global_binding_level || (pseudo && b->pseudo_global))
2478         break;
2479
2480       old_bindings = store_bindings (b->names, old_bindings);
2481       /* We also need to check class_shadowed to save class-level type
2482          bindings, since pushclass doesn't fill in b->names.  */
2483       if (b->parm_flag == 2)
2484         old_bindings = store_bindings (b->class_shadowed, old_bindings);
2485
2486       /* Unwind type-value slots back to top level.  */
2487       for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2488         SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2489     }
2490
2491   s->old_binding_level = current_binding_level;
2492   current_binding_level = b;
2493
2494   s->old_namespace = current_namespace;
2495   s->class_name = current_class_name;
2496   s->class_type = current_class_type;
2497   s->access_specifier = current_access_specifier;
2498   s->function_decl = current_function_decl;
2499   s->class_bindings = class_binding_level;
2500   s->lang_stack = current_lang_stack;
2501   s->lang_base = current_lang_base;
2502   s->lang_stacksize = current_lang_stacksize;
2503   s->lang_name = current_lang_name;
2504   s->minimal_parse_mode = minimal_parse_mode;
2505   s->last_function_parms = last_function_parms;
2506   s->template_parms = current_template_parms;
2507   s->processing_template_decl = processing_template_decl;
2508   s->previous_class_type = previous_class_type;
2509   s->previous_class_values = previous_class_values;
2510   s->class_cache_firstobj = class_cache_firstobj;
2511   s->processing_specialization = processing_specialization;
2512   s->processing_explicit_instantiation = processing_explicit_instantiation;
2513
2514   current_class_name = current_class_type = NULL_TREE;
2515   current_function_decl = NULL_TREE;
2516   class_binding_level = (struct binding_level *)0;
2517   current_lang_stacksize = 10;
2518   current_lang_stack = current_lang_base
2519     = (tree *) xmalloc (current_lang_stacksize * sizeof (tree));
2520   current_lang_name = lang_name_cplusplus;
2521   strict_prototype = strict_prototypes_lang_cplusplus;
2522   named_labels = NULL_TREE;
2523   shadowed_labels = NULL_TREE;
2524   minimal_parse_mode = 0;
2525   previous_class_type = previous_class_values = NULL_TREE;
2526   class_cache_firstobj = 0;
2527   processing_specialization = 0;
2528   processing_explicit_instantiation = 0;
2529   current_template_parms = NULL_TREE;
2530   processing_template_decl = 0;
2531   current_namespace = global_namespace;
2532
2533   s->prev = current_saved_scope;
2534   s->old_bindings = old_bindings;
2535   current_saved_scope = s;
2536
2537   push_obstacks (&permanent_obstack, &permanent_obstack);
2538 }
2539
2540 void
2541 push_to_top_level ()
2542 {
2543   maybe_push_to_top_level (0);
2544 }
2545
2546 void
2547 pop_from_top_level ()
2548 {
2549   extern int current_lang_stacksize;
2550   struct saved_scope *s = current_saved_scope;
2551   tree t;
2552
2553   /* Clear out class-level bindings cache.  */
2554   if (previous_class_type)
2555     invalidate_class_lookup_cache ();
2556
2557   pop_obstacks ();
2558
2559   current_binding_level = s->old_binding_level;
2560   current_saved_scope = s->prev;
2561   for (t = s->old_bindings; t; )
2562     {
2563       tree save = t;
2564       tree id = TREE_VEC_ELT (t, 0);
2565       if (id)
2566         {
2567           SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
2568           IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
2569           IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
2570         }
2571       t = TREE_CHAIN (t);
2572       TREE_CHAIN (save) = free_binding_vecs;
2573       free_binding_vecs = save;
2574     }
2575   current_namespace = s->old_namespace;
2576   current_class_name = s->class_name;
2577   current_class_type = s->class_type;
2578   current_access_specifier = s->access_specifier;
2579   current_function_decl = s->function_decl;
2580   class_binding_level = s->class_bindings;
2581   free (current_lang_base);
2582   current_lang_base = s->lang_base;
2583   current_lang_stack = s->lang_stack;
2584   current_lang_name = s->lang_name;
2585   current_lang_stacksize = s->lang_stacksize;
2586   if (current_lang_name == lang_name_cplusplus)
2587     strict_prototype = strict_prototypes_lang_cplusplus;
2588   else if (current_lang_name == lang_name_c)
2589     strict_prototype = strict_prototypes_lang_c;
2590   minimal_parse_mode = s->minimal_parse_mode;
2591   last_function_parms = s->last_function_parms;
2592   current_template_parms = s->template_parms;
2593   processing_template_decl = s->processing_template_decl;
2594   previous_class_type = s->previous_class_type;
2595   previous_class_values = s->previous_class_values;
2596   processing_specialization = s->processing_specialization;
2597   processing_explicit_instantiation = s->processing_explicit_instantiation;
2598   class_cache_firstobj = s->class_cache_firstobj;
2599
2600   free (s);
2601
2602   pop_cp_function_context (NULL_TREE);
2603 }
2604 \f
2605 /* Push a definition of struct, union or enum tag "name".
2606    into binding_level "b".   "type" should be the type node, 
2607    We assume that the tag "name" is not already defined.
2608
2609    Note that the definition may really be just a forward reference.
2610    In that case, the TYPE_SIZE will be a NULL_TREE.
2611
2612    C++ gratuitously puts all these tags in the name space.  */
2613
2614 /* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2615    record the shadowed value for this binding contour.  TYPE is
2616    the type that ID maps to.  */
2617
2618 static void
2619 set_identifier_type_value_with_scope (id, type, b)
2620      tree id;
2621      tree type;
2622      struct binding_level *b;
2623 {
2624   if (!b->namespace_p)
2625     {
2626       /* Shadow the marker, not the real thing, so that the marker
2627          gets restored later. */
2628       tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
2629       b->type_shadowed
2630         = tree_cons (id, old_type_value, b->type_shadowed);
2631     }
2632   else
2633     {
2634       tree binding = binding_for_name (id, current_namespace);
2635       BINDING_TYPE (binding) = type;
2636       /* Store marker instead of real type. */
2637       type = global_type_node;
2638     }
2639   SET_IDENTIFIER_TYPE_VALUE (id, type);
2640 }
2641
2642 /* As set_identifier_type_value_with_scope, but using current_binding_level.  */
2643
2644 void
2645 set_identifier_type_value (id, type)
2646      tree id;
2647      tree type;
2648 {
2649   set_identifier_type_value_with_scope (id, type, current_binding_level);
2650 }
2651
2652 /* Return the type associated with id. */
2653
2654 tree
2655 identifier_type_value (id)
2656      tree id;
2657 {
2658   /* There is no type with that name, anywhere. */
2659   if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2660     return NULL_TREE;
2661   /* This is not the type marker, but the real thing. */
2662   if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2663     return REAL_IDENTIFIER_TYPE_VALUE (id);
2664   /* Have to search for it. It must be on the global level, now.
2665      Ask lookup_name not to return non-types. */
2666   id = lookup_name_real (id, 2, 1, 0);
2667   if (id)
2668     return TREE_TYPE (id);
2669   return NULL_TREE;
2670 }
2671
2672 /* Pop off extraneous binding levels left over due to syntax errors.
2673
2674    We don't pop past namespaces, as they might be valid.  */
2675
2676 void
2677 pop_everything ()
2678 {
2679 #ifdef DEBUG_CP_BINDING_LEVELS
2680   fprintf (stderr, "XXX entering pop_everything ()\n");
2681 #endif
2682   while (!toplevel_bindings_p ())
2683     {
2684       if (current_binding_level->parm_flag == 2)
2685         pop_nested_class ();
2686       else
2687         poplevel (0, 0, 0);
2688     }
2689 #ifdef DEBUG_CP_BINDING_LEVELS
2690   fprintf (stderr, "XXX leaving pop_everything ()\n");
2691 #endif
2692 }
2693
2694 /* The type TYPE is being declared.  If it is a class template, or a
2695    specialization of a class template, do any processing required and
2696    perform error-checking.  If IS_FRIEND is non-zero, this TYPE is
2697    being declared a friend.  B is the binding level at which this TYPE
2698    should be bound.
2699
2700    Returns the TYPE_DECL for TYPE, which may have been altered by this
2701    processing.  */
2702
2703 static tree 
2704 maybe_process_template_type_declaration (type, globalize, b)
2705      tree type;
2706      int globalize;
2707      struct binding_level* b;
2708 {
2709   tree decl = TYPE_NAME (type);
2710  
2711   if (processing_template_parmlist)
2712     /* You can't declare a new template type in a template parameter
2713        list.  But, you can declare a non-template type:
2714        
2715          template <class A*> struct S;
2716        
2717        is a forward-declaration of `A'.  */
2718     ;
2719   else 
2720     {
2721       maybe_check_template_type (type);
2722
2723       my_friendly_assert (IS_AGGR_TYPE (type) 
2724                           || TREE_CODE (type) == ENUMERAL_TYPE, 0);
2725                           
2726                           
2727       if (processing_template_decl)
2728         {
2729           /* This may change after the call to
2730              push_template_decl_real, but we want the original value.  */
2731           tree name = DECL_NAME (decl);
2732
2733           decl = push_template_decl_real (decl, globalize);
2734           /* If the current binding level is the binding level for the
2735              template parameters (see the comment in
2736              begin_template_parm_list) and the enclosing level is a class
2737              scope, and we're not looking at a friend, push the
2738              declaration of the member class into the class scope.  In the
2739              friend case, push_template_decl will already have put the
2740              friend into global scope, if appropriate.  */
2741           if (TREE_CODE (type) != ENUMERAL_TYPE
2742               && !globalize && b->pseudo_global
2743               && b->level_chain->parm_flag == 2)
2744             {
2745               finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
2746               /* Put this tag on the list of tags for the class, since
2747                  that won't happen below because B is not the class
2748                  binding level, but is instead the pseudo-global level.  */
2749               b->level_chain->tags = 
2750                 saveable_tree_cons (name, type, b->level_chain->tags);
2751               if (TYPE_SIZE (current_class_type) == NULL_TREE)
2752                 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2753             }
2754         }
2755     }
2756
2757   return decl;
2758 }
2759
2760 /* Push a tag name NAME for struct/class/union/enum type TYPE.
2761    Normally put it into the inner-most non-tag-transparent scope,
2762    but if GLOBALIZE is true, put it in the inner-most non-class scope.
2763    The latter is needed for implicit declarations.  */
2764
2765 void
2766 pushtag (name, type, globalize)
2767      tree name, type;
2768      int globalize;
2769 {
2770   register struct binding_level *b;
2771
2772   b = current_binding_level;
2773   while (b->tag_transparent
2774          || (globalize && b->parm_flag == 2))
2775     b = b->level_chain;
2776
2777   if (toplevel_bindings_p ())
2778     b->tags = perm_tree_cons (name, type, b->tags);
2779   else
2780     b->tags = saveable_tree_cons (name, type, b->tags);
2781
2782   if (name)
2783     {
2784       /* Do C++ gratuitous typedefing.  */
2785       if (IDENTIFIER_TYPE_VALUE (name) != type)
2786         {
2787           register tree d = NULL_TREE;
2788           int in_class = 0;
2789           tree context;
2790
2791           context = type ? TYPE_CONTEXT (type) : NULL_TREE;
2792           if (! context)
2793             {
2794               tree cs = current_scope ();
2795
2796               if (! globalize)
2797                 context = cs;
2798               else if (cs != NULL_TREE 
2799                        && TREE_CODE_CLASS (TREE_CODE (cs)) == 't')
2800                 /* When declaring a friend class of a local class, we want
2801                    to inject the newly named class into the scope
2802                    containing the local class, not the namespace scope.  */
2803                 context = hack_decl_function_context (get_type_decl (cs));
2804             }
2805           if (!context)
2806             context = current_namespace;
2807
2808           if ((b->pseudo_global && b->level_chain->parm_flag == 2)
2809               || b->parm_flag == 2)
2810             in_class = 1;
2811
2812           d = build_decl (TYPE_DECL, name, type);
2813           if (current_lang_name == lang_name_java)
2814             TYPE_FOR_JAVA (type) = 1;
2815           SET_DECL_ARTIFICIAL (d);
2816           if (! in_class)
2817             set_identifier_type_value_with_scope (name, type, b);
2818
2819           TYPE_NAME (type) = d;
2820           DECL_CONTEXT (d) = FROB_CONTEXT (context);
2821
2822           d = maybe_process_template_type_declaration (type,
2823                                                        globalize, b);
2824
2825           if (b->parm_flag == 2)
2826             {
2827               if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
2828                 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2829                    class.  But if it's a member template class, we
2830                    want the TEMPLATE_DECL, not the TYPE_DECL, so this
2831                    is done later.  */
2832                 finish_member_declaration (d);
2833               else
2834                 pushdecl_class_level (d);
2835             }
2836           else
2837             d = pushdecl_with_scope (d, b);
2838
2839           if (ANON_AGGRNAME_P (name))
2840             DECL_IGNORED_P (d) = 1;
2841
2842           TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2843           DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
2844           if (!uses_template_parms (type))
2845             DECL_ASSEMBLER_NAME (d)
2846               = get_identifier (build_overload_name (type, 1, 1));
2847         }
2848       if (b->parm_flag == 2)
2849         {
2850           if (TYPE_SIZE (current_class_type) == NULL_TREE)
2851             CLASSTYPE_TAGS (current_class_type) = b->tags;
2852         }
2853     }
2854
2855   if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2856     /* Use the canonical TYPE_DECL for this node.  */
2857     TYPE_STUB_DECL (type) = TYPE_NAME (type);
2858   else
2859     {
2860       /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2861          will be the tagged type we just added to the current
2862          binding level.  This fake NULL-named TYPE_DECL node helps
2863          dwarfout.c to know when it needs to output a
2864          representation of a tagged type, and it also gives us a
2865          convenient place to record the "scope start" address for
2866          the tagged type.  */
2867
2868       tree d = build_decl (TYPE_DECL, NULL_TREE, type);
2869       TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2870     }
2871 }
2872
2873 /* Counter used to create anonymous type names.  */
2874
2875 static int anon_cnt = 0;
2876
2877 /* Return an IDENTIFIER which can be used as a name for
2878    anonymous structs and unions.  */
2879
2880 tree
2881 make_anon_name ()
2882 {
2883   char buf[32];
2884
2885   sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2886   return get_identifier (buf);
2887 }
2888
2889 /* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2890    This keeps dbxout from getting confused.  */
2891
2892 void
2893 clear_anon_tags ()
2894 {
2895   register struct binding_level *b;
2896   register tree tags;
2897   static int last_cnt = 0;
2898
2899   /* Fast out if no new anon names were declared.  */
2900   if (last_cnt == anon_cnt)
2901     return;
2902
2903   b = current_binding_level;
2904   while (b->tag_transparent)
2905     b = b->level_chain;
2906   tags = b->tags;
2907   while (tags)
2908     {
2909       /* A NULL purpose means we have already processed all tags
2910          from here to the end of the list.  */
2911       if (TREE_PURPOSE (tags) == NULL_TREE)
2912         break;
2913       if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2914         TREE_PURPOSE (tags) = NULL_TREE;
2915       tags = TREE_CHAIN (tags);
2916     }
2917   last_cnt = anon_cnt;
2918 }
2919 \f
2920 /* Subroutine of duplicate_decls: return truthvalue of whether
2921    or not types of these decls match.
2922
2923    For C++, we must compare the parameter list so that `int' can match
2924    `int&' in a parameter position, but `int&' is not confused with
2925    `const int&'.  */
2926
2927 int
2928 decls_match (newdecl, olddecl)
2929      tree newdecl, olddecl;
2930 {
2931   int types_match;
2932
2933   if (newdecl == olddecl)
2934     return 1;
2935
2936   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
2937     /* If the two DECLs are not even the same kind of thing, we're not
2938        interested in their types.  */
2939     return 0;
2940
2941   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2942     {
2943       tree f1 = TREE_TYPE (newdecl);
2944       tree f2 = TREE_TYPE (olddecl);
2945       tree p1 = TYPE_ARG_TYPES (f1);
2946       tree p2 = TYPE_ARG_TYPES (f2);
2947
2948       if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl)
2949           && ! (DECL_LANGUAGE (newdecl) == lang_c
2950                 && DECL_LANGUAGE (olddecl) == lang_c))
2951         return 0;
2952
2953       /* When we parse a static member function definition,
2954          we put together a FUNCTION_DECL which thinks its type
2955          is METHOD_TYPE.  Change that to FUNCTION_TYPE, and
2956          proceed.  */
2957       if (TREE_CODE (f1) == METHOD_TYPE && DECL_STATIC_FUNCTION_P (olddecl))
2958         revert_static_member_fn (&newdecl, &f1, &p1);
2959       else if (TREE_CODE (f2) == METHOD_TYPE
2960                && DECL_STATIC_FUNCTION_P (newdecl))
2961         revert_static_member_fn (&olddecl, &f2, &p2);
2962
2963       /* Here we must take care of the case where new default
2964          parameters are specified.  Also, warn if an old
2965          declaration becomes ambiguous because default
2966          parameters may cause the two to be ambiguous.  */
2967       if (TREE_CODE (f1) != TREE_CODE (f2))
2968         {
2969           if (TREE_CODE (f1) == OFFSET_TYPE)
2970             cp_compiler_error ("`%D' redeclared as member function", newdecl);
2971           else
2972             cp_compiler_error ("`%D' redeclared as non-member function", newdecl);
2973           return 0;
2974         }
2975
2976       if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
2977         {
2978           if (! strict_prototypes_lang_c && DECL_LANGUAGE (olddecl) == lang_c
2979               && p2 == NULL_TREE)
2980             {
2981               types_match = self_promoting_args_p (p1);
2982               if (p1 == void_list_node)
2983                 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2984             }
2985           else if (!strict_prototypes_lang_c && DECL_LANGUAGE (olddecl)==lang_c
2986                    && DECL_LANGUAGE (newdecl) == lang_c && p1 == NULL_TREE)
2987             {
2988               types_match = self_promoting_args_p (p2);
2989               TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2990             }
2991           else
2992             types_match = compparms (p1, p2);
2993         }
2994       else
2995         types_match = 0;
2996     }
2997   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2998     {
2999       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3000                                 DECL_TEMPLATE_PARMS (olddecl)))
3001         return 0;
3002       
3003       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3004         types_match = 1;
3005       else
3006         types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
3007                                    DECL_TEMPLATE_RESULT (newdecl));
3008     }
3009   else
3010     {
3011       if (TREE_TYPE (newdecl) == error_mark_node)
3012         types_match = TREE_TYPE (olddecl) == error_mark_node;
3013       else if (TREE_TYPE (olddecl) == NULL_TREE)
3014         types_match = TREE_TYPE (newdecl) == NULL_TREE;
3015       else if (TREE_TYPE (newdecl) == NULL_TREE)
3016         types_match = 0;
3017       else
3018         types_match = comptypes (TREE_TYPE (newdecl),
3019                                  TREE_TYPE (olddecl),
3020                                  COMPARE_REDECLARATION);
3021     }
3022
3023   return types_match;
3024 }
3025
3026 /* If NEWDECL is `static' and an `extern' was seen previously,
3027    warn about it.  (OLDDECL may be NULL_TREE; NAME contains
3028    information about previous usage as an `extern'.)
3029
3030    Note that this does not apply to the C++ case of declaring
3031    a variable `extern const' and then later `const'.
3032
3033    Don't complain about built-in functions, since they are beyond
3034    the user's control.  */
3035
3036 static void
3037 warn_extern_redeclared_static (newdecl, olddecl)
3038      tree newdecl, olddecl;
3039 {
3040   tree name;
3041
3042   static const char *explicit_extern_static_warning
3043     = "`%D' was declared `extern' and later `static'";
3044   static const char *implicit_extern_static_warning
3045     = "`%D' was declared implicitly `extern' and later `static'";
3046
3047   if (TREE_CODE (newdecl) == TYPE_DECL)
3048     return;
3049
3050   name = DECL_ASSEMBLER_NAME (newdecl);
3051   if (TREE_PUBLIC (name) && DECL_THIS_STATIC (newdecl))
3052     {
3053       /* It's okay to redeclare an ANSI built-in function as static,
3054          or to declare a non-ANSI built-in function as anything.  */
3055       if (! (TREE_CODE (newdecl) == FUNCTION_DECL
3056              && olddecl != NULL_TREE
3057              && TREE_CODE (olddecl) == FUNCTION_DECL
3058              && DECL_ARTIFICIAL (olddecl)))
3059         {
3060           cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
3061                       ? implicit_extern_static_warning
3062                       : explicit_extern_static_warning, newdecl);
3063           if (olddecl != NULL_TREE)
3064             cp_pedwarn_at ("previous declaration of `%D'", olddecl);
3065         }
3066     }
3067 }
3068
3069 /* Handle when a new declaration NEWDECL has the same name as an old
3070    one OLDDECL in the same binding contour.  Prints an error message
3071    if appropriate.
3072
3073    If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
3074    Otherwise, return 0.  */
3075
3076 int
3077 duplicate_decls (newdecl, olddecl)
3078      tree newdecl, olddecl;
3079 {
3080   extern struct obstack permanent_obstack;
3081   unsigned olddecl_uid = DECL_UID (olddecl);
3082   int olddecl_friend = 0, types_match = 0;
3083   int new_defines_function = 0;
3084
3085   if (newdecl == olddecl)
3086     return 1;
3087
3088   types_match = decls_match (newdecl, olddecl);
3089
3090   /* If either the type of the new decl or the type of the old decl is an
3091      error_mark_node, then that implies that we have already issued an
3092      error (earlier) for some bogus type specification, and in that case,
3093      it is rather pointless to harass the user with yet more error message
3094      about the same declaration, so just pretend the types match here.  */
3095   if (TREE_TYPE (newdecl) == error_mark_node
3096       || TREE_TYPE (olddecl) == error_mark_node)
3097     types_match = 1;
3098  
3099   /* Check for redeclaration and other discrepancies. */
3100   if (TREE_CODE (olddecl) == FUNCTION_DECL
3101       && DECL_ARTIFICIAL (olddecl))
3102     {
3103       if (TREE_CODE (newdecl) != FUNCTION_DECL)
3104         {
3105           /* If you declare a built-in or predefined function name as static,
3106              the old definition is overridden, but optionally warn this was a
3107              bad choice of name.  */
3108           if (! TREE_PUBLIC (newdecl))
3109             {
3110               if (warn_shadow)
3111                 cp_warning ("shadowing %s function `%#D'",
3112                             DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3113                             olddecl);
3114               /* Discard the old built-in function.  */
3115               return 0;
3116             }
3117           /* If the built-in is not ansi, then programs can override
3118              it even globally without an error.  */
3119           else if (! DECL_BUILT_IN (olddecl))
3120             cp_warning ("library function `%#D' redeclared as non-function `%#D'",
3121                         olddecl, newdecl);
3122           else
3123             {
3124               cp_error ("declaration of `%#D'", newdecl);
3125               cp_error ("conflicts with built-in declaration `%#D'",
3126                         olddecl);
3127             }
3128           return 0;
3129         }
3130       else if (!types_match)
3131         {
3132           if ((DECL_LANGUAGE (newdecl) == lang_c
3133                && DECL_LANGUAGE (olddecl) == lang_c)
3134               || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3135                             TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3136             {
3137               /* A near match; override the builtin.  */
3138
3139               if (TREE_PUBLIC (newdecl))
3140                 {
3141                   cp_warning ("new declaration `%#D'", newdecl);
3142                   cp_warning ("ambiguates built-in declaration `%#D'",
3143                               olddecl);
3144                 }
3145               else if (warn_shadow)
3146                 cp_warning ("shadowing %s function `%#D'",
3147                             DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3148                             olddecl);
3149             }
3150           else
3151             /* Discard the old built-in function.  */
3152             return 0;
3153         }
3154     }
3155   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
3156     {
3157       if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
3158            && TREE_CODE (newdecl) != TYPE_DECL
3159            && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
3160                  && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
3161           || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
3162               && TREE_CODE (olddecl) != TYPE_DECL
3163               && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
3164                     && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
3165                         == TYPE_DECL))))
3166         {
3167           /* We do nothing special here, because C++ does such nasty
3168              things with TYPE_DECLs.  Instead, just let the TYPE_DECL
3169              get shadowed, and know that if we need to find a TYPE_DECL
3170              for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3171              slot of the identifier.  */
3172           return 0;
3173         }
3174
3175       if ((TREE_CODE (newdecl) == FUNCTION_DECL
3176            && DECL_FUNCTION_TEMPLATE_P (olddecl))
3177           || (TREE_CODE (olddecl) == FUNCTION_DECL
3178               && DECL_FUNCTION_TEMPLATE_P (newdecl)))
3179         return 0;
3180
3181       cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
3182       if (TREE_CODE (olddecl) == TREE_LIST)
3183         olddecl = TREE_VALUE (olddecl);
3184       cp_error_at ("previous declaration of `%#D'", olddecl);
3185
3186       /* New decl is completely inconsistent with the old one =>
3187          tell caller to replace the old one.  */
3188
3189       return 0;
3190     }
3191   else if (!types_match)
3192     {
3193       if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl))
3194         /* These are certainly not duplicate declarations; they're
3195            from different scopes.  */
3196         return 0;
3197
3198       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3199         {
3200           /* The name of a class template may not be declared to refer to
3201              any other template, class, function, object, namespace, value,
3202              or type in the same scope.  */
3203           if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
3204               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3205             {
3206               cp_error ("declaration of template `%#D'", newdecl);
3207               cp_error_at ("conflicts with previous declaration `%#D'",
3208                            olddecl);
3209             }
3210           else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
3211                    && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3212                    && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
3213                                  TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
3214                    && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3215                                            DECL_TEMPLATE_PARMS (olddecl)))
3216             {
3217               cp_error ("new declaration `%#D'", newdecl);
3218               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3219             }
3220           return 0;
3221         }
3222       if (TREE_CODE (newdecl) == FUNCTION_DECL)
3223         {
3224           if (DECL_LANGUAGE (newdecl) == lang_c
3225               && DECL_LANGUAGE (olddecl) == lang_c)
3226             {
3227               cp_error ("declaration of C function `%#D' conflicts with",
3228                         newdecl);
3229               cp_error_at ("previous declaration `%#D' here", olddecl);
3230             }
3231           else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3232                               TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3233             {
3234               cp_error ("new declaration `%#D'", newdecl);
3235               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3236             }
3237           else
3238             return 0;
3239         }
3240
3241       /* Already complained about this, so don't do so again.  */
3242       else if (current_class_type == NULL_TREE
3243           || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3244         {
3245           cp_error ("conflicting types for `%#D'", newdecl);
3246           cp_error_at ("previous declaration as `%#D'", olddecl);
3247         }
3248     }
3249   else if (TREE_CODE (newdecl) == FUNCTION_DECL 
3250             && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3251                  && (!DECL_TEMPLATE_INFO (newdecl)
3252                      || (DECL_TI_TEMPLATE (newdecl) 
3253                          != DECL_TI_TEMPLATE (olddecl))))
3254                 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3255                     && (!DECL_TEMPLATE_INFO (olddecl)
3256                         || (DECL_TI_TEMPLATE (olddecl) 
3257                             != DECL_TI_TEMPLATE (newdecl))))))
3258     /* It's OK to have a template specialization and a non-template
3259        with the same type, or to have specializations of two
3260        different templates with the same type.  Note that if one is a
3261        specialization, and the other is an instantiation of the same
3262        template, that we do not exit at this point.  That situation
3263        can occur if we instantiate a template class, and then
3264        specialize one of its methods.  This situation is legal, but
3265        the declarations must be merged in the usual way.  */
3266     return 0;
3267   else if (TREE_CODE (newdecl) == FUNCTION_DECL 
3268            && ((DECL_TEMPLATE_INSTANTIATION (olddecl) 
3269                 && !DECL_USE_TEMPLATE (newdecl))
3270                || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3271                    && !DECL_USE_TEMPLATE (olddecl))))
3272     /* One of the declarations is a template instantiation, and the
3273        other is not a template at all.  That's OK.  */
3274     return 0;
3275   else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3276            && DECL_NAMESPACE_ALIAS (newdecl)
3277            && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3278     /* Redeclaration of namespace alias, ignore it. */
3279     return 1;
3280   else
3281     {
3282       const char *errmsg = redeclaration_error_message (newdecl, olddecl);
3283       if (errmsg)
3284         {
3285           cp_error (errmsg, newdecl);
3286           if (DECL_NAME (olddecl) != NULL_TREE)
3287             cp_error_at ((DECL_INITIAL (olddecl)
3288                           && namespace_bindings_p ())
3289                          ? "`%#D' previously defined here"
3290                          : "`%#D' previously declared here", olddecl);
3291         }
3292       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3293                && DECL_INITIAL (olddecl) != NULL_TREE
3294                && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3295                && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3296         {
3297           /* Prototype decl follows defn w/o prototype.  */
3298           cp_warning_at ("prototype for `%#D'", newdecl);
3299           cp_warning_at ("follows non-prototype definition here", olddecl);
3300         }
3301       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3302                && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
3303         {
3304           /* extern "C" int foo ();
3305              int foo () { bar (); }
3306              is OK.  */
3307           if (current_lang_stack == current_lang_base)
3308             DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3309           else
3310             {
3311               cp_error_at ("previous declaration of `%#D' with %L linkage",
3312                            olddecl, DECL_LANGUAGE (olddecl));
3313               cp_error ("conflicts with new declaration with %L linkage",
3314                         DECL_LANGUAGE (newdecl));
3315             }
3316         }
3317
3318       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
3319         ;
3320       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
3321         {
3322           tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3323           tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3324           int i = 1;
3325
3326           if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3327             t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
3328         
3329           for (; t1 && t1 != void_list_node;
3330                t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3331             if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3332               {
3333                 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3334                                            TREE_PURPOSE (t2)))
3335                   {
3336                     if (pedantic)
3337                       {
3338                         cp_pedwarn ("default argument given for parameter %d of `%#D'",
3339                                     i, newdecl);
3340                         cp_pedwarn_at ("after previous specification in `%#D'",
3341                                        olddecl);
3342                       }
3343                   }
3344                 else
3345                   {
3346                     cp_error ("default argument given for parameter %d of `%#D'",
3347                               i, newdecl);
3348                     cp_error_at ("after previous specification in `%#D'",
3349                                  olddecl);
3350                   }
3351               }
3352
3353           if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
3354               && TREE_ADDRESSABLE (olddecl) && warn_inline)
3355             {
3356               cp_warning ("`%#D' was used before it was declared inline",
3357                           newdecl);
3358               cp_warning_at ("previous non-inline declaration here",
3359                              olddecl);
3360             }
3361         }
3362     }
3363
3364   /* If new decl is `static' and an `extern' was seen previously,
3365      warn about it.  */
3366   warn_extern_redeclared_static (newdecl, olddecl);
3367
3368   /* We have committed to returning 1 at this point.  */
3369   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3370     {
3371       /* Now that functions must hold information normally held
3372          by field decls, there is extra work to do so that
3373          declaration information does not get destroyed during
3374          definition.  */
3375       if (DECL_VINDEX (olddecl))
3376         DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
3377       if (DECL_CONTEXT (olddecl))
3378         DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
3379       if (DECL_CLASS_CONTEXT (olddecl))
3380         DECL_CLASS_CONTEXT (newdecl) = DECL_CLASS_CONTEXT (olddecl);
3381       if (DECL_PENDING_INLINE_INFO (newdecl) == (struct pending_inline *)0)
3382         DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
3383       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3384       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
3385       DECL_ABSTRACT_VIRTUAL_P (newdecl) |= DECL_ABSTRACT_VIRTUAL_P (olddecl);
3386       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
3387       DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
3388       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
3389       
3390       /* Optionally warn about more than one declaration for the same
3391          name, but don't warn about a function declaration followed by a
3392          definition.  */
3393       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3394           && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3395           /* Don't warn about extern decl followed by definition. */
3396           && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3397           /* Don't warn about friends, let add_friend take care of it. */
3398           && ! DECL_FRIEND_P (newdecl))
3399         {
3400           cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3401           cp_warning_at ("previous declaration of `%D'", olddecl);
3402         }
3403     }
3404
3405   /* Deal with C++: must preserve virtual function table size.  */
3406   if (TREE_CODE (olddecl) == TYPE_DECL)
3407     {
3408       register tree newtype = TREE_TYPE (newdecl);
3409       register tree oldtype = TREE_TYPE (olddecl);
3410
3411       if (newtype != error_mark_node && oldtype != error_mark_node
3412           && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3413         {
3414           CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3415           CLASSTYPE_FRIEND_CLASSES (newtype)
3416             = CLASSTYPE_FRIEND_CLASSES (oldtype);
3417         }
3418     }
3419
3420   /* Copy all the DECL_... slots specified in the new decl
3421      except for any that we copy here from the old type.  */
3422   DECL_MACHINE_ATTRIBUTES (newdecl) 
3423     = merge_machine_decl_attributes (olddecl, newdecl);
3424
3425   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3426     {
3427       if (! duplicate_decls (DECL_TEMPLATE_RESULT (newdecl),
3428                              DECL_TEMPLATE_RESULT (olddecl)))
3429         cp_error ("invalid redeclaration of %D", newdecl);
3430       TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
3431       DECL_TEMPLATE_SPECIALIZATIONS (olddecl) 
3432         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3433                    DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
3434  
3435       return 1;
3436     }
3437     
3438   if (types_match)
3439     {
3440       /* Automatically handles default parameters.  */
3441       tree oldtype = TREE_TYPE (olddecl);
3442       tree newtype;
3443
3444       /* Make sure we put the new type in the same obstack as the old one.  */
3445       if (oldtype)
3446         push_obstacks (TYPE_OBSTACK (oldtype), TYPE_OBSTACK (oldtype));
3447       else
3448         {
3449           push_obstacks_nochange ();
3450           end_temporary_allocation ();
3451         }
3452
3453       /* Merge the data types specified in the two decls.  */
3454       newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3455
3456       if (TREE_CODE (newdecl) == VAR_DECL)
3457         DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3458       /* Do this after calling `common_type' so that default
3459          parameters don't confuse us.  */
3460       else if (TREE_CODE (newdecl) == FUNCTION_DECL
3461           && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3462               != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3463         {
3464           TREE_TYPE (newdecl) = build_exception_variant (newtype,
3465                                                          TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
3466           TREE_TYPE (olddecl) = build_exception_variant (newtype,
3467                                                          TYPE_RAISES_EXCEPTIONS (oldtype));
3468
3469           if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3470               && DECL_SOURCE_LINE (olddecl) != 0
3471               && flag_exceptions
3472               && ! compexcepttypes (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
3473             {
3474               cp_pedwarn ("declaration of `%D' throws different exceptions",
3475                         newdecl);
3476               cp_pedwarn_at ("previous declaration here", olddecl);
3477             }
3478         }
3479       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3480
3481       /* Lay the type out, unless already done.  */
3482       if (! same_type_p (newtype, oldtype)
3483           && TREE_TYPE (newdecl) != error_mark_node
3484           && !(processing_template_decl && uses_template_parms (newdecl)))
3485         layout_type (TREE_TYPE (newdecl));
3486
3487       if ((TREE_CODE (newdecl) == VAR_DECL
3488            || TREE_CODE (newdecl) == PARM_DECL
3489            || TREE_CODE (newdecl) == RESULT_DECL
3490            || TREE_CODE (newdecl) == FIELD_DECL
3491            || TREE_CODE (newdecl) == TYPE_DECL)
3492           && !(processing_template_decl && uses_template_parms (newdecl)))
3493         layout_decl (newdecl, 0);
3494
3495       /* Merge the type qualifiers.  */
3496       if (TREE_READONLY (newdecl))
3497         TREE_READONLY (olddecl) = 1;
3498       if (TREE_THIS_VOLATILE (newdecl))
3499         TREE_THIS_VOLATILE (olddecl) = 1;
3500
3501       /* Merge the initialization information.  */
3502       if (DECL_INITIAL (newdecl) == NULL_TREE
3503           && DECL_INITIAL (olddecl) != NULL_TREE)
3504         {
3505           DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3506           DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3507           DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
3508           if (DECL_LANG_SPECIFIC (newdecl)
3509               && DECL_LANG_SPECIFIC (olddecl))
3510             DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
3511         }
3512
3513       /* Merge the section attribute.
3514          We want to issue an error if the sections conflict but that must be
3515          done later in decl_attributes since we are called before attributes
3516          are assigned.  */
3517       if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3518         DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3519
3520       /* Keep the old rtl since we can safely use it, unless it's the
3521          call to abort() used for abstract virtuals.  */
3522       if ((DECL_LANG_SPECIFIC (olddecl)
3523            && !DECL_ABSTRACT_VIRTUAL_P (olddecl))
3524           || DECL_RTL (olddecl) != DECL_RTL (abort_fndecl))
3525         DECL_RTL (newdecl) = DECL_RTL (olddecl);
3526
3527       pop_obstacks ();
3528     }
3529   /* If cannot merge, then use the new type and qualifiers,
3530      and don't preserve the old rtl.  */
3531   else
3532     {
3533       /* Clean out any memory we had of the old declaration.  */
3534       tree oldstatic = value_member (olddecl, static_aggregates);
3535       if (oldstatic)
3536         TREE_VALUE (oldstatic) = error_mark_node;
3537
3538       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3539       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3540       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3541       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3542     }
3543
3544   /* Merge the storage class information.  */
3545   DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
3546   DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
3547   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3548   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3549   if (! DECL_EXTERNAL (olddecl))
3550     DECL_EXTERNAL (newdecl) = 0;
3551   
3552   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
3553     {
3554       DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3555       DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
3556       DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
3557       DECL_TEMPLATE_INSTANTIATED (newdecl) 
3558         |= DECL_TEMPLATE_INSTANTIATED (olddecl);
3559       /* Don't really know how much of the language-specific
3560          values we should copy from old to new.  */
3561       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3562       DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3563       DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
3564       DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3565       olddecl_friend = DECL_FRIEND_P (olddecl);
3566
3567       /* Only functions have DECL_BEFRIENDING_CLASSES.  */
3568       if (TREE_CODE (newdecl) == FUNCTION_DECL
3569           || DECL_FUNCTION_TEMPLATE_P (newdecl))
3570         DECL_BEFRIENDING_CLASSES (newdecl)
3571           = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3572                      DECL_BEFRIENDING_CLASSES (olddecl));
3573     }
3574
3575   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3576     {
3577       if (DECL_TEMPLATE_INSTANTIATION (olddecl) 
3578           && !DECL_TEMPLATE_INSTANTIATION (newdecl)) 
3579         {
3580           /* If newdecl is not a specialization, then it is not a
3581              template-related function at all.  And that means that we
3582              shoud have exited above, returning 0.  */
3583           my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3584                               0);
3585
3586           if (TREE_USED (olddecl)) 
3587             /* From [temp.expl.spec]:
3588                
3589                If a template, a member template or the member of a class
3590                template is explicitly specialized then that
3591                specialization shall be declared before the first use of
3592                that specialization that would cause an implicit
3593                instantiation to take place, in every translation unit in
3594                which such a use occurs.  */
3595             cp_error ("explicit specialization of %D after first use", 
3596                       olddecl);
3597
3598           SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3599         }
3600       DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3601
3602       /* If either decl says `inline', this fn is inline, unless its
3603          definition was passed already.  */
3604       if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3605         DECL_INLINE (olddecl) = 1;
3606       DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3607
3608       if (! types_match)
3609         {
3610           DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3611           DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3612           DECL_RTL (olddecl) = DECL_RTL (newdecl);
3613         }
3614       if (! types_match || new_defines_function)
3615         {
3616           /* These need to be copied so that the names are available.
3617              Note that if the types do match, we'll preserve inline
3618              info and other bits, but if not, we won't.  */
3619           DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3620           DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
3621         }
3622       if (new_defines_function)
3623         /* If defining a function declared with other language
3624            linkage, use the previously declared language linkage.  */
3625         DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3626       else if (types_match)
3627         {
3628           /* If redeclaring a builtin function, and not a definition,
3629              it stays built in.  */
3630           if (DECL_BUILT_IN (olddecl))
3631             {
3632               DECL_BUILT_IN (newdecl) = 1;
3633               DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
3634               /* If we're keeping the built-in definition, keep the rtl,
3635                  regardless of declaration matches.  */
3636               DECL_RTL (newdecl) = DECL_RTL (olddecl);
3637             }
3638           else
3639             DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
3640
3641           DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
3642           if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
3643             /* Previously saved insns go together with
3644                the function's previous definition.  */
3645             DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3646           /* Don't clear out the arguments if we're redefining a function.  */
3647           if (DECL_ARGUMENTS (olddecl))
3648             DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3649         }
3650       if (DECL_LANG_SPECIFIC (olddecl))
3651         DECL_MAIN_VARIANT (newdecl) = DECL_MAIN_VARIANT (olddecl);
3652     }
3653
3654   if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3655     {
3656       NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3657     }
3658
3659   /* Now preserve various other info from the definition.  */
3660   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3661   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3662   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
3663   DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
3664
3665   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3666     {
3667       int function_size;
3668       struct lang_decl *ol = DECL_LANG_SPECIFIC (olddecl);
3669       struct lang_decl *nl = DECL_LANG_SPECIFIC (newdecl);
3670
3671       function_size = sizeof (struct tree_decl);
3672
3673       bcopy ((char *) newdecl + sizeof (struct tree_common),
3674              (char *) olddecl + sizeof (struct tree_common),
3675              function_size - sizeof (struct tree_common));
3676
3677       /* Can we safely free the storage used by newdecl?  */
3678
3679 #define ROUND(x) ((x + obstack_alignment_mask (&permanent_obstack)) \
3680                   & ~ obstack_alignment_mask (&permanent_obstack))
3681
3682       if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3683         {
3684           /* If newdecl is a template instantiation, it is possible that
3685              the following sequence of events has occurred:
3686
3687              o A friend function was declared in a class template.  The
3688              class template was instantiated.  
3689
3690              o The instantiation of the friend declaration was 
3691              recorded on the instantiation list, and is newdecl.  
3692
3693              o Later, however, instantiate_class_template called pushdecl
3694              on the newdecl to perform name injection.  But, pushdecl in
3695              turn called duplicate_decls when it discovered that another
3696              declaration of a global function with the same name already
3697              existed. 
3698
3699              o Here, in duplicate_decls, we decided to clobber newdecl.
3700
3701              If we're going to do that, we'd better make sure that
3702              olddecl, and not newdecl, is on the list of
3703              instantiations so that if we try to do the instantiation
3704              again we won't get the clobbered declaration.  */
3705
3706           tree tmpl = DECL_TI_TEMPLATE (newdecl); 
3707           tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); 
3708
3709           for (; decls; decls = TREE_CHAIN (decls))
3710             if (TREE_VALUE (decls) == newdecl)
3711               TREE_VALUE (decls) = olddecl;
3712         }
3713
3714       if (((char *)newdecl + ROUND (function_size) == (char *)nl
3715            && ((char *)newdecl + ROUND (function_size)
3716                + ROUND (sizeof (struct lang_decl))
3717                == obstack_next_free (&permanent_obstack)))
3718           || ((char *)newdecl + ROUND (function_size)
3719               == obstack_next_free (&permanent_obstack)))
3720         {
3721           DECL_MAIN_VARIANT (newdecl) = olddecl;
3722           DECL_LANG_SPECIFIC (olddecl) = ol;
3723           bcopy ((char *)nl, (char *)ol, sizeof (struct lang_decl));
3724
3725           obstack_free (&permanent_obstack, newdecl);
3726         }
3727       else if (LANG_DECL_PERMANENT (ol) && ol != nl)
3728         {
3729           if (DECL_MAIN_VARIANT (olddecl) == olddecl)
3730             {
3731               /* Save these lang_decls that would otherwise be lost.  */
3732               extern tree free_lang_decl_chain;
3733               tree free_lang_decl = (tree) ol;
3734
3735               if (DECL_LANG_SPECIFIC (olddecl) == ol)
3736                 abort ();
3737
3738               TREE_CHAIN (free_lang_decl) = free_lang_decl_chain;
3739               free_lang_decl_chain = free_lang_decl;
3740             }
3741           else
3742             {
3743               /* Storage leak.  */;
3744             }
3745         }
3746     }
3747   else
3748     {
3749       bcopy ((char *) newdecl + sizeof (struct tree_common),
3750              (char *) olddecl + sizeof (struct tree_common),
3751              sizeof (struct tree_decl) - sizeof (struct tree_common)
3752              + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3753     }
3754
3755   DECL_UID (olddecl) = olddecl_uid;
3756   if (olddecl_friend)
3757     DECL_FRIEND_P (olddecl) = 1;
3758
3759   /* NEWDECL contains the merged attribute lists.
3760      Update OLDDECL to be the same.  */
3761   DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3762
3763   return 1;
3764 }
3765
3766 /* Record a decl-node X as belonging to the current lexical scope.
3767    Check for errors (such as an incompatible declaration for the same
3768    name already seen in the same scope).
3769
3770    Returns either X or an old decl for the same name.
3771    If an old decl is returned, it may have been smashed
3772    to agree with what X says.  */
3773
3774 tree
3775 pushdecl (x)
3776      tree x;
3777 {
3778   register tree t;
3779   register tree name = DECL_ASSEMBLER_NAME (x);
3780   int need_new_binding = 1;
3781
3782   if (DECL_TEMPLATE_PARM_P (x))
3783     /* Template parameters have no context; they are not X::T even
3784        when declared within a class or namespace.  */
3785     ;
3786   else
3787     {
3788       if (current_function_decl && x != current_function_decl
3789           /* A local declaration for a function doesn't constitute
3790              nesting.  */
3791           && (TREE_CODE (x) != FUNCTION_DECL || DECL_INITIAL (x))
3792           /* Don't change DECL_CONTEXT of virtual methods.  */
3793           && (TREE_CODE (x) != FUNCTION_DECL || !DECL_VIRTUAL_P (x))
3794           && !DECL_CONTEXT (x))
3795         DECL_CONTEXT (x) = current_function_decl;
3796       if (!DECL_CONTEXT (x))
3797         DECL_CONTEXT (x) = FROB_CONTEXT (current_namespace);
3798     }
3799
3800   /* Type are looked up using the DECL_NAME, as that is what the rest of the
3801      compiler wants to use.  */
3802   if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
3803       || TREE_CODE (x) == NAMESPACE_DECL)
3804     name = DECL_NAME (x);
3805
3806   if (name)
3807     {
3808 #if 0
3809       /* Not needed...see below.  */
3810       char *file;
3811       int line;
3812 #endif
3813       if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3814         name = TREE_OPERAND (name, 0);
3815       
3816       /* Namespace-scoped variables are not found in the current level. */
3817       if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x))
3818         t = namespace_binding (name, DECL_CONTEXT (x));
3819       else
3820         t = lookup_name_current_level (name);
3821       if (t == error_mark_node)
3822         {
3823           /* error_mark_node is 0 for a while during initialization!  */
3824           t = NULL_TREE;
3825           cp_error_at ("`%#D' used prior to declaration", x);
3826         }
3827
3828       else if (t != NULL_TREE)
3829         {
3830 #if 0
3831           /* This is turned off until I have time to do it right (bpk).  */
3832           /* With the code below that uses it...  */
3833           file = DECL_SOURCE_FILE (t);
3834           line = DECL_SOURCE_LINE (t);
3835 #endif
3836           if (TREE_CODE (t) == PARM_DECL)
3837             {
3838               if (DECL_CONTEXT (t) == NULL_TREE)
3839                 fatal ("parse errors have confused me too much");
3840
3841               /* Check for duplicate params.  */
3842               if (duplicate_decls (x, t))
3843                 return t;
3844             }
3845           else if (((TREE_CODE (x) == FUNCTION_DECL && DECL_LANGUAGE (x) == lang_c)
3846                     || DECL_FUNCTION_TEMPLATE_P (x))
3847                    && is_overloaded_fn (t))
3848             /* Don't do anything just yet. */;
3849           else if (t == wchar_decl_node)
3850             {
3851               if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
3852                 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
3853
3854               /* Throw away the redeclaration.  */
3855               return t;
3856             }
3857           else if (TREE_CODE (t) != TREE_CODE (x))
3858             {
3859               if (duplicate_decls (x, t))
3860                 return t;
3861             }
3862           else if (duplicate_decls (x, t))
3863             {
3864 #if 0
3865               /* This is turned off until I have time to do it right (bpk).  */
3866
3867               /* Also warn if they did a prototype with `static' on it, but
3868                  then later left the `static' off.  */
3869               if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
3870                 {
3871                   if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3872                     return t;
3873
3874                   if (extra_warnings)
3875                     {
3876                       cp_warning ("`static' missing from declaration of `%D'",
3877                                   t);
3878                       warning_with_file_and_line (file, line,
3879                                                   "previous declaration of `%s'",
3880                                                   decl_as_string (t, 0));
3881                     }
3882
3883                   /* Now fix things so it'll do what they expect.  */
3884                   if (current_function_decl)
3885                     TREE_PUBLIC (current_function_decl) = 0;
3886                 }
3887               /* Due to interference in memory reclamation (X may be
3888                  obstack-deallocated at this point), we must guard against
3889                  one really special case.  [jason: This should be handled
3890                  by start_function]  */
3891               if (current_function_decl == x)
3892                 current_function_decl = t;
3893 #endif
3894               if (TREE_CODE (t) == TYPE_DECL)
3895                 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
3896               else if (TREE_CODE (t) == FUNCTION_DECL)
3897                 check_default_args (t);
3898
3899               return t;
3900             }
3901           else if (DECL_MAIN_P (x))
3902             {
3903               /* A redeclaration of main, but not a duplicate of the
3904                  previous one. 
3905
3906                  [basic.start.main]
3907
3908                  This function shall not be overloaded.  */
3909               cp_error_at ("invalid redeclaration of `%D'", t);
3910               cp_error ("as `%D'", x);
3911               /* We don't try to push this declaration since that
3912                  causes a crash.  */
3913               return x;
3914             }
3915         }
3916
3917       check_template_shadow (x);
3918
3919       /* If this is a function conjured up by the backend, massage it
3920          so it looks friendly.  */
3921       if (TREE_CODE (x) == FUNCTION_DECL
3922           && ! DECL_LANG_SPECIFIC (x))
3923         {
3924           retrofit_lang_decl (x);
3925           DECL_LANGUAGE (x) = lang_c;
3926         }
3927
3928       if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_FUNCTION_MEMBER_P (x))
3929         {
3930           t = push_overloaded_decl (x, PUSH_LOCAL);
3931           if (t != x || DECL_LANGUAGE (x) == lang_c)
3932             return t;
3933           if (!namespace_bindings_p ())
3934             /* We do not need to create a binding for this name;
3935                push_overloaded_decl will have already done so if
3936                necessary.  */
3937             need_new_binding = 0;
3938         }
3939       else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
3940         return push_overloaded_decl (x, PUSH_GLOBAL);
3941
3942       /* If declaring a type as a typedef, copy the type (unless we're
3943          at line 0), and install this TYPE_DECL as the new type's typedef
3944          name.  See the extensive comment in ../c-decl.c (pushdecl). */
3945       if (TREE_CODE (x) == TYPE_DECL)
3946         {
3947           tree type = TREE_TYPE (x);
3948           if (DECL_SOURCE_LINE (x) == 0)
3949             {
3950               if (TYPE_NAME (type) == 0)
3951                 TYPE_NAME (type) = x;
3952             }
3953           else if (type != error_mark_node && TYPE_NAME (type) != x
3954                    /* We don't want to copy the type when all we're
3955                       doing is making a TYPE_DECL for the purposes of
3956                       inlining.  */
3957                    && (!TYPE_NAME (type) 
3958                        || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
3959             {
3960               push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
3961
3962               DECL_ORIGINAL_TYPE (x) = type;
3963               type = build_type_copy (type);
3964               TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
3965               TYPE_NAME (type) = x;
3966               TREE_TYPE (x) = type;
3967
3968               pop_obstacks ();
3969             }
3970
3971           if (type != error_mark_node
3972               && TYPE_NAME (type)
3973               && TYPE_IDENTIFIER (type))
3974             set_identifier_type_value_with_scope (DECL_NAME (x), type, 
3975                                                   current_binding_level);
3976
3977         }
3978
3979       /* Multiple external decls of the same identifier ought to match.
3980
3981          We get warnings about inline functions where they are defined.
3982          We get warnings about other functions from push_overloaded_decl.
3983          
3984          Avoid duplicate warnings where they are used.  */
3985       if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
3986         {
3987           tree decl;
3988
3989           if (IDENTIFIER_NAMESPACE_VALUE (name) != NULL_TREE
3990               && (DECL_EXTERNAL (IDENTIFIER_NAMESPACE_VALUE (name))
3991                   || TREE_PUBLIC (IDENTIFIER_NAMESPACE_VALUE (name))))
3992             decl = IDENTIFIER_NAMESPACE_VALUE (name);
3993           else
3994             decl = NULL_TREE;
3995
3996           if (decl
3997               /* If different sort of thing, we already gave an error.  */
3998               && TREE_CODE (decl) == TREE_CODE (x)
3999               && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
4000             {
4001               cp_pedwarn ("type mismatch with previous external decl", x);
4002               cp_pedwarn_at ("previous external decl of `%#D'", decl);
4003             }
4004         }
4005
4006       /* This name is new in its binding level.
4007          Install the new declaration and return it.  */
4008       if (namespace_bindings_p ())
4009         {
4010           /* Install a global value.  */
4011
4012           /* If the first global decl has external linkage,
4013              warn if we later see static one.  */
4014           if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
4015             TREE_PUBLIC (name) = 1;
4016
4017           if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
4018                 && t != NULL_TREE))
4019             {
4020               if (TREE_CODE (x) == FUNCTION_DECL)
4021                 my_friendly_assert 
4022                   ((IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
4023                   || (IDENTIFIER_GLOBAL_VALUE (name) == x), 378);
4024               SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
4025             }
4026
4027           /* Don't forget if the function was used via an implicit decl.  */
4028           if (IDENTIFIER_IMPLICIT_DECL (name)
4029               && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
4030             TREE_USED (x) = 1;
4031
4032           /* Don't forget if its address was taken in that way.  */
4033           if (IDENTIFIER_IMPLICIT_DECL (name)
4034               && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
4035             TREE_ADDRESSABLE (x) = 1;
4036
4037           /* Warn about mismatches against previous implicit decl.  */
4038           if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
4039               /* If this real decl matches the implicit, don't complain.  */
4040               && ! (TREE_CODE (x) == FUNCTION_DECL
4041                     && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
4042             cp_warning
4043               ("`%D' was previously implicitly declared to return `int'", x);
4044
4045           /* If new decl is `static' and an `extern' was seen previously,
4046              warn about it.  */
4047           if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
4048             warn_extern_redeclared_static (x, t);
4049         }
4050       else
4051         {
4052           /* Here to install a non-global value.  */
4053           tree oldlocal = IDENTIFIER_VALUE (name);
4054           tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
4055
4056           if (need_new_binding)
4057             {
4058               push_local_binding (name, x, 0);
4059               /* Because push_local_binding will hook X on to the
4060                  current_binding_level's name list, we don't want to
4061                  do that again below.  */
4062               need_new_binding = 0;
4063             }
4064
4065           /* If this is a TYPE_DECL, push it into the type value slot.  */
4066           if (TREE_CODE (x) == TYPE_DECL)
4067             set_identifier_type_value_with_scope (name, TREE_TYPE (x), 
4068                                                   current_binding_level);
4069
4070           /* Clear out any TYPE_DECL shadowed by a namespace so that
4071              we won't think this is a type.  The C struct hack doesn't
4072              go through namespaces.  */
4073           if (TREE_CODE (x) == NAMESPACE_DECL)
4074             set_identifier_type_value_with_scope (name, NULL_TREE, 
4075                                                   current_binding_level);
4076
4077           /* If this is an extern function declaration, see if we
4078              have a global definition or declaration for the function.  */
4079           if (oldlocal == NULL_TREE
4080               && DECL_EXTERNAL (x)
4081               && oldglobal != NULL_TREE
4082               && TREE_CODE (x) == FUNCTION_DECL
4083               && TREE_CODE (oldglobal) == FUNCTION_DECL)
4084             {
4085               /* We have one.  Their types must agree.  */
4086               if (decls_match (x, oldglobal))
4087                 /* OK */;
4088               else
4089                 {
4090                   cp_warning ("extern declaration of `%#D' doesn't match", x);
4091                   cp_warning_at ("global declaration `%#D'", oldglobal);
4092                 }
4093             }
4094           /* If we have a local external declaration,
4095              and no file-scope declaration has yet been seen,
4096              then if we later have a file-scope decl it must not be static.  */
4097           if (oldlocal == NULL_TREE
4098               && oldglobal == NULL_TREE
4099               && DECL_EXTERNAL (x)
4100               && TREE_PUBLIC (x))
4101             TREE_PUBLIC (name) = 1;
4102
4103           if (DECL_FROM_INLINE (x))
4104             /* Inline decls shadow nothing.  */;
4105
4106           /* Warn if shadowing an argument at the top level of the body.  */
4107           else if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
4108               && TREE_CODE (oldlocal) == PARM_DECL
4109               && TREE_CODE (x) != PARM_DECL)
4110             {
4111               /* Go to where the parms should be and see if we
4112                  find them there.  */
4113               struct binding_level *b = current_binding_level->level_chain;
4114
4115               if (cleanup_label)
4116                 b = b->level_chain;
4117
4118               /* ARM $8.3 */
4119               if (b->parm_flag == 1)
4120                 cp_error ("declaration of `%#D' shadows a parameter", name);
4121             }
4122           else if (warn_shadow && oldlocal != NULL_TREE
4123                    && current_binding_level->is_for_scope
4124                    && !DECL_DEAD_FOR_LOCAL (oldlocal))
4125             {
4126               warning ("variable `%s' shadows local",
4127                        IDENTIFIER_POINTER (name));
4128               cp_warning_at ("  this is the shadowed declaration", oldlocal);
4129             }              
4130           /* Maybe warn if shadowing something else.  */
4131           else if (warn_shadow && !DECL_EXTERNAL (x)
4132                    /* No shadow warnings for internally generated vars.  */
4133                    && ! DECL_ARTIFICIAL (x)
4134                    /* No shadow warnings for vars made for inlining.  */
4135                    && ! DECL_FROM_INLINE (x))
4136             {
4137               const char *warnstring = NULL;
4138
4139               if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
4140                 warnstring = "declaration of `%s' shadows a parameter";
4141               else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
4142                        && current_class_ptr
4143                        && !TREE_STATIC (name))
4144                 warnstring = "declaration of `%s' shadows a member of `this'";
4145               else if (oldlocal != NULL_TREE)
4146                 warnstring = "declaration of `%s' shadows previous local";
4147               else if (oldglobal != NULL_TREE)
4148                 /* XXX shadow warnings in outer-more namespaces */
4149                 warnstring = "declaration of `%s' shadows global declaration";
4150
4151               if (warnstring)
4152                 warning (warnstring, IDENTIFIER_POINTER (name));
4153             }
4154         }
4155
4156       if (TREE_CODE (x) == FUNCTION_DECL)
4157         check_default_args (x);
4158
4159       /* Keep count of variables in this level with incomplete type.  */
4160       if (TREE_CODE (x) == VAR_DECL
4161           && TREE_TYPE (x) != error_mark_node
4162           && ((TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
4163                && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
4164               /* RTTI TD entries are created while defining the type_info.  */
4165               || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
4166                   && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
4167         current_binding_level->incomplete 
4168           = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
4169     }
4170
4171   if (need_new_binding)
4172     {
4173       /* Put decls on list in reverse order.
4174          We will reverse them later if necessary.  */
4175       TREE_CHAIN (x) = current_binding_level->names;
4176       current_binding_level->names = x;
4177       if (current_binding_level == global_binding_level
4178           && !TREE_PERMANENT (x))
4179         my_friendly_abort (124);
4180     }
4181
4182   return x;
4183 }
4184
4185 /* Same as pushdecl, but define X in binding-level LEVEL.  We rely on the
4186    caller to set DECL_CONTEXT properly.  */
4187
4188 static tree
4189 pushdecl_with_scope (x, level)
4190      tree x;
4191      struct binding_level *level;
4192 {
4193   register struct binding_level *b;
4194   tree function_decl = current_function_decl;
4195
4196   current_function_decl = NULL_TREE;
4197   if (level->parm_flag == 2)
4198     {
4199       b = class_binding_level;
4200       class_binding_level = level;
4201       pushdecl_class_level (x);
4202       class_binding_level = b;
4203     }
4204   else
4205     {
4206       b = current_binding_level;
4207       current_binding_level = level;
4208       x = pushdecl (x);
4209       current_binding_level = b;
4210     }
4211   current_function_decl = function_decl;
4212   return x;
4213 }
4214
4215 /* Like pushdecl, only it places X in the current namespace,
4216    if appropriate.  */
4217
4218 tree
4219 pushdecl_namespace_level (x)
4220      tree x;
4221 {
4222   register struct binding_level *b = current_binding_level;
4223   register tree t;
4224
4225   t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
4226
4227   /* Now, the type_shadowed stack may screw us.  Munge it so it does
4228      what we want.  */
4229   if (TREE_CODE (x) == TYPE_DECL)
4230     {
4231       tree name = DECL_NAME (x);
4232       tree newval;
4233       tree *ptr = (tree *)0;
4234       for (; b != global_binding_level; b = b->level_chain)
4235         {
4236           tree shadowed = b->type_shadowed;
4237           for (; shadowed; shadowed = TREE_CHAIN (shadowed))
4238             if (TREE_PURPOSE (shadowed) == name)
4239               {
4240                 ptr = &TREE_VALUE (shadowed);
4241                 /* Can't break out of the loop here because sometimes
4242                    a binding level will have duplicate bindings for
4243                    PT names.  It's gross, but I haven't time to fix it.  */
4244               }
4245         }
4246       newval = TREE_TYPE (x);
4247       if (ptr == (tree *)0)
4248         {
4249           /* @@ This shouldn't be needed.  My test case "zstring.cc" trips
4250              up here if this is changed to an assertion.  --KR  */
4251           SET_IDENTIFIER_TYPE_VALUE (name, newval);
4252         }
4253       else
4254         {
4255           *ptr = newval;
4256         }
4257     }
4258   return t;
4259 }
4260
4261 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4262    if appropriate.  */
4263
4264 tree
4265 pushdecl_top_level (x)
4266      tree x;
4267 {
4268   tree cur_namespace = current_namespace;
4269   current_namespace = global_namespace;
4270   x = pushdecl_namespace_level (x);
4271   current_namespace = cur_namespace;
4272   return x;
4273 }
4274
4275 /* Make the declaration of X appear in CLASS scope.  */
4276
4277 void
4278 pushdecl_class_level (x)
4279      tree x;
4280 {
4281   /* Don't use DECL_ASSEMBLER_NAME here!  Everything that looks in class
4282      scope looks for the pre-mangled name.  */
4283   register tree name;
4284
4285   if (TREE_CODE (x) == OVERLOAD)
4286     x = OVL_CURRENT (x);
4287   name = DECL_NAME (x);
4288
4289   if (name)
4290     {
4291       push_class_level_binding (name, x);
4292       if (TREE_CODE (x) == TYPE_DECL)
4293         set_identifier_type_value (name, TREE_TYPE (x));
4294     }
4295   else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
4296     {
4297       tree f;
4298
4299       for (f = TYPE_FIELDS (TREE_TYPE (x));
4300            f;
4301            f = TREE_CHAIN (f))
4302         pushdecl_class_level (f);
4303     }
4304 }
4305
4306 #if 0
4307 /* This function is used to push the mangled decls for nested types into
4308    the appropriate scope.  Previously pushdecl_top_level was used, but that
4309    is incorrect for members of local classes.  */
4310
4311 void
4312 pushdecl_nonclass_level (x)
4313      tree x;
4314 {
4315   struct binding_level *b = current_binding_level;
4316
4317   my_friendly_assert (b->parm_flag != 2, 180);
4318
4319 #if 0
4320   /* Get out of template binding levels */
4321   while (b->pseudo_global)
4322     b = b->level_chain;
4323 #endif
4324
4325   pushdecl_with_scope (x, b);
4326 }
4327 #endif
4328
4329 /* Make the declaration(s) of X appear in CLASS scope
4330    under the name NAME.  */
4331
4332 void
4333 push_class_level_binding (name, x)
4334      tree name;
4335      tree x;
4336 {
4337   tree binding;
4338   /* The class_binding_level will be NULL if x is a template 
4339      parameter name in a member template.  */
4340   if (!class_binding_level)
4341     return;
4342
4343   /* Make sure that this new member does not have the same name
4344      as a template parameter.  */
4345   if (TYPE_BEING_DEFINED (current_class_type))
4346     check_template_shadow (x);
4347
4348   /* If this declaration shadows a declaration from an enclosing
4349      class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4350      we leave this class.  Record the shadowed declaration here.  */
4351   binding = IDENTIFIER_BINDING (name);
4352   if (binding 
4353       && ((TREE_CODE (x) == OVERLOAD
4354            && BINDING_VALUE (binding)
4355            && is_overloaded_fn (BINDING_VALUE (binding)))
4356           || INHERITED_VALUE_BINDING_P (binding)))
4357     {
4358       tree shadow;
4359       tree old_decl;
4360
4361       /* If the old binding was from a base class, and was for a tag
4362          name, slide it over to make room for the new binding.  The
4363          old binding is still visible if explicitly qualified with a
4364          class-key.  */
4365       if (INHERITED_VALUE_BINDING_P (binding)
4366           && BINDING_VALUE (binding)
4367           && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
4368           && DECL_ARTIFICIAL (BINDING_VALUE (binding))
4369           && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
4370         {
4371           old_decl = BINDING_TYPE (binding);
4372           BINDING_TYPE (binding) = BINDING_VALUE (binding);
4373           BINDING_VALUE (binding) = NULL_TREE;
4374           INHERITED_VALUE_BINDING_P (binding) = 0;
4375         }
4376       else
4377         old_decl = BINDING_VALUE (binding);
4378
4379       /* There was already a binding for X containing fewer
4380          functions than are named in X.  Find the previous
4381          declaration of X on the class-shadowed list, and update it.  */
4382       for (shadow = class_binding_level->class_shadowed;
4383            shadow;
4384            shadow = TREE_CHAIN (shadow))
4385         if (TREE_PURPOSE (shadow) == name
4386             && TREE_TYPE (shadow) == old_decl)
4387           {
4388             BINDING_VALUE (binding) = x;
4389             INHERITED_VALUE_BINDING_P (binding) = 0;
4390             TREE_TYPE (shadow) = x;
4391             return;
4392           }
4393     }
4394
4395   /* If we didn't replace an existing binding, put the binding on the
4396      stack of bindings for the identifier, and update
4397      IDENTIFIER_CLASS_VALUE.  */
4398   if (push_class_binding (name, x))
4399     {
4400       push_cache_obstack ();
4401       class_binding_level->class_shadowed
4402         = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
4403                      class_binding_level->class_shadowed);
4404       pop_obstacks ();
4405       /* Record the value we are binding NAME to so that we can know
4406          what to pop later.  */
4407       TREE_TYPE (class_binding_level->class_shadowed) = x;
4408     }
4409 }
4410
4411 /* Insert another USING_DECL into the current binding level,
4412    returning this declaration. If this is a redeclaration,
4413    do nothing and return NULL_TREE.  */
4414
4415 tree
4416 push_using_decl (scope, name)
4417      tree scope;
4418      tree name;
4419 {
4420   tree decl;
4421   
4422   my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4423   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4424   for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4425     if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4426       break;
4427   if (decl)
4428     return NULL_TREE;
4429   decl = build_lang_decl (USING_DECL, name, void_type_node);
4430   DECL_INITIAL (decl) = scope;
4431   TREE_CHAIN (decl) = current_binding_level->usings;
4432   current_binding_level->usings = decl;
4433   return decl;
4434 }
4435
4436 /* Add namespace to using_directives. Return NULL_TREE if nothing was
4437    changed (i.e. there was already a directive), or the fresh
4438    TREE_LIST otherwise.  */
4439
4440 tree
4441 push_using_directive (used)
4442      tree used;
4443 {
4444   tree ud = current_binding_level->using_directives;
4445   tree iter, ancestor;
4446   
4447   /* Check if we already have this. */
4448   if (purpose_member (used, ud) != NULL_TREE)
4449     return NULL_TREE;
4450
4451   /* Recursively add all namespaces used. */
4452   for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4453     push_using_directive (TREE_PURPOSE (iter));
4454
4455   ancestor = namespace_ancestor (current_decl_namespace (), used);
4456   ud = current_binding_level->using_directives;
4457   ud = perm_tree_cons (used, ancestor, ud);
4458   current_binding_level->using_directives = ud;
4459   return ud;
4460 }
4461
4462 /* DECL is a FUNCTION_DECL for a non-member function, which may have
4463    other definitions already in place.  We get around this by making
4464    the value of the identifier point to a list of all the things that
4465    want to be referenced by that name.  It is then up to the users of
4466    that name to decide what to do with that list.
4467
4468    DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its DECL_RESULT
4469    slot.  It is dealt with the same way.
4470
4471    FLAGS is a bitwise-or of the following values:
4472      PUSH_LOCAL: Bind DECL in the current scope, rather than at
4473                  namespace scope.
4474      PUSH_USING: DECL is being pushed as the result of a using
4475                  declaration. 
4476
4477    The value returned may be a previous declaration if we guessed wrong
4478    about what language DECL should belong to (C or C++).  Otherwise,
4479    it's always DECL (and never something that's not a _DECL).  */
4480
4481 tree
4482 push_overloaded_decl (decl, flags)
4483      tree decl;
4484      int flags;
4485 {
4486   tree name = DECL_NAME (decl);
4487   tree old;
4488   tree new_binding;
4489   int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
4490
4491   if (doing_global)
4492     old = namespace_binding (name, DECL_CONTEXT (decl));
4493   else
4494     old = lookup_name_current_level (name);
4495
4496   if (old)
4497     {
4498       if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
4499         {
4500           tree t = TREE_TYPE (old);
4501           if (IS_AGGR_TYPE (t) && warn_shadow
4502               && (! DECL_IN_SYSTEM_HEADER (decl)
4503                   || ! DECL_IN_SYSTEM_HEADER (old)))
4504             cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
4505           old = NULL_TREE;
4506         }
4507       else if (is_overloaded_fn (old))
4508         {
4509           tree tmp;
4510           
4511           for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
4512             {
4513               tree fn = OVL_CURRENT (tmp);
4514
4515               if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4516                   && !(flags & PUSH_USING)
4517                   && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4518                                 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4519                 cp_error ("`%#D' conflicts with previous using declaration `%#D'",
4520                           decl, fn);
4521               
4522               if (duplicate_decls (decl, fn))
4523                 return fn;
4524             }
4525         }
4526       else
4527         {
4528           cp_error_at ("previous non-function declaration `%#D'", old);
4529           cp_error ("conflicts with function declaration `%#D'", decl);
4530           return decl;
4531         }
4532     }
4533
4534   if (old || TREE_CODE (decl) == TEMPLATE_DECL)
4535     {
4536       if (old && TREE_CODE (old) != OVERLOAD)
4537         new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4538       else
4539         new_binding = ovl_cons (decl, old);
4540       if (flags & PUSH_USING)
4541         OVL_USED (new_binding) = 1;
4542     }
4543   else
4544     /* NAME is not ambiguous.  */
4545     new_binding = decl;
4546
4547   if (doing_global)
4548     set_namespace_binding (name, current_namespace, new_binding);
4549   else
4550     {
4551       /* We only create an OVERLOAD if there was a previous binding at
4552          this level, or if decl is a template. In the former case, we
4553          need to remove the old binding and replace it with the new
4554          binding.  We must also run through the NAMES on the binding
4555          level where the name was bound to update the chain.  */
4556
4557       if (TREE_CODE (new_binding) == OVERLOAD && old)
4558         {
4559           tree *d;
4560           
4561           for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4562                *d;
4563                d = &TREE_CHAIN (*d))
4564             if (*d == old
4565                 || (TREE_CODE (*d) == TREE_LIST
4566                     && TREE_VALUE (*d) == old))
4567               {
4568                 if (TREE_CODE (*d) == TREE_LIST)
4569                   /* Just replace the old binding with the new.  */
4570                   TREE_VALUE (*d) = new_binding;
4571                 else
4572                   /* Build a TREE_LIST to wrap the OVERLOAD.  */
4573                   *d = build_tree_list (NULL_TREE, new_binding);
4574
4575                 /* And update the CPLUS_BINDING node.  */
4576                 BINDING_VALUE (IDENTIFIER_BINDING (name))
4577                   = new_binding;
4578                 return decl;
4579               }
4580
4581           /* We should always find a previous binding in this case.  */
4582           my_friendly_abort (0);
4583         }
4584
4585       /* Install the new binding.  */
4586       push_local_binding (name, new_binding, flags);
4587     }
4588
4589   return decl;
4590 }
4591 \f
4592 /* Generate an implicit declaration for identifier FUNCTIONID
4593    as a function of type int ().  Print a warning if appropriate.  */
4594
4595 tree
4596 implicitly_declare (functionid)
4597      tree functionid;
4598 {
4599   register tree decl;
4600   int temp = allocation_temporary_p ();
4601
4602   push_obstacks_nochange ();
4603
4604   /* Save the decl permanently so we can warn if definition follows.
4605      In ANSI C, warn_implicit is usually false, so the saves little space.
4606      But in C++, it's usually true, hence the extra code.  */
4607   if (temp && (! warn_implicit || toplevel_bindings_p ()))
4608     end_temporary_allocation ();
4609
4610   /* We used to reuse an old implicit decl here,
4611      but this loses with inline functions because it can clobber
4612      the saved decl chains.  */
4613   decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4614
4615   DECL_EXTERNAL (decl) = 1;
4616   TREE_PUBLIC (decl) = 1;
4617
4618   /* ANSI standard says implicit declarations are in the innermost block.
4619      So we record the decl in the standard fashion.  */
4620   pushdecl (decl);
4621   rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4622
4623   if (warn_implicit
4624       /* Only one warning per identifier.  */
4625       && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4626     {
4627       cp_pedwarn ("implicit declaration of function `%#D'", decl);
4628     }
4629
4630   SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4631
4632   pop_obstacks ();
4633
4634   return decl;
4635 }
4636
4637 /* Return zero if the declaration NEWDECL is valid
4638    when the declaration OLDDECL (assumed to be for the same name)
4639    has already been seen.
4640    Otherwise return an error message format string with a %s
4641    where the identifier should go.  */
4642
4643 static const char *
4644 redeclaration_error_message (newdecl, olddecl)
4645      tree newdecl, olddecl;
4646 {
4647   if (TREE_CODE (newdecl) == TYPE_DECL)
4648     {
4649       /* Because C++ can put things into name space for free,
4650          constructs like "typedef struct foo { ... } foo"
4651          would look like an erroneous redeclaration.  */
4652       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
4653         return 0;
4654       else
4655         return "redefinition of `%#D'";
4656     }
4657   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4658     {
4659       /* If this is a pure function, its olddecl will actually be
4660          the original initialization to `0' (which we force to call
4661          abort()).  Don't complain about redefinition in this case.  */
4662       if (DECL_LANG_SPECIFIC (olddecl) && DECL_ABSTRACT_VIRTUAL_P (olddecl))
4663         return 0;
4664
4665       /* If both functions come from different namespaces, this is not
4666          a redeclaration - this is a conflict with a used function. */
4667       if (DECL_NAMESPACE_SCOPE_P (olddecl)
4668           && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
4669         return "`%D' conflicts with used function";
4670
4671       /* We'll complain about linkage mismatches in
4672          warn_extern_redeclared_static.  */
4673
4674       /* Defining the same name twice is no good.  */
4675       if (DECL_INITIAL (olddecl) != NULL_TREE
4676           && DECL_INITIAL (newdecl) != NULL_TREE)
4677         {
4678           if (DECL_NAME (olddecl) == NULL_TREE)
4679             return "`%#D' not declared in class";
4680           else
4681             return "redefinition of `%#D'";
4682         }
4683       return 0;
4684     }
4685   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4686     {
4687       if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
4688            && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4689            && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4690           || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
4691               && TYPE_SIZE (TREE_TYPE (newdecl))
4692               && TYPE_SIZE (TREE_TYPE (olddecl))))
4693         return "redefinition of `%#D'";
4694       return 0;
4695     }
4696   else if (toplevel_bindings_p ())
4697     {
4698       /* Objects declared at top level:  */
4699       /* If at least one is a reference, it's ok.  */
4700       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
4701         return 0;
4702       /* Reject two definitions.  */
4703       return "redefinition of `%#D'";
4704     }
4705   else
4706     {
4707       /* Objects declared with block scope:  */
4708       /* Reject two definitions, and reject a definition
4709          together with an external reference.  */
4710       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
4711         return "redeclaration of `%#D'";
4712       return 0;
4713     }
4714 }
4715 \f
4716 /* Get the LABEL_DECL corresponding to identifier ID as a label.
4717    Create one if none exists so far for the current function.
4718    This function is called for both label definitions and label references.  */
4719
4720 tree
4721 lookup_label (id)
4722      tree id;
4723 {
4724   register tree decl = IDENTIFIER_LABEL_VALUE (id);
4725
4726   if (current_function_decl == NULL_TREE)
4727     {
4728       error ("label `%s' referenced outside of any function",
4729              IDENTIFIER_POINTER (id));
4730       return NULL_TREE;
4731     }
4732
4733   if ((decl == NULL_TREE
4734       || DECL_SOURCE_LINE (decl) == 0)
4735       && (named_label_uses == NULL
4736           || named_label_uses->names_in_scope != current_binding_level->names
4737           || named_label_uses->label_decl != decl))
4738     {
4739       struct named_label_list *new_ent;
4740       new_ent
4741         = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
4742       new_ent->label_decl = decl;
4743       new_ent->names_in_scope = current_binding_level->names;
4744       new_ent->binding_level = current_binding_level;
4745       new_ent->lineno_o_goto = lineno;
4746       new_ent->filename_o_goto = input_filename;
4747       new_ent->next = named_label_uses;
4748       named_label_uses = new_ent;
4749     }
4750
4751   /* Use a label already defined or ref'd with this name.  */
4752   if (decl != NULL_TREE)
4753     {
4754       /* But not if it is inherited and wasn't declared to be inheritable.  */
4755       if (DECL_CONTEXT (decl) != current_function_decl
4756           && ! C_DECLARED_LABEL_FLAG (decl))
4757         return shadow_label (id);
4758       return decl;
4759     }
4760
4761   decl = build_decl (LABEL_DECL, id, void_type_node);
4762
4763   /* Make sure every label has an rtx.  */
4764   label_rtx (decl);
4765
4766   /* A label not explicitly declared must be local to where it's ref'd.  */
4767   DECL_CONTEXT (decl) = current_function_decl;
4768
4769   DECL_MODE (decl) = VOIDmode;
4770
4771   /* Say where one reference is to the label,
4772      for the sake of the error if it is not defined.  */
4773   DECL_SOURCE_LINE (decl) = lineno;
4774   DECL_SOURCE_FILE (decl) = input_filename;
4775
4776   SET_IDENTIFIER_LABEL_VALUE (id, decl);
4777
4778   named_labels = tree_cons (NULL_TREE, decl, named_labels);
4779   named_label_uses->label_decl = decl;
4780
4781   return decl;
4782 }
4783
4784 /* Make a label named NAME in the current function,
4785    shadowing silently any that may be inherited from containing functions
4786    or containing scopes.
4787
4788    Note that valid use, if the label being shadowed
4789    comes from another scope in the same function,
4790    requires calling declare_nonlocal_label right away.  */
4791
4792 tree
4793 shadow_label (name)
4794      tree name;
4795 {
4796   register tree decl = IDENTIFIER_LABEL_VALUE (name);
4797
4798   if (decl != NULL_TREE)
4799     {
4800       shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
4801       SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE);
4802     }
4803
4804   return lookup_label (name);
4805 }
4806
4807 /* Define a label, specifying the location in the source file.
4808    Return the LABEL_DECL node for the label, if the definition is valid.
4809    Otherwise return 0.  */
4810
4811 tree
4812 define_label (filename, line, name)
4813      char *filename;
4814      int line;
4815      tree name;
4816 {
4817   tree decl;
4818
4819   if (minimal_parse_mode)
4820     {
4821       push_obstacks (&permanent_obstack, &permanent_obstack);
4822       decl = build_decl (LABEL_DECL, name, void_type_node);
4823       pop_obstacks ();
4824       DECL_SOURCE_LINE (decl) = line;
4825       DECL_SOURCE_FILE (decl) = filename;
4826       add_tree (decl);
4827       return decl;
4828     }
4829
4830   decl = lookup_label (name);
4831
4832   /* After labels, make any new cleanups go into their
4833      own new (temporary) binding contour.  */
4834   current_binding_level->more_cleanups_ok = 0;
4835
4836   /* If label with this name is known from an outer context, shadow it.  */
4837   if (decl != NULL_TREE && DECL_CONTEXT (decl) != current_function_decl)
4838     {
4839       shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
4840       SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE);
4841       decl = lookup_label (name);
4842     }
4843
4844   if (name == get_identifier ("wchar_t"))
4845     cp_pedwarn ("label named wchar_t");
4846
4847   if (DECL_INITIAL (decl) != NULL_TREE)
4848     {
4849       cp_error ("duplicate label `%D'", decl);
4850       return 0;
4851     }
4852   else
4853     {
4854       struct named_label_list *uses, *prev;
4855       int identified = 0;
4856
4857       /* Mark label as having been defined.  */
4858       DECL_INITIAL (decl) = error_mark_node;
4859       /* Say where in the source.  */
4860       DECL_SOURCE_FILE (decl) = filename;
4861       DECL_SOURCE_LINE (decl) = line;
4862
4863       prev = NULL;
4864       uses = named_label_uses;
4865       while (uses != NULL)
4866         if (uses->label_decl == decl)
4867           {
4868             struct binding_level *b = current_binding_level;
4869             while (b)
4870               {
4871                 tree new_decls = b->names;
4872                 tree old_decls = (b == uses->binding_level)
4873                                   ? uses->names_in_scope : NULL_TREE;
4874                 while (new_decls != old_decls)
4875                   {
4876                     if (TREE_CODE (new_decls) == VAR_DECL
4877                         /* Don't complain about crossing initialization
4878                            of internal entities.  They can't be accessed,
4879                            and they should be cleaned up
4880                            by the time we get to the label.  */
4881                         && ! DECL_ARTIFICIAL (new_decls)
4882                         && !(DECL_INITIAL (new_decls) == NULL_TREE
4883                              && pod_type_p (TREE_TYPE (new_decls))))
4884                       {
4885                         /* This is really only important if we're crossing
4886                            an initialization.  The POD stuff is just
4887                            pedantry; why should it matter if the class
4888                            contains a field of pointer to member type?  */
4889                         int problem = (DECL_INITIAL (new_decls)
4890                                        || (TYPE_NEEDS_CONSTRUCTING
4891                                            (TREE_TYPE (new_decls))));
4892
4893                         if (! identified)
4894                           {
4895                             if (problem)
4896                               {
4897                                 cp_error ("jump to label `%D'", decl);
4898                                 error_with_file_and_line
4899                                   (uses->filename_o_goto,
4900                                    uses->lineno_o_goto, "  from here");
4901                               }
4902                             else
4903                               {
4904                                 cp_pedwarn ("jump to label `%D'", decl);
4905                                 pedwarn_with_file_and_line
4906                                   (uses->filename_o_goto,
4907                                    uses->lineno_o_goto, "  from here");
4908                               }
4909                             identified = 1;
4910                         }
4911
4912                         if (problem)
4913                           cp_error_at ("  crosses initialization of `%#D'",
4914                                        new_decls);
4915                         else
4916                           cp_pedwarn_at ("  enters scope of non-POD `%#D'",
4917                                          new_decls);
4918                       }
4919                     new_decls = TREE_CHAIN (new_decls);
4920                   }
4921                 if (b == uses->binding_level)
4922                   break;
4923                 b = b->level_chain;
4924               }
4925
4926             if (prev != NULL)
4927               prev->next = uses->next;
4928             else
4929               named_label_uses = uses->next;
4930
4931             uses = uses->next;
4932           }
4933         else
4934           {
4935             prev = uses;
4936             uses = uses->next;
4937           }
4938       current_function_return_value = NULL_TREE;
4939       return decl;
4940     }
4941 }
4942
4943 struct cp_switch
4944 {
4945   struct binding_level *level;
4946   struct cp_switch *next;
4947 };
4948
4949 static struct cp_switch *switch_stack;
4950
4951 void
4952 push_switch ()
4953 {
4954   struct cp_switch *p
4955     = (struct cp_switch *) oballoc (sizeof (struct cp_switch));
4956   p->level = current_binding_level;
4957   p->next = switch_stack;
4958   switch_stack = p;
4959 }
4960
4961 void
4962 pop_switch ()
4963 {
4964   switch_stack = switch_stack->next;
4965 }
4966
4967 /* Same, but for CASE labels.  If DECL is NULL_TREE, it's the default.  */
4968 /* XXX Note decl is never actually used. (bpk) */
4969
4970 void
4971 define_case_label ()
4972 {
4973   tree cleanup = last_cleanup_this_contour ();
4974   struct binding_level *b = current_binding_level;
4975   int identified = 0;
4976
4977   if (cleanup)
4978     {
4979       static int explained = 0;
4980       cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
4981       warning ("where case label appears here");
4982       if (!explained)
4983         {
4984           warning ("(enclose actions of previous case statements requiring");
4985           warning ("destructors in their own binding contours.)");
4986           explained = 1;
4987         }
4988     }
4989
4990   for (; b && b != switch_stack->level; b = b->level_chain)
4991     {
4992       tree new_decls = b->names;
4993       for (; new_decls; new_decls = TREE_CHAIN (new_decls))
4994         {
4995           if (TREE_CODE (new_decls) == VAR_DECL
4996               /* Don't complain about crossing initialization
4997                  of internal entities.  They can't be accessed,
4998                  and they should be cleaned up
4999                  by the time we get to the label.  */
5000               && ! DECL_ARTIFICIAL (new_decls)
5001               && ((DECL_INITIAL (new_decls) != NULL_TREE
5002                    && DECL_INITIAL (new_decls) != error_mark_node)
5003                   || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
5004             {
5005               if (! identified)
5006                 error ("jump to case label");
5007               identified = 1;
5008               cp_error_at ("  crosses initialization of `%#D'",
5009                            new_decls);
5010             }
5011         }
5012     }
5013
5014   /* After labels, make any new cleanups go into their
5015      own new (temporary) binding contour.  */
5016
5017   current_binding_level->more_cleanups_ok = 0;
5018   current_function_return_value = NULL_TREE;
5019 }
5020 \f
5021 /* Return the list of declarations of the current level.
5022    Note that this list is in reverse order unless/until
5023    you nreverse it; and when you do nreverse it, you must
5024    store the result back using `storedecls' or you will lose.  */
5025
5026 tree
5027 getdecls ()
5028 {
5029   return current_binding_level->names;
5030 }
5031
5032 /* Return the list of type-tags (for structs, etc) of the current level.  */
5033
5034 tree
5035 gettags ()
5036 {
5037   return current_binding_level->tags;
5038 }
5039
5040 /* Store the list of declarations of the current level.
5041    This is done for the parameter declarations of a function being defined,
5042    after they are modified in the light of any missing parameters.  */
5043
5044 static void
5045 storedecls (decls)
5046      tree decls;
5047 {
5048   current_binding_level->names = decls;
5049 }
5050
5051 /* Similarly, store the list of tags of the current level.  */
5052
5053 void
5054 storetags (tags)
5055      tree tags;
5056 {
5057   current_binding_level->tags = tags;
5058 }
5059 \f
5060 /* Given NAME, an IDENTIFIER_NODE,
5061    return the structure (or union or enum) definition for that name.
5062    Searches binding levels from BINDING_LEVEL up to the global level.
5063    If THISLEVEL_ONLY is nonzero, searches only the specified context
5064    (but skips any tag-transparent contexts to find one that is
5065    meaningful for tags).
5066    FORM says which kind of type the caller wants;
5067    it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
5068    If the wrong kind of type is found, and it's not a template, an error is
5069    reported.  */
5070
5071 static tree
5072 lookup_tag (form, name, binding_level, thislevel_only)
5073      enum tree_code form;
5074      tree name;
5075      struct binding_level *binding_level;
5076      int thislevel_only;
5077 {
5078   register struct binding_level *level;
5079   /* Non-zero if, we should look past a pseudo-global level, even if
5080      THISLEVEL_ONLY.  */
5081   int allow_pseudo_global = 1;
5082
5083   for (level = binding_level; level; level = level->level_chain)
5084     {
5085       register tree tail;
5086       if (ANON_AGGRNAME_P (name))
5087         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5088           {
5089             /* There's no need for error checking here, because
5090                anon names are unique throughout the compilation.  */
5091             if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
5092               return TREE_VALUE (tail);
5093           }
5094       else if (level->namespace_p)
5095         /* Do namespace lookup. */
5096         for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
5097           {
5098             tree old = binding_for_name (name, tail);
5099
5100             /* If we just skipped past a pseudo global level, even
5101                though THISLEVEL_ONLY, and we find a template class
5102                declaration, then we use the _TYPE node for the
5103                template.  See the example below.  */
5104             if (thislevel_only && !allow_pseudo_global
5105                 && old && BINDING_VALUE (old) 
5106                 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
5107               old = TREE_TYPE (BINDING_VALUE (old));
5108             else 
5109               old = BINDING_TYPE (old);
5110
5111             /* If it has an original type, it is a typedef, and we
5112                should not return it.  */
5113             if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
5114               old = NULL_TREE;
5115             if (old && TREE_CODE (old) != form
5116                 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
5117               {
5118                 cp_error ("`%#D' redeclared as %C", old, form);
5119                 return NULL_TREE;
5120               }
5121             if (old)
5122               return old;
5123             if (thislevel_only || tail == global_namespace)
5124               return NULL_TREE;
5125           }
5126       else
5127         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5128           {
5129             if (TREE_PURPOSE (tail) == name)
5130               {
5131                 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
5132                 /* Should tighten this up; it'll probably permit
5133                    UNION_TYPE and a struct template, for example.  */
5134                 if (code != form
5135                     && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
5136                   {
5137                     /* Definition isn't the kind we were looking for.  */
5138                     cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
5139                               form);
5140                     return NULL_TREE;
5141                   }
5142                 return TREE_VALUE (tail);
5143               }
5144           }
5145       if (thislevel_only && ! level->tag_transparent)
5146         {
5147           if (level->pseudo_global && allow_pseudo_global)
5148             {
5149               /* We must deal with cases like this:
5150                  
5151                    template <class T> struct S;
5152                    template <class T> struct S {};
5153                    
5154                  When looking up `S', for the second declaration, we
5155                  would like to find the first declaration.  But, we
5156                  are in the pseudo-global level created for the
5157                  template parameters, rather than the (surrounding)
5158                  namespace level.  Thus, we keep going one more level,
5159                  even though THISLEVEL_ONLY is non-zero.  */
5160               allow_pseudo_global = 0;
5161               continue;
5162             }
5163           else
5164             return NULL_TREE;
5165         }
5166     }
5167   return NULL_TREE;
5168 }
5169
5170 #if 0
5171 void
5172 set_current_level_tags_transparency (tags_transparent)
5173      int tags_transparent;
5174 {
5175   current_binding_level->tag_transparent = tags_transparent;
5176 }
5177 #endif
5178
5179 /* Given a type, find the tag that was defined for it and return the tag name.
5180    Otherwise return 0.  However, the value can never be 0
5181    in the cases in which this is used.
5182
5183    C++: If NAME is non-zero, this is the new name to install.  This is
5184    done when replacing anonymous tags with real tag names.  */
5185
5186 static tree
5187 lookup_tag_reverse (type, name)
5188      tree type;
5189      tree name;
5190 {
5191   register struct binding_level *level;
5192
5193   for (level = current_binding_level; level; level = level->level_chain)
5194     {
5195       register tree tail;
5196       for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5197         {
5198           if (TREE_VALUE (tail) == type)
5199             {
5200               if (name)
5201                 TREE_PURPOSE (tail) = name;
5202               return TREE_PURPOSE (tail);
5203             }
5204         }
5205     }
5206   return NULL_TREE;
5207 }
5208 \f
5209 /* Look up NAME in the NAMESPACE.  */
5210
5211 tree
5212 lookup_namespace_name (namespace, name)
5213      tree namespace, name;
5214 {
5215   struct tree_binding _b;
5216   tree val;
5217   tree template_id = NULL_TREE;
5218
5219   my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
5220
5221   if (TREE_CODE (name) == NAMESPACE_DECL)
5222     /* This happens for A::B<int> when B is a namespace. */
5223     return name;
5224   else if (TREE_CODE (name) == TEMPLATE_DECL)
5225     {
5226       /* This happens for A::B where B is a template, and there are no
5227          template arguments.  */
5228       cp_error ("invalid use of `%D'", name);
5229       return error_mark_node;
5230     }
5231
5232   namespace = ORIGINAL_NAMESPACE (namespace);
5233
5234   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5235     {
5236       template_id = name;
5237       name = TREE_OPERAND (name, 0);
5238       if (TREE_CODE (name) == OVERLOAD)
5239         name = DECL_NAME (OVL_CURRENT (name));
5240       else if (TREE_CODE_CLASS (TREE_CODE (name)) == 'd')
5241         name = DECL_NAME (name);
5242     }
5243
5244   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
5245   
5246   val = binding_init (&_b);
5247   if (!qualified_lookup_using_namespace (name, namespace, val, 0))
5248     return error_mark_node;
5249
5250   if (BINDING_VALUE (val))
5251     {
5252       val = BINDING_VALUE (val);
5253
5254       if (template_id)
5255         {
5256           if (DECL_CLASS_TEMPLATE_P (val))
5257             val = lookup_template_class (val, 
5258                                          TREE_OPERAND (template_id, 1),
5259                                          /*in_decl=*/NULL_TREE,
5260                                          /*context=*/NULL_TREE,
5261                                          /*entering_scope=*/0);
5262           else if (DECL_FUNCTION_TEMPLATE_P (val)
5263                    || TREE_CODE (val) == OVERLOAD)
5264             val = lookup_template_function (val, 
5265                                             TREE_OPERAND (template_id, 1));
5266           else
5267             {
5268               cp_error ("`%D::%D' is not a template",
5269                         namespace, name);
5270               return error_mark_node;
5271             }
5272         }
5273
5274       /* If we have a single function from a using decl, pull it out.  */
5275       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5276         val = OVL_FUNCTION (val);
5277       return val;
5278     }
5279
5280   cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
5281   return error_mark_node;
5282 }
5283
5284 /* Hash a TYPENAME_TYPE.  K is really of type `tree'.  */
5285
5286 static unsigned long
5287 typename_hash (k)
5288      hash_table_key k;
5289 {
5290   unsigned long hash;
5291   tree t;
5292
5293   t = (tree) k;
5294   hash = (((unsigned long) TYPE_CONTEXT (t))
5295           ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5296
5297   return hash;
5298 }
5299
5300 /* Compare two TYPENAME_TYPEs.  K1 and K2 are really of type `tree'.  */
5301
5302 static boolean
5303 typename_compare (k1, k2)
5304      hash_table_key k1;
5305      hash_table_key k2;
5306 {
5307   tree t1;
5308   tree t2;
5309   tree d1;
5310   tree d2;
5311
5312   t1 = (tree) k1;
5313   t2 = (tree) k2;
5314   d1 = TYPE_NAME (t1);
5315   d2 = TYPE_NAME (t2);
5316   
5317   return (DECL_NAME (d1) == DECL_NAME (d2)
5318           && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
5319           && ((TREE_TYPE (t1) != NULL_TREE) 
5320               == (TREE_TYPE (t2) != NULL_TREE))
5321           && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5322           && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5323 }
5324
5325 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
5326    the type of `T', NAME is the IDENTIFIER_NODE for `t'.  If BASE_TYPE
5327    is non-NULL, this type is being created by the implicit typename
5328    extension, and BASE_TYPE is a type named `t' in some base class of
5329    `T' which depends on template parameters.  
5330
5331    Returns the new TYPENAME_TYPE.  */
5332
5333 tree
5334 build_typename_type (context, name, fullname, base_type)
5335      tree context;
5336      tree name;
5337      tree fullname;
5338      tree base_type;
5339 {
5340   tree t;
5341   tree d;
5342   struct hash_entry* e;
5343
5344   static struct hash_table ht;
5345
5346   push_obstacks (&permanent_obstack, &permanent_obstack);
5347
5348   if (!ht.table
5349       && !hash_table_init (&ht, &hash_newfunc, &typename_hash, 
5350                            &typename_compare))
5351     fatal ("virtual memory exhausted");
5352
5353   /* The FULLNAME needs to exist for the life of the hash table, i.e.,
5354      for the entire compilation.  */
5355   if (!TREE_PERMANENT (fullname))
5356     fullname = copy_to_permanent (fullname);
5357
5358   /* Build the TYPENAME_TYPE.  */
5359   t = make_lang_type (TYPENAME_TYPE);
5360   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5361   TYPENAME_TYPE_FULLNAME (t) = fullname;
5362   TREE_TYPE (t) = base_type;
5363
5364   /* Build the corresponding TYPE_DECL.  */
5365   d = build_decl (TYPE_DECL, name, t);
5366   TYPE_NAME (TREE_TYPE (d)) = d;
5367   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5368   DECL_CONTEXT (d) = FROB_CONTEXT (context);
5369   DECL_ARTIFICIAL (d) = 1;
5370
5371   /* See if we already have this type.  */
5372   e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5373   if (e)
5374     {
5375       /* This will free not only TREE_TYPE, but the lang-specific data
5376          and the TYPE_DECL as well.  */
5377       obstack_free (&permanent_obstack, t);
5378       t = (tree) e->key;
5379     }
5380   else
5381     /* Insert the type into the table.  */
5382     hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5383
5384   pop_obstacks ();
5385
5386   return t;
5387 }
5388
5389 tree
5390 make_typename_type (context, name)
5391      tree context, name;
5392 {
5393   tree fullname;
5394
5395   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
5396     {
5397       if (!(TYPE_LANG_SPECIFIC (name) 
5398             && (CLASSTYPE_IS_TEMPLATE (name) 
5399                 || CLASSTYPE_USE_TEMPLATE (name))))
5400         name = TYPE_IDENTIFIER (name);
5401       else
5402         /* Create a TEMPLATE_ID_EXPR for the type.  */
5403         name = build_nt (TEMPLATE_ID_EXPR,
5404                          CLASSTYPE_TI_TEMPLATE (name),
5405                          CLASSTYPE_TI_ARGS (name));
5406     }
5407   else if (TREE_CODE (name) == TYPE_DECL)
5408     name = DECL_NAME (name);
5409
5410   fullname = name;
5411
5412   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5413     {
5414       name = TREE_OPERAND (name, 0);
5415       if (TREE_CODE (name) == TEMPLATE_DECL)
5416         name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5417     }
5418   if (TREE_CODE (name) != IDENTIFIER_NODE)
5419     my_friendly_abort (2000);
5420
5421   if (TREE_CODE (context) == NAMESPACE_DECL)
5422     {
5423       /* We can get here from typename_sub0 in the explicit_template_type
5424          expansion.  Just fail.  */
5425       cp_error ("no class template named `%#T' in `%#T'",
5426                 name, context);
5427       return error_mark_node;
5428     }
5429
5430   if (! uses_template_parms (context)
5431       || currently_open_class (context))
5432     {
5433       if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5434         {
5435           tree tmpl = NULL_TREE;
5436           if (IS_AGGR_TYPE (context))
5437             tmpl = lookup_field (context, name, 0, 0);
5438           if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5439             {
5440               cp_error ("no class template named `%#T' in `%#T'",
5441                         name, context);
5442               return error_mark_node;
5443             }
5444
5445           return lookup_template_class (tmpl, 
5446                                         TREE_OPERAND (fullname, 1),
5447                                         NULL_TREE, context, 
5448                                         /*entering_scope=*/0);
5449         }
5450       else
5451         {
5452           tree t;
5453           
5454           if (!IS_AGGR_TYPE (context))
5455             {
5456               cp_error ("no type named `%#T' in `%#T'", name, context);
5457               return error_mark_node;
5458             }
5459
5460           t = lookup_field (context, name, 0, 1);
5461           if (t)
5462             return TREE_TYPE (t);
5463         }
5464     }
5465
5466   /* If the CONTEXT is not a template type, then either the field is
5467      there now or its never going to be.  */
5468   if (!uses_template_parms (context))
5469     {
5470       cp_error ("no type named `%#T' in `%#T'", name, context);
5471       return error_mark_node;
5472     }
5473     
5474   
5475   return build_typename_type (context, name, fullname,  NULL_TREE);
5476 }
5477
5478 /* Select the right _DECL from multiple choices. */
5479
5480 static tree
5481 select_decl (binding, flags)
5482      tree binding;
5483      int flags;
5484 {
5485   tree val;
5486   val = BINDING_VALUE (binding);
5487   if (LOOKUP_NAMESPACES_ONLY (flags))
5488     {
5489       /* We are not interested in types. */
5490       if (val && TREE_CODE (val) == NAMESPACE_DECL)
5491         return val;
5492       return NULL_TREE;
5493     }
5494   
5495   /* If we could have a type and
5496      we have nothing or we need a type and have none.  */
5497   if (BINDING_TYPE (binding)
5498       && (!val || ((flags & LOOKUP_PREFER_TYPES)
5499                    && TREE_CODE (val) != TYPE_DECL)))
5500     val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5501   /* Don't return non-types if we really prefer types. */
5502   else if (val && LOOKUP_TYPES_ONLY (flags)  && TREE_CODE (val) != TYPE_DECL
5503            && (TREE_CODE (val) != TEMPLATE_DECL
5504                || !DECL_CLASS_TEMPLATE_P (val)))
5505     val = NULL_TREE;
5506
5507   return val;
5508 }
5509
5510 /* Unscoped lookup of a global, iterate over namespaces, considering
5511    using namespace statements. */
5512
5513 static tree
5514 unqualified_namespace_lookup (name, flags)
5515      tree name;
5516      int flags;
5517 {
5518   struct tree_binding _binding;
5519   tree b = binding_init (&_binding);
5520   tree initial = current_decl_namespace();
5521   tree scope = initial;
5522   tree siter;
5523   struct binding_level *level;
5524   tree val = NULL_TREE;
5525
5526   while (!val)
5527     {
5528       val = binding_for_name (name, scope);
5529
5530       /* Initialize binding for this context. */
5531       BINDING_VALUE (b) = BINDING_VALUE (val);
5532       BINDING_TYPE (b) = BINDING_TYPE (val);
5533
5534       /* Add all _DECLs seen through local using-directives. */
5535       for (level = current_binding_level; 
5536            !level->namespace_p;
5537            level = level->level_chain)
5538         if (!lookup_using_namespace (name, b, level->using_directives,
5539                                      scope, flags))
5540           /* Give up because of error. */
5541           return error_mark_node;
5542
5543       /* Add all _DECLs seen through global using-directives. */
5544       /* XXX local and global using lists should work equally. */
5545       siter = initial;
5546       while (1)
5547         {
5548           if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter), 
5549                                        scope, flags))
5550             /* Give up because of error. */
5551             return error_mark_node;
5552           if (siter == scope) break;
5553           siter = CP_DECL_CONTEXT (siter);
5554         }
5555
5556       val = select_decl (b, flags);
5557       if (scope == global_namespace)
5558         break;
5559       scope = CP_DECL_CONTEXT (scope);
5560     }
5561   return val;
5562 }
5563
5564 /* Combine prefer_type and namespaces_only into flags.  */
5565
5566 static int
5567 lookup_flags (prefer_type, namespaces_only)
5568   int prefer_type, namespaces_only;
5569 {
5570   if (namespaces_only)
5571     return LOOKUP_PREFER_NAMESPACES;
5572   if (prefer_type > 1)
5573     return LOOKUP_PREFER_TYPES;
5574   if (prefer_type > 0)
5575     return LOOKUP_PREFER_BOTH;
5576   return 0;
5577 }
5578
5579 /* Given a lookup that returned VAL, use FLAGS to decide if we want to
5580    ignore it or not.  Subroutine of lookup_name_real.  */
5581
5582 static tree
5583 qualify_lookup (val, flags)
5584      tree val;
5585      int flags;
5586 {
5587   if (val == NULL_TREE)
5588     return val;
5589   if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5590     return val;
5591   if ((flags & LOOKUP_PREFER_TYPES)
5592       && (TREE_CODE (val) == TYPE_DECL
5593           || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5594               && DECL_CLASS_TEMPLATE_P (val))))
5595     return val;
5596   if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
5597     return NULL_TREE;
5598   return val;
5599 }
5600
5601 /* Any other BINDING overrides an implicit TYPENAME.  Warn about
5602    that.  */
5603
5604 static void
5605 warn_about_implicit_typename_lookup (typename, binding)
5606      tree typename;
5607      tree binding;
5608 {
5609   tree subtype = TREE_TYPE (TREE_TYPE (typename));
5610   tree name = DECL_NAME (typename);
5611
5612   if (! (TREE_CODE (binding) == TEMPLATE_DECL
5613          && CLASSTYPE_TEMPLATE_INFO (subtype)
5614          && CLASSTYPE_TI_TEMPLATE (subtype) == binding)
5615       && ! (TREE_CODE (binding) == TYPE_DECL
5616             && same_type_p (TREE_TYPE (binding), subtype)))
5617     {
5618       cp_warning ("lookup of `%D' finds `%#D'", 
5619                   name, binding);
5620       cp_warning ("  instead of `%D' from dependent base class",
5621                   typename);
5622       cp_warning ("  (use `typename %T::%D' if that's what you meant)",
5623                   constructor_name (current_class_type), name);
5624     }
5625 }
5626
5627 /* Look up NAME in the current binding level and its superiors in the
5628    namespace of variables, functions and typedefs.  Return a ..._DECL
5629    node of some kind representing its definition if there is only one
5630    such declaration, or return a TREE_LIST with all the overloaded
5631    definitions if there are many, or return 0 if it is undefined.
5632
5633    If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5634    If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
5635    If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
5636    Otherwise we prefer non-TYPE_DECLs.  
5637
5638    If NONCLASS is non-zero, we don't look for the NAME in class scope,
5639    using IDENTIFIER_CLASS_VALUE.  */
5640
5641 static tree
5642 lookup_name_real (name, prefer_type, nonclass, namespaces_only)
5643      tree name;
5644      int prefer_type, nonclass, namespaces_only;
5645 {
5646   tree t;
5647   tree val = NULL_TREE;
5648   int yylex = 0;
5649   tree from_obj = NULL_TREE;
5650   int flags;
5651   int val_is_implicit_typename = 0;
5652
5653   /* Hack: copy flag set by parser, if set. */
5654   if (only_namespace_names)
5655     namespaces_only = 1;
5656
5657   if (prefer_type == -2)
5658     {
5659       extern int looking_for_typename;
5660       tree type = NULL_TREE;
5661
5662       yylex = 1;
5663       prefer_type = looking_for_typename;
5664
5665       flags = lookup_flags (prefer_type, namespaces_only);
5666       /* If the next thing is '<', class templates are types. */
5667       if (looking_for_template)
5668         flags |= LOOKUP_TEMPLATES_EXPECTED;
5669
5670       /* std:: becomes :: for now.  */
5671       if (got_scope == std_node)
5672         got_scope = void_type_node;
5673
5674       if (got_scope)
5675         type = got_scope;
5676       else if (got_object != error_mark_node)
5677         type = got_object;
5678       
5679       if (type)
5680         {
5681           if (type == error_mark_node)
5682             return error_mark_node;
5683           if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5684             type = TREE_TYPE (type);
5685
5686           if (TYPE_P (type))
5687             type = complete_type (type);
5688
5689           if (TREE_CODE (type) == VOID_TYPE)
5690             type = global_namespace;
5691           if (TREE_CODE (type) == NAMESPACE_DECL)
5692             {
5693               struct tree_binding b;
5694               val = binding_init (&b);
5695               if (!qualified_lookup_using_namespace (name, type, val, flags))
5696                 return NULL_TREE;
5697               val = select_decl (val, flags);
5698             }
5699           else if (! IS_AGGR_TYPE (type)
5700                    || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5701                    || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
5702                    || TREE_CODE (type) == TYPENAME_TYPE)
5703             /* Someone else will give an error about this if needed.  */
5704             val = NULL_TREE;
5705           else if (type == current_class_type)
5706             val = IDENTIFIER_CLASS_VALUE (name);
5707           else
5708             val = lookup_member (type, name, 0, prefer_type);
5709         }
5710       else
5711         val = NULL_TREE;
5712
5713       if (got_scope)
5714         goto done;
5715       else if (got_object && val)
5716         from_obj = val;
5717     }
5718   else
5719     {
5720       flags = lookup_flags (prefer_type, namespaces_only);
5721       /* If we're not parsing, we need to complain. */
5722       flags |= LOOKUP_COMPLAIN;
5723     }
5724
5725   /* First, look in non-namespace scopes.  */
5726
5727   if (current_class_type == NULL_TREE)
5728     nonclass = 1;
5729
5730   for (t = IDENTIFIER_BINDING (name); t; t = TREE_CHAIN (t))
5731     {
5732       tree binding;
5733
5734       if (!LOCAL_BINDING_P (t) && nonclass)
5735         /* We're not looking for class-scoped bindings, so keep going.  */
5736         continue;
5737       
5738       /* If this is the kind of thing we're looking for, we're done.  */
5739       if (qualify_lookup (BINDING_VALUE (t), flags))
5740         binding = BINDING_VALUE (t);
5741       else if ((flags & LOOKUP_PREFER_TYPES) 
5742                && qualify_lookup (BINDING_TYPE (t), flags))
5743         binding = BINDING_TYPE (t);
5744       else
5745         binding = NULL_TREE;
5746
5747       if (binding
5748           && (!val || !IMPLICIT_TYPENAME_TYPE_DECL_P (binding)))
5749         {
5750           if (val_is_implicit_typename && !yylex)
5751             warn_about_implicit_typename_lookup (val, binding);
5752           val = binding;
5753           val_is_implicit_typename 
5754             = IMPLICIT_TYPENAME_TYPE_DECL_P (val);
5755           if (!val_is_implicit_typename)
5756             break;
5757         }
5758     }
5759
5760   /* Now lookup in namespace scopes.  */
5761   if (!val || val_is_implicit_typename)
5762     {
5763       t = unqualified_namespace_lookup (name, flags);
5764       if (t)
5765         {
5766           if (val_is_implicit_typename && !yylex)
5767             warn_about_implicit_typename_lookup (val, t);
5768           val = t;
5769         }
5770     }
5771
5772  done:
5773   if (val)
5774     {
5775       /* This should only warn about types used in qualified-ids.  */
5776       if (from_obj && from_obj != val)
5777         {
5778           if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
5779               && TREE_CODE (val) == TYPE_DECL
5780               && TREE_TYPE (from_obj) != TREE_TYPE (val))
5781             {
5782               cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
5783                           name, got_object, TREE_TYPE (from_obj));
5784               cp_pedwarn ("  does not match lookup in the current scope (`%#T')",
5785                           TREE_TYPE (val));
5786             }
5787
5788           /* We don't change val to from_obj if got_object depends on
5789              template parms because that breaks implicit typename for
5790              destructor calls.  */
5791           if (! uses_template_parms (got_object))
5792             val = from_obj;
5793         }
5794
5795       /* If we have a single function from a using decl, pull it out.  */
5796       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5797         val = OVL_FUNCTION (val);
5798     }
5799   else if (from_obj)
5800     val = from_obj;
5801
5802   return val;
5803 }
5804
5805 tree
5806 lookup_name_nonclass (name)
5807      tree name;
5808 {
5809   return lookup_name_real (name, 0, 1, 0);
5810 }
5811
5812 tree
5813 lookup_function_nonclass (name, args)
5814      tree name;
5815      tree args;
5816 {
5817   return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
5818 }
5819
5820 tree
5821 lookup_name_namespace_only (name)
5822      tree name;
5823 {
5824   /* type-or-namespace, nonclass, namespace_only */
5825   return lookup_name_real (name, 1, 1, 1);
5826 }
5827
5828 tree
5829 lookup_name (name, prefer_type)
5830      tree name;
5831      int prefer_type;
5832 {
5833   return lookup_name_real (name, prefer_type, 0, 0);
5834 }
5835
5836 /* Similar to `lookup_name' but look only in the innermost non-class
5837    binding level.  */
5838
5839 tree
5840 lookup_name_current_level (name)
5841      tree name;
5842 {
5843   struct binding_level *b;
5844   tree t = NULL_TREE;
5845
5846   b = current_binding_level;
5847   while (b->parm_flag == 2)
5848     b = b->level_chain;
5849
5850   if (b->namespace_p)
5851     {
5852       t =  IDENTIFIER_NAMESPACE_VALUE (name);
5853
5854       /* extern "C" function() */
5855       if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
5856         t = TREE_VALUE (t);
5857     }
5858   else if (IDENTIFIER_BINDING (name) 
5859            && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
5860     {
5861       while (1)
5862         {
5863           if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
5864             return IDENTIFIER_VALUE (name);
5865           
5866           if (b->keep == 2)
5867             b = b->level_chain;
5868           else
5869             break;
5870         }
5871     }
5872
5873   return t;
5874 }
5875
5876 /* Like lookup_name_current_level, but for types.  */
5877
5878 tree
5879 lookup_type_current_level (name)
5880      tree name;
5881 {
5882   register tree t = NULL_TREE;
5883
5884   my_friendly_assert (! current_binding_level->namespace_p, 980716);
5885
5886   if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
5887       && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
5888     {
5889       struct binding_level *b = current_binding_level;
5890       while (1)
5891         {
5892           if (purpose_member (name, b->type_shadowed))
5893             return REAL_IDENTIFIER_TYPE_VALUE (name);
5894           if (b->keep == 2)
5895             b = b->level_chain;
5896           else
5897             break;
5898         }
5899     }
5900
5901   return t;
5902 }
5903
5904 void
5905 begin_only_namespace_names ()
5906 {
5907   only_namespace_names = 1;
5908 }
5909
5910 void
5911 end_only_namespace_names ()
5912 {
5913   only_namespace_names = 0;
5914 }
5915 \f
5916 /* Arrange for the user to get a source line number, even when the
5917    compiler is going down in flames, so that she at least has a
5918    chance of working around problems in the compiler.  We used to
5919    call error(), but that let the segmentation fault continue
5920    through; now, it's much more passive by asking them to send the
5921    maintainers mail about the problem.  */
5922
5923 static void
5924 signal_catch (sig)
5925      int sig ATTRIBUTE_UNUSED;
5926 {
5927   signal (SIGSEGV, SIG_DFL);
5928 #ifdef SIGIOT
5929   signal (SIGIOT, SIG_DFL);
5930 #endif
5931 #ifdef SIGILL
5932   signal (SIGILL, SIG_DFL);
5933 #endif
5934 #ifdef SIGABRT
5935   signal (SIGABRT, SIG_DFL);
5936 #endif
5937 #ifdef SIGBUS
5938   signal (SIGBUS, SIG_DFL);
5939 #endif
5940   my_friendly_abort (0);
5941 }
5942
5943 #if 0
5944 /* Unused -- brendan 970107 */
5945 /* Array for holding types considered "built-in".  These types
5946    are output in the module in which `main' is defined.  */
5947 static tree *builtin_type_tdescs_arr;
5948 static int builtin_type_tdescs_len, builtin_type_tdescs_max;
5949 #endif
5950
5951 /* Push the declarations of builtin types into the namespace.
5952    RID_INDEX, if < RID_MAX is the index of the builtin type
5953    in the array RID_POINTERS.  NAME is the name used when looking
5954    up the builtin type.  TYPE is the _TYPE node for the builtin type.  */
5955
5956 static void
5957 record_builtin_type (rid_index, name, type)
5958      enum rid rid_index;
5959      const char *name;
5960      tree type;
5961 {
5962   tree rname = NULL_TREE, tname = NULL_TREE;
5963   tree tdecl = NULL_TREE;
5964
5965   if ((int) rid_index < (int) RID_MAX)
5966     rname = ridpointers[(int) rid_index];
5967   if (name)
5968     tname = get_identifier (name);
5969
5970   TYPE_BUILT_IN (type) = 1;
5971   
5972   if (tname)
5973     {
5974       tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
5975       set_identifier_type_value (tname, NULL_TREE);
5976       if ((int) rid_index < (int) RID_MAX)
5977         /* Built-in types live in the global namespace. */
5978         SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
5979     }
5980   if (rname != NULL_TREE)
5981     {
5982       if (tname != NULL_TREE)
5983         {
5984           set_identifier_type_value (rname, NULL_TREE);
5985           SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
5986         }
5987       else
5988         {
5989           tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
5990           set_identifier_type_value (rname, NULL_TREE);
5991         }
5992     }
5993 }
5994
5995 /* Record one of the standard Java types.
5996  * Declare it as having the given NAME.
5997  * If SIZE > 0, it is the size of one of the integral types;
5998  * otherwise it is the negative of the size of one of the other types.  */
5999
6000 static tree
6001 record_builtin_java_type (name, size)
6002      const char *name;
6003      int size;
6004 {
6005   tree type, decl;
6006   if (size > 0)
6007     type = make_signed_type (size);
6008   else if (size > -32)
6009     { /* "__java_char" or ""__java_boolean". */
6010       type = make_unsigned_type (-size);
6011       /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
6012     }
6013   else
6014     { /* "__java_float" or ""__java_double". */
6015       type = make_node (REAL_TYPE);
6016       TYPE_PRECISION (type) = - size;
6017       layout_type (type);
6018     }
6019   record_builtin_type (RID_MAX, name, type);
6020   decl = TYPE_NAME (type);
6021
6022   /* Suppress generate debug symbol entries for these types,
6023      since for normal C++ they are just clutter.
6024      However, push_lang_context undoes this if extern "Java" is seen. */
6025   DECL_IGNORED_P (decl) = 1;
6026
6027   TYPE_FOR_JAVA (type) = 1;
6028   return type;
6029 }
6030
6031 /* Push a type into the namespace so that the back-ends ignore it. */
6032
6033 static void
6034 record_unknown_type (type, name)
6035      tree type;
6036      const char *name;
6037 {
6038   tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
6039   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
6040   DECL_IGNORED_P (decl) = 1;
6041   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6042   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
6043   TYPE_ALIGN (type) = 1;
6044   TYPE_MODE (type) = TYPE_MODE (void_type_node);
6045
6046
6047 /* Push overloaded decl, in global scope, with one argument so it
6048    can be used as a callback from define_function.  */
6049
6050 static void
6051 push_overloaded_decl_1 (x)
6052      tree x;
6053 {
6054   push_overloaded_decl (x, PUSH_GLOBAL);
6055 }
6056
6057 #ifdef __GNUC__
6058 __inline
6059 #endif
6060 tree
6061 auto_function (name, type, code)
6062      tree name, type;
6063      enum built_in_function code;
6064 {
6065   return define_function
6066     (IDENTIFIER_POINTER (name), type, code, push_overloaded_decl_1,
6067      IDENTIFIER_POINTER (build_decl_overload (name, TYPE_ARG_TYPES (type),
6068                                               0)));
6069 }
6070
6071 /* Create the predefined scalar types of C,
6072    and some nodes representing standard constants (0, 1, (void *)0).
6073    Initialize the global binding level.
6074    Make definitions for built-in primitive functions.  */
6075
6076 void
6077 init_decl_processing ()
6078 {
6079   tree fields[20];
6080   int wchar_type_size;
6081   tree array_domain_type;
6082   tree vb_off_identifier = NULL_TREE;
6083
6084   /* Have to make these distinct before we try using them.  */
6085   lang_name_cplusplus = get_identifier ("C++");
6086   lang_name_c = get_identifier ("C");
6087   lang_name_java = get_identifier ("Java");
6088
6089   /* Enter the global namespace. */
6090   my_friendly_assert (global_namespace == NULL_TREE, 375);
6091   my_friendly_assert (current_lang_name == NULL_TREE, 375);
6092   current_lang_name = lang_name_cplusplus;
6093   push_namespace (get_identifier ("::"));
6094   global_namespace = current_namespace;
6095   current_lang_name = NULL_TREE;
6096
6097   if (flag_strict_prototype == 2)
6098     flag_strict_prototype = pedantic;
6099   if (! flag_permissive && ! pedantic)
6100     flag_pedantic_errors = 1;
6101
6102   strict_prototypes_lang_c = flag_strict_prototype;
6103
6104   /* Initially, C.  */
6105   current_lang_name = lang_name_c;
6106
6107   current_function_decl = NULL_TREE;
6108   named_labels = NULL_TREE;
6109   named_label_uses = NULL;
6110   current_binding_level = NULL_BINDING_LEVEL;
6111   free_binding_level = NULL_BINDING_LEVEL;
6112
6113   /* Because most segmentation signals can be traced back into user
6114      code, catch them and at least give the user a chance of working
6115      around compiler bugs.  */
6116   signal (SIGSEGV, signal_catch);
6117
6118   /* We will also catch aborts in the back-end through signal_catch and
6119      give the user a chance to see where the error might be, and to defeat
6120      aborts in the back-end when there have been errors previously in their
6121      code.  */
6122 #ifdef SIGIOT
6123   signal (SIGIOT, signal_catch);
6124 #endif
6125 #ifdef SIGILL
6126   signal (SIGILL, signal_catch);
6127 #endif
6128 #ifdef SIGABRT
6129   signal (SIGABRT, signal_catch);
6130 #endif
6131 #ifdef SIGBUS
6132   signal (SIGBUS, signal_catch);
6133 #endif
6134
6135   gcc_obstack_init (&decl_obstack);
6136
6137   /* Must lay these out before anything else gets laid out.  */
6138   error_mark_node = make_node (ERROR_MARK);
6139   TREE_PERMANENT (error_mark_node) = 1;
6140   TREE_TYPE (error_mark_node) = error_mark_node;
6141   error_mark_list = build_tree_list (error_mark_node, error_mark_node);
6142   TREE_TYPE (error_mark_list) = error_mark_node;
6143
6144   /* Make the binding_level structure for global names.  */
6145   pushlevel (0);
6146   global_binding_level = current_binding_level;
6147   /* The global level is the namespace level of ::.  */
6148   NAMESPACE_LEVEL (global_namespace) = global_binding_level;
6149   declare_namespace_level ();
6150
6151   this_identifier = get_identifier (THIS_NAME);
6152   in_charge_identifier = get_identifier (IN_CHARGE_NAME);
6153   ctor_identifier = get_identifier (CTOR_NAME);
6154   dtor_identifier = get_identifier (DTOR_NAME);
6155   pfn_identifier = get_identifier (VTABLE_PFN_NAME);
6156   index_identifier = get_identifier (VTABLE_INDEX_NAME);
6157   delta_identifier = get_identifier (VTABLE_DELTA_NAME);
6158   delta2_identifier = get_identifier (VTABLE_DELTA2_NAME);
6159   pfn_or_delta2_identifier = get_identifier ("__pfn_or_delta2");
6160   if (flag_handle_signatures)
6161     {
6162       tag_identifier = get_identifier (SIGTABLE_TAG_NAME);
6163       vb_off_identifier = get_identifier (SIGTABLE_VB_OFF_NAME);
6164       vt_off_identifier = get_identifier (SIGTABLE_VT_OFF_NAME);
6165     }
6166
6167   /* Define `int' and `char' first so that dbx will output them first.  */
6168
6169   integer_type_node = make_signed_type (INT_TYPE_SIZE);
6170   record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
6171
6172   /* Define `char', which is like either `signed char' or `unsigned char'
6173      but not the same as either.  */
6174
6175   char_type_node
6176     = (flag_signed_char
6177        ? make_signed_type (CHAR_TYPE_SIZE)
6178        : make_unsigned_type (CHAR_TYPE_SIZE));
6179   record_builtin_type (RID_CHAR, "char", char_type_node);
6180
6181   /* `signed' is the same as `int' */
6182   record_builtin_type (RID_SIGNED, NULL_PTR, integer_type_node);
6183   
6184   long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
6185   record_builtin_type (RID_LONG, "long int", long_integer_type_node);
6186
6187   unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
6188   record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
6189
6190   long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
6191   record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
6192   record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
6193
6194   long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
6195   record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
6196
6197   long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
6198   record_builtin_type (RID_MAX, "long long unsigned int",
6199                        long_long_unsigned_type_node);
6200   record_builtin_type (RID_MAX, "long long unsigned",
6201                        long_long_unsigned_type_node);
6202
6203   short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
6204   record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
6205   short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
6206   record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
6207   record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
6208
6209   /* `unsigned long' is the standard type for sizeof.
6210      Note that stddef.h uses `unsigned long',
6211      and this must agree, even if long and int are the same size.  */
6212   set_sizetype
6213     (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
6214
6215   ptrdiff_type_node
6216     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
6217
6218   /* Define both `signed char' and `unsigned char'.  */
6219   signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
6220   record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
6221   unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
6222   record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
6223
6224   /* Create the widest literal types. */
6225   widest_integer_literal_type_node = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
6226   pushdecl (build_decl (TYPE_DECL, NULL_TREE, 
6227                         widest_integer_literal_type_node));
6228
6229   widest_unsigned_literal_type_node = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
6230   pushdecl (build_decl (TYPE_DECL, NULL_TREE, 
6231                         widest_unsigned_literal_type_node));
6232
6233   /* These are types that type_for_size and type_for_mode use.  */
6234   intQI_type_node = make_signed_type (GET_MODE_BITSIZE (QImode));
6235   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
6236   intHI_type_node = make_signed_type (GET_MODE_BITSIZE (HImode));
6237   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
6238   intSI_type_node = make_signed_type (GET_MODE_BITSIZE (SImode));
6239   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
6240   intDI_type_node = make_signed_type (GET_MODE_BITSIZE (DImode));
6241   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
6242 #if HOST_BITS_PER_WIDE_INT >= 64
6243   intTI_type_node = make_signed_type (GET_MODE_BITSIZE (TImode));
6244   pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
6245 #endif
6246   unsigned_intQI_type_node = make_unsigned_type (GET_MODE_BITSIZE (QImode));
6247   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
6248   unsigned_intHI_type_node = make_unsigned_type (GET_MODE_BITSIZE (HImode));
6249   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
6250   unsigned_intSI_type_node = make_unsigned_type (GET_MODE_BITSIZE (SImode));
6251   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
6252   unsigned_intDI_type_node = make_unsigned_type (GET_MODE_BITSIZE (DImode));
6253   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
6254 #if HOST_BITS_PER_WIDE_INT >= 64
6255   unsigned_intTI_type_node = make_unsigned_type (GET_MODE_BITSIZE (TImode));
6256   pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
6257 #endif
6258
6259   float_type_node = make_node (REAL_TYPE);
6260   TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
6261   record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
6262   layout_type (float_type_node);
6263
6264   double_type_node = make_node (REAL_TYPE);
6265   if (flag_short_double)
6266     TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
6267   else
6268     TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
6269   record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
6270   layout_type (double_type_node);
6271
6272   long_double_type_node = make_node (REAL_TYPE);
6273   TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
6274   record_builtin_type (RID_MAX, "long double", long_double_type_node);
6275   layout_type (long_double_type_node);
6276
6277   complex_integer_type_node = make_node (COMPLEX_TYPE);
6278   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
6279                         complex_integer_type_node));
6280   TREE_TYPE (complex_integer_type_node) = integer_type_node;
6281   layout_type (complex_integer_type_node);
6282
6283   complex_float_type_node = make_node (COMPLEX_TYPE);
6284   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
6285                         complex_float_type_node));
6286   TREE_TYPE (complex_float_type_node) = float_type_node;
6287   layout_type (complex_float_type_node);
6288
6289   complex_double_type_node = make_node (COMPLEX_TYPE);
6290   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
6291                         complex_double_type_node));
6292   TREE_TYPE (complex_double_type_node) = double_type_node;
6293   layout_type (complex_double_type_node);
6294
6295   complex_long_double_type_node = make_node (COMPLEX_TYPE);
6296   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
6297                         complex_long_double_type_node));
6298   TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
6299   layout_type (complex_long_double_type_node);
6300
6301   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6302   java_short_type_node = record_builtin_java_type ("__java_short", 16);
6303   java_int_type_node = record_builtin_java_type ("__java_int", 32);
6304   java_long_type_node = record_builtin_java_type ("__java_long", 64);
6305   java_float_type_node = record_builtin_java_type ("__java_float", -32);
6306   java_double_type_node = record_builtin_java_type ("__java_double", -64);
6307   java_char_type_node = record_builtin_java_type ("__java_char", -16);
6308   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
6309
6310   integer_zero_node = build_int_2 (0, 0);
6311   TREE_TYPE (integer_zero_node) = integer_type_node;
6312   integer_one_node = build_int_2 (1, 0);
6313   TREE_TYPE (integer_one_node) = integer_type_node;
6314   integer_two_node = build_int_2 (2, 0);
6315   TREE_TYPE (integer_two_node) = integer_type_node;
6316   integer_three_node = build_int_2 (3, 0);
6317   TREE_TYPE (integer_three_node) = integer_type_node;
6318
6319   boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6320   TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
6321   TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6322   TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6323   TYPE_PRECISION (boolean_type_node) = 1;
6324   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6325   boolean_false_node = build_int_2 (0, 0);
6326   TREE_TYPE (boolean_false_node) = boolean_type_node;
6327   boolean_true_node = build_int_2 (1, 0);
6328   TREE_TYPE (boolean_true_node) = boolean_type_node;
6329
6330   /* These are needed by stor-layout.c.  */
6331   size_zero_node = size_int (0);
6332   size_one_node = size_int (1);
6333
6334   signed_size_zero_node = build_int_2 (0, 0);
6335   TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6336
6337   void_type_node = make_node (VOID_TYPE);
6338   record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
6339   layout_type (void_type_node); /* Uses integer_zero_node.  */
6340   void_list_node = build_tree_list (NULL_TREE, void_type_node);
6341   TREE_PARMLIST (void_list_node) = 1;
6342
6343   null_pointer_node = build_int_2 (0, 0);
6344   TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
6345   layout_type (TREE_TYPE (null_pointer_node));
6346      
6347   /* Used for expressions that do nothing, but are not errors.  */
6348   void_zero_node = build_int_2 (0, 0);
6349   TREE_TYPE (void_zero_node) = void_type_node;
6350
6351   string_type_node = build_pointer_type (char_type_node);
6352   const_string_type_node
6353     = build_pointer_type (build_qualified_type (char_type_node, 
6354                                                 TYPE_QUAL_CONST));
6355 #if 0
6356   record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6357 #endif
6358
6359   /* Make a type to be the domain of a few array types
6360      whose domains don't really matter.
6361      200 is small enough that it always fits in size_t
6362      and large enough that it can hold most function names for the
6363      initializations of __FUNCTION__ and __PRETTY_FUNCTION__.  */
6364   array_domain_type = build_index_type (build_int_2 (200, 0));
6365
6366   /* Make a type for arrays of characters.
6367      With luck nothing will ever really depend on the length of this
6368      array type.  */
6369   char_array_type_node
6370     = build_array_type (char_type_node, array_domain_type);
6371   /* Likewise for arrays of ints.  */
6372   int_array_type_node
6373     = build_array_type (integer_type_node, array_domain_type);
6374
6375   /* This is just some anonymous class type.  Nobody should ever
6376      need to look inside this envelope.  */
6377   class_star_type_node = build_pointer_type (make_lang_type (RECORD_TYPE));
6378
6379   if (flag_huge_objects)
6380     delta_type_node = long_integer_type_node;
6381   else
6382     delta_type_node = short_integer_type_node;
6383
6384   default_function_type
6385     = build_function_type (integer_type_node, NULL_TREE);
6386
6387   ptr_type_node = build_pointer_type (void_type_node);
6388   const_ptr_type_node
6389     = build_pointer_type (build_qualified_type (void_type_node,
6390                                                 TYPE_QUAL_CONST));
6391   c_common_nodes_and_builtins (1, flag_no_builtin, flag_no_nonansi_builtin);
6392
6393   void_ftype_ptr
6394     = build_exception_variant (void_ftype_ptr,
6395                                tree_cons (NULL_TREE, NULL_TREE, NULL_TREE));
6396
6397   /* C++ extensions */
6398
6399   unknown_type_node = make_node (UNKNOWN_TYPE);
6400   record_unknown_type (unknown_type_node, "unknown type");
6401
6402   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
6403   TREE_TYPE (unknown_type_node) = unknown_type_node;
6404
6405   TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
6406
6407   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6408      result.  */
6409   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6410   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6411
6412   /* This is for handling opaque types in signatures.  */
6413   opaque_type_node = copy_node (ptr_type_node);
6414   TYPE_MAIN_VARIANT (opaque_type_node) = opaque_type_node;
6415   record_builtin_type (RID_MAX, 0, opaque_type_node);
6416
6417   /* This is special for C++ so functions can be overloaded.  */
6418   wchar_type_node
6419     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (WCHAR_TYPE)));
6420   wchar_type_size = TYPE_PRECISION (wchar_type_node);
6421   signed_wchar_type_node = make_signed_type (wchar_type_size);
6422   unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
6423   wchar_type_node
6424     = TREE_UNSIGNED (wchar_type_node)
6425       ? unsigned_wchar_type_node
6426       : signed_wchar_type_node;
6427   record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
6428
6429   /* Artificial declaration of wchar_t -- can be bashed */
6430   wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
6431                                 wchar_type_node);
6432   pushdecl (wchar_decl_node);
6433
6434   /* This is for wide string constants.  */
6435   wchar_array_type_node
6436     = build_array_type (wchar_type_node, array_domain_type);
6437
6438   if (flag_vtable_thunks)
6439     {
6440       /* Make sure we get a unique function type, so we can give
6441          its pointer type a name.  (This wins for gdb.) */
6442       tree vfunc_type = make_node (FUNCTION_TYPE);
6443       TREE_TYPE (vfunc_type) = integer_type_node;
6444       TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6445       layout_type (vfunc_type);
6446
6447       vtable_entry_type = build_pointer_type (vfunc_type);
6448     }
6449   else
6450     {
6451       vtable_entry_type = make_lang_type (RECORD_TYPE);
6452       fields[0] = build_lang_field_decl (FIELD_DECL, delta_identifier,
6453                                          delta_type_node);
6454       fields[1] = build_lang_field_decl (FIELD_DECL, index_identifier,
6455                                          delta_type_node);
6456       fields[2] = build_lang_field_decl (FIELD_DECL, pfn_identifier,
6457                                          ptr_type_node);
6458       finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6459                            double_type_node);
6460
6461       /* Make this part of an invisible union.  */
6462       fields[3] = copy_node (fields[2]);
6463       TREE_TYPE (fields[3]) = delta_type_node;
6464       DECL_NAME (fields[3]) = delta2_identifier;
6465       DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6466       DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
6467       TREE_UNSIGNED (fields[3]) = 0;
6468       TREE_CHAIN (fields[2]) = fields[3];
6469       vtable_entry_type = build_qualified_type (vtable_entry_type,
6470                                                 TYPE_QUAL_CONST);
6471     }
6472   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
6473
6474   vtbl_type_node
6475     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
6476   layout_type (vtbl_type_node);
6477   vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
6478   record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
6479   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6480   layout_type (vtbl_ptr_type_node);
6481   record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
6482
6483   /* Simplify life by making a "sigtable_entry_type".  Give its
6484      fields names so that the debugger can use them.  */
6485
6486   if (flag_handle_signatures)
6487     {
6488       sigtable_entry_type = make_lang_type (RECORD_TYPE);
6489       fields[0] = build_lang_field_decl (FIELD_DECL, tag_identifier,
6490                                          delta_type_node);
6491       fields[1] = build_lang_field_decl (FIELD_DECL, vb_off_identifier,
6492                                          delta_type_node);
6493       fields[2] = build_lang_field_decl (FIELD_DECL, delta_identifier,
6494                                          delta_type_node);
6495       fields[3] = build_lang_field_decl (FIELD_DECL, index_identifier,
6496                                          delta_type_node);
6497       fields[4] = build_lang_field_decl (FIELD_DECL, pfn_identifier,
6498                                          ptr_type_node);
6499
6500       /* Set the alignment to the max of the alignment of ptr_type_node and
6501          delta_type_node.  Double alignment wastes a word on the Sparc.  */
6502       finish_builtin_type (sigtable_entry_type, SIGTABLE_PTR_TYPE, fields, 4,
6503                            (TYPE_ALIGN (ptr_type_node) > TYPE_ALIGN (delta_type_node))
6504                            ? ptr_type_node
6505                            : delta_type_node);
6506
6507       /* Make this part of an invisible union.  */
6508       fields[5] = copy_node (fields[4]);
6509       TREE_TYPE (fields[5]) = delta_type_node;
6510       DECL_NAME (fields[5]) = vt_off_identifier;
6511       DECL_MODE (fields[5]) = TYPE_MODE (delta_type_node);
6512       DECL_SIZE (fields[5]) = TYPE_SIZE (delta_type_node);
6513       TREE_UNSIGNED (fields[5]) = 0;
6514       TREE_CHAIN (fields[4]) = fields[5];
6515
6516       sigtable_entry_type = build_qualified_type (sigtable_entry_type, 
6517                                                   TYPE_QUAL_CONST);
6518       record_builtin_type (RID_MAX, SIGTABLE_PTR_TYPE, sigtable_entry_type);
6519     }
6520
6521   std_node = build_decl (NAMESPACE_DECL, 
6522                          get_identifier (flag_honor_std ? "fake std":"std"),
6523                          void_type_node);
6524   pushdecl (std_node);
6525
6526   global_type_node = make_node (LANG_TYPE);
6527   record_unknown_type (global_type_node, "global type");
6528
6529   /* Now, C++.  */
6530   current_lang_name = lang_name_cplusplus;
6531
6532   {
6533     tree bad_alloc_type_node, newtype, deltype;
6534     if (flag_honor_std)
6535       push_namespace (get_identifier ("std"));
6536     bad_alloc_type_node = xref_tag
6537       (class_type_node, get_identifier ("bad_alloc"), 1);
6538     if (flag_honor_std)
6539       pop_namespace ();
6540     newtype = build_exception_variant
6541       (ptr_ftype_sizetype, build_tree_list (NULL_TREE, bad_alloc_type_node));
6542     deltype = build_exception_variant
6543       (void_ftype_ptr, build_tree_list (NULL_TREE, NULL_TREE));
6544     auto_function (ansi_opname[(int) NEW_EXPR], newtype, NOT_BUILT_IN);
6545     auto_function (ansi_opname[(int) VEC_NEW_EXPR], newtype, NOT_BUILT_IN);
6546     global_delete_fndecl
6547       = auto_function (ansi_opname[(int) DELETE_EXPR], deltype, NOT_BUILT_IN);
6548     auto_function (ansi_opname[(int) VEC_DELETE_EXPR], deltype, NOT_BUILT_IN);
6549   }
6550
6551   abort_fndecl
6552     = define_function ("__pure_virtual", void_ftype,
6553                        NOT_BUILT_IN, 0, 0);
6554
6555   /* Perform other language dependent initializations.  */
6556   init_class_processing ();
6557   init_init_processing ();
6558   init_search_processing ();
6559   if (flag_rtti)
6560     init_rtti_processing ();
6561
6562   if (flag_exceptions)
6563     init_exception_processing ();
6564   if (flag_no_inline)
6565     {
6566       flag_inline_functions = 0;
6567     }
6568
6569   if (! supports_one_only ())
6570     flag_weak = 0;
6571
6572   /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__.  */
6573   declare_function_name ();
6574
6575   /* Prepare to check format strings against argument lists.  */
6576   init_function_format_info ();
6577
6578   /* Show we use EH for cleanups.  */
6579   using_eh_for_cleanups ();
6580
6581   print_error_function = lang_print_error_function;
6582   lang_get_alias_set = &c_get_alias_set;
6583   valid_lang_attribute = cp_valid_lang_attribute;
6584
6585   /* Maintain consistency.  Perhaps we should just complain if they
6586      say -fwritable-strings?  */
6587   if (flag_writable_strings)
6588     flag_const_strings = 0;
6589 }
6590
6591 /* Function to print any language-specific context for an error message.  */
6592
6593 static void
6594 lang_print_error_function (file)
6595      char *file;
6596 {
6597   default_print_error_function (file);
6598   maybe_print_template_context ();
6599 }
6600
6601 /* Make a definition for a builtin function named NAME and whose data type
6602    is TYPE.  TYPE should be a function type with argument types.
6603    FUNCTION_CODE tells later passes how to compile calls to this function.
6604    See tree.h for its possible values.
6605
6606    If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6607    the name to be called if we can't opencode the function.  */
6608
6609 tree
6610 define_function (name, type, function_code, pfn, library_name)
6611      const char *name;
6612      tree type;
6613      enum built_in_function function_code;
6614      void (*pfn) PROTO((tree));
6615      const char *library_name;
6616 {
6617   tree decl = build_lang_decl (FUNCTION_DECL, get_identifier (name), type);
6618   DECL_EXTERNAL (decl) = 1;
6619   TREE_PUBLIC (decl) = 1;
6620   DECL_ARTIFICIAL (decl) = 1;
6621
6622   my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
6623   DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
6624
6625   /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6626      we cannot change DECL_ASSEMBLER_NAME until we have installed this
6627      function in the namespace.  */
6628   if (pfn) (*pfn) (decl);
6629   if (library_name)
6630     DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
6631   make_function_rtl (decl);
6632   if (function_code != NOT_BUILT_IN)
6633     {
6634       DECL_BUILT_IN (decl) = 1;
6635       DECL_FUNCTION_CODE (decl) = function_code;
6636     }
6637   return decl;
6638 }
6639
6640 tree
6641 builtin_function (name, type, code, libname)
6642      const char *name;
6643      tree type;
6644      enum built_in_function code;
6645      const char *libname;
6646 {
6647   return define_function (name, type, code, (void (*) PROTO((tree)))pushdecl, libname);
6648 }
6649 \f
6650 /* When we call finish_struct for an anonymous union, we create
6651    default copy constructors and such.  But, an anonymous union
6652    shouldn't have such things; this function undoes the damage to the
6653    anonymous union type T.
6654
6655    (The reason that we create the synthesized methods is that we don't
6656    distinguish `union { int i; }' from `typedef union { int i; } U'.
6657    The first is an anonymous union; the second is just an ordinary
6658    union type.)  */
6659
6660 void
6661 fixup_anonymous_aggr (t)
6662      tree t;
6663 {
6664   tree *q;
6665
6666   /* Wipe out memory of synthesized methods */
6667   TYPE_HAS_CONSTRUCTOR (t) = 0;
6668   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6669   TYPE_HAS_INIT_REF (t) = 0;
6670   TYPE_HAS_CONST_INIT_REF (t) = 0;
6671   TYPE_HAS_ASSIGN_REF (t) = 0;
6672   TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6673
6674   /* Splice the implicitly generated functions out of the TYPE_METHODS
6675      list.  */
6676   q = &TYPE_METHODS (t);
6677   while (*q)
6678     {
6679       if (DECL_ARTIFICIAL (*q))
6680         *q = TREE_CHAIN (*q);
6681       else
6682         q = &TREE_CHAIN (*q);
6683     }
6684
6685   /* ANSI C++ June 5 1992 WP 9.5.3.  Anonymous unions may not have
6686      function members.  */
6687   if (TYPE_METHODS (t))
6688     error ("an anonymous union cannot have function members");
6689 }
6690
6691 /* Make sure that a declaration with no declarator is well-formed, i.e.
6692    just defines a tagged type or anonymous union.
6693
6694    Returns the type defined, if any.  */
6695
6696 tree
6697 check_tag_decl (declspecs)
6698      tree declspecs;
6699 {
6700   int found_type = 0;
6701   tree ob_modifier = NULL_TREE;
6702   register tree link;
6703   register tree t = NULL_TREE;
6704
6705   for (link = declspecs; link; link = TREE_CHAIN (link))
6706     {
6707       register tree value = TREE_VALUE (link);
6708
6709       if (TYPE_P (value))
6710         {
6711           ++found_type;
6712
6713           if (IS_AGGR_TYPE (value) || TREE_CODE (value) == ENUMERAL_TYPE)
6714             {
6715               my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
6716               t = value;
6717             }
6718         }
6719       else if (value == ridpointers[(int) RID_FRIEND])
6720         {
6721           if (current_class_type == NULL_TREE
6722               || current_scope () != current_class_type)
6723             ob_modifier = value;
6724         }
6725       else if (value == ridpointers[(int) RID_STATIC]
6726                || value == ridpointers[(int) RID_EXTERN]
6727                || value == ridpointers[(int) RID_AUTO]
6728                || value == ridpointers[(int) RID_REGISTER]
6729                || value == ridpointers[(int) RID_INLINE]
6730                || value == ridpointers[(int) RID_VIRTUAL]
6731                || value == ridpointers[(int) RID_CONST]
6732                || value == ridpointers[(int) RID_VOLATILE]
6733                || value == ridpointers[(int) RID_EXPLICIT])
6734         ob_modifier = value;
6735     }
6736
6737   if (found_type > 1)
6738     error ("multiple types in one declaration");
6739
6740   /* Inside a class, we might be in a friend or access declaration.
6741      Until we have a good way of detecting the latter, don't warn.  */
6742   if (t == NULL_TREE && ! current_class_type)
6743     pedwarn ("declaration does not declare anything");
6744
6745   /* Check for an anonymous union.  We're careful
6746      accessing TYPE_IDENTIFIER because some built-in types, like
6747      pointer-to-member types, do not have TYPE_NAME.  */
6748   else if (t && IS_AGGR_TYPE_CODE (TREE_CODE (t))
6749            && TYPE_NAME (t)
6750            && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
6751     {
6752       /* Anonymous unions are objects, so they can have specifiers.  */;
6753       SET_ANON_AGGR_TYPE_P (t);
6754
6755       if (TREE_CODE (t) != UNION_TYPE && pedantic && ! in_system_header)
6756         pedwarn ("ISO C++ prohibits anonymous structs");
6757     }
6758
6759   else if (ob_modifier)
6760     {
6761       if (ob_modifier == ridpointers[(int) RID_INLINE]
6762           || ob_modifier == ridpointers[(int) RID_VIRTUAL])
6763         cp_error ("`%D' can only be specified for functions", ob_modifier);
6764       else if (ob_modifier == ridpointers[(int) RID_FRIEND])
6765         cp_error ("`%D' can only be specified inside a class", ob_modifier);
6766       else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
6767         cp_error ("`%D' can only be specified for constructors",
6768                   ob_modifier);
6769       else
6770         cp_error ("`%D' can only be specified for objects and functions",
6771                   ob_modifier);
6772     }
6773
6774   return t;
6775 }
6776
6777 /* Called when a declaration is seen that contains no names to declare.
6778    If its type is a reference to a structure, union or enum inherited
6779    from a containing scope, shadow that tag name for the current scope
6780    with a forward reference.
6781    If its type defines a new named structure or union
6782    or defines an enum, it is valid but we need not do anything here.
6783    Otherwise, it is an error.
6784
6785    C++: may have to grok the declspecs to learn about static,
6786    complain for anonymous unions.  */
6787
6788 void
6789 shadow_tag (declspecs)
6790      tree declspecs;
6791 {
6792   tree t = check_tag_decl (declspecs);
6793
6794   if (t)
6795     maybe_process_partial_specialization (t);
6796
6797   /* This is where the variables in an anonymous union are
6798      declared.  An anonymous union declaration looks like:
6799      union { ... } ;
6800      because there is no declarator after the union, the parser
6801      sends that declaration here.  */
6802   if (t && ANON_AGGR_TYPE_P (t))
6803     {
6804       fixup_anonymous_aggr (t);
6805
6806       if (TYPE_FIELDS (t))
6807         {
6808           tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
6809                                       NULL_TREE);
6810           finish_anon_union (decl);
6811         }
6812     }
6813 }
6814 \f
6815 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
6816
6817 tree
6818 groktypename (typename)
6819      tree typename;
6820 {
6821   if (TREE_CODE (typename) != TREE_LIST)
6822     return typename;
6823   return grokdeclarator (TREE_VALUE (typename),
6824                          TREE_PURPOSE (typename),
6825                          TYPENAME, 0, NULL_TREE);
6826 }
6827
6828 /* Decode a declarator in an ordinary declaration or data definition.
6829    This is called as soon as the type information and variable name
6830    have been parsed, before parsing the initializer if any.
6831    Here we create the ..._DECL node, fill in its type,
6832    and put it on the list of decls for the current context.
6833    The ..._DECL node is returned as the value.
6834
6835    Exception: for arrays where the length is not specified,
6836    the type is left null, to be filled in by `cp_finish_decl'.
6837
6838    Function definitions do not come here; they go to start_function
6839    instead.  However, external and forward declarations of functions
6840    do go through here.  Structure field declarations are done by
6841    grokfield and not through here.  */
6842
6843 /* Set this to zero to debug not using the temporary obstack
6844    to parse initializers.  */
6845 int debug_temp_inits = 1;
6846
6847 tree
6848 start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
6849      tree declarator, declspecs;
6850      int initialized;
6851      tree attributes, prefix_attributes;
6852 {
6853   register tree decl;
6854   register tree type, tem;
6855   tree context;
6856   extern int have_extern_spec;
6857   extern int used_extern_spec;
6858   tree attrlist;
6859
6860 #if 0
6861   /* See code below that used this.  */
6862   int init_written = initialized;
6863 #endif
6864
6865   /* This should only be done once on the top most decl.  */
6866   if (have_extern_spec && !used_extern_spec)
6867     {
6868       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
6869                                   declspecs);
6870       used_extern_spec = 1;
6871     }
6872
6873   if (attributes || prefix_attributes)
6874     attrlist = build_scratch_list (attributes, prefix_attributes);
6875   else
6876     attrlist = NULL_TREE;
6877
6878   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
6879                          attrlist);
6880                          
6881   if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
6882     return NULL_TREE;
6883
6884   type = TREE_TYPE (decl);
6885
6886   if (type == error_mark_node)
6887     return NULL_TREE;
6888
6889   /* Don't lose if destructors must be executed at file-level.  */
6890   if (! processing_template_decl && TREE_STATIC (decl)
6891       && TYPE_NEEDS_DESTRUCTOR (complete_type (type))
6892       && !TREE_PERMANENT (decl))
6893     {
6894       push_obstacks (&permanent_obstack, &permanent_obstack);
6895       decl = copy_node (decl);
6896       if (TREE_CODE (type) == ARRAY_TYPE)
6897         {
6898           tree itype = TYPE_DOMAIN (type);
6899           if (itype && ! TREE_PERMANENT (itype))
6900             {
6901               itype = build_index_type (copy_to_permanent (TYPE_MAX_VALUE (itype)));
6902               type = build_cplus_array_type (TREE_TYPE (type), itype);
6903               TREE_TYPE (decl) = type;
6904             }
6905         }
6906       pop_obstacks ();
6907     }
6908
6909   context
6910     = (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
6911       ? DECL_CLASS_CONTEXT (decl)
6912       : DECL_CONTEXT (decl);
6913
6914   if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
6915       && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
6916     {
6917       /* When parsing the initializer, lookup should use the object's
6918          namespace. */
6919       push_decl_namespace (context);
6920     }
6921
6922   /* We are only interested in class contexts, later. */
6923   if (context && TREE_CODE (context) == NAMESPACE_DECL)
6924     context = NULL_TREE;
6925
6926   if (initialized)
6927     /* Is it valid for this decl to have an initializer at all?
6928        If not, set INITIALIZED to zero, which will indirectly
6929        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
6930     switch (TREE_CODE (decl))
6931       {
6932       case TYPE_DECL:
6933         /* typedef foo = bar  means give foo the same type as bar.
6934            We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
6935            Any other case of an initialization in a TYPE_DECL is an error.  */
6936         if (pedantic || list_length (declspecs) > 1)
6937           {
6938             cp_error ("typedef `%D' is initialized", decl);
6939             initialized = 0;
6940           }
6941         break;
6942
6943       case FUNCTION_DECL:
6944         cp_error ("function `%#D' is initialized like a variable", decl);
6945         initialized = 0;
6946         break;
6947
6948       default:
6949         break;
6950       }
6951
6952   if (initialized)
6953     {
6954       if (! toplevel_bindings_p ()
6955           && DECL_EXTERNAL (decl))
6956         cp_warning ("declaration of `%#D' has `extern' and is initialized",
6957                     decl);
6958       DECL_EXTERNAL (decl) = 0;
6959       if (toplevel_bindings_p ())
6960         TREE_STATIC (decl) = 1;
6961
6962       /* Tell `pushdecl' this is an initialized decl
6963          even though we don't yet have the initializer expression.
6964          Also tell `cp_finish_decl' it may store the real initializer.  */
6965       DECL_INITIAL (decl) = error_mark_node;
6966     }
6967
6968   if (context && TYPE_SIZE (complete_type (context)) != NULL_TREE)
6969     {
6970       push_nested_class (context, 2);
6971
6972       if (TREE_CODE (decl) == VAR_DECL)
6973         {
6974           tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
6975           if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
6976             cp_error ("`%#D' is not a static member of `%#T'", decl, context);
6977           else
6978             {
6979               if (DECL_CONTEXT (field) != context)
6980                 {
6981                   cp_pedwarn ("ANSI C++ does not permit `%T::%D' to be defined as `%T::%D'",
6982                               DECL_CONTEXT (field), DECL_NAME (decl),
6983                               context, DECL_NAME (decl));
6984                   DECL_CONTEXT (decl) = DECL_CONTEXT (field);
6985                 }
6986               /* Static data member are tricky; an in-class initialization
6987                  still doesn't provide a definition, so the in-class
6988                  declaration will have DECL_EXTERNAL set, but will have an
6989                  initialization.  Thus, duplicate_decls won't warn
6990                  about this situation, and so we check here.  */
6991               if (DECL_INITIAL (decl) && DECL_INITIAL (field))
6992                 cp_error ("duplicate initialization of %D", decl);
6993               if (duplicate_decls (decl, field))
6994                 decl = field;
6995             }
6996         }
6997       else
6998         {
6999           tree field = check_classfn (context, decl);
7000           if (field && duplicate_decls (decl, field))
7001             decl = field;
7002         }
7003
7004       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
7005       DECL_IN_AGGR_P (decl) = 0;
7006       if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl)) 
7007           || CLASSTYPE_USE_TEMPLATE (context))
7008         {
7009           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
7010           /* [temp.expl.spec] An explicit specialization of a static data
7011              member of a template is a definition if the declaration
7012              includes an initializer; otherwise, it is a declaration.
7013
7014              We check for processing_specialization so this only applies
7015              to the new specialization syntax.  */
7016           if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
7017             DECL_EXTERNAL (decl) = 1;
7018         }
7019
7020       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
7021         cp_pedwarn ("declaration of `%#D' outside of class is not definition",
7022                     decl);
7023     }
7024
7025 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
7026   SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
7027 #endif
7028   
7029   /* Set attributes here so if duplicate decl, will have proper attributes.  */
7030   cplus_decl_attributes (decl, attributes, prefix_attributes);
7031
7032   /* Add this decl to the current binding level, but not if it
7033      comes from another scope, e.g. a static member variable.
7034      TEM may equal DECL or it may be a previous decl of the same name.  */
7035   
7036   if ((TREE_CODE (decl) != PARM_DECL && DECL_CONTEXT (decl) != NULL_TREE 
7037        /* Definitions of namespace members outside their namespace are
7038           possible. */
7039        && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
7040       || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
7041       || TREE_CODE (type) == LANG_TYPE
7042       /* The declaration of template specializations does not affect
7043          the functions available for overload resolution, so we do not
7044          call pushdecl.  */
7045       || (TREE_CODE (decl) == FUNCTION_DECL
7046           && DECL_TEMPLATE_SPECIALIZATION (decl)))
7047     tem = decl;
7048   else
7049     tem = pushdecl (decl);
7050
7051   if (processing_template_decl)
7052     {
7053       if (! current_function_decl)
7054         tem = push_template_decl (tem);
7055       else if (minimal_parse_mode)
7056         DECL_VINDEX (tem)
7057             = build_min_nt (DECL_STMT, copy_to_permanent (declarator),
7058                             copy_to_permanent (declspecs),
7059                             NULL_TREE);
7060     }
7061
7062
7063 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7064   /* Tell the back-end to use or not use .common as appropriate.  If we say
7065      -fconserve-space, we want this to save .data space, at the expense of
7066      wrong semantics.  If we say -fno-conserve-space, we want this to
7067      produce errors about redefs; to do this we force variables into the
7068      data segment.  */
7069   DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
7070 #endif
7071   
7072   if (! processing_template_decl)
7073     start_decl_1 (tem);
7074
7075   /* Corresponding pop_obstacks is done in `cp_finish_decl'.  */
7076   push_obstacks_nochange ();
7077
7078 #if 0
7079   /* We have no way of knowing whether the initializer will need to be
7080      evaluated at run-time or not until we've parsed it, so let's just put
7081      it in the permanent obstack.  (jason) */
7082   if (init_written
7083       && ! (TREE_CODE (tem) == PARM_DECL
7084             || (TREE_READONLY (tem)
7085                 && (TREE_CODE (tem) == VAR_DECL
7086                     || TREE_CODE (tem) == FIELD_DECL))))
7087     {
7088       /* When parsing and digesting the initializer,
7089          use temporary storage.  Do this even if we will ignore the value.  */
7090       if (toplevel_bindings_p () && debug_temp_inits)
7091         {
7092           if (processing_template_decl
7093               || TYPE_NEEDS_CONSTRUCTING (type)
7094               || TREE_CODE (type) == REFERENCE_TYPE)
7095             /* In this case, the initializer must lay down in permanent
7096                storage, since it will be saved until `finish_file' is run.   */
7097             ;
7098           else
7099             temporary_allocation ();
7100         }
7101     }
7102 #endif
7103
7104   return tem;
7105 }
7106
7107 void
7108 start_decl_1 (decl)
7109      tree decl;
7110 {
7111   tree type = TREE_TYPE (decl);
7112   int initialized = (DECL_INITIAL (decl) != NULL_TREE);
7113
7114   if (type == error_mark_node)
7115     return;
7116
7117   /* If this type of object needs a cleanup, and control may
7118      jump past it, make a new binding level so that it is cleaned
7119      up only when it is initialized first.  */
7120   if (TYPE_NEEDS_DESTRUCTOR (type)
7121       && current_binding_level->more_cleanups_ok == 0)
7122     pushlevel_temporary (1);
7123
7124   if (initialized)
7125     /* Is it valid for this decl to have an initializer at all?
7126        If not, set INITIALIZED to zero, which will indirectly
7127        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
7128     {
7129       /* Don't allow initializations for incomplete types except for
7130          arrays which might be completed by the initialization.  */
7131       if (TYPE_SIZE (complete_type (type)) != NULL_TREE)
7132         ;                       /* A complete type is ok.  */
7133       else if (TREE_CODE (type) != ARRAY_TYPE)
7134         {
7135           cp_error ("variable `%#D' has initializer but incomplete type",
7136                     decl);
7137           initialized = 0;
7138           type = TREE_TYPE (decl) = error_mark_node;
7139         }
7140       else if (TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
7141         {
7142           if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
7143             cp_error ("elements of array `%#D' have incomplete type", decl);
7144           /* else we already gave an error in start_decl.  */
7145           initialized = 0;
7146         }
7147     }
7148
7149   if (!initialized
7150       && TREE_CODE (decl) != TYPE_DECL
7151       && TREE_CODE (decl) != TEMPLATE_DECL
7152       && IS_AGGR_TYPE (type) && ! DECL_EXTERNAL (decl))
7153     {
7154       if ((! processing_template_decl || ! uses_template_parms (type))
7155           && TYPE_SIZE (complete_type (type)) == NULL_TREE)
7156         {
7157           cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
7158                  decl);
7159           /* Change the type so that assemble_variable will give
7160              DECL an rtl we can live with: (mem (const_int 0)).  */
7161           type = TREE_TYPE (decl) = error_mark_node;
7162         }
7163       else
7164         {
7165           /* If any base type in the hierarchy of TYPE needs a constructor,
7166              then we set initialized to 1.  This way any nodes which are
7167              created for the purposes of initializing this aggregate
7168              will live as long as it does.  This is necessary for global
7169              aggregates which do not have their initializers processed until
7170              the end of the file.  */
7171           initialized = TYPE_NEEDS_CONSTRUCTING (type);
7172         }
7173     }
7174
7175 #if 0
7176   /* We don't do this yet for GNU C++.  */
7177   /* For a local variable, define the RTL now.  */
7178   if (! toplevel_bindings_p ()
7179       /* But not if this is a duplicate decl
7180          and we preserved the rtl from the previous one
7181          (which may or may not happen).  */
7182       && DECL_RTL (tem) == NULL_RTX)
7183     {
7184       if (TYPE_SIZE (TREE_TYPE (tem)) != NULL_TREE)
7185         expand_decl (tem);
7186       else if (TREE_CODE (TREE_TYPE (tem)) == ARRAY_TYPE
7187                && DECL_INITIAL (tem) != NULL_TREE)
7188         expand_decl (tem);
7189     }
7190 #endif
7191
7192   if (! initialized)
7193     DECL_INITIAL (decl) = NULL_TREE;
7194 }
7195
7196 /* Handle initialization of references.
7197    These three arguments are from `cp_finish_decl', and have the
7198    same meaning here that they do there.
7199
7200    Quotes on semantics can be found in ARM 8.4.3.  */
7201
7202 static void
7203 grok_reference_init (decl, type, init)
7204      tree decl, type, init;
7205 {
7206   tree tmp;
7207
7208   if (init == NULL_TREE)
7209     {
7210       if ((DECL_LANG_SPECIFIC (decl) == 0
7211            || DECL_IN_AGGR_P (decl) == 0)
7212           && ! DECL_THIS_EXTERN (decl))
7213         {
7214           cp_error ("`%D' declared as reference but not initialized", decl);
7215           if (TREE_CODE (decl) == VAR_DECL)
7216             SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
7217         }
7218       return;
7219     }
7220
7221   if (init == error_mark_node)
7222     return;
7223
7224   if (TREE_CODE (type) == REFERENCE_TYPE
7225       && TREE_CODE (init) == CONSTRUCTOR)
7226     {
7227       cp_error ("ANSI C++ forbids use of initializer list to initialize reference `%D'", decl);
7228       return;
7229     }
7230
7231   if (TREE_CODE (init) == TREE_LIST)
7232     init = build_compound_expr (init);
7233
7234   if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
7235     init = convert_from_reference (init);
7236
7237   if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
7238       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
7239     {
7240       /* Note: default conversion is only called in very special cases.  */
7241       init = default_conversion (init);
7242     }
7243
7244   tmp = convert_to_reference
7245     (type, init, CONV_IMPLICIT,
7246      LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
7247
7248   if (tmp == error_mark_node)
7249     goto fail;
7250   else if (tmp != NULL_TREE)
7251     {
7252       init = tmp;
7253       DECL_INITIAL (decl) = save_expr (init);
7254     }
7255   else
7256     {
7257       cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
7258       goto fail;
7259     }
7260
7261   /* ?? Can this be optimized in some cases to
7262      hand back the DECL_INITIAL slot??  */
7263   if (TYPE_SIZE (TREE_TYPE (type)))
7264     {
7265       init = convert_from_reference (decl);
7266       if (TREE_PERMANENT (decl))
7267         init = copy_to_permanent (init);
7268       SET_DECL_REFERENCE_SLOT (decl, init);
7269     }
7270
7271   if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
7272     {
7273       expand_static_init (decl, DECL_INITIAL (decl));
7274       DECL_INITIAL (decl) = NULL_TREE;
7275     }
7276   return;
7277
7278  fail:
7279   if (TREE_CODE (decl) == VAR_DECL)
7280     SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
7281   return;
7282 }
7283
7284 /* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7285    mucking with forces it does not comprehend (i.e. initialization with a
7286    constructor).  If we are at global scope and won't go into COMMON, fill
7287    it in with a dummy CONSTRUCTOR to force the variable into .data;
7288    otherwise we can use error_mark_node.  */
7289
7290 static tree
7291 obscure_complex_init (decl, init)
7292      tree decl, init;
7293 {
7294   if (! flag_no_inline && TREE_STATIC (decl))
7295     {
7296       if (extract_init (decl, init))
7297         return NULL_TREE;
7298     }
7299
7300 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7301   if (toplevel_bindings_p () && ! DECL_COMMON (decl))
7302     DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7303                                  NULL_TREE);
7304   else
7305 #endif
7306     DECL_INITIAL (decl) = error_mark_node;
7307
7308   return init;
7309 }
7310
7311 /* Issue an error message if DECL is an uninitialized const variable.  */
7312
7313 static void
7314 check_for_uninitialized_const_var (decl)
7315      tree decl;
7316 {
7317   tree type = TREE_TYPE (decl);
7318
7319   /* ``Unless explicitly declared extern, a const object does not have
7320      external linkage and must be initialized. ($8.4; $12.1)'' ARM
7321      7.1.6 */
7322   if (TREE_CODE (decl) == VAR_DECL
7323       && TREE_CODE (type) != REFERENCE_TYPE
7324       && CP_TYPE_CONST_P (type)
7325       && !TYPE_NEEDS_CONSTRUCTING (type)
7326       && !DECL_INITIAL (decl))
7327     cp_error ("uninitialized const `%D'", decl);
7328 }
7329
7330 /* Finish processing of a declaration;
7331    install its line number and initial value.
7332    If the length of an array type is not known before,
7333    it must be determined now, from the initial value, or it is an error.
7334
7335    Call `pop_obstacks' iff NEED_POP is nonzero.
7336
7337    For C++, `cp_finish_decl' must be fairly evasive:  it must keep initializers
7338    for aggregates that have constructors alive on the permanent obstack,
7339    so that the global initializing functions can be written at the end.
7340
7341    INIT0 holds the value of an initializer that should be allowed to escape
7342    the normal rules.
7343
7344    FLAGS is LOOKUP_ONLYCONVERTING is the = init syntax was used, else 0
7345    if the (init) syntax was used.
7346
7347    For functions that take default parameters, DECL points to its
7348    "maximal" instantiation.  `cp_finish_decl' must then also declared its
7349    subsequently lower and lower forms of instantiation, checking for
7350    ambiguity as it goes.  This can be sped up later.  */
7351
7352 void
7353 cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
7354      tree decl, init;
7355      tree asmspec_tree;
7356      int need_pop;
7357      int flags;
7358 {
7359   register tree type;
7360   tree cleanup = NULL_TREE, ttype = NULL_TREE;
7361   int was_incomplete;
7362   int temporary = allocation_temporary_p ();
7363   char *asmspec = NULL;
7364   int was_readonly = 0;
7365   int already_used = 0;
7366   tree core_type;
7367
7368   /* If this is 0, then we did not change obstacks.  */
7369   if (! decl)
7370     {
7371       if (init)
7372         error ("assignment (not initialization) in declaration");
7373       return;
7374     }
7375
7376   /* If a name was specified, get the string.  */
7377   if (asmspec_tree)
7378       asmspec = TREE_STRING_POINTER (asmspec_tree);
7379
7380   if (init && TREE_CODE (init) == NAMESPACE_DECL)
7381     {
7382       cp_error ("Cannot initialize `%D' to namespace `%D'",
7383                 decl, init);
7384       init = NULL_TREE;
7385     }
7386
7387   if (current_class_type
7388       && DECL_REAL_CONTEXT (decl) == current_class_type
7389       && TYPE_BEING_DEFINED (current_class_type)
7390       && (DECL_INITIAL (decl) || init))
7391     DECL_DEFINED_IN_CLASS_P (decl) = 1;
7392
7393   if (TREE_CODE (decl) == VAR_DECL 
7394       && DECL_CONTEXT (decl)
7395       && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
7396       && DECL_CONTEXT (decl) != current_namespace
7397       && init)
7398     {
7399       /* Leave the namespace of the object. */
7400       pop_decl_namespace ();
7401     }
7402
7403   /* If the type of the thing we are declaring either has
7404      a constructor, or has a virtual function table pointer,
7405      AND its initialization was accepted by `start_decl',
7406      then we stayed on the permanent obstack through the
7407      declaration, otherwise, changed obstacks as GCC would.  */
7408
7409   type = TREE_TYPE (decl);
7410
7411   if (type == error_mark_node)
7412     {
7413       if (toplevel_bindings_p () && temporary)
7414         end_temporary_allocation ();
7415
7416       return;
7417     }
7418
7419   if (TYPE_HAS_MUTABLE_P (type))
7420     TREE_READONLY (decl) = 0;
7421   
7422   if (processing_template_decl)
7423     {
7424       if (init && DECL_INITIAL (decl))
7425         DECL_INITIAL (decl) = init;
7426       if (minimal_parse_mode && ! DECL_ARTIFICIAL (decl))
7427         {
7428           tree stmt = DECL_VINDEX (decl);
7429           /* If the decl is declaring a member of a local class (in a
7430              template function), the DECL_VINDEX will either be NULL,
7431              or it will be an actual virtual function index, not a
7432              DECL_STMT.  */
7433           if (stmt != NULL_TREE && TREE_CODE (stmt) == DECL_STMT)
7434             {
7435               DECL_VINDEX (decl) = NULL_TREE;
7436               TREE_OPERAND (stmt, 2) = copy_to_permanent (init);
7437               add_tree (stmt);
7438             }
7439         }
7440
7441       goto finish_end0;
7442     }
7443
7444   /* Take care of TYPE_DECLs up front.  */
7445   if (TREE_CODE (decl) == TYPE_DECL)
7446     {
7447       if (init && DECL_INITIAL (decl))
7448         {
7449           /* typedef foo = bar; store the type of bar as the type of foo.  */
7450           TREE_TYPE (decl) = type = TREE_TYPE (init);
7451           DECL_INITIAL (decl) = init = NULL_TREE;
7452         }
7453       if (type != error_mark_node
7454           && IS_AGGR_TYPE (type) && DECL_NAME (decl))
7455         {
7456           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7457             cp_warning ("shadowing previous type declaration of `%#D'", decl);
7458           set_identifier_type_value (DECL_NAME (decl), type);
7459           CLASSTYPE_GOT_SEMICOLON (type) = 1;
7460         }
7461       GNU_xref_decl (current_function_decl, decl);
7462
7463       /* If we have installed this as the canonical typedef for this
7464          type, and that type has not been defined yet, delay emitting
7465          the debug information for it, as we will emit it later.  */
7466       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7467           && TYPE_SIZE (TREE_TYPE (decl)) == NULL_TREE)
7468         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7469
7470       rest_of_decl_compilation (decl, NULL_PTR,
7471                                 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
7472       goto finish_end;
7473     }
7474
7475   if (TREE_CODE (decl) != FUNCTION_DECL)
7476     ttype = target_type (type);
7477
7478   if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
7479       && TYPE_NEEDS_CONSTRUCTING (type))
7480     {
7481       /* Currently, GNU C++ puts constants in text space, making them
7482          impossible to initialize.  In the future, one would hope for
7483          an operating system which understood the difference between
7484          initialization and the running of a program.  */
7485       was_readonly = 1;
7486       TREE_READONLY (decl) = 0;
7487     }
7488
7489   if (TREE_CODE (decl) == FIELD_DECL)
7490     {
7491       if (init && init != error_mark_node)
7492         my_friendly_assert (TREE_PERMANENT (init), 147);
7493
7494       if (asmspec)
7495         {
7496           /* This must override the asm specifier which was placed
7497              by grokclassfn.  Lay this out fresh.  */
7498           DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
7499           DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7500           make_decl_rtl (decl, asmspec, 0);
7501         }
7502     }
7503   /* If `start_decl' didn't like having an initialization, ignore it now.  */
7504   else if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7505     init = NULL_TREE;
7506   else if (DECL_EXTERNAL (decl))
7507     ;
7508   else if (TREE_CODE (type) == REFERENCE_TYPE
7509            || (TYPE_LANG_SPECIFIC (type) && IS_SIGNATURE_REFERENCE (type)))
7510     {
7511       if (TREE_STATIC (decl))
7512         make_decl_rtl (decl, NULL_PTR,
7513                        toplevel_bindings_p ()
7514                        || pseudo_global_level_p ());
7515       grok_reference_init (decl, type, init);
7516       init = NULL_TREE;
7517     }
7518
7519   /* Check for certain invalid initializations.  */
7520   if (init)
7521     {
7522       if (TYPE_SIZE (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
7523         {
7524           cp_error ("variable-sized object `%D' may not be initialized", decl);
7525           init = NULL_TREE;
7526         }
7527       if (TREE_CODE (type) == ARRAY_TYPE
7528           && !TYPE_SIZE (complete_type (TREE_TYPE (type))))
7529         {
7530           cp_error ("elements of array `%#D' have incomplete type", decl);
7531           init = NULL_TREE;
7532         }
7533     }
7534
7535   GNU_xref_decl (current_function_decl, decl);
7536
7537   core_type = type;
7538   while (TREE_CODE (core_type) == ARRAY_TYPE)
7539     core_type = TREE_TYPE (core_type);
7540   
7541   if (TREE_CODE (decl) == FIELD_DECL)
7542     ;
7543   else if (TREE_CODE (decl) == CONST_DECL)
7544     {
7545       my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7546
7547       DECL_INITIAL (decl) = init;
7548
7549       /* This will keep us from needing to worry about our obstacks.  */
7550       my_friendly_assert (init != NULL_TREE, 149);
7551       init = NULL_TREE;
7552     }
7553   else if (init)
7554     {
7555       if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7556         {
7557           if (TREE_CODE (type) == ARRAY_TYPE)
7558             init = digest_init (type, init, (tree *) 0);
7559           else if (TREE_CODE (init) == CONSTRUCTOR
7560                    && TREE_HAS_CONSTRUCTOR (init))
7561             {
7562               if (TYPE_NON_AGGREGATE_CLASS (type))
7563                 {
7564                   cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7565                             decl);
7566                   init = error_mark_node;
7567                 }
7568               else
7569                 goto dont_use_constructor;
7570             }
7571         }
7572       else
7573         {
7574         dont_use_constructor:
7575           if (TREE_CODE (init) != TREE_VEC)
7576             init = store_init_value (decl, init);
7577         }
7578
7579       if (init)
7580         /* We must hide the initializer so that expand_decl
7581            won't try to do something it does not understand.  */
7582         init = obscure_complex_init (decl, init);
7583     }
7584   else if (DECL_EXTERNAL (decl))
7585     ;
7586   else if (TREE_CODE_CLASS (TREE_CODE (type)) == 't'
7587            && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7588     {
7589       if (! TYPE_NEEDS_CONSTRUCTING (core_type))
7590         {
7591           if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
7592             cp_error ("structure `%D' with uninitialized const members", decl);
7593           if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
7594             cp_error ("structure `%D' with uninitialized reference members",
7595                       decl);
7596         }
7597
7598       check_for_uninitialized_const_var (decl);
7599
7600       if (TYPE_SIZE (type) != NULL_TREE
7601           && TYPE_NEEDS_CONSTRUCTING (type))
7602         init = obscure_complex_init (decl, NULL_TREE);
7603
7604     }
7605   else
7606     check_for_uninitialized_const_var (decl);
7607   
7608   /* For top-level declaration, the initial value was read in
7609      the temporary obstack.  MAXINDEX, rtl, etc. to be made below
7610      must go in the permanent obstack; but don't discard the
7611      temporary data yet.  */
7612
7613   if (toplevel_bindings_p () && temporary)
7614     end_temporary_allocation ();
7615
7616   /* Deduce size of array from initialization, if not already known.  */
7617
7618   if (TREE_CODE (type) == ARRAY_TYPE
7619       && TYPE_DOMAIN (type) == NULL_TREE
7620       && TREE_CODE (decl) != TYPE_DECL)
7621     {
7622       int do_default
7623         = (TREE_STATIC (decl)
7624            /* Even if pedantic, an external linkage array
7625               may have incomplete type at first.  */
7626            ? pedantic && ! DECL_EXTERNAL (decl)
7627            : !DECL_EXTERNAL (decl));
7628       tree initializer = init ? init : DECL_INITIAL (decl);
7629       int failure = complete_array_type (type, initializer, do_default);
7630
7631       if (failure == 1)
7632         cp_error ("initializer fails to determine size of `%D'", decl);
7633
7634       if (failure == 2)
7635         {
7636           if (do_default)
7637             cp_error ("array size missing in `%D'", decl);
7638           /* If a `static' var's size isn't known, make it extern as
7639              well as static, so it does not get allocated.  If it's not
7640              `static', then don't mark it extern; finish_incomplete_decl
7641              will give it a default size and it will get allocated.  */
7642           else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7643             DECL_EXTERNAL (decl) = 1;
7644         }
7645
7646       if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7647           && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7648                               integer_zero_node))
7649         cp_error ("zero-size array `%D'", decl);
7650
7651       layout_decl (decl, 0);
7652     }
7653
7654   if (TREE_CODE (decl) == VAR_DECL)
7655     {
7656       if (DECL_SIZE (decl) == NULL_TREE
7657           && TYPE_SIZE (complete_type (TREE_TYPE (decl))) != NULL_TREE)
7658         layout_decl (decl, 0);
7659
7660       if (TREE_STATIC (decl) && DECL_SIZE (decl) == NULL_TREE)
7661         {
7662           /* A static variable with an incomplete type:
7663              that is an error if it is initialized.
7664              Otherwise, let it through, but if it is not `extern'
7665              then it may cause an error message later.  */
7666           if (DECL_INITIAL (decl) != NULL_TREE)
7667             cp_error ("storage size of `%D' isn't known", decl);
7668           init = NULL_TREE;
7669         }
7670       else if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
7671         {
7672           /* An automatic variable with an incomplete type: that is an error.
7673              Don't talk about array types here, since we took care of that
7674              message in grokdeclarator.  */
7675           cp_error ("storage size of `%D' isn't known", decl);
7676           TREE_TYPE (decl) = error_mark_node;
7677         }
7678       else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7679         /* Let debugger know it should output info for this type.  */
7680         note_debug_info_needed (ttype);
7681
7682       if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7683         note_debug_info_needed (DECL_CONTEXT (decl));
7684
7685       if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7686           && DECL_SIZE (decl) != NULL_TREE
7687           && ! TREE_CONSTANT (DECL_SIZE (decl)))
7688         {
7689           if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7690             constant_expression_warning (DECL_SIZE (decl));
7691           else
7692             cp_error ("storage size of `%D' isn't constant", decl);
7693         }
7694
7695       if (! DECL_EXTERNAL (decl) && TYPE_NEEDS_DESTRUCTOR (type)
7696           /* Cleanups for static variables are handled by `finish_file'.  */
7697           && ! TREE_STATIC (decl))
7698         {
7699           int yes = suspend_momentary ();
7700           cleanup = maybe_build_cleanup (decl);
7701           resume_momentary (yes);
7702         }
7703     }
7704   /* PARM_DECLs get cleanups, too.  */
7705   else if (TREE_CODE (decl) == PARM_DECL && TYPE_NEEDS_DESTRUCTOR (type))
7706     {
7707       if (temporary)
7708         end_temporary_allocation ();
7709       cleanup = maybe_build_cleanup (decl);
7710       if (temporary)
7711         resume_temporary_allocation ();
7712     }
7713
7714   /* Output the assembler code and/or RTL code for variables and functions,
7715      unless the type is an undefined structure or union.
7716      If not, it will get done when the type is completed.  */
7717
7718   was_incomplete = (DECL_SIZE (decl) == NULL_TREE);
7719
7720   if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
7721       || TREE_CODE (decl) == RESULT_DECL)
7722     {
7723       /* ??? FIXME: What about nested classes?  */
7724       int toplev = toplevel_bindings_p () || pseudo_global_level_p ();
7725       int was_temp
7726         = (TREE_STATIC (decl) && TYPE_NEEDS_DESTRUCTOR (type)
7727            && allocation_temporary_p ());
7728
7729       if (was_temp)
7730         end_temporary_allocation ();
7731
7732       /* Static data in a function with comdat linkage also has comdat
7733          linkage.  */
7734       if (TREE_CODE (decl) == VAR_DECL
7735           && TREE_STATIC (decl)
7736           /* Don't mess with __FUNCTION__.  */
7737           && ! TREE_ASM_WRITTEN (decl)
7738           && current_function_decl
7739           && DECL_CONTEXT (decl) == current_function_decl
7740           && (DECL_THIS_INLINE (current_function_decl)
7741               || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7742           && TREE_PUBLIC (current_function_decl))
7743         {
7744           /* Rather than try to get this right with inlining, we suppress
7745              inlining of such functions.  */
7746           current_function_cannot_inline
7747             = "function with static variable cannot be inline";
7748
7749           /* If flag_weak, we don't need to mess with this, as we can just
7750              make the function weak, and let it refer to its unique local
7751              copy.  This works because we don't allow the function to be
7752              inlined.  */
7753           if (! flag_weak)
7754             {
7755               if (DECL_INTERFACE_KNOWN (current_function_decl))
7756                 {
7757                   TREE_PUBLIC (decl) = 1;
7758                   DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7759                 }
7760               else if (DECL_INITIAL (decl) == NULL_TREE
7761                        || DECL_INITIAL (decl) == error_mark_node)
7762                 {
7763                   TREE_PUBLIC (decl) = 1;
7764                   DECL_COMMON (decl) = 1;
7765                 }
7766               /* else we lose. We can only do this if we can use common,
7767                  which we can't if it has been initialized.  */
7768
7769               if (TREE_PUBLIC (decl))
7770                 DECL_ASSEMBLER_NAME (decl)
7771                   = build_static_name (current_function_decl, DECL_NAME (decl));
7772               else if (! DECL_ARTIFICIAL (decl))
7773                 {
7774                   cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7775                   cp_warning_at ("  you can work around this by removing the initializer", decl);
7776                 }
7777             }
7778         }
7779
7780       else if (TREE_CODE (decl) == VAR_DECL
7781                && DECL_LANG_SPECIFIC (decl)
7782                && DECL_COMDAT (decl))
7783         /* Set it up again; we might have set DECL_INITIAL since the
7784            last time.  */
7785         comdat_linkage (decl);
7786
7787       if (TREE_CODE (decl) == VAR_DECL && DECL_VIRTUAL_P (decl))
7788         make_decl_rtl (decl, NULL_PTR, toplev);
7789       else if (TREE_CODE (decl) == VAR_DECL
7790                && TREE_READONLY (decl)
7791                && DECL_INITIAL (decl) != NULL_TREE
7792                && DECL_INITIAL (decl) != error_mark_node
7793                && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
7794         {
7795           DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
7796
7797           if (asmspec)
7798             DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7799
7800           if (! toplev
7801               && TREE_STATIC (decl)
7802               && ! TREE_SIDE_EFFECTS (decl)
7803               && ! TREE_PUBLIC (decl)
7804               && ! DECL_EXTERNAL (decl)
7805               && ! TYPE_NEEDS_DESTRUCTOR (type)
7806               && DECL_MODE (decl) != BLKmode)
7807             {
7808               /* If this variable is really a constant, then fill its DECL_RTL
7809                  slot with something which won't take up storage.
7810                  If something later should take its address, we can always give
7811                  it legitimate RTL at that time.  */
7812               DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
7813               store_expr (DECL_INITIAL (decl), DECL_RTL (decl), 0);
7814               TREE_ASM_WRITTEN (decl) = 1;
7815             }
7816           else if (toplev && ! TREE_PUBLIC (decl))
7817             {
7818               /* If this is a static const, change its apparent linkage
7819                  if it belongs to a #pragma interface.  */
7820               if (!interface_unknown)
7821                 {
7822                   TREE_PUBLIC (decl) = 1;
7823                   DECL_EXTERNAL (decl) = interface_only;
7824                 }
7825               make_decl_rtl (decl, asmspec, toplev);
7826             }
7827           else
7828             rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7829         }
7830       else if (TREE_CODE (decl) == VAR_DECL
7831                && DECL_LANG_SPECIFIC (decl)
7832                && DECL_IN_AGGR_P (decl))
7833         {
7834           if (TREE_STATIC (decl))
7835             {
7836               if (init == NULL_TREE
7837 #ifdef DEFAULT_STATIC_DEFS
7838                   /* If this code is dead, then users must
7839                      explicitly declare static member variables
7840                      outside the class def'n as well.  */
7841                   && TYPE_NEEDS_CONSTRUCTING (type)
7842 #endif
7843                   )
7844                 {
7845                   DECL_EXTERNAL (decl) = 1;
7846                   make_decl_rtl (decl, asmspec, 1);
7847                 }
7848               else
7849                 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7850             }
7851           else
7852             /* Just a constant field.  Should not need any rtl.  */
7853             goto finish_end0;
7854         }
7855       else
7856         rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7857
7858       if (was_temp)
7859         resume_temporary_allocation ();
7860
7861       if (!abstract_virtuals_error (decl, core_type)
7862           && (TREE_CODE (type) == FUNCTION_TYPE
7863               || TREE_CODE (type) == METHOD_TYPE))
7864         abstract_virtuals_error (decl, TREE_TYPE (type));
7865
7866       if (TYPE_LANG_SPECIFIC (core_type) && IS_SIGNATURE (core_type))
7867         signature_error (decl, core_type);
7868       else if ((TREE_CODE (type) == FUNCTION_TYPE
7869                 || TREE_CODE (type) == METHOD_TYPE)
7870                && TYPE_LANG_SPECIFIC (TREE_TYPE (type))
7871                && IS_SIGNATURE (TREE_TYPE (type)))
7872         signature_error (decl, TREE_TYPE (type));
7873
7874       if (TREE_CODE (decl) == FUNCTION_DECL)
7875         ;
7876       else if (DECL_EXTERNAL (decl)
7877                && ! (DECL_LANG_SPECIFIC (decl)
7878                      && DECL_NOT_REALLY_EXTERN (decl)))
7879         {
7880           if (init)
7881             DECL_INITIAL (decl) = init;
7882         }
7883       else if (TREE_STATIC (decl) && type != error_mark_node)
7884         {
7885           /* Cleanups for static variables are handled by `finish_file'.  */
7886           if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
7887               || TYPE_NEEDS_DESTRUCTOR (type))
7888             expand_static_init (decl, init);
7889         }
7890       else if (! toplev)
7891         {
7892           /* This is a declared decl which must live until the
7893              end of the binding contour.  It may need a cleanup.  */
7894
7895           /* Recompute the RTL of a local array now
7896              if it used to be an incomplete type.  */
7897           if (was_incomplete && ! TREE_STATIC (decl))
7898             {
7899               /* If we used it already as memory, it must stay in memory.  */
7900               TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7901               /* If it's still incomplete now, no init will save it.  */
7902               if (DECL_SIZE (decl) == NULL_TREE)
7903                 DECL_INITIAL (decl) = NULL_TREE;
7904               expand_decl (decl);
7905             }
7906           else if (! TREE_ASM_WRITTEN (decl)
7907                    && (TYPE_SIZE (type) != NULL_TREE
7908                        || TREE_CODE (type) == ARRAY_TYPE))
7909             {
7910               /* Do this here, because we did not expand this decl's
7911                  rtl in start_decl.  */
7912               if (DECL_RTL (decl) == NULL_RTX)
7913                 expand_decl (decl);
7914               else if (cleanup)
7915                 {
7916                   /* XXX: Why don't we use decl here?  */
7917                   /* Ans: Because it was already expanded? */
7918                   if (! expand_decl_cleanup (NULL_TREE, cleanup))
7919                     cp_error ("parser lost in parsing declaration of `%D'",
7920                               decl);
7921                   /* Cleanup used up here.  */
7922                   cleanup = NULL_TREE;
7923                 }
7924             }
7925
7926           if (current_binding_level->is_for_scope)
7927             {
7928               struct binding_level *outer 
7929                 = current_binding_level->level_chain;
7930
7931               /* Check to see if the same name is already bound at
7932                  the outer level, either because it was directly declared,
7933                  or because a dead for-decl got preserved.  In either case,
7934                  the code would not have been valid under the ARM
7935                  scope rules, so clear is_for_scope for the
7936                  current_binding_level.
7937
7938                  Otherwise, we need to preserve the temp slot for decl
7939                  to last into the outer binding level.  */
7940
7941               tree outer_binding 
7942                 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
7943               
7944               if (outer_binding && BINDING_LEVEL (outer_binding) == outer
7945                   && (TREE_CODE (BINDING_VALUE (outer_binding)) 
7946                       == VAR_DECL)
7947                   && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
7948                 {
7949                   BINDING_VALUE (outer_binding)
7950                     = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
7951                   current_binding_level->is_for_scope = 0;
7952                 }
7953               else if (DECL_IN_MEMORY_P (decl))
7954                 preserve_temp_slots (DECL_RTL (decl));
7955             }
7956
7957           expand_start_target_temps ();
7958
7959           if (DECL_SIZE (decl) && type != error_mark_node)
7960             {
7961               /* Compute and store the initial value.  */
7962               expand_decl_init (decl);
7963               already_used = TREE_USED (decl) || TREE_USED (type);
7964
7965               if (init || TYPE_NEEDS_CONSTRUCTING (type))
7966                 {
7967                   emit_line_note (DECL_SOURCE_FILE (decl),
7968                                   DECL_SOURCE_LINE (decl));
7969                   expand_aggr_init (decl, init, flags);
7970                 }
7971
7972               /* Set this to 0 so we can tell whether an aggregate which
7973                  was initialized was ever used.  Don't do this if it has a
7974                  destructor, so we don't complain about the 'resource
7975                  allocation is initialization' idiom.  */
7976               /* Now set attribute((unused)) on types so decls of
7977                  that type will be marked used. (see TREE_USED, above.) 
7978                  This avoids the warning problems this particular code
7979                  tried to work around. */
7980
7981               if (TYPE_NEEDS_CONSTRUCTING (type)
7982                   && ! already_used
7983                   && cleanup == NULL_TREE
7984                   && DECL_NAME (decl))
7985                 TREE_USED (decl) = 0;
7986
7987               if (already_used)
7988                 TREE_USED (decl) = 1;
7989             }
7990
7991           /* Cleanup any temporaries needed for the initial value.  */
7992           expand_end_target_temps ();
7993
7994           if (DECL_SIZE (decl) && type != error_mark_node)
7995             {
7996               /* Store the cleanup, if there was one.  */
7997               if (cleanup)
7998                 {
7999                   if (! expand_decl_cleanup (decl, cleanup))
8000                     cp_error ("parser lost in parsing declaration of `%D'",
8001                               decl);
8002                 }
8003             }
8004         }
8005     finish_end0:
8006
8007       /* Undo call to `pushclass' that was done in `start_decl'
8008          due to initialization of qualified member variable.
8009          I.e., Foo::x = 10;  */
8010       {
8011         tree context = DECL_REAL_CONTEXT (decl);
8012         if (context
8013             && TREE_CODE_CLASS (TREE_CODE (context)) == 't'
8014             && (TREE_CODE (decl) == VAR_DECL
8015                 /* We also have a pushclass done that we need to undo here
8016                    if we're at top level and declare a method.  */
8017                 || TREE_CODE (decl) == FUNCTION_DECL)
8018             /* If size hasn't been set, we're still defining it,
8019                and therefore inside the class body; don't pop
8020                the binding level..  */
8021             && TYPE_SIZE (context) != NULL_TREE
8022             && context == current_class_type)
8023           pop_nested_class ();
8024       }
8025     }
8026
8027  finish_end:
8028
8029   /* If requested, warn about definitions of large data objects.  */
8030
8031   if (warn_larger_than
8032       && ! processing_template_decl
8033       && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
8034       && !DECL_EXTERNAL (decl))
8035     {
8036       register tree decl_size = DECL_SIZE (decl);
8037
8038       if (decl_size && TREE_CODE (decl_size) == INTEGER_CST)
8039         {
8040           unsigned units = TREE_INT_CST_LOW (decl_size) / BITS_PER_UNIT;
8041
8042           if (units > larger_than_size)
8043             warning_with_decl (decl, "size of `%s' is %u bytes", units);
8044         }
8045     }
8046
8047   if (need_pop)
8048     {
8049       /* Resume permanent allocation, if not within a function.  */
8050       /* The corresponding push_obstacks_nochange is in start_decl,
8051          start_method, groktypename, and in grokfield.  */
8052       pop_obstacks ();
8053     }
8054
8055   if (was_readonly)
8056     TREE_READONLY (decl) = 1;
8057 }
8058
8059 /* This is here for a midend callback from c-common.c */
8060
8061 void
8062 finish_decl (decl, init, asmspec_tree)
8063      tree decl, init;
8064      tree asmspec_tree;
8065 {
8066   cp_finish_decl (decl, init, asmspec_tree, 1, 0);
8067 }
8068
8069 void
8070 expand_static_init (decl, init)
8071      tree decl;
8072      tree init;
8073 {
8074   tree oldstatic = value_member (decl, static_aggregates);
8075
8076   if (oldstatic)
8077     {
8078       if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
8079         cp_error ("multiple initializations given for `%D'", decl);
8080     }
8081   else if (! toplevel_bindings_p ())
8082     {
8083       /* Emit code to perform this initialization but once.  */
8084       tree temp;
8085
8086       /* Remember this information until end of file.  */
8087       push_obstacks (&permanent_obstack, &permanent_obstack);
8088
8089       /* Emit code to perform this initialization but once.  This code
8090          looks like:
8091
8092            static int temp = 0;
8093            if (!temp) {
8094              // Do initialization.
8095              temp = 1;
8096              // Register variable for destruction at end of program.
8097            }
8098
8099          Note that the `temp' variable is only set to 1 *after* the
8100          initialization is complete.  This ensures that an exception,
8101          thrown during the construction, will cause the variable to
8102          reinitialized when we pass through this code again, as per:
8103          
8104            [stmt.dcl]
8105
8106            If the initialization exits by throwing an exception, the
8107            initialization is not complete, so it will be tried again
8108            the next time control enters the declaration.
8109
8110          In theory, this process should be thread-safe, too; multiple
8111          threads should not be able to initialize the variable more
8112          than once.  We don't yet attempt to ensure thread-safety.  */
8113       temp = get_temp_name (integer_type_node, 1);
8114       rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
8115
8116       /* Begin the conditional initialization.  */
8117       expand_start_cond (build_binary_op (EQ_EXPR, temp,
8118                                           integer_zero_node), 0);
8119       expand_start_target_temps ();
8120
8121       /* Do the initialization itself.  */
8122       if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
8123           || (init && TREE_CODE (init) == TREE_LIST))
8124         {
8125           expand_aggr_init (decl, init, 0);
8126           do_pending_stack_adjust ();
8127         }
8128       else if (init)
8129         expand_assignment (decl, init, 0, 0);
8130
8131       /* Set TEMP to 1.  */
8132       expand_assignment (temp, integer_one_node, 0, 0);
8133
8134       /* Cleanup any temporaries needed for the initial value.  If
8135          destroying one of the temporaries causes an exception to be
8136          thrown, then the object itself has still been fully
8137          constructed.  */
8138       expand_end_target_temps ();
8139
8140       /* Use atexit to register a function for destroying this static
8141          variable.  */
8142       if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
8143         {
8144           tree cleanup, fcall;
8145           static tree Atexit = 0;
8146           int saved_flag_access_control;
8147
8148           if (Atexit == 0)
8149             {
8150               tree atexit_fndecl, PFV, pfvlist;
8151               /* Remember this information until end of file.  */
8152               push_obstacks (&permanent_obstack, &permanent_obstack);
8153               PFV = build_pointer_type (build_function_type
8154                                         (void_type_node, void_list_node));
8155
8156               pfvlist = tree_cons (NULL_TREE, PFV, void_list_node);
8157
8158               push_lang_context (lang_name_c);
8159               /* Note that we do not call pushdecl for this function;
8160                  there's no reason that this declaration should be
8161                  accessible to anyone.  */
8162               atexit_fndecl
8163                 = define_function ("atexit",
8164                                    build_function_type (void_type_node,
8165                                                         pfvlist),
8166                                    NOT_BUILT_IN, 
8167                                    /*pfn=*/0,
8168                                    NULL_PTR);
8169               mark_used (atexit_fndecl);
8170               Atexit = default_conversion (atexit_fndecl);
8171               pop_lang_context ();
8172               pop_obstacks ();
8173             }
8174               
8175           /* Call build_cleanup before we enter the anonymous function
8176              so that any access checks will be done relative to the
8177              current scope, rather than the scope of the anonymous
8178              function.  */
8179           build_cleanup (decl);
8180
8181           /* Now start the function.  */
8182           cleanup = start_anon_func ();
8183
8184           /* Now, recompute the cleanup.  It may contain SAVE_EXPRs
8185              that refer to the original function, rather than the
8186              anonymous one.  That will make the back-end think that
8187              nested functions are in use, which causes confusion.  */
8188           saved_flag_access_control = flag_access_control;
8189           flag_access_control = 0;
8190           fcall = build_cleanup (decl);
8191           flag_access_control = saved_flag_access_control;
8192
8193           /* Finish off the function.  */
8194           expand_expr_stmt (fcall);
8195           end_anon_func ();
8196
8197           /* Call atexit with the cleanup function.  */
8198           mark_addressable (cleanup);
8199           cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
8200           fcall = build_function_call (Atexit, 
8201                                        expr_tree_cons (NULL_TREE, 
8202                                                        cleanup, 
8203                                                        NULL_TREE));
8204           expand_expr_stmt (fcall);
8205         }
8206
8207       expand_end_cond ();
8208       /* Resume old (possibly temporary) allocation.  */
8209       pop_obstacks ();
8210     }
8211   else
8212     {
8213       /* This code takes into account memory allocation policy of
8214          `start_decl'.  Namely, if TYPE_NEEDS_CONSTRUCTING does not
8215          hold for this object, then we must make permanent the storage
8216          currently in the temporary obstack.  */
8217       if (!TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
8218         preserve_initializer ();
8219       static_aggregates = perm_tree_cons (init, decl, static_aggregates);
8220     }
8221 }
8222 \f
8223 /* Make TYPE a complete type based on INITIAL_VALUE.
8224    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8225    2 if there was no information (in which case assume 0 if DO_DEFAULT).  */
8226
8227 int
8228 complete_array_type (type, initial_value, do_default)
8229      tree type, initial_value;
8230      int do_default;
8231 {
8232   register tree maxindex = NULL_TREE;
8233   int value = 0;
8234   
8235   /* Allocate on the same obstack as TYPE.  */
8236   push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8237   
8238   if (initial_value)
8239     {
8240       /* Note MAXINDEX  is really the maximum index,
8241          one less than the size.  */
8242       if (TREE_CODE (initial_value) == STRING_CST)
8243         {
8244           int eltsize
8245             = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8246           maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8247                                    / eltsize) - 1, 0);
8248         }
8249       else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8250         {
8251           tree elts = CONSTRUCTOR_ELTS (initial_value);
8252           maxindex = size_binop (MINUS_EXPR, integer_zero_node, size_one_node);
8253           for (; elts; elts = TREE_CHAIN (elts))
8254             {
8255               if (TREE_PURPOSE (elts))
8256                 maxindex = TREE_PURPOSE (elts);
8257               else
8258                 maxindex = size_binop (PLUS_EXPR, maxindex, size_one_node);
8259             }
8260           maxindex = copy_node (maxindex);
8261         }
8262       else
8263         {
8264           /* Make an error message unless that happened already.  */
8265           if (initial_value != error_mark_node)
8266             value = 1;
8267           else
8268             initial_value = NULL_TREE;
8269
8270           /* Prevent further error messages.  */
8271           maxindex = build_int_2 (0, 0);
8272         }
8273     }
8274
8275   if (!maxindex)
8276     {
8277       if (do_default)
8278         maxindex = build_int_2 (0, 0);
8279       value = 2;
8280     }
8281
8282   if (maxindex)
8283     {
8284       tree itype;
8285       tree domain;
8286
8287       domain = build_index_type (maxindex);
8288       TYPE_DOMAIN (type) = domain;
8289
8290       if (! TREE_TYPE (maxindex))
8291         TREE_TYPE (maxindex) = domain;
8292       if (initial_value)
8293         itype = TREE_TYPE (initial_value);
8294       else
8295         itype = NULL;
8296       if (itype && !TYPE_DOMAIN (itype))
8297         TYPE_DOMAIN (itype) = domain;
8298       /* The type of the main variant should never be used for arrays
8299          of different sizes.  It should only ever be completed with the
8300          size of the array.  */
8301       if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
8302         TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
8303     }
8304
8305   pop_obstacks();
8306   
8307   /* Lay out the type now that we can get the real answer.  */
8308
8309   layout_type (type);
8310
8311   return value;
8312 }
8313 \f
8314 /* Return zero if something is declared to be a member of type
8315    CTYPE when in the context of CUR_TYPE.  STRING is the error
8316    message to print in that case.  Otherwise, quietly return 1.  */
8317
8318 static int
8319 member_function_or_else (ctype, cur_type, string)
8320      tree ctype, cur_type;
8321      const char *string;
8322 {
8323   if (ctype && ctype != cur_type)
8324     {
8325       error (string, TYPE_NAME_STRING (ctype));
8326       return 0;
8327     }
8328   return 1;
8329 }
8330 \f
8331 /* Subroutine of `grokdeclarator'.  */
8332
8333 /* Generate errors possibly applicable for a given set of specifiers.
8334    This is for ARM $7.1.2.  */
8335
8336 static void
8337 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8338      tree object;
8339      const char *type;
8340      int virtualp, quals, friendp, raises, inlinep;
8341 {
8342   if (virtualp)
8343     cp_error ("`%D' declared as a `virtual' %s", object, type);
8344   if (inlinep)
8345     cp_error ("`%D' declared as an `inline' %s", object, type);
8346   if (quals)
8347     cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
8348               object, type);
8349   if (friendp)
8350     cp_error_at ("invalid friend declaration", object);
8351   if (raises)
8352     cp_error_at ("invalid exception specifications", object);
8353 }
8354
8355 /* CTYPE is class type, or null if non-class.
8356    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8357    or METHOD_TYPE.
8358    DECLARATOR is the function's name.
8359    VIRTUALP is truthvalue of whether the function is virtual or not.
8360    FLAGS are to be passed through to `grokclassfn'.
8361    QUALS are qualifiers indicating whether the function is `const'
8362    or `volatile'.
8363    RAISES is a list of exceptions that this function can raise.
8364    CHECK is 1 if we must find this method in CTYPE, 0 if we should
8365    not look, and -1 if we should not call `grokclassfn' at all.  
8366
8367    Returns `NULL_TREE' if something goes wrong, after issuing
8368    applicable error messages.  */
8369
8370 static tree
8371 grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
8372             raises, check, friendp, publicp, inlinep, funcdef_flag,
8373             template_count, in_namespace)
8374      tree ctype, type;
8375      tree declarator;
8376      tree orig_declarator;
8377      int virtualp;
8378      enum overload_flags flags;
8379      tree quals, raises;
8380      int check, friendp, publicp, inlinep, funcdef_flag, template_count;
8381      tree in_namespace;
8382 {
8383   tree cname, decl;
8384   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8385   int has_default_arg = 0;
8386   tree t;
8387
8388   if (ctype)
8389     cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8390       ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8391   else
8392     cname = NULL_TREE;
8393
8394   if (raises)
8395     {
8396       type = build_exception_variant (type, raises);
8397     }
8398
8399   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8400   /* Propagate volatile out from type to decl. */
8401   if (TYPE_VOLATILE (type))
8402     TREE_THIS_VOLATILE (decl) = 1;
8403
8404   /* If this decl has namespace scope, set that up.  */
8405   if (in_namespace)
8406     set_decl_namespace (decl, in_namespace, friendp);
8407   else if (publicp && ! ctype)
8408     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8409
8410   /* `main' and builtins have implicit 'C' linkage.  */
8411   if ((MAIN_NAME_P (declarator)
8412        || (IDENTIFIER_LENGTH (declarator) > 10
8413            && IDENTIFIER_POINTER (declarator)[0] == '_'
8414            && IDENTIFIER_POINTER (declarator)[1] == '_'
8415            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8416       && current_lang_name == lang_name_cplusplus
8417       && ctype == NULL_TREE
8418       /* NULL_TREE means global namespace.  */
8419       && DECL_CONTEXT (decl) == NULL_TREE)
8420     DECL_LANGUAGE (decl) = lang_c;
8421
8422   /* Should probably propagate const out from type to decl I bet (mrs).  */
8423   if (staticp)
8424     {
8425       DECL_STATIC_FUNCTION_P (decl) = 1;
8426       DECL_CONTEXT (decl) = ctype;
8427     }
8428
8429   if (ctype)
8430     DECL_CLASS_CONTEXT (decl) = ctype;
8431
8432   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8433     {
8434       if (processing_template_decl)
8435         error ("cannot declare `main' to be a template");
8436       if (inlinep)
8437         error ("cannot declare `main' to be inline");
8438       else if (! publicp)
8439         error ("cannot declare `main' to be static");
8440       inlinep = 0;
8441       publicp = 1;
8442     }
8443
8444   /* Members of anonymous types and local classes have no linkage; make
8445      them internal.  */
8446   if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
8447                 || hack_decl_function_context (TYPE_MAIN_DECL (ctype))))
8448     publicp = 0;
8449
8450   if (publicp)
8451     {
8452       /* [basic.link]: A name with no linkage (notably, the name of a class
8453          or enumeration declared in a local scope) shall not be used to
8454          declare an entity with linkage.
8455
8456          Only check this for public decls for now.  */
8457       t = no_linkage_check (TREE_TYPE (decl));
8458       if (t)
8459         {
8460           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8461             {
8462               if (DECL_LANGUAGE (decl) == lang_c)
8463                 /* Allow this; it's pretty common in C.  */;
8464               else
8465                 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8466                             decl);
8467             }
8468           else
8469             cp_pedwarn ("non-local function `%#D' uses local type `%T'",
8470                         decl, t);
8471         }
8472     }
8473
8474   TREE_PUBLIC (decl) = publicp;
8475   if (! publicp)
8476     {
8477       DECL_INTERFACE_KNOWN (decl) = 1;
8478       DECL_NOT_REALLY_EXTERN (decl) = 1;
8479     }
8480
8481   if (inlinep)
8482     DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8483
8484   DECL_EXTERNAL (decl) = 1;
8485   if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8486     {
8487       cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8488                 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8489       quals = NULL_TREE;
8490     }
8491
8492   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8493     grok_op_properties (decl, virtualp, check < 0);
8494
8495   if (ctype && hack_decl_function_context (decl))
8496     DECL_NO_STATIC_CHAIN (decl) = 1;
8497
8498   for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8499     if (TREE_PURPOSE (t)
8500         && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8501       {
8502         has_default_arg = 1;
8503         break;
8504       }
8505
8506   if (friendp
8507       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8508     {
8509       if (funcdef_flag)
8510         cp_error
8511           ("defining explicit specialization `%D' in friend declaration",
8512            orig_declarator);
8513       else
8514         {
8515           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8516             {
8517               /* Something like `template <class T> friend void f<T>()'.  */
8518               cp_error ("template-id `%D' in declaration of primary template", 
8519                         orig_declarator);
8520               return NULL_TREE;
8521             }
8522
8523
8524           /* A friend declaration of the form friend void f<>().  Record
8525              the information in the TEMPLATE_ID_EXPR.  */
8526           SET_DECL_IMPLICIT_INSTANTIATION (decl);
8527           DECL_TEMPLATE_INFO (decl)
8528             = perm_tree_cons (TREE_OPERAND (orig_declarator, 0),
8529                               TREE_OPERAND (orig_declarator, 1),
8530                               NULL_TREE);
8531
8532           if (has_default_arg)
8533             {
8534               cp_error ("default arguments are not allowed in declaration of friend template specialization `%D'",
8535                         decl);
8536               return NULL_TREE;
8537             }
8538
8539           if (inlinep)
8540             {
8541               cp_error ("`inline' is not allowed in declaration of friend template specialization `%D'", 
8542                         decl);
8543               return NULL_TREE;
8544             }
8545         }
8546     }
8547
8548   if (has_default_arg)
8549     add_defarg_fn (decl);
8550
8551   /* Plain overloading: will not be grok'd by grokclassfn.  */
8552   if (! ctype && ! processing_template_decl
8553       && DECL_LANGUAGE (decl) != lang_c
8554       && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
8555     set_mangled_name_for_decl (decl);
8556
8557   if (funcdef_flag)
8558     /* Make the init_value nonzero so pushdecl knows this is not
8559        tentative.  error_mark_node is replaced later with the BLOCK.  */
8560     DECL_INITIAL (decl) = error_mark_node;
8561
8562   /* Caller will do the rest of this.  */
8563   if (check < 0)
8564     return decl;
8565
8566   if (check && funcdef_flag)
8567     DECL_INITIAL (decl) = error_mark_node;
8568
8569   if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
8570     {
8571       tree tmp;
8572       /* Just handle constructors here.  We could do this
8573          inside the following if stmt, but I think
8574          that the code is more legible by breaking this
8575          case out.  See comments below for what each of
8576          the following calls is supposed to do.  */
8577       DECL_CONSTRUCTOR_P (decl) = 1;
8578
8579       grokclassfn (ctype, decl, flags, quals);
8580
8581       decl = check_explicit_specialization (orig_declarator, decl,
8582                                             template_count, 
8583                                             2 * (funcdef_flag != 0) + 
8584                                             4 * (friendp != 0));
8585       if (decl == error_mark_node)
8586         return NULL_TREE;
8587
8588       if ((! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8589           && check)
8590         {
8591           tmp = check_classfn (ctype, decl);
8592
8593           if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8594             tmp = DECL_TEMPLATE_RESULT(tmp);
8595
8596           if (tmp && DECL_ARTIFICIAL (tmp))
8597             cp_error ("definition of implicitly-declared `%D'", tmp);
8598           if (tmp && duplicate_decls (decl, tmp))
8599             return tmp;
8600         }
8601       if (! grok_ctor_properties (ctype, decl))
8602         return NULL_TREE;
8603     }
8604   else
8605     {
8606       tree tmp;
8607
8608       /* Function gets the ugly name, field gets the nice one.
8609          This call may change the type of the function (because
8610          of default parameters)!  */
8611       if (ctype != NULL_TREE)
8612         grokclassfn (ctype, decl, flags, quals);
8613
8614       decl = check_explicit_specialization (orig_declarator, decl,
8615                                             template_count, 
8616                                             2 * (funcdef_flag != 0) + 
8617                                             4 * (friendp != 0));
8618       if (decl == error_mark_node)
8619         return NULL_TREE;
8620
8621       if (ctype != NULL_TREE
8622           && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8623           && check)
8624         {
8625           tmp = check_classfn (ctype, decl);
8626
8627           if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8628             tmp = DECL_TEMPLATE_RESULT (tmp);
8629               
8630           if (tmp && DECL_STATIC_FUNCTION_P (tmp)
8631               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8632             {
8633               /* Remove the `this' parm added by grokclassfn.
8634                  XXX Isn't this done in start_function, too?  */
8635               revert_static_member_fn (&decl, NULL, NULL);
8636               last_function_parms = TREE_CHAIN (last_function_parms);
8637             }
8638           if (tmp && DECL_ARTIFICIAL (tmp))
8639             cp_error ("definition of implicitly-declared `%D'", tmp);
8640           if (tmp)
8641             {
8642               /* Attempt to merge the declarations.  This can fail, in
8643                  the case of some illegal specialization declarations.  */
8644               if (!duplicate_decls (decl, tmp))
8645                 cp_error ("no `%#D' member function declared in class `%T'",
8646                           decl, ctype);
8647               return tmp;
8648             }
8649         }
8650
8651       if (ctype == NULL_TREE || check)
8652         return decl;
8653
8654       if (virtualp)
8655         {
8656           DECL_VIRTUAL_P (decl) = 1;
8657           if (DECL_VINDEX (decl) == NULL_TREE)
8658             DECL_VINDEX (decl) = error_mark_node;
8659           IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
8660         }
8661     }
8662   return decl;
8663 }
8664
8665 static tree
8666 grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
8667      tree type;
8668      tree declarator;
8669      RID_BIT_TYPE *specbits_in;
8670      int initialized;
8671      int constp;
8672      tree in_namespace;
8673 {
8674   tree decl;
8675   RID_BIT_TYPE specbits;
8676
8677   specbits = *specbits_in;
8678
8679   if (TREE_CODE (type) == OFFSET_TYPE)
8680     {
8681       /* If you declare a static member so that it
8682          can be initialized, the code will reach here.  */
8683       tree basetype = TYPE_OFFSET_BASETYPE (type);
8684       type = TREE_TYPE (type);
8685       decl = build_lang_field_decl (VAR_DECL, declarator, type);
8686       DECL_CONTEXT (decl) = basetype;
8687       DECL_CLASS_CONTEXT (decl) = basetype;
8688       DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
8689     }
8690   else
8691     {
8692       tree context;
8693
8694       if (in_namespace)
8695         context = in_namespace;
8696       else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
8697         context = current_namespace;
8698       else
8699         context = NULL_TREE;
8700
8701       decl = build_decl (VAR_DECL, declarator, complete_type (type));
8702
8703       if (context)
8704         set_decl_namespace (decl, context, 0);
8705
8706       context = DECL_CONTEXT (decl);
8707       if (declarator && context && current_lang_name != lang_name_c)
8708         DECL_ASSEMBLER_NAME (decl) = build_static_name (context, declarator);
8709     }
8710
8711   if (in_namespace)
8712     set_decl_namespace (decl, in_namespace, 0);
8713
8714   if (RIDBIT_SETP (RID_EXTERN, specbits))
8715     {
8716       DECL_THIS_EXTERN (decl) = 1;
8717       DECL_EXTERNAL (decl) = !initialized;
8718     }
8719
8720   /* In class context, static means one per class,
8721      public access, and static storage.  */
8722   if (DECL_CLASS_SCOPE_P (decl))
8723     {
8724       TREE_PUBLIC (decl) = 1;
8725       TREE_STATIC (decl) = 1;
8726       DECL_EXTERNAL (decl) = 0;
8727     }
8728   /* At top level, either `static' or no s.c. makes a definition
8729      (perhaps tentative), and absence of `static' makes it public.  */
8730   else if (toplevel_bindings_p ())
8731     {
8732       TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
8733                             && (DECL_THIS_EXTERN (decl) || ! constp));
8734       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8735     }
8736   /* Not at top level, only `static' makes a static definition.  */
8737   else
8738     {
8739       TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
8740       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8741     }
8742
8743   if (TREE_PUBLIC (decl))
8744     {
8745       /* [basic.link]: A name with no linkage (notably, the name of a class
8746          or enumeration declared in a local scope) shall not be used to
8747          declare an entity with linkage.
8748
8749          Only check this for public decls for now.  */
8750       tree t = no_linkage_check (TREE_TYPE (decl));
8751       if (t)
8752         {
8753           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8754             /* Ignore for now; `enum { foo } e' is pretty common.  */;
8755           else
8756             cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
8757                         decl, t);
8758         }
8759     }
8760
8761   return decl;
8762 }
8763
8764 /* Create and return a canonical pointer to member function type, for
8765    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
8766
8767 tree
8768 build_ptrmemfunc_type (type)
8769      tree type;
8770 {
8771   tree fields[4];
8772   tree t;
8773   tree u;
8774
8775   /* If a canonical type already exists for this type, use it.  We use
8776      this method instead of type_hash_canon, because it only does a
8777      simple equality check on the list of field members.  */
8778
8779   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
8780     return t;
8781
8782   push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8783
8784   u = make_lang_type (UNION_TYPE);
8785   SET_IS_AGGR_TYPE (u, 0);
8786   fields[0] = build_lang_field_decl (FIELD_DECL, pfn_identifier, type);
8787   fields[1] = build_lang_field_decl (FIELD_DECL, delta2_identifier,
8788                                      delta_type_node);
8789   finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
8790   TYPE_NAME (u) = NULL_TREE;
8791
8792   t = make_lang_type (RECORD_TYPE);
8793
8794   /* Let the front-end know this is a pointer to member function...  */
8795   TYPE_PTRMEMFUNC_FLAG (t) = 1;
8796   /* ... and not really an aggregate.  */
8797   SET_IS_AGGR_TYPE (t, 0);
8798
8799   fields[0] = build_lang_field_decl (FIELD_DECL, delta_identifier,
8800                                      delta_type_node);
8801   fields[1] = build_lang_field_decl (FIELD_DECL, index_identifier,
8802                                      delta_type_node);
8803   fields[2] = build_lang_field_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
8804   finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
8805
8806   pop_obstacks ();
8807
8808   /* Zap out the name so that the back-end will give us the debugging
8809      information for this anonymous RECORD_TYPE.  */
8810   TYPE_NAME (t) = NULL_TREE;
8811
8812   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
8813
8814   /* Seems to be wanted.  */
8815   CLASSTYPE_GOT_SEMICOLON (t) = 1;
8816   return t;
8817 }
8818
8819 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
8820    Check to see that the definition is valid.  Issue appropriate error
8821    messages.  Return 1 if the definition is particularly bad, or 0
8822    otherwise.  */
8823
8824 int
8825 check_static_variable_definition (decl, type)
8826      tree decl;
8827      tree type;
8828 {
8829   /* Motion 10 at San Diego: If a static const integral data member is
8830      initialized with an integral constant expression, the initializer
8831      may appear either in the declaration (within the class), or in
8832      the definition, but not both.  If it appears in the class, the
8833      member is a member constant.  The file-scope definition is always
8834      required.  */
8835   if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
8836     {
8837       cp_error ("in-class initialization of static data member of non-integral type `%T'", 
8838                 type);
8839       /* If we just return the declaration, crashes will sometimes
8840          occur.  We therefore return void_type_node, as if this was a
8841          friend declaration, to cause callers to completely ignore
8842          this declaration.  */
8843       return 1;
8844     }
8845   else if (!CP_TYPE_CONST_P (type))
8846     cp_error ("ANSI C++ forbids in-class initialization of non-const static member `%D'",
8847               decl);
8848   else if (pedantic && !INTEGRAL_TYPE_P (type))
8849     cp_pedwarn ("ANSI C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
8850
8851   return 0;
8852 }
8853
8854 /* Given declspecs and a declarator,
8855    determine the name and type of the object declared
8856    and construct a ..._DECL node for it.
8857    (In one case we can return a ..._TYPE node instead.
8858     For invalid input we sometimes return 0.)
8859
8860    DECLSPECS is a chain of tree_list nodes whose value fields
8861     are the storage classes and type specifiers.
8862
8863    DECL_CONTEXT says which syntactic context this declaration is in:
8864      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8865      FUNCDEF for a function definition.  Like NORMAL but a few different
8866       error messages in each case.  Return value may be zero meaning
8867       this definition is too screwy to try to parse.
8868      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
8869       handle member functions (which have FIELD context).
8870       Return value may be zero meaning this definition is too screwy to
8871       try to parse.
8872      PARM for a parameter declaration (either within a function prototype
8873       or before a function body).  Make a PARM_DECL, or return void_type_node.
8874      CATCHPARM for a parameter declaration before a catch clause.
8875      TYPENAME if for a typename (in a cast or sizeof).
8876       Don't make a DECL node; just return the ..._TYPE node.
8877      FIELD for a struct or union field; make a FIELD_DECL.
8878      BITFIELD for a field with specified width.
8879    INITIALIZED is 1 if the decl has an initializer.
8880
8881    ATTRLIST is a TREE_LIST node with prefix attributes in TREE_VALUE and
8882    normal attributes in TREE_PURPOSE, or NULL_TREE.
8883
8884    In the TYPENAME case, DECLARATOR is really an absolute declarator.
8885    It may also be so in the PARM case, for a prototype where the
8886    argument type is specified but not the name.
8887
8888    This function is where the complicated C meanings of `static'
8889    and `extern' are interpreted.
8890
8891    For C++, if there is any monkey business to do, the function which
8892    calls this one must do it, i.e., prepending instance variables,
8893    renaming overloaded function names, etc.
8894
8895    Note that for this C++, it is an error to define a method within a class
8896    which does not belong to that class.
8897
8898    Except in the case where SCOPE_REFs are implicitly known (such as
8899    methods within a class being redundantly qualified),
8900    declarations which involve SCOPE_REFs are returned as SCOPE_REFs
8901    (class_name::decl_name).  The caller must also deal with this.
8902
8903    If a constructor or destructor is seen, and the context is FIELD,
8904    then the type gains the attribute TREE_HAS_x.  If such a declaration
8905    is erroneous, NULL_TREE is returned.
8906
8907    QUALS is used only for FUNCDEF and MEMFUNCDEF cases.  For a member
8908    function, these are the qualifiers to give to the `this' pointer.
8909
8910    May return void_type_node if the declarator turned out to be a friend.
8911    See grokfield for details.  */
8912
8913 enum return_types { return_normal, return_ctor, return_dtor, return_conversion };
8914
8915 tree
8916 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
8917      tree declspecs;
8918      tree declarator;
8919      enum decl_context decl_context;
8920      int initialized;
8921      tree attrlist;
8922 {
8923   RID_BIT_TYPE specbits;
8924   int nclasses = 0;
8925   tree spec;
8926   tree type = NULL_TREE;
8927   int longlong = 0;
8928   int constp;
8929   int restrictp;
8930   int volatilep;
8931   int type_quals;
8932   int virtualp, explicitp, friendp, inlinep, staticp;
8933   int explicit_int = 0;
8934   int explicit_char = 0;
8935   int defaulted_int = 0;
8936   int opaque_typedef = 0;
8937   tree typedef_decl = NULL_TREE;
8938   char *name;
8939   tree typedef_type = NULL_TREE;
8940   int funcdef_flag = 0;
8941   enum tree_code innermost_code = ERROR_MARK;
8942   int bitfield = 0;
8943 #if 0
8944   /* See the code below that used this.  */
8945   tree decl_machine_attr = NULL_TREE;
8946 #endif
8947   /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
8948      All FIELD_DECLs we build here have `init' put into their DECL_INITIAL.  */
8949   tree init = NULL_TREE;
8950
8951   /* Keep track of what sort of function is being processed
8952      so that we can warn about default return values, or explicit
8953      return values which do not match prescribed defaults.  */
8954   enum return_types return_type = return_normal;
8955
8956   tree dname = NULL_TREE;
8957   tree ctype = current_class_type;
8958   tree ctor_return_type = NULL_TREE;
8959   enum overload_flags flags = NO_SPECIAL;
8960   tree quals = NULL_TREE;
8961   tree raises = NULL_TREE;
8962   int template_count = 0;
8963   tree in_namespace = NULL_TREE;
8964   tree inner_attrs;
8965   int ignore_attrs;
8966
8967   RIDBIT_RESET_ALL (specbits);
8968   if (decl_context == FUNCDEF)
8969     funcdef_flag = 1, decl_context = NORMAL;
8970   else if (decl_context == MEMFUNCDEF)
8971     funcdef_flag = -1, decl_context = FIELD;
8972   else if (decl_context == BITFIELD)
8973     bitfield = 1, decl_context = FIELD;
8974
8975   /* Look inside a declarator for the name being declared
8976      and get it as a string, for an error message.  */
8977   {
8978     tree *next = &declarator;
8979     register tree decl;
8980     name = NULL;
8981
8982     while (next && *next)
8983       {
8984         decl = *next;
8985         switch (TREE_CODE (decl))
8986           {
8987           case TREE_LIST:
8988             /* For attributes.  */
8989             next = &TREE_VALUE (decl);
8990             break;
8991
8992           case COND_EXPR:
8993             ctype = NULL_TREE;
8994             next = &TREE_OPERAND (decl, 0);
8995             break;
8996
8997           case BIT_NOT_EXPR:    /* For C++ destructors!  */
8998             {
8999               tree name = TREE_OPERAND (decl, 0);
9000               tree rename = NULL_TREE;
9001
9002               my_friendly_assert (flags == NO_SPECIAL, 152);
9003               flags = DTOR_FLAG;
9004               return_type = return_dtor;
9005               if (TREE_CODE (name) == TYPE_DECL)
9006                 TREE_OPERAND (decl, 0) = name = constructor_name (name);
9007               my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
9008               if (ctype == NULL_TREE)
9009                 {
9010                   if (current_class_type == NULL_TREE)
9011                     {
9012                       error ("destructors must be member functions");
9013                       flags = NO_SPECIAL;
9014                     }
9015                   else
9016                     {
9017                       tree t = constructor_name (current_class_name);
9018                       if (t != name)
9019                         rename = t;
9020                     }
9021                 }
9022               else
9023                 {
9024                   tree t = constructor_name (ctype);
9025                   if (t != name)
9026                     rename = t;
9027                 }
9028
9029               if (rename)
9030                 {
9031                   cp_error ("destructor `%T' must match class name `%T'",
9032                             name, rename);
9033                   TREE_OPERAND (decl, 0) = rename;
9034                 }
9035               next = &name;
9036             }
9037             break;
9038
9039           case ADDR_EXPR:       /* C++ reference declaration */
9040             /* Fall through. */
9041           case ARRAY_REF:
9042           case INDIRECT_REF:
9043             ctype = NULL_TREE;
9044             innermost_code = TREE_CODE (decl);
9045             next = &TREE_OPERAND (decl, 0);
9046             break;
9047
9048           case CALL_EXPR:
9049             if (parmlist_is_exprlist (TREE_OPERAND (decl, 1)))
9050               {
9051                 /* This is actually a variable declaration using
9052                    constructor syntax.  We need to call start_decl and
9053                    cp_finish_decl so we can get the variable
9054                    initialized...  */
9055
9056                 tree attributes, prefix_attributes;
9057
9058                 *next = TREE_OPERAND (decl, 0);
9059                 init = TREE_OPERAND (decl, 1);
9060
9061                 if (attrlist)
9062                   {
9063                     attributes = TREE_PURPOSE (attrlist);
9064                     prefix_attributes = TREE_VALUE (attrlist);
9065                   }
9066                 else
9067                   {
9068                     attributes = NULL_TREE;
9069                     prefix_attributes = NULL_TREE;
9070                   }
9071
9072                 decl = start_decl (declarator, declspecs, 1,
9073                                    attributes, prefix_attributes);
9074                 if (decl)
9075                   {
9076                     /* Look for __unused__ attribute */
9077                     if (TREE_USED (TREE_TYPE (decl)))
9078                       TREE_USED (decl) = 1;
9079                     finish_decl (decl, init, NULL_TREE);
9080                   }
9081                 else
9082                   cp_error ("invalid declarator");
9083                 return 0;
9084               }
9085             innermost_code = TREE_CODE (decl);
9086             if (decl_context == FIELD && ctype == NULL_TREE)
9087               ctype = current_class_type;
9088             if (ctype
9089                 && TREE_OPERAND (decl, 0)
9090                 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
9091                     && ((DECL_NAME (TREE_OPERAND (decl, 0))
9092                          == constructor_name_full (ctype))
9093                         || (DECL_NAME (TREE_OPERAND (decl, 0))
9094                             == constructor_name (ctype)))))
9095               TREE_OPERAND (decl, 0) = constructor_name (ctype);
9096             next = &TREE_OPERAND (decl, 0);
9097             decl = *next;
9098             if (ctype != NULL_TREE
9099                 && decl != NULL_TREE && flags != DTOR_FLAG
9100                 && decl == constructor_name (ctype))
9101               {
9102                 return_type = return_ctor;
9103                 ctor_return_type = ctype;
9104               }
9105             ctype = NULL_TREE;
9106             break;
9107             
9108           case TEMPLATE_ID_EXPR:
9109               {
9110                 tree fns = TREE_OPERAND (decl, 0);
9111
9112                 if (TREE_CODE (fns) == LOOKUP_EXPR)
9113                   fns = TREE_OPERAND (fns, 0);
9114
9115                 dname = fns;
9116                 if (TREE_CODE (dname) == COMPONENT_REF)
9117                   dname = TREE_OPERAND (dname, 1);
9118                 if (TREE_CODE (dname) != IDENTIFIER_NODE)
9119                   {
9120                     my_friendly_assert (is_overloaded_fn (dname),
9121                                         19990331);
9122                     dname = DECL_NAME (get_first_fn (dname));
9123                   }
9124               }
9125           /* Fall through. */
9126
9127           case IDENTIFIER_NODE:
9128             if (TREE_CODE (decl) == IDENTIFIER_NODE)
9129               dname = decl;
9130
9131             next = 0;
9132
9133             if (is_rid (dname))
9134               {
9135                 cp_error ("declarator-id missing; using reserved word `%D'",
9136                           dname);
9137                 name = IDENTIFIER_POINTER (dname);
9138               }
9139             if (! IDENTIFIER_OPNAME_P (dname)
9140                 /* GNU/Linux headers use '__op'.  Arrgh.  */
9141                 || (IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname)))
9142               name = IDENTIFIER_POINTER (dname);
9143             else
9144               {
9145                 if (IDENTIFIER_TYPENAME_P (dname))
9146                   {
9147                     my_friendly_assert (flags == NO_SPECIAL, 154);
9148                     flags = TYPENAME_FLAG;
9149                     ctor_return_type = TREE_TYPE (dname);
9150                     return_type = return_conversion;
9151                   }
9152                 name = operator_name_string (dname);
9153               }
9154             break;
9155
9156             /* C++ extension */
9157           case SCOPE_REF:
9158             {
9159               /* Perform error checking, and decide on a ctype.  */
9160               tree cname = TREE_OPERAND (decl, 0);
9161               if (cname == NULL_TREE)
9162                 ctype = NULL_TREE;
9163               else if (TREE_CODE (cname) == NAMESPACE_DECL)
9164                 {
9165                   ctype = NULL_TREE;
9166                   in_namespace = TREE_OPERAND (decl, 0);
9167                   TREE_OPERAND (decl, 0) = NULL_TREE;
9168                 }
9169               else if (! is_aggr_type (cname, 1))
9170                 TREE_OPERAND (decl, 0) = NULL_TREE;
9171               /* Must test TREE_OPERAND (decl, 1), in case user gives
9172                  us `typedef (class::memfunc)(int); memfunc *memfuncptr;'  */
9173               else if (TREE_OPERAND (decl, 1)
9174                        && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9175                 ctype = cname;
9176               else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
9177                        || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
9178                 {
9179                   cp_error ("`%T::%D' is not a valid declarator", cname,
9180                             TREE_OPERAND (decl, 1));
9181                   cp_error ("  perhaps you want `typename %T::%D' to make it a type",
9182                             cname, TREE_OPERAND (decl, 1));
9183                   return void_type_node;
9184                 }
9185               else if (ctype == NULL_TREE)
9186                 ctype = cname;
9187               else if (TREE_COMPLEXITY (decl) == current_class_depth)
9188                 TREE_OPERAND (decl, 0) = ctype;
9189               else
9190                 {
9191                   if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
9192                     {
9193                       cp_error ("type `%T' is not derived from type `%T'",
9194                                 cname, ctype);
9195                       TREE_OPERAND (decl, 0) = NULL_TREE;
9196                     }
9197                   else
9198                     ctype = cname;
9199                 }
9200
9201               if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
9202                   && ((DECL_NAME (TREE_OPERAND (decl, 1))
9203                        == constructor_name_full (ctype))
9204                       || (DECL_NAME (TREE_OPERAND (decl, 1))
9205                           == constructor_name (ctype))))
9206                 TREE_OPERAND (decl, 1) = constructor_name (ctype);
9207               next = &TREE_OPERAND (decl, 1);
9208               decl = *next;
9209               if (ctype)
9210                 {
9211                   if (TREE_CODE (decl) == IDENTIFIER_NODE
9212                       && constructor_name (ctype) == decl)
9213                     {
9214                       return_type = return_ctor;
9215                       ctor_return_type = ctype;
9216                     }
9217                   else if (TREE_CODE (decl) == BIT_NOT_EXPR
9218                            && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9219                            && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9220                                || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9221                     {
9222                       return_type = return_dtor;
9223                       ctor_return_type = ctype;
9224                       flags = DTOR_FLAG;
9225                       TREE_OPERAND (decl, 0) = constructor_name (ctype);
9226                       next = &TREE_OPERAND (decl, 0);
9227                     }
9228                 }
9229             }
9230             break;
9231
9232           case ERROR_MARK:
9233             next = 0;
9234             break;
9235
9236           case TYPE_DECL:
9237             /* Parse error puts this typespec where
9238                a declarator should go.  */
9239             cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
9240             if (TREE_TYPE (decl) == current_class_type)
9241               cp_error ("  perhaps you want `%T' for a constructor",
9242                         current_class_name);
9243             dname = DECL_NAME (decl);
9244             name = IDENTIFIER_POINTER (dname);
9245
9246             /* Avoid giving two errors for this.  */
9247             IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9248
9249             declspecs = temp_tree_cons (NULL_TREE, integer_type_node,
9250                                         declspecs);
9251             *next = dname;
9252             next = 0;
9253             break;
9254
9255           default:
9256             cp_compiler_error ("`%D' as declarator", decl);
9257             return 0; /* We used to do a 155 abort here.  */
9258           }
9259       }
9260     if (name == NULL)
9261       name = "type name";
9262   }
9263
9264   /* A function definition's declarator must have the form of
9265      a function declarator.  */
9266
9267   if (funcdef_flag && innermost_code != CALL_EXPR)
9268     return 0;
9269
9270   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9271       && innermost_code != CALL_EXPR
9272       && ! (ctype && declspecs == NULL_TREE))
9273     {
9274       cp_error ("declaration of `%D' as non-function", dname);
9275       return void_type_node;
9276     }
9277
9278   /* Anything declared one level down from the top level
9279      must be one of the parameters of a function
9280      (because the body is at least two levels down).  */
9281
9282   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9283      by not allowing C++ class definitions to specify their parameters
9284      with xdecls (must be spec.d in the parmlist).
9285
9286      Since we now wait to push a class scope until we are sure that
9287      we are in a legitimate method context, we must set oldcname
9288      explicitly (since current_class_name is not yet alive).
9289
9290      We also want to avoid calling this a PARM if it is in a namespace.  */
9291
9292   if (decl_context == NORMAL && ! namespace_bindings_p ()
9293       && ! pseudo_global_level_p ())
9294     {
9295       struct binding_level *b = current_binding_level;
9296       current_binding_level = b->level_chain;
9297       if (current_binding_level != 0 && toplevel_bindings_p ())
9298         decl_context = PARM;
9299       current_binding_level = b;
9300     }
9301
9302   /* Look through the decl specs and record which ones appear.
9303      Some typespecs are defined as built-in typenames.
9304      Others, the ones that are modifiers of other types,
9305      are represented by bits in SPECBITS: set the bits for
9306      the modifiers that appear.  Storage class keywords are also in SPECBITS.
9307
9308      If there is a typedef name or a type, store the type in TYPE.
9309      This includes builtin typedefs such as `int'.
9310
9311      Set EXPLICIT_INT if the type is `int' or `char' and did not
9312      come from a user typedef.
9313
9314      Set LONGLONG if `long' is mentioned twice.
9315
9316      For C++, constructors and destructors have their own fast treatment.  */
9317
9318   for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9319     {
9320       register int i;
9321       register tree id;
9322
9323       /* Certain parse errors slip through.  For example,
9324          `int class;' is not caught by the parser. Try
9325          weakly to recover here.  */
9326       if (TREE_CODE (spec) != TREE_LIST)
9327         return 0;
9328
9329       id = TREE_VALUE (spec);
9330
9331       if (TREE_CODE (id) == IDENTIFIER_NODE)
9332         {
9333           if (id == ridpointers[(int) RID_INT]
9334               || id == ridpointers[(int) RID_CHAR]
9335               || id == ridpointers[(int) RID_BOOL]
9336               || id == ridpointers[(int) RID_WCHAR])
9337             {
9338               if (type)
9339                 {
9340                   if (id == ridpointers[(int) RID_BOOL])
9341                     error ("`bool' is now a keyword");
9342                   else
9343                     cp_error ("extraneous `%T' ignored", id);
9344                 }
9345               else
9346                 {
9347                   if (id == ridpointers[(int) RID_INT])
9348                     explicit_int = 1;
9349                   else if (id == ridpointers[(int) RID_CHAR])
9350                     explicit_char = 1;
9351                   type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
9352                 }
9353               goto found;
9354             }
9355           /* C++ aggregate types.  */
9356           if (IDENTIFIER_HAS_TYPE_VALUE (id))
9357             {
9358               if (type)
9359                 cp_error ("multiple declarations `%T' and `%T'", type, id);
9360               else
9361                 type = IDENTIFIER_TYPE_VALUE (id);
9362               goto found;
9363             }
9364
9365           for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
9366             {
9367               if (ridpointers[i] == id)
9368                 {
9369                   if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
9370                     {
9371                       if (pedantic && ! in_system_header && warn_long_long)
9372                         pedwarn ("ANSI C++ does not support `long long'");
9373                       if (longlong)
9374                         error ("`long long long' is too long for GCC");
9375                       else
9376                         longlong = 1;
9377                     }
9378                   else if (RIDBIT_SETP (i, specbits))
9379                     pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
9380                   RIDBIT_SET (i, specbits);
9381                   goto found;
9382                 }
9383             }
9384         }
9385       /* C++ aggregate types.  */
9386       else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
9387         {
9388           if (type)
9389             cp_error ("multiple declarations `%T' and `%T'", type,
9390                       TREE_TYPE (id));
9391           else
9392             {
9393               type = TREE_TYPE (id);
9394               TREE_VALUE (spec) = type;
9395             }
9396           goto found;
9397         }
9398       if (type)
9399         error ("two or more data types in declaration of `%s'", name);
9400       else if (TREE_CODE (id) == IDENTIFIER_NODE)
9401         {
9402           register tree t = lookup_name (id, 1);
9403           if (!t || TREE_CODE (t) != TYPE_DECL)
9404             error ("`%s' fails to be a typedef or built in type",
9405                    IDENTIFIER_POINTER (id));
9406           else
9407             {
9408               type = TREE_TYPE (t);
9409 #if 0
9410               /* See the code below that used this.  */
9411               decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
9412 #endif
9413               typedef_decl = t;
9414             }
9415         }
9416       else if (id != error_mark_node)
9417         /* Can't change CLASS nodes into RECORD nodes here!  */
9418         type = id;
9419
9420     found: ;
9421     }
9422
9423   typedef_type = type;
9424
9425   /* No type at all: default to `int', and set DEFAULTED_INT
9426      because it was not a user-defined typedef.
9427      Except when we have a `typedef' inside a signature, in
9428      which case the type defaults to `unknown type' and is
9429      instantiated when assigning to a signature pointer or ref.  */
9430
9431   if (type == NULL_TREE
9432       && (RIDBIT_SETP (RID_SIGNED, specbits)
9433           || RIDBIT_SETP (RID_UNSIGNED, specbits)
9434           || RIDBIT_SETP (RID_LONG, specbits)
9435           || RIDBIT_SETP (RID_SHORT, specbits)))
9436     {
9437       /* These imply 'int'.  */
9438       type = integer_type_node;
9439       defaulted_int = 1;
9440     }
9441
9442   if (type == NULL_TREE)
9443     {
9444       explicit_int = -1;
9445       if (return_type == return_dtor)
9446         type = void_type_node;
9447       else if (return_type == return_ctor)
9448         type = build_pointer_type (ctor_return_type);
9449       else if (return_type == return_conversion)
9450         type = ctor_return_type;
9451       else if (current_class_type
9452                && IS_SIGNATURE (current_class_type)
9453                && RIDBIT_SETP (RID_TYPEDEF, specbits)
9454                && (decl_context == FIELD || decl_context == NORMAL))
9455         {
9456           explicit_int = 0;
9457           opaque_typedef = 1;
9458           type = copy_node (opaque_type_node);
9459         }
9460       else
9461         {
9462           /* We handle `main' specially here, because 'main () { }' is so
9463              common.  With no options, it is allowed.  With -Wreturn-type,
9464              it is a warning.  It is only an error with -pedantic-errors.  */
9465           int is_main = (funcdef_flag
9466                          && MAIN_NAME_P (dname)
9467                          && ctype == NULL_TREE
9468                          && in_namespace == NULL_TREE
9469                          && current_namespace == global_namespace);
9470
9471           if (in_system_header)
9472             /* Allow it, sigh.  */;
9473           else if (pedantic || ! is_main)
9474             cp_pedwarn ("ANSI C++ forbids declaration `%D' with no type",
9475                         dname);
9476           else if (warn_return_type)
9477             cp_warning ("ANSI C++ forbids declaration `%D' with no type",
9478                         dname);
9479
9480           type = integer_type_node;
9481         }
9482     }
9483   else if (return_type == return_dtor)
9484     {
9485       error ("return type specification for destructor invalid");
9486       type = void_type_node;
9487     }
9488   else if (return_type == return_ctor)
9489     {
9490       error ("return type specification for constructor invalid");
9491       type = build_pointer_type (ctor_return_type);
9492     }
9493   else if (return_type == return_conversion)
9494     {
9495       if (!same_type_p (type, ctor_return_type))
9496         cp_error ("operator `%T' declared to return `%T'",
9497                   ctor_return_type, type);
9498       else
9499         cp_pedwarn ("return type specified for `operator %T'",
9500                     ctor_return_type);
9501
9502       type = ctor_return_type;
9503     }
9504
9505   ctype = NULL_TREE;
9506
9507   /* Now process the modifiers that were specified
9508      and check for invalid combinations.  */
9509
9510   /* Long double is a special combination.  */
9511
9512   if (RIDBIT_SETP (RID_LONG, specbits)
9513       && TYPE_MAIN_VARIANT (type) == double_type_node)
9514     {
9515       RIDBIT_RESET (RID_LONG, specbits);
9516       type = build_qualified_type (long_double_type_node, 
9517                                    CP_TYPE_QUALS (type));
9518     }
9519
9520   /* Check all other uses of type modifiers.  */
9521
9522   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9523       || RIDBIT_SETP (RID_SIGNED, specbits)
9524       || RIDBIT_SETP (RID_LONG, specbits)
9525       || RIDBIT_SETP (RID_SHORT, specbits))
9526     {
9527       int ok = 0;
9528
9529       if (TREE_CODE (type) == REAL_TYPE)
9530         error ("short, signed or unsigned invalid for `%s'", name);
9531       else if (TREE_CODE (type) != INTEGER_TYPE)
9532         error ("long, short, signed or unsigned invalid for `%s'", name);
9533       else if (RIDBIT_SETP (RID_LONG, specbits)
9534                && RIDBIT_SETP (RID_SHORT, specbits))
9535         error ("long and short specified together for `%s'", name);
9536       else if ((RIDBIT_SETP (RID_LONG, specbits)
9537                 || RIDBIT_SETP (RID_SHORT, specbits))
9538                && explicit_char)
9539         error ("long or short specified with char for `%s'", name);
9540       else if ((RIDBIT_SETP (RID_LONG, specbits)
9541                 || RIDBIT_SETP (RID_SHORT, specbits))
9542                && TREE_CODE (type) == REAL_TYPE)
9543         error ("long or short specified with floating type for `%s'", name);
9544       else if (RIDBIT_SETP (RID_SIGNED, specbits)
9545                && RIDBIT_SETP (RID_UNSIGNED, specbits))
9546         error ("signed and unsigned given together for `%s'", name);
9547       else
9548         {
9549           ok = 1;
9550           if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
9551             {
9552               pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
9553                        name);
9554               if (flag_pedantic_errors)
9555                 ok = 0;
9556             }
9557         }
9558
9559       /* Discard the type modifiers if they are invalid.  */
9560       if (! ok)
9561         {
9562           RIDBIT_RESET (RID_UNSIGNED, specbits);
9563           RIDBIT_RESET (RID_SIGNED, specbits);
9564           RIDBIT_RESET (RID_LONG, specbits);
9565           RIDBIT_RESET (RID_SHORT, specbits);
9566           longlong = 0;
9567         }
9568     }
9569
9570   if (RIDBIT_SETP (RID_COMPLEX, specbits)
9571       && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9572     {
9573       error ("complex invalid for `%s'", name);
9574       RIDBIT_RESET (RID_COMPLEX, specbits);
9575     }
9576
9577   /* Decide whether an integer type is signed or not.
9578      Optionally treat bitfields as signed by default.  */
9579   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9580       /* [class.bit]
9581
9582          It is implementation-defined whether a plain (neither
9583          explicitly signed or unsigned) char, short, int, or long
9584          bit-field is signed or unsigned.
9585              
9586          Naturally, we extend this to long long as well.  Note that
9587          this does not include wchar_t.  */
9588       || (bitfield && !flag_signed_bitfields
9589           && RIDBIT_NOTSETP (RID_SIGNED, specbits)
9590           /* A typedef for plain `int' without `signed' can be
9591              controlled just like plain `int', but a typedef for
9592              `signed int' cannot be so controlled.  */
9593           && !(typedef_decl 
9594                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
9595           && (TREE_CODE (type) == INTEGER_TYPE
9596               || TREE_CODE (type) == CHAR_TYPE)
9597           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
9598     {
9599       if (longlong)
9600         type = long_long_unsigned_type_node;
9601       else if (RIDBIT_SETP (RID_LONG, specbits))
9602         type = long_unsigned_type_node;
9603       else if (RIDBIT_SETP (RID_SHORT, specbits))
9604         type = short_unsigned_type_node;
9605       else if (type == char_type_node)
9606         type = unsigned_char_type_node;
9607       else if (typedef_decl)
9608         type = unsigned_type (type);
9609       else
9610         type = unsigned_type_node;
9611     }
9612   else if (RIDBIT_SETP (RID_SIGNED, specbits)
9613            && type == char_type_node)
9614     type = signed_char_type_node;
9615   else if (longlong)
9616     type = long_long_integer_type_node;
9617   else if (RIDBIT_SETP (RID_LONG, specbits))
9618     type = long_integer_type_node;
9619   else if (RIDBIT_SETP (RID_SHORT, specbits))
9620     type = short_integer_type_node;
9621
9622   if (RIDBIT_SETP (RID_COMPLEX, specbits))
9623     {
9624       /* If we just have "complex", it is equivalent to
9625          "complex double", but if any modifiers at all are specified it is
9626          the complex form of TYPE.  E.g, "complex short" is
9627          "complex short int".  */
9628
9629       if (defaulted_int && ! longlong
9630           && ! (RIDBIT_SETP (RID_LONG, specbits)
9631                 || RIDBIT_SETP (RID_SHORT, specbits)
9632                 || RIDBIT_SETP (RID_SIGNED, specbits)
9633                 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
9634         type = complex_double_type_node;
9635       else if (type == integer_type_node)
9636         type = complex_integer_type_node;
9637       else if (type == float_type_node)
9638         type = complex_float_type_node;
9639       else if (type == double_type_node)
9640         type = complex_double_type_node;
9641       else if (type == long_double_type_node)
9642         type = complex_long_double_type_node;
9643       else
9644         type = build_complex_type (type);
9645     }
9646
9647   if (return_type == return_conversion 
9648       && (RIDBIT_SETP (RID_CONST, specbits)
9649           || RIDBIT_SETP (RID_VOLATILE, specbits)
9650           || RIDBIT_SETP (RID_RESTRICT, specbits)))
9651     cp_error ("qualifiers are not allowed on declaration of `operator %T'",
9652               ctor_return_type);
9653
9654   /* Set CONSTP if this declaration is `const', whether by
9655      explicit specification or via a typedef.
9656      Likewise for VOLATILEP.  */
9657
9658   constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
9659   restrictp = 
9660     !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
9661   volatilep = 
9662     !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
9663   type_quals = ((constp ? TYPE_QUAL_CONST : 0)
9664                 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
9665                 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
9666   type = cp_build_qualified_type (type, type_quals);
9667   staticp = 0;
9668   inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
9669   virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
9670   RIDBIT_RESET (RID_VIRTUAL, specbits);
9671   explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
9672   RIDBIT_RESET (RID_EXPLICIT, specbits);
9673
9674   if (RIDBIT_SETP (RID_STATIC, specbits))
9675     staticp = 1 + (decl_context == FIELD);
9676
9677   if (virtualp && staticp == 2)
9678     {
9679       cp_error ("member `%D' cannot be declared both virtual and static",
9680                 dname);
9681       staticp = 0;
9682     }
9683   friendp = RIDBIT_SETP (RID_FRIEND, specbits);
9684   RIDBIT_RESET (RID_FRIEND, specbits);
9685
9686   /* $7.1.2, Function specifiers */
9687   if (friendp && explicitp)
9688     error ("only declarations of constructors can be `explicit'");
9689
9690   if (RIDBIT_SETP (RID_MUTABLE, specbits))
9691     {
9692       if (decl_context == PARM)
9693         {
9694           error ("non-member `%s' cannot be declared `mutable'", name);
9695           RIDBIT_RESET (RID_MUTABLE, specbits);
9696         }
9697       else if (friendp || decl_context == TYPENAME)
9698         {
9699           error ("non-object member `%s' cannot be declared `mutable'", name);
9700           RIDBIT_RESET (RID_MUTABLE, specbits);
9701         }
9702     }
9703
9704   /* Warn if two storage classes are given. Default to `auto'.  */
9705
9706   if (RIDBIT_ANY_SET (specbits))
9707     {
9708       if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
9709       if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
9710       if (decl_context == PARM && nclasses > 0)
9711         error ("storage class specifiers invalid in parameter declarations");
9712       if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9713         {
9714           if (decl_context == PARM)
9715             error ("typedef declaration invalid in parameter declaration");
9716           nclasses++;
9717         }
9718       if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
9719       if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
9720     }
9721
9722   /* Give error if `virtual' is used outside of class declaration.  */
9723   if (virtualp
9724       && (current_class_name == NULL_TREE || decl_context != FIELD))
9725     {
9726       error ("virtual outside class declaration");
9727       virtualp = 0;
9728     }
9729   if (current_class_name == NULL_TREE && RIDBIT_SETP (RID_MUTABLE, specbits))
9730     {
9731       error ("only members can be declared mutable");
9732       RIDBIT_RESET (RID_MUTABLE, specbits);
9733     }
9734
9735   /* Static anonymous unions are dealt with here.  */
9736   if (staticp && decl_context == TYPENAME
9737       && TREE_CODE (declspecs) == TREE_LIST
9738       && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
9739     decl_context = FIELD;
9740
9741   /* Give error if `const,' `volatile,' `inline,' `friend,' or `virtual'
9742      is used in a signature member function declaration.  */
9743   if (decl_context == FIELD
9744       && IS_SIGNATURE (current_class_type)
9745       && RIDBIT_NOTSETP (RID_TYPEDEF, specbits))
9746     {
9747       if (type_quals != TYPE_UNQUALIFIED)
9748         {
9749           error ("type qualifiers specified for signature member function `%s'", name);
9750           type_quals = TYPE_UNQUALIFIED;
9751         }
9752       if (inlinep)
9753         {
9754           error ("`inline' specified for signature member function `%s'", name);
9755           /* Later, we'll make signature member functions inline.  */
9756           inlinep = 0;
9757         }
9758       if (friendp)
9759         {
9760           error ("`friend' declaration in signature definition");
9761           friendp = 0;
9762         }
9763       if (virtualp)
9764         {
9765           error ("`virtual' specified for signature member function `%s'",
9766                  name);
9767           /* Later, we'll make signature member functions virtual.  */
9768           virtualp = 0;
9769         }
9770     }
9771
9772   /* Warn about storage classes that are invalid for certain
9773      kinds of declarations (parameters, typenames, etc.).  */
9774
9775   if (nclasses > 1)
9776     error ("multiple storage classes in declaration of `%s'", name);
9777   else if (decl_context != NORMAL && nclasses > 0)
9778     {
9779       if ((decl_context == PARM || decl_context == CATCHPARM)
9780           && (RIDBIT_SETP (RID_REGISTER, specbits)
9781               || RIDBIT_SETP (RID_AUTO, specbits)))
9782         ;
9783       else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9784         ;
9785       else if (decl_context == FIELD
9786                && ! IS_SIGNATURE (current_class_type)
9787                /* C++ allows static class elements  */
9788                && RIDBIT_SETP (RID_STATIC, specbits))
9789         /* C++ also allows inlines and signed and unsigned elements,
9790            but in those cases we don't come in here.  */
9791         ;
9792       else
9793         {
9794           if (decl_context == FIELD)
9795             {
9796               tree tmp = NULL_TREE;
9797               register int op = 0;
9798
9799               if (declarator)
9800                 {
9801                   /* Avoid trying to get an operand off an identifier node.  */ 
9802                   if (TREE_CODE (declarator) == IDENTIFIER_NODE)
9803                     tmp = declarator;
9804                   else
9805                     tmp = TREE_OPERAND (declarator, 0);
9806                   op = IDENTIFIER_OPNAME_P (tmp);
9807                 }
9808               error ("storage class specified for %s `%s'",
9809                      IS_SIGNATURE (current_class_type)
9810                      ? (op
9811                         ? "signature member operator"
9812                         : "signature member function")
9813                      : (op ? "member operator" : "field"),
9814                      op ? operator_name_string (tmp) : name);
9815             }
9816           else
9817             error (((decl_context == PARM || decl_context == CATCHPARM)
9818                     ? "storage class specified for parameter `%s'"
9819                     : "storage class specified for typename"), name);
9820           RIDBIT_RESET (RID_REGISTER, specbits);
9821           RIDBIT_RESET (RID_AUTO, specbits);
9822           RIDBIT_RESET (RID_EXTERN, specbits);
9823
9824           if (decl_context == FIELD && IS_SIGNATURE (current_class_type))
9825             {
9826               RIDBIT_RESET (RID_STATIC, specbits);
9827               staticp = 0;
9828             }
9829         }
9830     }
9831   else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
9832     {
9833       if (toplevel_bindings_p ())
9834         {
9835           /* It's common practice (and completely valid) to have a const
9836              be initialized and declared extern.  */
9837           if (!(type_quals & TYPE_QUAL_CONST))
9838             warning ("`%s' initialized and declared `extern'", name);
9839         }
9840       else
9841         error ("`%s' has both `extern' and initializer", name);
9842     }
9843   else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
9844            && ! toplevel_bindings_p ())
9845     error ("nested function `%s' declared `extern'", name);
9846   else if (toplevel_bindings_p ())
9847     {
9848       if (RIDBIT_SETP (RID_AUTO, specbits))
9849         error ("top-level declaration of `%s' specifies `auto'", name);
9850     }
9851
9852   if (nclasses > 0 && friendp)
9853     error ("storage class specifiers invalid in friend function declarations");
9854
9855   /* Now figure out the structure of the declarator proper.
9856      Descend through it, creating more complex types, until we reach
9857      the declared identifier (or NULL_TREE, in an absolute declarator).  */
9858
9859   inner_attrs = NULL_TREE;
9860   ignore_attrs = 0;  
9861
9862   while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
9863          && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
9864     {
9865       /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
9866          an INDIRECT_REF (for *...),
9867          a CALL_EXPR (for ...(...)),
9868          an identifier (for the name being declared)
9869          or a null pointer (for the place in an absolute declarator
9870          where the name was omitted).
9871          For the last two cases, we have just exited the loop.
9872
9873          For C++ it could also be
9874          a SCOPE_REF (for class :: ...).  In this case, we have converted
9875          sensible names to types, and those are the values we use to
9876          qualify the member name.
9877          an ADDR_EXPR (for &...),
9878          a BIT_NOT_EXPR (for destructors)
9879
9880          At this point, TYPE is the type of elements of an array,
9881          or for a function to return, or for a pointer to point to.
9882          After this sequence of ifs, TYPE is the type of the
9883          array or function or pointer, and DECLARATOR has had its
9884          outermost layer removed.  */
9885
9886       if (type == error_mark_node)
9887         {
9888           if (TREE_CODE (declarator) == SCOPE_REF)
9889             declarator = TREE_OPERAND (declarator, 1);
9890           else
9891             declarator = TREE_OPERAND (declarator, 0);
9892           continue;
9893         }
9894       if (quals != NULL_TREE
9895           && (declarator == NULL_TREE
9896               || TREE_CODE (declarator) != SCOPE_REF))
9897         {
9898           if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
9899             ctype = TYPE_METHOD_BASETYPE (type);
9900           if (ctype != NULL_TREE)
9901             {
9902               tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
9903               ctype = grok_method_quals (ctype, dummy, quals);
9904               type = TREE_TYPE (dummy);
9905               quals = NULL_TREE;
9906             }
9907         }
9908
9909       /* See the comment for the TREE_LIST case, below.  */
9910       if (ignore_attrs)
9911         ignore_attrs = 0;
9912       else if (inner_attrs)
9913         {
9914           decl_attributes (type, inner_attrs, NULL_TREE);
9915           inner_attrs = NULL_TREE;
9916         }
9917
9918       switch (TREE_CODE (declarator))
9919         {
9920         case TREE_LIST:
9921           {
9922             /* We encode a declarator with embedded attributes using
9923                a TREE_LIST.  The attributes apply to the declarator
9924                directly inside them, so we have to skip an iteration
9925                before applying them to the type.  If the declarator just
9926                inside is the declarator-id, we apply the attrs to the
9927                decl itself.  */
9928             inner_attrs = TREE_PURPOSE (declarator);
9929             ignore_attrs = 1;
9930             declarator = TREE_VALUE (declarator);
9931           }
9932           break;
9933
9934         case ARRAY_REF:
9935           {
9936             register tree itype = NULL_TREE;
9937             register tree size = TREE_OPERAND (declarator, 1);
9938             /* The index is a signed object `sizetype' bits wide.  */
9939             tree index_type = signed_type (sizetype);
9940
9941             declarator = TREE_OPERAND (declarator, 0);
9942
9943             /* Check for some types that there cannot be arrays of.  */
9944
9945             if (TREE_CODE (type) == VOID_TYPE)
9946               {
9947                 cp_error ("declaration of `%D' as array of voids", dname);
9948                 type = error_mark_node;
9949               }
9950
9951             if (TREE_CODE (type) == FUNCTION_TYPE)
9952               {
9953                 cp_error ("declaration of `%D' as array of functions", dname);
9954                 type = error_mark_node;
9955               }
9956
9957             /* ARM $8.4.3: Since you can't have a pointer to a reference,
9958                you can't have arrays of references.  If we allowed them,
9959                then we'd be saying x[i] is valid for an array x, but
9960                then you'd have to ask: what does `*(x + i)' mean?  */
9961             if (TREE_CODE (type) == REFERENCE_TYPE)
9962               {
9963                 if (decl_context == TYPENAME)
9964                   cp_error ("cannot make arrays of references");
9965                 else
9966                   cp_error ("declaration of `%D' as array of references",
9967                             dname);
9968                 type = error_mark_node;
9969               }
9970
9971             if (TREE_CODE (type) == OFFSET_TYPE)
9972               {
9973                   cp_error ("declaration of `%D' as array of data members",
9974                             dname);
9975                 type = error_mark_node;
9976               }
9977
9978             if (TREE_CODE (type) == METHOD_TYPE)
9979               {
9980                 cp_error ("declaration of `%D' as array of function members",
9981                           dname);
9982                 type = error_mark_node;
9983               }
9984
9985             if (size == error_mark_node)
9986               type = error_mark_node;
9987             else if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9988               {
9989                 /* [dcl.array]
9990
9991                    the constant expressions that specify the bounds of
9992                    the arrays can be omitted only for the first member
9993                    of the sequence.  */
9994                 cp_error ("declaration of `%D' as multidimensional array",
9995                           dname);
9996                 cp_error ("must have bounds for all dimensions except the first");
9997                 type = error_mark_node;
9998               }
9999
10000             if (type == error_mark_node)
10001               continue;
10002
10003             /* VC++ spells a zero-sized array with [].  */
10004             if (size == NULL_TREE && decl_context == FIELD && ! staticp
10005                 && ! RIDBIT_SETP (RID_TYPEDEF, specbits))
10006               size = integer_zero_node;
10007
10008             if (size)
10009               {
10010                 /* Must suspend_momentary here because the index
10011                    type may need to live until the end of the function.
10012                    For example, it is used in the declaration of a
10013                    variable which requires destructing at the end of
10014                    the function; then build_vec_delete will need this
10015                    value.  */
10016                 int yes = suspend_momentary ();
10017                 /* Might be a cast. */
10018                 if (TREE_CODE (size) == NOP_EXPR
10019                     && TREE_TYPE (size) == TREE_TYPE (TREE_OPERAND (size, 0)))
10020                   size = TREE_OPERAND (size, 0);
10021                 if (TREE_READONLY_DECL_P (size))
10022                   size = decl_constant_value (size);
10023
10024                 /* If this involves a template parameter, it will be a
10025                    constant at instantiation time, but we don't know
10026                    what the value is yet.  Even if no template
10027                    parameters are involved, we may an expression that
10028                    is not a constant; we don't even simplify `1 + 2'
10029                    when processing a template.  */
10030                 if (processing_template_decl)
10031                   {
10032                     /* Resolve a qualified reference to an enumerator or
10033                        static const data member of ours.  */
10034                     if (TREE_CODE (size) == SCOPE_REF
10035                         && TREE_OPERAND (size, 0) == current_class_type)
10036                       {
10037                         tree t = lookup_field (current_class_type,
10038                                                TREE_OPERAND (size, 1), 0, 0);
10039                         if (t)
10040                           size = t;
10041                       }
10042
10043                     itype = make_node (INTEGER_TYPE);
10044                     TYPE_MIN_VALUE (itype) = size_zero_node;
10045                     TYPE_MAX_VALUE (itype) = build_min
10046                       (MINUS_EXPR, sizetype, size, integer_one_node);
10047                     goto dont_grok_size;
10048                   }
10049
10050                 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
10051                     && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
10052                     && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
10053                   {
10054                     cp_error ("size of array `%D' has non-integer type",
10055                               dname);
10056                     size = integer_one_node;
10057                   }
10058                 if (pedantic && integer_zerop (size))
10059                   cp_pedwarn ("ANSI C++ forbids zero-size array `%D'", dname);
10060                 if (TREE_CONSTANT (size))
10061                   {
10062                     int old_flag_pedantic_errors = flag_pedantic_errors;
10063                     int old_pedantic = pedantic;
10064                     pedantic = flag_pedantic_errors = 1;
10065                     /* Always give overflow errors on array subscripts.  */
10066                     constant_expression_warning (size);
10067                     pedantic = old_pedantic;
10068                     flag_pedantic_errors = old_flag_pedantic_errors;
10069                     if (INT_CST_LT (size, integer_zero_node))
10070                       {
10071                         cp_error ("size of array `%D' is negative", dname);
10072                         size = integer_one_node;
10073                       }
10074                   }
10075                 else
10076                   {
10077                     if (pedantic)
10078                       {
10079                         if (dname)
10080                           cp_pedwarn ("ANSI C++ forbids variable-size array `%D'",
10081                                       dname);
10082                         else
10083                           cp_pedwarn ("ANSI C++ forbids variable-size array");
10084                       }
10085                   }
10086
10087                 itype
10088                   = fold (build_binary_op (MINUS_EXPR,
10089                                            cp_convert (index_type, size),
10090                                            cp_convert (index_type,
10091                                                        integer_one_node)));
10092                 if (! TREE_CONSTANT (itype))
10093                   itype = variable_size (itype);
10094                 else if (TREE_OVERFLOW (itype))
10095                   {
10096                     error ("overflow in array dimension");
10097                     TREE_OVERFLOW (itype) = 0;
10098                   }
10099
10100                 /* If we're a parm, we need to have a permanent type so
10101                    mangling checks for re-use will work right.  If both the
10102                    element and index types are permanent, the array type
10103                    will be, too.  */
10104                 if (decl_context == PARM
10105                     && allocation_temporary_p () && TREE_PERMANENT (type))
10106                   {
10107                     push_obstacks (&permanent_obstack, &permanent_obstack);
10108                     itype = build_index_type (itype);
10109                     pop_obstacks ();
10110                   }
10111                 else
10112                   itype = build_index_type (itype);
10113
10114               dont_grok_size:
10115                 resume_momentary (yes);
10116               }
10117
10118             type = build_cplus_array_type (type, itype);
10119             ctype = NULL_TREE;
10120           }
10121           break;
10122
10123         case CALL_EXPR:
10124           {
10125             tree arg_types;
10126             int funcdecl_p;
10127             tree inner_parms = TREE_OPERAND (declarator, 1);
10128             tree inner_decl = TREE_OPERAND (declarator, 0);
10129
10130             /* Declaring a function type.
10131                Make sure we have a valid type for the function to return.  */
10132
10133             /* We now know that the TYPE_QUALS don't apply to the
10134                decl, but to its return type.  */
10135             type_quals = TYPE_UNQUALIFIED;
10136
10137             /* Warn about some types functions can't return.  */
10138
10139             if (TREE_CODE (type) == FUNCTION_TYPE)
10140               {
10141                 error ("`%s' declared as function returning a function", name);
10142                 type = integer_type_node;
10143               }
10144             if (TREE_CODE (type) == ARRAY_TYPE)
10145               {
10146                 error ("`%s' declared as function returning an array", name);
10147                 type = integer_type_node;
10148               }
10149
10150             if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
10151               inner_decl = TREE_OPERAND (inner_decl, 1);
10152
10153             if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR) 
10154               inner_decl = dname;
10155
10156             /* Pick up type qualifiers which should be applied to `this'.  */
10157             quals = TREE_OPERAND (declarator, 2);
10158
10159             /* Pick up the exception specifications.  */
10160             raises = TREE_TYPE (declarator);
10161
10162             /* Say it's a definition only for the CALL_EXPR
10163                closest to the identifier.  */
10164             funcdecl_p
10165               = inner_decl 
10166               && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
10167                   || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR 
10168                   || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
10169             
10170             if (ctype == NULL_TREE
10171                 && decl_context == FIELD
10172                 && funcdecl_p
10173                 && (friendp == 0 || dname == current_class_name))
10174               ctype = current_class_type;
10175
10176             if (ctype && return_type == return_conversion)
10177               TYPE_HAS_CONVERSION (ctype) = 1;
10178             if (ctype && constructor_name (ctype) == dname)
10179               {
10180                 /* We are within a class's scope. If our declarator name
10181                    is the same as the class name, and we are defining
10182                    a function, then it is a constructor/destructor, and
10183                    therefore returns a void type.  */
10184
10185                 if (flags == DTOR_FLAG)
10186                   {
10187                     /* ANSI C++ June 5 1992 WP 12.4.1.  A destructor may
10188                        not be declared const or volatile.  A destructor
10189                        may not be static.  */
10190                     if (staticp == 2)
10191                       error ("destructor cannot be static member function");
10192                     if (quals)
10193                       {
10194                         cp_error ("destructors may not be `%s'",
10195                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10196                         quals = NULL_TREE;
10197                       }
10198                     if (decl_context == FIELD)
10199                       {
10200                         if (! member_function_or_else (ctype, current_class_type,
10201                                                        "destructor for alien class `%s' cannot be a member"))
10202                           return void_type_node;
10203                       }
10204                   }
10205                 else            /* It's a constructor.  */
10206                   {
10207                     if (explicitp == 1)
10208                       explicitp = 2;
10209                     /* ANSI C++ June 5 1992 WP 12.1.2.  A constructor may
10210                        not be declared const or volatile.  A constructor may
10211                        not be virtual.  A constructor may not be static.  */
10212                     if (staticp == 2)
10213                       error ("constructor cannot be static member function");
10214                     if (virtualp)
10215                       {
10216                         pedwarn ("constructors cannot be declared virtual");
10217                         virtualp = 0;
10218                       }
10219                     if (quals)
10220                       {
10221                         cp_error ("constructors may not be `%s'",
10222                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10223                         quals = NULL_TREE;
10224                       }
10225                     {
10226                       RID_BIT_TYPE tmp_bits;
10227                       bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
10228                       RIDBIT_RESET (RID_INLINE, tmp_bits);
10229                       RIDBIT_RESET (RID_STATIC, tmp_bits);
10230                       if (RIDBIT_ANY_SET (tmp_bits))
10231                         error ("return value type specifier for constructor ignored");
10232                     }
10233                     type = build_pointer_type (ctype);
10234                     if (decl_context == FIELD
10235                         && IS_SIGNATURE (current_class_type))
10236                       {
10237                         error ("constructor not allowed in signature");
10238                         return void_type_node;
10239                       }                   
10240                     else if (decl_context == FIELD)
10241                       {
10242                         if (! member_function_or_else (ctype, current_class_type,
10243                                                        "constructor for alien class `%s' cannot be member"))
10244                           return void_type_node;
10245                         TYPE_HAS_CONSTRUCTOR (ctype) = 1;
10246                         if (return_type != return_ctor)
10247                           return NULL_TREE;
10248                       }
10249                   }
10250                 if (decl_context == FIELD)
10251                   staticp = 0;
10252               }
10253             else if (friendp)
10254               {
10255                 if (initialized)
10256                   error ("can't initialize friend function `%s'", name);
10257                 if (virtualp)
10258                   {
10259                     /* Cannot be both friend and virtual.  */
10260                     error ("virtual functions cannot be friends");
10261                     RIDBIT_RESET (RID_FRIEND, specbits);
10262                     friendp = 0;
10263                   }
10264                 if (decl_context == NORMAL)
10265                   error ("friend declaration not in class definition");
10266                 if (current_function_decl && funcdef_flag)
10267                   cp_error ("can't define friend function `%s' in a local class definition",
10268                             name);
10269               }
10270
10271             /* Construct the function type and go to the next
10272                inner layer of declarator.  */
10273
10274             declarator = TREE_OPERAND (declarator, 0);
10275
10276             /* FIXME: This is where default args should be fully
10277                processed.  */
10278
10279             arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
10280
10281             if (declarator && flags == DTOR_FLAG)
10282               {
10283                 /* A destructor declared in the body of a class will
10284                    be represented as a BIT_NOT_EXPR.  But, we just
10285                    want the underlying IDENTIFIER.  */
10286                 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
10287                   declarator = TREE_OPERAND (declarator, 0);
10288                 
10289                 if (strict_prototype == 0 && arg_types == NULL_TREE)
10290                   arg_types = void_list_node;
10291                 else if (arg_types == NULL_TREE
10292                          || arg_types != void_list_node)
10293                   {
10294                     cp_error ("destructors may not have parameters");
10295                     arg_types = void_list_node;
10296                     last_function_parms = NULL_TREE;
10297                   }
10298               }
10299
10300             /* ANSI says that `const int foo ();'
10301                does not make the function foo const.  */
10302             type = build_function_type (type, arg_types);
10303
10304             {
10305               tree t;
10306               for (t = arg_types; t; t = TREE_CHAIN (t))
10307                 if (TREE_PURPOSE (t)
10308                     && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10309                   {
10310                     add_defarg_fn (type);
10311                     break;
10312                   }
10313             }
10314           }
10315           break;
10316
10317         case ADDR_EXPR:
10318         case INDIRECT_REF:
10319           /* Filter out pointers-to-references and references-to-references.
10320              We can get these if a TYPE_DECL is used.  */
10321
10322           if (TREE_CODE (type) == REFERENCE_TYPE)
10323             {
10324               error ("cannot declare %s to references",
10325                      TREE_CODE (declarator) == ADDR_EXPR
10326                      ? "references" : "pointers");
10327               declarator = TREE_OPERAND (declarator, 0);
10328               continue;
10329             }
10330
10331           if (TREE_CODE (type) == OFFSET_TYPE
10332               && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10333                   || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10334             {
10335               cp_error ("cannot declare pointer to `%#T' member",
10336                         TREE_TYPE (type));
10337               type = TREE_TYPE (type);
10338             }
10339
10340           /* Merge any constancy or volatility into the target type
10341              for the pointer.  */
10342
10343           /* We now know that the TYPE_QUALS don't apply to the decl,
10344              but to the target of the pointer.  */
10345           type_quals = TYPE_UNQUALIFIED;
10346
10347           if (IS_SIGNATURE (type))
10348             {
10349               if (TREE_CODE (declarator) == ADDR_EXPR)
10350                 {
10351                   if (CLASSTYPE_METHOD_VEC (type) == NULL_TREE
10352                       && TYPE_SIZE (type))
10353                     cp_warning ("empty signature `%T' used in signature reference declaration",
10354                                 type);
10355 #if 0
10356                   type = build_signature_reference_type (type);
10357 #else
10358                   sorry ("signature reference");
10359                   return NULL_TREE;
10360 #endif
10361                 }
10362               else
10363                 {
10364                   if (CLASSTYPE_METHOD_VEC (type) == NULL_TREE
10365                       && TYPE_SIZE (type))
10366                     cp_warning ("empty signature `%T' used in signature pointer declaration",
10367                                 type);
10368                   type = build_signature_pointer_type (type);
10369                 }
10370             }
10371           else if (TREE_CODE (declarator) == ADDR_EXPR)
10372             {
10373               if (TREE_CODE (type) == VOID_TYPE)
10374                 error ("invalid type: `void &'");
10375               else
10376                 type = build_reference_type (type);
10377             }
10378           else if (TREE_CODE (type) == METHOD_TYPE)
10379             type = build_ptrmemfunc_type (build_pointer_type (type));
10380           else
10381             type = build_pointer_type (type);
10382
10383           /* Process a list of type modifier keywords (such as
10384              const or volatile) that were given inside the `*' or `&'.  */
10385
10386           if (TREE_TYPE (declarator))
10387             {
10388               register tree typemodlist;
10389               int erred = 0;
10390
10391               constp = 0;
10392               volatilep = 0;
10393               restrictp = 0;
10394               for (typemodlist = TREE_TYPE (declarator); typemodlist;
10395                    typemodlist = TREE_CHAIN (typemodlist))
10396                 {
10397                   tree qualifier = TREE_VALUE (typemodlist);
10398
10399                   if (qualifier == ridpointers[(int) RID_CONST])
10400                     constp++;
10401                   else if (qualifier == ridpointers[(int) RID_VOLATILE])
10402                     volatilep++;
10403                   else if (qualifier == ridpointers[(int) RID_RESTRICT])
10404                     restrictp++;
10405                   else if (!erred)
10406                     {
10407                       erred = 1;
10408                       error ("invalid type modifier within pointer declarator");
10409                     }
10410                 }
10411               if (constp > 1)
10412                 pedwarn ("duplicate `const'");
10413               if (volatilep > 1)
10414                 pedwarn ("duplicate `volatile'");
10415               if (restrictp > 1)
10416                 pedwarn ("duplicate `restrict'");
10417
10418               type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10419                             | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10420                             | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10421               if (TREE_CODE (declarator) == ADDR_EXPR
10422                   && (constp || volatilep))
10423                 {
10424                   if (constp)
10425                     pedwarn ("discarding `const' applied to a reference");
10426                   if (volatilep)
10427                     pedwarn ("discarding `volatile' applied to a reference");
10428                   type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
10429                 }
10430               type = cp_build_qualified_type (type, type_quals);
10431             }
10432           declarator = TREE_OPERAND (declarator, 0);
10433           ctype = NULL_TREE;
10434           break;
10435
10436         case SCOPE_REF:
10437           {
10438             /* We have converted type names to NULL_TREE if the
10439                name was bogus, or to a _TYPE node, if not.
10440
10441                The variable CTYPE holds the type we will ultimately
10442                resolve to.  The code here just needs to build
10443                up appropriate member types.  */
10444             tree sname = TREE_OPERAND (declarator, 1);
10445             tree t;
10446
10447             /* Destructors can have their visibilities changed as well.  */
10448             if (TREE_CODE (sname) == BIT_NOT_EXPR)
10449               sname = TREE_OPERAND (sname, 0);
10450
10451             if (TREE_COMPLEXITY (declarator) == 0)
10452               /* This needs to be here, in case we are called
10453                  multiple times.  */ ;
10454             else if (TREE_COMPLEXITY (declarator) == -1)
10455               /* Namespace member. */
10456               pop_decl_namespace ();
10457             else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
10458               /* Don't fall out into global scope. Hides real bug? --eichin */ ;
10459             else if (! IS_AGGR_TYPE_CODE
10460                      (TREE_CODE (TREE_OPERAND (declarator, 0))))
10461               ;
10462             else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10463               {
10464                 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10465                    that refer to ctype.  They couldn't be resolved earlier
10466                    because we hadn't pushed into the class yet.
10467                    Example: resolve 'B<T>::type' in
10468                    'B<typename B<T>::type> B<T>::f () { }'.  */
10469                 if (current_template_parms
10470                     && uses_template_parms (type)
10471                     && uses_template_parms (current_class_type))
10472                   {
10473                     tree args = current_template_args ();
10474                     type = tsubst (type, args, /*complain=*/1, NULL_TREE);
10475                   }
10476
10477                 /* This pop_nested_class corresponds to the
10478                    push_nested_class used to push into class scope for
10479                    parsing the argument list of a function decl, in
10480                    qualified_id.  */
10481                 pop_nested_class ();
10482                 TREE_COMPLEXITY (declarator) = current_class_depth;
10483               }
10484             else
10485               my_friendly_abort (16);
10486
10487             if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10488               {
10489                 /* We had a reference to a global decl, or
10490                    perhaps we were given a non-aggregate typedef,
10491                    in which case we cleared this out, and should just
10492                    keep going as though it wasn't there.  */
10493                 declarator = sname;
10494                 continue;
10495               }
10496             ctype = TREE_OPERAND (declarator, 0);
10497
10498             t = ctype;
10499             while (t != NULL_TREE && CLASS_TYPE_P (t)) 
10500               {
10501                 if (CLASSTYPE_TEMPLATE_INFO (t) &&
10502                     !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
10503                   template_count += 1;
10504                 t = TYPE_MAIN_DECL (t);
10505                 if (DECL_LANG_SPECIFIC (t))
10506                   t = DECL_CLASS_CONTEXT (t);
10507                 else
10508                   t = NULL_TREE;
10509               }
10510
10511             if (sname == NULL_TREE)
10512               goto done_scoping;
10513
10514             if (TREE_CODE (sname) == IDENTIFIER_NODE)
10515               {
10516                 /* This is the `standard' use of the scoping operator:
10517                    basetype :: member .  */
10518
10519                 if (ctype == current_class_type)
10520                   {
10521                     /* class A {
10522                          void A::f ();
10523                        };
10524
10525                        Is this ill-formed?  */
10526
10527                     if (pedantic)
10528                       cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
10529                                   ctype, name);
10530                   }
10531                 else if (TREE_CODE (type) == FUNCTION_TYPE)
10532                   {
10533                     if (current_class_type == NULL_TREE
10534                         || friendp)
10535                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10536                                                       TYPE_ARG_TYPES (type));
10537                     else
10538                       {
10539                         cp_error ("cannot declare member function `%T::%s' within `%T'",
10540                                   ctype, name, current_class_type);
10541                         return void_type_node;
10542                       }
10543                   }
10544                 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
10545                          || TYPE_SIZE (complete_type (ctype)) != NULL_TREE)
10546                   {
10547                     /* Have to move this code elsewhere in this function.
10548                        this code is used for i.e., typedef int A::M; M *pm;
10549
10550                        It is?  How? jason 10/2/94 */
10551
10552                     if (current_class_type)
10553                       {
10554                         cp_error ("cannot declare member `%T::%s' within `%T'",
10555                                   ctype, name, current_class_type);
10556                         return void_type_node;
10557                       }
10558                     type = build_offset_type (ctype, type);
10559                   }
10560                 else if (uses_template_parms (ctype))
10561                   {
10562                     if (TREE_CODE (type) == FUNCTION_TYPE)
10563                       type
10564                         = build_cplus_method_type (ctype, TREE_TYPE (type),
10565                                                    TYPE_ARG_TYPES (type));
10566                   }
10567                 else
10568                   {
10569                     cp_error ("structure `%T' not yet defined", ctype);
10570                     return error_mark_node;
10571                   }
10572
10573                 declarator = sname;
10574               }
10575             else if (TREE_CODE (sname) == SCOPE_REF)
10576               my_friendly_abort (17);
10577             else
10578               {
10579               done_scoping:
10580                 declarator = TREE_OPERAND (declarator, 1);
10581                 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10582                   /* In this case, we will deal with it later.  */
10583                   ;
10584                 else
10585                   {
10586                     if (TREE_CODE (type) == FUNCTION_TYPE)
10587                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10588                                                       TYPE_ARG_TYPES (type));
10589                     else
10590                       type = build_offset_type (ctype, type);
10591                   }
10592               }
10593           }
10594           break;
10595
10596         case BIT_NOT_EXPR:
10597           declarator = TREE_OPERAND (declarator, 0);
10598           break;
10599
10600         case RECORD_TYPE:
10601         case UNION_TYPE:
10602         case ENUMERAL_TYPE:
10603           declarator = NULL_TREE;
10604           break;
10605
10606         case ERROR_MARK:
10607           declarator = NULL_TREE;
10608           break;
10609
10610         default:
10611           my_friendly_abort (158);
10612         }
10613     }
10614
10615   /* See the comment for the TREE_LIST case, above.  */
10616   if (inner_attrs)
10617     {
10618       if (! ignore_attrs)
10619         decl_attributes (type, inner_attrs, NULL_TREE);
10620       else if (attrlist)
10621         TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
10622       else
10623         attrlist = build_decl_list (NULL_TREE, inner_attrs);
10624     }
10625
10626   /* Now TYPE has the actual type.  */
10627
10628   if (explicitp == 1)
10629     {
10630       error ("only constructors can be declared `explicit'");
10631       explicitp = 0;
10632     }
10633
10634   if (RIDBIT_SETP (RID_MUTABLE, specbits))
10635     {
10636       if (type_quals & TYPE_QUAL_CONST)
10637         {
10638           error ("const `%s' cannot be declared `mutable'", name);
10639           RIDBIT_RESET (RID_MUTABLE, specbits);
10640         }
10641       else if (staticp)
10642         {
10643           error ("static `%s' cannot be declared `mutable'", name);
10644           RIDBIT_RESET (RID_MUTABLE, specbits);
10645         }
10646     }
10647
10648   if (declarator == NULL_TREE
10649       || TREE_CODE (declarator) == IDENTIFIER_NODE
10650       || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
10651           && (TREE_CODE (type) == FUNCTION_TYPE
10652               || TREE_CODE (type) == METHOD_TYPE)))
10653     /* OK */;
10654   else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10655     {
10656       cp_error ("template-id `%D' used as a declarator", declarator);
10657       declarator = dname;
10658     }
10659   else
10660     /* Unexpected declarator format.  */
10661     my_friendly_abort (990210);
10662
10663   /* If this is declaring a typedef name, return a TYPE_DECL.  */
10664
10665   if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
10666     {
10667       tree decl;
10668
10669       /* Note that the grammar rejects storage classes
10670          in typenames, fields or parameters.  */
10671       if (current_lang_name == lang_name_java)
10672         TYPE_FOR_JAVA (type) = 1;
10673
10674       if (decl_context == FIELD)
10675         {
10676           if (declarator == constructor_name (current_class_type))
10677             cp_pedwarn ("ANSI C++ forbids nested type `%D' with same name as enclosing class",
10678                         declarator);
10679           decl = build_lang_decl (TYPE_DECL, declarator, type);
10680           if (IS_SIGNATURE (current_class_type) && opaque_typedef)
10681             SIGNATURE_HAS_OPAQUE_TYPEDECLS (current_class_type) = 1;
10682         }
10683       else
10684         {
10685           /* Make sure this typedef lives as long as its type,
10686              since it might be used as a template parameter. */
10687           if (type != error_mark_node)
10688             push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
10689           decl = build_decl (TYPE_DECL, declarator, type);
10690           if (type != error_mark_node)
10691             pop_obstacks ();
10692         }
10693
10694       /* If the user declares "struct {...} foo" then `foo' will have
10695          an anonymous name.  Fill that name in now.  Nothing can
10696          refer to it, so nothing needs know about the name change.
10697          The TYPE_NAME field was filled in by build_struct_xref.  */
10698       if (type != error_mark_node
10699           && TYPE_NAME (type)
10700           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10701           && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type))
10702           && CP_TYPE_QUALS (type) == TYPE_UNQUALIFIED)
10703         {
10704           tree oldname = TYPE_NAME (type);
10705           tree t;
10706
10707           /* Replace the anonymous name with the real name everywhere.  */
10708           lookup_tag_reverse (type, declarator);
10709           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10710             if (TYPE_NAME (t) == oldname)
10711               TYPE_NAME (t) = decl;
10712
10713           if (TYPE_LANG_SPECIFIC (type))
10714             TYPE_WAS_ANONYMOUS (type) = 1;
10715
10716           /* If this is a typedef within a template class, the nested
10717              type is a (non-primary) template.  The name for the
10718              template needs updating as well.  */
10719           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10720             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)) 
10721               = TYPE_IDENTIFIER (type);
10722
10723           /* XXX Temporarily set the scope. 
10724              When returning, start_decl expects it as NULL_TREE,
10725              and will then then set it using pushdecl. */
10726           my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 980404);
10727           if (current_class_type)
10728             DECL_CONTEXT (decl) = current_class_type;
10729           else
10730             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10731
10732           DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
10733           DECL_ASSEMBLER_NAME (decl)
10734             = get_identifier (build_overload_name (type, 1, 1));
10735           DECL_CONTEXT (decl) = NULL_TREE;
10736
10737           /* FIXME remangle member functions; member functions of a
10738              type with external linkage have external linkage.  */
10739         }
10740
10741       if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
10742         {
10743           cp_error_at ("typedef name may not be class-qualified", decl);
10744           return NULL_TREE;
10745         }
10746       else if (quals)
10747         {
10748           if (ctype == NULL_TREE)
10749             {
10750               if (TREE_CODE (type) != METHOD_TYPE)
10751                 cp_error_at ("invalid type qualifier for non-method type", decl);
10752               else
10753                 ctype = TYPE_METHOD_BASETYPE (type);
10754             }
10755           if (ctype != NULL_TREE)
10756             grok_method_quals (ctype, decl, quals);
10757         }
10758
10759       if (RIDBIT_SETP (RID_SIGNED, specbits)
10760           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10761         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10762
10763       if (RIDBIT_SETP (RID_MUTABLE, specbits))
10764         error ("non-object member `%s' cannot be declared mutable", name);
10765
10766       bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
10767                       inlinep, friendp, raises != NULL_TREE);
10768
10769       if (initialized)
10770         error ("typedef declaration includes an initializer");
10771
10772       return decl;
10773     }
10774
10775   /* Detect the case of an array type of unspecified size
10776      which came, as such, direct from a typedef name.
10777      We must copy the type, so that each identifier gets
10778      a distinct type, so that each identifier's size can be
10779      controlled separately by its own initializer.  */
10780
10781   if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
10782       && TYPE_DOMAIN (type) == NULL_TREE)
10783     {
10784       type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
10785     }
10786
10787   /* If this is a type name (such as, in a cast or sizeof),
10788      compute the type and return it now.  */
10789
10790   if (decl_context == TYPENAME)
10791     {
10792       /* Note that the grammar rejects storage classes
10793          in typenames, fields or parameters.  */
10794       if (type_quals != TYPE_UNQUALIFIED)
10795         {
10796           if (IS_SIGNATURE (type))
10797             error ("type qualifiers specified for signature type");
10798           type_quals = TYPE_UNQUALIFIED;
10799         }
10800
10801       /* Special case: "friend class foo" looks like a TYPENAME context.  */
10802       if (friendp)
10803         {
10804           if (type_quals != TYPE_UNQUALIFIED)
10805             {
10806               cp_error ("type qualifiers specified for friend class declaration");
10807               type_quals = TYPE_UNQUALIFIED;
10808             }
10809           if (inlinep)
10810             {
10811               cp_error ("`inline' specified for friend class declaration");
10812               inlinep = 0;
10813             }
10814
10815           /* Only try to do this stuff if we didn't already give up.  */
10816           if (type != integer_type_node)
10817             {
10818               /* A friendly class?  */
10819               if (current_class_type)
10820                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
10821               else
10822                 error ("trying to make class `%s' a friend of global scope",
10823                        TYPE_NAME_STRING (type));
10824               type = void_type_node;
10825             }
10826         }
10827       else if (quals)
10828         {
10829           tree dummy = build_decl (TYPE_DECL, declarator, type);
10830           if (ctype == NULL_TREE)
10831             {
10832               my_friendly_assert (TREE_CODE (type) == METHOD_TYPE, 159);
10833               ctype = TYPE_METHOD_BASETYPE (type);
10834             }
10835           grok_method_quals (ctype, dummy, quals);
10836           type = TREE_TYPE (dummy);
10837         }
10838
10839       return type;
10840     }
10841   else if (declarator == NULL_TREE && decl_context != PARM
10842            && decl_context != CATCHPARM
10843            && TREE_CODE (type) != UNION_TYPE
10844            && ! bitfield)
10845     {
10846       cp_error ("abstract declarator `%T' used as declaration", type);
10847       declarator = make_anon_name ();
10848     }
10849
10850   /* `void' at top level (not within pointer)
10851      is allowed only in typedefs or type names.
10852      We don't complain about parms either, but that is because
10853      a better error message can be made later.  */
10854
10855   if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
10856     {
10857       if (! declarator)
10858         error ("unnamed variable or field declared void");
10859       else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10860         {
10861           if (IDENTIFIER_OPNAME_P (declarator))
10862             my_friendly_abort (356);
10863           else
10864             error ("variable or field `%s' declared void", name);
10865         }
10866       else
10867         error ("variable or field declared void");
10868       type = integer_type_node;
10869     }
10870
10871   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10872      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
10873
10874   if (decl_context == PARM || decl_context == CATCHPARM)
10875     {
10876       if (ctype || in_namespace)
10877         error ("cannot use `::' in parameter declaration");
10878
10879       /* A parameter declared as an array of T is really a pointer to T.
10880          One declared as a function is really a pointer to a function.
10881          One declared as a member is really a pointer to member.  */
10882
10883       if (TREE_CODE (type) == ARRAY_TYPE)
10884         {
10885           /* Transfer const-ness of array into that of type pointed to.  */
10886           type = build_pointer_type (TREE_TYPE (type));
10887           type_quals = TYPE_UNQUALIFIED;
10888         }
10889       else if (TREE_CODE (type) == FUNCTION_TYPE)
10890         type = build_pointer_type (type);
10891       else if (TREE_CODE (type) == OFFSET_TYPE)
10892         type = build_pointer_type (type);
10893       else if (TREE_CODE (type) == VOID_TYPE && declarator)
10894         {
10895           error ("declaration of `%s' as void", name);
10896           return NULL_TREE;
10897         }
10898     }
10899   
10900   {
10901     register tree decl;
10902
10903     if (decl_context == PARM)
10904       {
10905         decl = build_decl (PARM_DECL, declarator, type);
10906
10907         bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
10908                         inlinep, friendp, raises != NULL_TREE);
10909         if (current_class_type
10910             && IS_SIGNATURE (current_class_type))
10911           {
10912             if (inlinep)
10913               error ("parameter of signature member function declared `inline'");
10914             if (RIDBIT_SETP (RID_AUTO, specbits))
10915               error ("parameter of signature member function declared `auto'");
10916             if (RIDBIT_SETP (RID_REGISTER, specbits))
10917               error ("parameter of signature member function declared `register'");
10918           }
10919
10920         /* Compute the type actually passed in the parmlist,
10921            for the case where there is no prototype.
10922            (For example, shorts and chars are passed as ints.)
10923            When there is a prototype, this is overridden later.  */
10924
10925         DECL_ARG_TYPE (decl) = type_promotes_to (type);
10926       }
10927     else if (decl_context == FIELD)
10928       {
10929         if (type == error_mark_node)
10930           {
10931             /* Happens when declaring arrays of sizes which
10932                are error_mark_node, for example.  */
10933             decl = NULL_TREE;
10934           }
10935         else if (in_namespace && !friendp)
10936           {
10937             /* Something like struct S { int N::j; };  */
10938             cp_error ("invalid use of `::'");
10939             decl = NULL_TREE;
10940           }
10941         else if (TREE_CODE (type) == FUNCTION_TYPE)
10942           {
10943             int publicp = 0;
10944             tree function_context;
10945
10946             /* We catch the others as conflicts with the builtin
10947                typedefs.  */
10948             if (friendp && declarator == ridpointers[(int) RID_SIGNED])
10949               {
10950                 cp_error ("function `%D' cannot be declared friend",
10951                           declarator);
10952                 friendp = 0;
10953               }
10954
10955             if (friendp == 0)
10956               {
10957                 if (ctype == NULL_TREE)
10958                   ctype = current_class_type;
10959
10960                 if (ctype == NULL_TREE)
10961                   {
10962                     cp_error ("can't make `%D' into a method -- not in a class",
10963                               declarator);
10964                     return void_type_node;
10965                   }
10966
10967                 /* ``A union may [ ... ] not [ have ] virtual functions.''
10968                    ARM 9.5 */
10969                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10970                   {
10971                     cp_error ("function `%D' declared virtual inside a union",
10972                               declarator);
10973                     return void_type_node;
10974                   }
10975
10976                 if (declarator == ansi_opname[(int) NEW_EXPR]
10977                     || declarator == ansi_opname[(int) VEC_NEW_EXPR]
10978                     || declarator == ansi_opname[(int) DELETE_EXPR]
10979                     || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
10980                   {
10981                     if (virtualp)
10982                       {
10983                         cp_error ("`%D' cannot be declared virtual, since it is always static",
10984                                   declarator);
10985                         virtualp = 0;
10986                       }
10987                   }
10988                 else if (staticp < 2)
10989                   type = build_cplus_method_type (ctype, TREE_TYPE (type),
10990                                                   TYPE_ARG_TYPES (type));
10991               }
10992
10993             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
10994             function_context = (ctype != NULL_TREE) ? 
10995               hack_decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10996             publicp = (! friendp || ! staticp)
10997               && function_context == NULL_TREE;
10998             decl = grokfndecl (ctype, type, 
10999                                TREE_CODE (declarator) != TEMPLATE_ID_EXPR
11000                                ? declarator : dname,
11001                                declarator,
11002                                virtualp, flags, quals, raises,
11003                                friendp ? -1 : 0, friendp, publicp, inlinep,
11004                                funcdef_flag, template_count, in_namespace);
11005             if (decl == NULL_TREE)
11006               return decl;
11007 #if 0
11008             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
11009             /* The decl and setting of decl_machine_attr is also turned off.  */
11010             decl = build_decl_attribute_variant (decl, decl_machine_attr);
11011 #endif
11012
11013             /* [class.conv.ctor]
11014
11015                A constructor declared without the function-specifier
11016                explicit that can be called with a single parameter
11017                specifies a conversion from the type of its first
11018                parameter to the type of its class.  Such a constructor
11019                is called a converting constructor.  */
11020             if (explicitp == 2)
11021               DECL_NONCONVERTING_P (decl) = 1;
11022             else if (DECL_CONSTRUCTOR_P (decl))
11023               {
11024                 /* The constructor can be called with exactly one
11025                    parameter if there is at least one parameter, and
11026                    any subsequent parameters have default arguments.
11027                    We don't look at the first parameter, which is
11028                    really just the `this' parameter for the new
11029                    object.  */
11030                 tree arg_types = 
11031                   TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)));
11032
11033                 /* Skip the `in_chrg' argument too, if present.  */
11034                 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (decl)))
11035                   arg_types = TREE_CHAIN (arg_types);
11036
11037                 if (arg_types == void_list_node
11038                     || (arg_types 
11039                         && TREE_CHAIN (arg_types) 
11040                         && TREE_CHAIN (arg_types) != void_list_node
11041                         && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
11042                   DECL_NONCONVERTING_P (decl) = 1;
11043               }
11044           }
11045         else if (TREE_CODE (type) == METHOD_TYPE)
11046           {
11047             /* We only get here for friend declarations of
11048                members of other classes.  */
11049             /* All method decls are public, so tell grokfndecl to set
11050                TREE_PUBLIC, also.  */
11051             decl = grokfndecl (ctype, type, declarator, declarator,
11052                                virtualp, flags, quals, raises,
11053                                friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
11054                                template_count, in_namespace);
11055             if (decl == NULL_TREE)
11056               return NULL_TREE;
11057           }
11058         else if (!staticp && ! processing_template_decl
11059                  && TYPE_SIZE (complete_type (type)) == NULL_TREE
11060                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
11061           {
11062             if (declarator)
11063               cp_error ("field `%D' has incomplete type", declarator);
11064             else
11065               cp_error ("name `%T' has incomplete type", type);
11066
11067             /* If we're instantiating a template, tell them which
11068                instantiation made the field's type be incomplete.  */
11069             if (current_class_type
11070                 && TYPE_NAME (current_class_type)
11071                 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
11072                 && declspecs && TREE_VALUE (declspecs)
11073                 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
11074               cp_error ("  in instantiation of template `%T'",
11075                         current_class_type);
11076
11077             type = error_mark_node;
11078             decl = NULL_TREE;
11079           }
11080         else
11081           {
11082             if (friendp)
11083               {
11084                 error ("`%s' is neither function nor method; cannot be declared friend",
11085                        IDENTIFIER_POINTER (declarator));
11086                 friendp = 0;
11087               }
11088             decl = NULL_TREE;
11089           }
11090
11091         if (friendp)
11092           {
11093             /* Friends are treated specially.  */
11094             if (ctype == current_class_type)
11095               warning ("member functions are implicitly friends of their class");
11096             else
11097               {
11098                 tree t = NULL_TREE;
11099                 if (decl && DECL_NAME (decl))
11100                   {
11101                     if (template_class_depth (current_class_type) == 0)
11102                       {
11103                         decl 
11104                           = check_explicit_specialization 
11105                           (declarator, decl,
11106                            template_count, 2 * (funcdef_flag != 0) + 4);
11107                         if (decl == error_mark_node)
11108                           return error_mark_node;
11109                       }
11110
11111                     t = do_friend (ctype, declarator, decl,
11112                                    last_function_parms, attrlist, flags, quals,
11113                                    funcdef_flag);
11114                   }
11115                 if (t && funcdef_flag)
11116                   return t;
11117                 
11118                 return void_type_node;
11119               }
11120           }
11121
11122         /* Structure field.  It may not be a function, except for C++ */
11123
11124         if (decl == NULL_TREE)
11125           {
11126             if (initialized)
11127               {
11128                 if (!staticp)
11129                   {
11130                     /* An attempt is being made to initialize a non-static
11131                        member.  But, from [class.mem]:
11132                        
11133                        4 A member-declarator can contain a
11134                        constant-initializer only if it declares a static
11135                        member (_class.static_) of integral or enumeration
11136                        type, see _class.static.data_.  
11137
11138                        This used to be relatively common practice, but
11139                        the rest of the compiler does not correctly
11140                        handle the initialization unless the member is
11141                        static so we make it static below.  */
11142                     cp_pedwarn ("ANSI C++ forbids initialization of member `%D'",
11143                                 declarator);
11144                     cp_pedwarn ("making `%D' static", declarator);
11145                     staticp = 1;
11146                   }
11147
11148                 if (uses_template_parms (type))
11149                   /* We'll check at instantiation time.  */
11150                   ;
11151                 else if (check_static_variable_definition (declarator,
11152                                                            type))
11153                   /* If we just return the declaration, crashes
11154                      will sometimes occur.  We therefore return
11155                      void_type_node, as if this was a friend
11156                      declaration, to cause callers to completely
11157                      ignore this declaration.  */
11158                   return void_type_node;
11159               }
11160
11161             /* 9.2p13 [class.mem] */
11162             if (declarator == constructor_name (current_class_type)
11163                 /* Divergence from the standard:  In extern "C", we
11164                    allow non-static data members here, because C does
11165                    and /usr/include/netinet/in.h uses that.  */
11166                 && (staticp || ! in_system_header))
11167               cp_pedwarn ("ANSI C++ forbids data member `%D' with same name as enclosing class",
11168                           declarator);
11169
11170             if (staticp)
11171               {
11172                 /* C++ allows static class members.
11173                    All other work for this is done by grokfield.
11174                    This VAR_DCL is built by build_lang_field_decl.
11175                    All other VAR_DECLs are built by build_decl.  */
11176                 decl = build_lang_field_decl (VAR_DECL, declarator, type);
11177                 TREE_STATIC (decl) = 1;
11178                 /* In class context, 'static' means public access.  */
11179                 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
11180               }
11181             else
11182               {
11183                 decl = build_lang_field_decl (FIELD_DECL, declarator, type);
11184                 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11185                   {
11186                     DECL_MUTABLE_P (decl) = 1;
11187                     RIDBIT_RESET (RID_MUTABLE, specbits);
11188                   }
11189               }
11190
11191             bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
11192                             inlinep, friendp, raises != NULL_TREE);
11193           }
11194       }
11195     else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
11196       {
11197         tree original_name;
11198         int publicp = 0;
11199
11200         if (! declarator)
11201           return NULL_TREE;
11202
11203         if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11204           original_name = dname;
11205         else
11206           original_name = declarator;
11207
11208         if (RIDBIT_SETP (RID_AUTO, specbits))
11209           error ("storage class `auto' invalid for function `%s'", name);
11210         else if (RIDBIT_SETP (RID_REGISTER, specbits))
11211           error ("storage class `register' invalid for function `%s'", name);
11212
11213         /* Function declaration not at top level.
11214            Storage classes other than `extern' are not allowed
11215            and `extern' makes no difference.  */
11216         if (! toplevel_bindings_p ()
11217             && (RIDBIT_SETP (RID_STATIC, specbits)
11218                 || RIDBIT_SETP (RID_INLINE, specbits))
11219             && pedantic)
11220           {
11221             if (RIDBIT_SETP (RID_STATIC, specbits))
11222               pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
11223             else
11224               pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
11225           }
11226         
11227         if (ctype == NULL_TREE)
11228           {
11229             if (virtualp)
11230               {
11231                 error ("virtual non-class function `%s'", name);
11232                 virtualp = 0;
11233               }
11234           }
11235         else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
11236           type = build_cplus_method_type (ctype, TREE_TYPE (type),
11237                                           TYPE_ARG_TYPES (type));
11238
11239         /* Record presence of `static'.  */
11240         publicp = (ctype != NULL_TREE
11241                    || RIDBIT_SETP (RID_EXTERN, specbits)
11242                    || !RIDBIT_SETP (RID_STATIC, specbits));
11243
11244         decl = grokfndecl (ctype, type, original_name, declarator,
11245                            virtualp, flags, quals, raises,
11246                            1, friendp,
11247                            publicp, inlinep, funcdef_flag, 
11248                            template_count, in_namespace);
11249         if (decl == NULL_TREE)
11250           return NULL_TREE;
11251
11252         if (staticp == 1)
11253           {
11254             int illegal_static = 0;
11255
11256             /* Don't allow a static member function in a class, and forbid
11257                declaring main to be static.  */
11258             if (TREE_CODE (type) == METHOD_TYPE)
11259               {
11260                 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
11261                 illegal_static = 1;
11262               }
11263             else if (current_function_decl)
11264               {
11265                 /* FIXME need arm citation */
11266                 error ("cannot declare static function inside another function");
11267                 illegal_static = 1;
11268               }
11269
11270             if (illegal_static)
11271               {
11272                 staticp = 0;
11273                 RIDBIT_RESET (RID_STATIC, specbits);
11274               }
11275           }
11276       }
11277     else
11278       {
11279         /* It's a variable.  */
11280
11281         /* An uninitialized decl with `extern' is a reference.  */
11282         decl = grokvardecl (type, declarator, &specbits, 
11283                             initialized, 
11284                             (type_quals & TYPE_QUAL_CONST) != 0, 
11285                             in_namespace);
11286         bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11287                         inlinep, friendp, raises != NULL_TREE);
11288
11289         if (ctype)
11290           {
11291             DECL_CONTEXT (decl) = ctype;
11292             if (staticp == 1)
11293               {
11294                 cp_pedwarn ("static member `%D' re-declared as static", decl);
11295                 staticp = 0;
11296                 RIDBIT_RESET (RID_STATIC, specbits);
11297               }
11298             if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11299               {
11300                 cp_error ("static member `%D' declared `register'", decl);
11301                 RIDBIT_RESET (RID_REGISTER, specbits);
11302               }
11303             if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
11304               {
11305                 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
11306                             decl);
11307                 RIDBIT_RESET (RID_EXTERN, specbits);
11308               }
11309           }
11310       }
11311
11312     if (RIDBIT_SETP (RID_MUTABLE, specbits))
11313       {
11314         error ("`%s' cannot be declared mutable", name);
11315       }
11316
11317     /* Record `register' declaration for warnings on &
11318        and in case doing stupid register allocation.  */
11319
11320     if (RIDBIT_SETP (RID_REGISTER, specbits))
11321       DECL_REGISTER (decl) = 1;
11322
11323     if (RIDBIT_SETP (RID_EXTERN, specbits))
11324       DECL_THIS_EXTERN (decl) = 1;
11325
11326     if (RIDBIT_SETP (RID_STATIC, specbits))
11327       DECL_THIS_STATIC (decl) = 1;
11328
11329     /* Record constancy and volatility.  There's no need to do this
11330        when processing a template; we'll do this for the instantiated
11331        declaration based on the type of DECL.  */
11332     if (!processing_template_decl)
11333       c_apply_type_quals_to_decl (type_quals, decl);
11334
11335     return decl;
11336   }
11337 }
11338 \f
11339 /* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11340    An empty exprlist is a parmlist.  An exprlist which
11341    contains only identifiers at the global level
11342    is a parmlist.  Otherwise, it is an exprlist.  */
11343
11344 int
11345 parmlist_is_exprlist (exprs)
11346      tree exprs;
11347 {
11348   if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11349     return 0;
11350
11351   if (toplevel_bindings_p ())
11352     {
11353       /* At the global level, if these are all identifiers,
11354          then it is a parmlist.  */
11355       while (exprs)
11356         {
11357           if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11358             return 1;
11359           exprs = TREE_CHAIN (exprs);
11360         }
11361       return 0;
11362     }
11363   return 1;
11364 }
11365
11366 /* Subroutine of start_function.  Ensure that each of the parameter
11367    types (as listed in PARMS) is complete, as is required for a
11368    function definition.  */
11369
11370 static void
11371 require_complete_types_for_parms (parms)
11372      tree parms;
11373 {
11374   while (parms)
11375     {
11376       tree type = TREE_TYPE (parms);
11377       if (TYPE_SIZE (complete_type (type)) == NULL_TREE)
11378         {
11379           if (DECL_NAME (parms))
11380             error ("parameter `%s' has incomplete type",
11381                    IDENTIFIER_POINTER (DECL_NAME (parms)));
11382           else
11383             error ("parameter has incomplete type");
11384           TREE_TYPE (parms) = error_mark_node;
11385         }
11386       else
11387         layout_decl (parms, 0);
11388
11389       parms = TREE_CHAIN (parms);
11390     }
11391 }
11392
11393 /* Returns DECL if DECL is a local variable (or parameter).  Returns
11394    NULL_TREE otherwise.  */
11395
11396 static tree
11397 local_variable_p (t)
11398      tree t;
11399 {
11400   if ((TREE_CODE (t) == VAR_DECL 
11401        /* A VAR_DECL with a context that is a _TYPE is a static data
11402           member.  */
11403        && !TYPE_P (CP_DECL_CONTEXT (t))
11404        /* Any other non-local variable must be at namespace scope.  */
11405        && TREE_CODE (CP_DECL_CONTEXT (t)) != NAMESPACE_DECL)
11406       || (TREE_CODE (t) == PARM_DECL))
11407     return t;
11408
11409   return NULL_TREE;
11410 }
11411
11412 /* Check that ARG, which is a default-argument expression for a
11413    parameter DECL, is legal.  Returns ARG, or ERROR_MARK_NODE, if
11414    something goes wrong.  DECL may also be a _TYPE node, rather than a
11415    DECL, if there is no DECL available.  */
11416
11417 tree
11418 check_default_argument (decl, arg)
11419      tree decl;
11420      tree arg;
11421 {
11422   tree var;
11423   tree decl_type;
11424
11425   if (TREE_CODE (arg) == DEFAULT_ARG)
11426     /* We get a DEFAULT_ARG when looking at an in-class declaration
11427        with a default argument.  Ignore the argument for now; we'll
11428        deal with it after the class is complete.  */
11429     return arg;
11430
11431   if (processing_template_decl || uses_template_parms (arg))
11432     /* We don't do anything checking until instantiation-time.  Note
11433        that there may be uninstantiated arguments even for an
11434        instantiated function, since default arguments are not
11435        instantiated until they are needed.  */
11436     return arg;
11437
11438   if (TYPE_P (decl))
11439     {
11440       decl_type = decl;
11441       decl = NULL_TREE;
11442     }
11443   else
11444     decl_type = TREE_TYPE (decl);
11445
11446   if (arg == error_mark_node 
11447       || decl == error_mark_node
11448       || TREE_TYPE (arg) == error_mark_node
11449       || decl_type == error_mark_node)
11450     /* Something already went wrong.  There's no need to check
11451        further.  */
11452     return error_mark_node;
11453
11454   /* [dcl.fct.default]
11455      
11456      A default argument expression is implicitly converted to the
11457      parameter type.  */
11458   if (!TREE_TYPE (arg)
11459       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
11460     {
11461       if (decl)
11462         cp_error ("default argument for `%#D' has type `%T'", 
11463                   decl, TREE_TYPE (arg));
11464       else
11465         cp_error ("default argument for paramter of type `%T' has type `%T'",
11466                   decl_type, TREE_TYPE (arg));
11467
11468       return error_mark_node;
11469     }
11470
11471   /* [dcl.fct.default]
11472
11473      Local variables shall not be used in default argument
11474      expressions. 
11475
11476      The keyword `this' shall not be used in a default argument of a
11477      member function.  */
11478   var = search_tree (arg, local_variable_p);
11479   if (var)
11480     {
11481       cp_error ("default argument `%E' uses local variable `%D'",
11482                 arg, var);
11483       return error_mark_node;
11484     }
11485
11486   /* All is well.  */
11487   return arg;
11488 }
11489
11490 /* Decode the list of parameter types for a function type.
11491    Given the list of things declared inside the parens,
11492    return a list of types.
11493
11494    The list we receive can have three kinds of elements:
11495    an IDENTIFIER_NODE for names given without types,
11496    a TREE_LIST node for arguments given as typespecs or names with typespecs,
11497    or void_type_node, to mark the end of an argument list
11498    when additional arguments are not permitted (... was not used).
11499
11500    FUNCDEF_FLAG is nonzero for a function definition, 0 for
11501    a mere declaration.  A nonempty identifier-list gets an error message
11502    when FUNCDEF_FLAG is zero.
11503    If FUNCDEF_FLAG is 1, then parameter types must be complete.
11504    If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
11505
11506    If all elements of the input list contain types,
11507    we return a list of the types.
11508    If all elements contain no type (except perhaps a void_type_node
11509    at the end), we return a null list.
11510    If some have types and some do not, it is an error, and we
11511    return a null list.
11512
11513    Also set last_function_parms to either
11514    a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
11515    A list of names is converted to a chain of PARM_DECLs
11516    by store_parm_decls so that ultimately it is always a chain of decls.
11517
11518    Note that in C++, parameters can take default values.  These default
11519    values are in the TREE_PURPOSE field of the TREE_LIST.  It is
11520    an error to specify default values which are followed by parameters
11521    that have no default values, or an ELLIPSES.  For simplicities sake,
11522    only parameters which are specified with their types can take on
11523    default values.  */
11524
11525 static tree
11526 grokparms (first_parm, funcdef_flag)
11527      tree first_parm;
11528      int funcdef_flag;
11529 {
11530   tree result = NULL_TREE;
11531   tree decls = NULL_TREE;
11532
11533   if (first_parm != NULL_TREE
11534       && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
11535     {
11536       if (! funcdef_flag)
11537         pedwarn ("parameter names (without types) in function declaration");
11538       last_function_parms = first_parm;
11539       return NULL_TREE;
11540     }
11541   else if (first_parm != NULL_TREE
11542            && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
11543            && TREE_CODE (TREE_VALUE (first_parm)) != VOID_TYPE)
11544     my_friendly_abort (145);
11545   else
11546     {
11547       /* Types were specified.  This is a list of declarators
11548          each represented as a TREE_LIST node.  */
11549       register tree parm, chain;
11550       int any_init = 0, any_error = 0;
11551
11552       if (first_parm != NULL_TREE)
11553         {
11554           tree last_result = NULL_TREE;
11555           tree last_decl = NULL_TREE;
11556
11557           for (parm = first_parm; parm != NULL_TREE; parm = chain)
11558             {
11559               tree type = NULL_TREE, list_node = parm;
11560               register tree decl = TREE_VALUE (parm);
11561               tree init = TREE_PURPOSE (parm);
11562
11563               chain = TREE_CHAIN (parm);
11564               /* @@ weak defense against parse errors.  */
11565               if (TREE_CODE (decl) != VOID_TYPE 
11566                   && TREE_CODE (decl) != TREE_LIST)
11567                 {
11568                   /* Give various messages as the need arises.  */
11569                   if (TREE_CODE (decl) == STRING_CST)
11570                     cp_error ("invalid string constant `%E'", decl);
11571                   else if (TREE_CODE (decl) == INTEGER_CST)
11572                     error ("invalid integer constant in parameter list, did you forget to give parameter name?");
11573                   continue;
11574                 }
11575
11576               if (TREE_CODE (decl) != VOID_TYPE)
11577                 {
11578                   decl = grokdeclarator (TREE_VALUE (decl),
11579                                          TREE_PURPOSE (decl),
11580                                          PARM, init != NULL_TREE,
11581                                          NULL_TREE);
11582                   if (! decl || TREE_TYPE (decl) == error_mark_node)
11583                     continue;
11584
11585                   /* Top-level qualifiers on the parameters are
11586                      ignored for function types.  */
11587                   type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
11588
11589                   if (TREE_CODE (type) == VOID_TYPE)
11590                     decl = void_type_node;
11591                   else if (TREE_CODE (type) == METHOD_TYPE)
11592                     {
11593                       if (DECL_NAME (decl))
11594                         /* Cannot use the decl here because
11595                            we don't have DECL_CONTEXT set up yet.  */
11596                         cp_error ("parameter `%D' invalidly declared method type",
11597                                   DECL_NAME (decl));
11598                       else
11599                         error ("parameter invalidly declared method type");
11600                       type = build_pointer_type (type);
11601                       TREE_TYPE (decl) = type;
11602                     }
11603                   else if (TREE_CODE (type) == OFFSET_TYPE)
11604                     {
11605                       if (DECL_NAME (decl))
11606                         cp_error ("parameter `%D' invalidly declared offset type",
11607                                   DECL_NAME (decl));
11608                       else
11609                         error ("parameter invalidly declared offset type");
11610                       type = build_pointer_type (type);
11611                       TREE_TYPE (decl) = type;
11612                     }
11613                   else if (abstract_virtuals_error (decl, type))
11614                     any_error = 1;  /* Seems like a good idea. */
11615                   else if (TREE_CODE (type) == RECORD_TYPE
11616                            && TYPE_LANG_SPECIFIC (type)
11617                            && IS_SIGNATURE (type))
11618                     {
11619                       signature_error (decl, type);
11620                       any_error = 1;  /* Seems like a good idea. */
11621                     }
11622                   else if (POINTER_TYPE_P (type))
11623                     {
11624                       tree t = type;
11625                       while (POINTER_TYPE_P (t)
11626                              || (TREE_CODE (t) == ARRAY_TYPE
11627                                  && TYPE_DOMAIN (t) != NULL_TREE))
11628                         t = TREE_TYPE (t);
11629                       if (TREE_CODE (t) == ARRAY_TYPE)
11630                         cp_error ("parameter type `%T' includes %s to array of unknown bound",
11631                                   type,
11632                                   TYPE_PTR_P (type) ? "pointer" : "reference");
11633                     }
11634                 }
11635
11636               if (TREE_CODE (decl) == VOID_TYPE)
11637                 {
11638                   if (result == NULL_TREE)
11639                     {
11640                       result = void_list_node;
11641                       last_result = result;
11642                     }
11643                   else
11644                     {
11645                       TREE_CHAIN (last_result) = void_list_node;
11646                       last_result = void_list_node;
11647                     }
11648                   if (chain
11649                       && (chain != void_list_node || TREE_CHAIN (chain)))
11650                     error ("`void' in parameter list must be entire list");
11651                   break;
11652                 }
11653
11654               /* Since there is a prototype, args are passed in their own types.  */
11655               DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
11656               if (PROMOTE_PROTOTYPES
11657                   && (TREE_CODE (type) == INTEGER_TYPE
11658                       || TREE_CODE (type) == ENUMERAL_TYPE)
11659                   && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
11660                 DECL_ARG_TYPE (decl) = integer_type_node;
11661               if (!any_error && init)
11662                 {
11663                   any_init++;
11664                   init = check_default_argument (decl, init);
11665                 }
11666               else
11667                 init = NULL_TREE;
11668
11669               if (decls == NULL_TREE)
11670                 {
11671                   decls = decl;
11672                   last_decl = decls;
11673                 }
11674               else
11675                 {
11676                   TREE_CHAIN (last_decl) = decl;
11677                   last_decl = decl;
11678                 }
11679               if (! current_function_decl && TREE_PERMANENT (list_node))
11680                 {
11681                   TREE_PURPOSE (list_node) = init;
11682                   TREE_VALUE (list_node) = type;
11683                   TREE_CHAIN (list_node) = NULL_TREE;
11684                 }
11685               else
11686                 list_node = saveable_tree_cons (init, type, NULL_TREE);
11687               if (result == NULL_TREE)
11688                 {
11689                   result = list_node;
11690                   last_result = result;
11691                 }
11692               else
11693                 {
11694                   TREE_CHAIN (last_result) = list_node;
11695                   last_result = list_node;
11696                 }
11697             }
11698           if (last_result)
11699             TREE_CHAIN (last_result) = NULL_TREE;
11700           /* If there are no parameters, and the function does not end
11701              with `...', then last_decl will be NULL_TREE.  */
11702           if (last_decl != NULL_TREE)
11703             TREE_CHAIN (last_decl) = NULL_TREE;
11704         }
11705     }
11706
11707   last_function_parms = decls;
11708
11709   return result;
11710 }
11711
11712 /* Called from the parser to update an element of TYPE_ARG_TYPES for some
11713    FUNCTION_TYPE with the newly parsed version of its default argument, which
11714    was previously digested as text.  See snarf_defarg et al in lex.c.  */
11715
11716 void
11717 replace_defarg (arg, init)
11718      tree arg, init;
11719 {
11720   if (! processing_template_decl
11721       && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
11722     cp_pedwarn ("invalid type `%T' for default argument to `%T'",
11723                 TREE_TYPE (init), TREE_VALUE (arg));
11724   TREE_PURPOSE (arg) = init;
11725 }
11726 \f
11727 int
11728 copy_args_p (d)
11729      tree d;
11730 {
11731   tree t = FUNCTION_ARG_CHAIN (d);
11732   if (DECL_CONSTRUCTOR_P (d)
11733       && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (d)))
11734     t = TREE_CHAIN (t);
11735   if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
11736       && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
11737           == DECL_CLASS_CONTEXT (d))
11738       && (TREE_CHAIN (t) == NULL_TREE
11739           || TREE_CHAIN (t) == void_list_node
11740           || TREE_PURPOSE (TREE_CHAIN (t))))
11741     return 1;
11742   return 0;
11743 }
11744
11745 /* These memoizing functions keep track of special properties which
11746    a class may have.  `grok_ctor_properties' notices whether a class
11747    has a constructor of the form X(X&), and also complains
11748    if the class has a constructor of the form X(X).
11749    `grok_op_properties' takes notice of the various forms of
11750    operator= which are defined, as well as what sorts of type conversion
11751    may apply.  Both functions take a FUNCTION_DECL as an argument.  */
11752
11753 int
11754 grok_ctor_properties (ctype, decl)
11755      tree ctype, decl;
11756 {
11757   tree parmtypes = FUNCTION_ARG_CHAIN (decl);
11758   tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
11759
11760   /* When a type has virtual baseclasses, a magical first int argument is
11761      added to any ctor so we can tell if the class has been initialized
11762      yet.  This could screw things up in this function, so we deliberately
11763      ignore the leading int if we're in that situation.  */
11764   if (TYPE_USES_VIRTUAL_BASECLASSES (ctype))
11765     {
11766       my_friendly_assert (parmtypes
11767                           && TREE_VALUE (parmtypes) == integer_type_node,
11768                           980529);
11769       parmtypes = TREE_CHAIN (parmtypes);
11770       parmtype = TREE_VALUE (parmtypes);
11771     }
11772
11773   /* [class.copy]
11774
11775      A non-template constructor for class X is a copy constructor if
11776      its first parameter is of type X&, const X&, volatile X& or const
11777      volatile X&, and either there are no other parameters or else all
11778      other parameters have default arguments.  */
11779   if (TREE_CODE (parmtype) == REFERENCE_TYPE
11780       && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
11781       && (TREE_CHAIN (parmtypes) == NULL_TREE
11782           || TREE_CHAIN (parmtypes) == void_list_node
11783           || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11784       && !(DECL_TEMPLATE_INSTANTIATION (decl)
11785            && is_member_template (DECL_TI_TEMPLATE (decl))))
11786     {
11787       TYPE_HAS_INIT_REF (ctype) = 1;
11788       if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11789         TYPE_HAS_CONST_INIT_REF (ctype) = 1;
11790     }
11791   /* [class.copy]
11792
11793      A declaration of a constructor for a class X is ill-formed if its
11794      first parameter is of type (optionally cv-qualified) X and either
11795      there are no other parameters or else all other parameters have
11796      default arguments.  
11797
11798      We *don't* complain about member template instantiations that
11799      have this form, though; they can occur as we try to decide what
11800      constructor to use during overload resolution.  Since overload
11801      resolution will never prefer such a constructor to the
11802      non-template copy constructor (which is either explicitly or
11803      implicitly defined), there's no need to worry about their
11804      existence.  Theoretically, they should never even be
11805      instantiated, but that's hard to forestall.  */
11806   else if (TYPE_MAIN_VARIANT (parmtype) == ctype
11807            && (TREE_CHAIN (parmtypes) == NULL_TREE
11808                || TREE_CHAIN (parmtypes) == void_list_node
11809                || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11810            && !(DECL_TEMPLATE_INSTANTIATION (decl)
11811                 && is_member_template (DECL_TI_TEMPLATE (decl))))
11812     {
11813       cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
11814                 ctype, ctype);
11815       SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
11816       return 0;
11817     }
11818   else if (TREE_CODE (parmtype) == VOID_TYPE
11819            || TREE_PURPOSE (parmtypes) != NULL_TREE)
11820     TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
11821
11822   return 1;
11823 }
11824
11825 /* An operator with this name can be either unary or binary.  */
11826
11827 static int
11828 ambi_op_p (name)
11829      tree name;
11830 {
11831   return (name == ansi_opname [(int) INDIRECT_REF]
11832           || name == ansi_opname [(int) ADDR_EXPR]
11833           || name == ansi_opname [(int) NEGATE_EXPR]
11834           || name == ansi_opname[(int) POSTINCREMENT_EXPR]
11835           || name == ansi_opname[(int) POSTDECREMENT_EXPR]
11836           || name == ansi_opname [(int) CONVERT_EXPR]);
11837 }
11838
11839 /* An operator with this name can only be unary.  */
11840
11841 static int
11842 unary_op_p (name)
11843      tree name;
11844 {
11845   return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
11846           || name == ansi_opname [(int) BIT_NOT_EXPR]
11847           || name == ansi_opname [(int) COMPONENT_REF]
11848           || IDENTIFIER_TYPENAME_P (name));
11849 }
11850
11851 /* Do a little sanity-checking on how they declared their operator.  */
11852
11853 void
11854 grok_op_properties (decl, virtualp, friendp)
11855      tree decl;
11856      int virtualp, friendp;
11857 {
11858   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11859   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11860   tree name = DECL_NAME (decl);
11861
11862   if (current_class_type == NULL_TREE)
11863     friendp = 1;
11864
11865   if (! friendp)
11866     {
11867       /* [class.copy]
11868
11869          A user-declared copy assignment operator X::operator= is a
11870          non-static non-template member function of class X with
11871          exactly one parameter of type X, X&, const X&, volatile X& or
11872          const volatile X&.  */
11873       if (name == ansi_opname[(int) MODIFY_EXPR]
11874           && !(DECL_TEMPLATE_INSTANTIATION (decl)
11875                && is_member_template (DECL_TI_TEMPLATE (decl))))
11876         ;
11877       else if (name == ansi_opname[(int) CALL_EXPR])
11878         TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
11879       else if (name == ansi_opname[(int) ARRAY_REF])
11880         TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
11881       else if (name == ansi_opname[(int) COMPONENT_REF]
11882                || name == ansi_opname[(int) MEMBER_REF])
11883         TYPE_OVERLOADS_ARROW (current_class_type) = 1;
11884       else if (name == ansi_opname[(int) NEW_EXPR])
11885         TYPE_GETS_NEW (current_class_type) |= 1;
11886       else if (name == ansi_opname[(int) DELETE_EXPR])
11887         TYPE_GETS_DELETE (current_class_type) |= 1;
11888       else if (name == ansi_opname[(int) VEC_NEW_EXPR])
11889         TYPE_GETS_NEW (current_class_type) |= 2;
11890       else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
11891         TYPE_GETS_DELETE (current_class_type) |= 2;
11892     }
11893
11894   if (name == ansi_opname[(int) NEW_EXPR]
11895       || name == ansi_opname[(int) VEC_NEW_EXPR])
11896     {
11897       /* When the compiler encounters the definition of A::operator new, it
11898          doesn't look at the class declaration to find out if it's static.  */
11899       if (methodp)
11900         revert_static_member_fn (&decl, NULL, NULL);
11901      
11902       /* Take care of function decl if we had syntax errors.  */
11903       if (argtypes == NULL_TREE)
11904         TREE_TYPE (decl)
11905           = build_function_type (ptr_type_node,
11906                                  hash_tree_chain (integer_type_node,
11907                                                   void_list_node));
11908       else
11909         TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11910     }
11911   else if (name == ansi_opname[(int) DELETE_EXPR]
11912            || name == ansi_opname[(int) VEC_DELETE_EXPR])
11913     {
11914       if (methodp)
11915         revert_static_member_fn (&decl, NULL, NULL);
11916      
11917       if (argtypes == NULL_TREE)
11918         TREE_TYPE (decl)
11919           = build_function_type (void_type_node,
11920                                  hash_tree_chain (ptr_type_node,
11921                                                   void_list_node));
11922       else
11923         {
11924           TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11925
11926           if (! friendp && name == ansi_opname[(int) VEC_DELETE_EXPR]
11927               && (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
11928                   != void_list_node))
11929             TYPE_VEC_DELETE_TAKES_SIZE (current_class_type) = 1;
11930         }
11931     }
11932   else
11933     {
11934       /* An operator function must either be a non-static member function
11935          or have at least one parameter of a class, a reference to a class,
11936          an enumeration, or a reference to an enumeration.  13.4.0.6 */
11937       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11938         {
11939           if (IDENTIFIER_TYPENAME_P (name)
11940               || name == ansi_opname[(int) CALL_EXPR]
11941               || name == ansi_opname[(int) MODIFY_EXPR]
11942               || name == ansi_opname[(int) COMPONENT_REF]
11943               || name == ansi_opname[(int) ARRAY_REF])
11944             cp_error ("`%D' must be a nonstatic member function", decl);
11945           else
11946             {
11947               tree p = argtypes;
11948
11949               if (DECL_STATIC_FUNCTION_P (decl))
11950                 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
11951
11952               if (p)
11953                 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
11954                   {
11955                     tree arg = TREE_VALUE (p);
11956                     if (TREE_CODE (arg) == REFERENCE_TYPE)
11957                       arg = TREE_TYPE (arg);
11958
11959                     /* This lets bad template code slip through.  */
11960                     if (IS_AGGR_TYPE (arg)
11961                         || TREE_CODE (arg) == ENUMERAL_TYPE
11962                         || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
11963                         || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11964                       goto foundaggr;
11965                   }
11966               cp_error
11967                 ("`%D' must have an argument of class or enumerated type",
11968                  decl);
11969             foundaggr:
11970               ;
11971             }
11972         }
11973       
11974       if (name == ansi_opname[(int) CALL_EXPR])
11975         return;                 /* No restrictions on args. */
11976
11977       if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
11978         {
11979           tree t = TREE_TYPE (name);
11980           if (TREE_CODE (t) == VOID_TYPE)
11981             pedwarn ("void is not a valid type conversion operator");
11982           else if (! friendp)
11983             {
11984               int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11985               const char *what = 0;
11986               if (ref)
11987                 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11988
11989               if (t == current_class_type)
11990                 what = "the same type";
11991               /* Don't force t to be complete here.  */
11992               else if (IS_AGGR_TYPE (t)
11993                        && TYPE_SIZE (t)
11994                        && DERIVED_FROM_P (t, current_class_type))
11995                 what = "a base class";
11996
11997               if (what)
11998                 warning ("conversion to %s%s will never use a type conversion operator",
11999                          ref ? "a reference to " : "", what);
12000             }
12001         }
12002
12003       if (name == ansi_opname[(int) MODIFY_EXPR])
12004         {
12005           tree parmtype;
12006
12007           if (list_length (argtypes) != 3 && methodp)
12008             {
12009               cp_error ("`%D' must take exactly one argument", decl);
12010               return;
12011             }
12012           parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
12013
12014           if (copy_assignment_arg_p (parmtype, virtualp)
12015               && ! friendp)
12016             {
12017               TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
12018               if (TREE_CODE (parmtype) != REFERENCE_TYPE
12019                   || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
12020                 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
12021             }
12022         }
12023       else if (name == ansi_opname[(int) COND_EXPR])
12024         {
12025           /* 13.4.0.3 */
12026           cp_error ("ANSI C++ prohibits overloading operator ?:");
12027         }         
12028       else if (ambi_op_p (name))
12029         {
12030           if (list_length (argtypes) == 2)
12031             /* prefix */;
12032           else if (list_length (argtypes) == 3)
12033             {
12034               if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
12035                    || name == ansi_opname[(int) POSTDECREMENT_EXPR])
12036                   && ! processing_template_decl
12037                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
12038                 {
12039                   if (methodp)
12040                     cp_error ("postfix `%D' must take `int' as its argument",
12041                               decl);
12042                   else
12043                     cp_error
12044                       ("postfix `%D' must take `int' as its second argument",
12045                        decl);
12046                 }
12047             }
12048           else
12049             {
12050               if (methodp)
12051                 cp_error ("`%D' must take either zero or one argument", decl);
12052               else
12053                 cp_error ("`%D' must take either one or two arguments", decl);
12054             }
12055
12056           /* More Effective C++ rule 6.  */
12057           if (warn_ecpp
12058               && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12059                   || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
12060             {
12061               tree arg = TREE_VALUE (argtypes);
12062               tree ret = TREE_TYPE (TREE_TYPE (decl));
12063               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
12064                 arg = TREE_TYPE (arg);
12065               arg = TYPE_MAIN_VARIANT (arg);
12066               if (list_length (argtypes) == 2)
12067                 {
12068                   if (TREE_CODE (ret) != REFERENCE_TYPE
12069                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
12070                                        arg))
12071                     cp_warning ("prefix `%D' should return `%T'", decl,
12072                                 build_reference_type (arg));
12073                 }
12074               else
12075                 {
12076                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
12077                     cp_warning ("postfix `%D' should return `%T'", decl, arg);
12078                 }
12079             }
12080         }
12081       else if (unary_op_p (name))
12082         {
12083           if (list_length (argtypes) != 2)
12084             {
12085               if (methodp)
12086                 cp_error ("`%D' must take `void'", decl);
12087               else
12088                 cp_error ("`%D' must take exactly one argument", decl);
12089             }
12090         }
12091       else /* if (binary_op_p (name)) */
12092         {
12093           if (list_length (argtypes) != 3)
12094             {
12095               if (methodp)
12096                 cp_error ("`%D' must take exactly one argument", decl);
12097               else
12098                 cp_error ("`%D' must take exactly two arguments", decl);
12099             }
12100
12101           /* More Effective C++ rule 7.  */
12102           if (warn_ecpp
12103               && (name == ansi_opname [TRUTH_ANDIF_EXPR]
12104                   || name == ansi_opname [TRUTH_ORIF_EXPR]
12105                   || name == ansi_opname [COMPOUND_EXPR]))
12106             cp_warning ("user-defined `%D' always evaluates both arguments",
12107                         decl);
12108         }
12109
12110       /* Effective C++ rule 23.  */
12111       if (warn_ecpp
12112           && list_length (argtypes) == 3
12113           && (name == ansi_opname [PLUS_EXPR]
12114               || name == ansi_opname [MINUS_EXPR]
12115               || name == ansi_opname [TRUNC_DIV_EXPR]
12116               || name == ansi_opname [MULT_EXPR])
12117           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
12118         cp_warning ("`%D' should return by value", decl);
12119
12120       /* 13.4.0.8 */
12121       if (argtypes)
12122         for (; argtypes != void_list_node ; argtypes = TREE_CHAIN (argtypes))
12123           if (TREE_PURPOSE (argtypes))
12124             {
12125               TREE_PURPOSE (argtypes) = NULL_TREE;
12126               if (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12127                   || name == ansi_opname[(int) POSTDECREMENT_EXPR])
12128                 {
12129                   if (pedantic)
12130                     cp_pedwarn ("`%D' cannot have default arguments", decl);
12131                 }
12132               else
12133                 cp_error ("`%D' cannot have default arguments", decl);
12134             }
12135     }
12136 }
12137 \f
12138 static const char *
12139 tag_name (code)
12140      enum tag_types code;
12141 {
12142   switch (code)
12143     {
12144     case record_type:
12145       return "struct";
12146     case class_type:
12147       return "class";
12148     case union_type:
12149       return "union ";
12150     case enum_type:
12151       return "enum";
12152     case signature_type:
12153       return "signature";
12154     default:
12155       my_friendly_abort (981122);
12156     }
12157 }
12158
12159 /* Get the struct, enum or union (CODE says which) with tag NAME.
12160    Define the tag as a forward-reference if it is not defined.
12161
12162    C++: If a class derivation is given, process it here, and report
12163    an error if multiple derivation declarations are not identical.
12164
12165    If this is a definition, come in through xref_tag and only look in
12166    the current frame for the name (since C++ allows new names in any
12167    scope.)  */
12168
12169 tree
12170 xref_tag (code_type_node, name, globalize)
12171      tree code_type_node;
12172      tree name;
12173      int globalize;
12174 {
12175   enum tag_types tag_code;
12176   enum tree_code code;
12177   int temp = 0;
12178   register tree ref, t;
12179   struct binding_level *b = current_binding_level;
12180   int got_type = 0;
12181   tree attributes = NULL_TREE;
12182   tree context = NULL_TREE;
12183
12184   /* If we are called from the parser, code_type_node will sometimes be a
12185      TREE_LIST.  This indicates that the user wrote
12186      "class __attribute__ ((foo)) bar".  Extract the attributes so we can
12187      use them later.  */
12188   if (TREE_CODE (code_type_node) == TREE_LIST)
12189     {
12190       attributes = TREE_PURPOSE (code_type_node);
12191       code_type_node = TREE_VALUE (code_type_node);
12192     }
12193
12194   tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12195   switch (tag_code)
12196     {
12197     case record_type:
12198     case class_type:
12199     case signature_type:
12200       code = RECORD_TYPE;
12201       break;
12202     case union_type:
12203       code = UNION_TYPE;
12204       break;
12205     case enum_type:
12206       code = ENUMERAL_TYPE;
12207       break;
12208     default:
12209       my_friendly_abort (18);
12210     }
12211
12212   /* If a cross reference is requested, look up the type
12213      already defined for this tag and return it.  */
12214   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
12215     {
12216       t = name;
12217       name = TYPE_IDENTIFIER (t);
12218       got_type = 1;
12219     }
12220   else
12221     t = IDENTIFIER_TYPE_VALUE (name);
12222
12223   if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
12224       && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
12225     t = NULL_TREE;
12226
12227   if (! globalize)
12228     {
12229       /* If we know we are defining this tag, only look it up in
12230          this scope and don't try to find it as a type.  */
12231       ref = lookup_tag (code, name, b, 1);
12232     }
12233   else
12234     {
12235       if (t)
12236         {
12237           /* [dcl.type.elab] If the identifier resolves to a
12238              typedef-name or a template type-parameter, the
12239              elaborated-type-specifier is ill-formed.  */
12240           if (t != TYPE_MAIN_VARIANT (t)
12241               || (CLASS_TYPE_P (t) && TYPE_WAS_ANONYMOUS (t)))
12242             cp_pedwarn ("using typedef-name `%D' after `%s'",
12243                         TYPE_NAME (t), tag_name (tag_code));
12244           else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
12245             cp_error ("using template type parameter `%T' after `%s'",
12246                       t, tag_name (tag_code));
12247
12248           ref = t;
12249         }
12250       else
12251         ref = lookup_tag (code, name, b, 0);
12252           
12253       if (! ref)
12254         {
12255           /* Try finding it as a type declaration.  If that wins,
12256              use it.  */ 
12257           ref = lookup_name (name, 1);
12258
12259           if (ref != NULL_TREE
12260               && processing_template_decl
12261               && DECL_CLASS_TEMPLATE_P (ref)
12262               && template_class_depth (current_class_type) == 0)
12263             /* Since GLOBALIZE is true, we're declaring a global
12264                template, so we want this type.  */
12265             ref = DECL_RESULT (ref);
12266
12267           if (ref && TREE_CODE (ref) == TYPE_DECL
12268               && TREE_CODE (TREE_TYPE (ref)) == code)
12269             ref = TREE_TYPE (ref);
12270           else
12271             ref = NULL_TREE;
12272         }
12273
12274       if (ref && current_class_type 
12275           && template_class_depth (current_class_type) 
12276           && PROCESSING_REAL_TEMPLATE_DECL_P ()) 
12277         {
12278           /* Since GLOBALIZE is non-zero, we are not looking at a
12279              definition of this tag.  Since, in addition, we are currently
12280              processing a (member) template declaration of a template
12281              class, we must be very careful; consider:
12282
12283                template <class X>
12284                struct S1
12285
12286                template <class U>
12287                struct S2
12288                { template <class V>
12289                friend struct S1; };
12290
12291              Here, the S2::S1 declaration should not be confused with the
12292              outer declaration.  In particular, the inner version should
12293              have a template parameter of level 2, not level 1.  This
12294              would be particularly important if the member declaration
12295              were instead:
12296
12297                template <class V = U> friend struct S1;
12298
12299              say, when we should tsubst into `U' when instantiating
12300              S2.  On the other hand, when presented with:
12301
12302                  template <class T>
12303                  struct S1 {
12304                    template <class U>
12305                    struct S2 {};
12306                    template <class U>
12307                    friend struct S2;
12308                  };
12309
12310               we must find the inner binding eventually.  We
12311               accomplish this by making sure that the new type we
12312               create to represent this declaration has the right
12313               TYPE_CONTEXT.  */
12314           context = TYPE_CONTEXT (ref);
12315           ref = NULL_TREE;
12316         }
12317     }
12318
12319   push_obstacks_nochange ();
12320
12321   if (! ref)
12322     {
12323       /* If no such tag is yet defined, create a forward-reference node
12324          and record it as the "definition".
12325          When a real declaration of this type is found,
12326          the forward-reference will be altered into a real type.  */
12327
12328       /* In C++, since these migrate into the global scope, we must
12329          build them on the permanent obstack.  */
12330
12331       temp = allocation_temporary_p ();
12332       if (temp)
12333         end_temporary_allocation ();
12334
12335       if (code == ENUMERAL_TYPE)
12336         {
12337           cp_error ("use of enum `%#D' without previous declaration", name);
12338
12339           ref = make_node (ENUMERAL_TYPE);
12340
12341           /* Give the type a default layout like unsigned int
12342              to avoid crashing if it does not get defined.  */
12343           TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12344           TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
12345           TREE_UNSIGNED (ref) = 1;
12346           TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12347           TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12348           TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12349
12350           /* Enable us to recognize when a type is created in class context.
12351              To do nested classes correctly, this should probably be cleared
12352              out when we leave this classes scope.  Currently this in only
12353              done in `start_enum'.  */
12354
12355           pushtag (name, ref, globalize);
12356         }
12357       else
12358         {
12359           struct binding_level *old_b = class_binding_level;
12360
12361           ref = make_lang_type (code);
12362           TYPE_CONTEXT (ref) = context;
12363
12364           if (tag_code == signature_type)
12365             {
12366               SET_SIGNATURE (ref);
12367               /* Since a signature type will be turned into the type
12368                  of signature tables, it's not only an interface.  */
12369               CLASSTYPE_INTERFACE_ONLY (ref) = 0;
12370               SET_CLASSTYPE_INTERFACE_KNOWN (ref);
12371               /* A signature doesn't have a vtable.  */
12372               CLASSTYPE_VTABLE_NEEDS_WRITING (ref) = 0;
12373             }
12374
12375 #ifdef NONNESTED_CLASSES
12376           /* Class types don't nest the way enums do.  */
12377           class_binding_level = (struct binding_level *)0;
12378 #endif
12379           pushtag (name, ref, globalize);
12380           class_binding_level = old_b;
12381         }
12382     }
12383   else
12384     {
12385       /* If it no longer looks like a nested type, make sure it's
12386          in global scope.  
12387          If it is not an IDENTIFIER, this is not a declaration */
12388       if (b->namespace_p && !class_binding_level
12389           && TREE_CODE (name) == IDENTIFIER_NODE)
12390         {
12391           if (IDENTIFIER_NAMESPACE_VALUE (name) == NULL_TREE)
12392             SET_IDENTIFIER_NAMESPACE_VALUE (name, TYPE_NAME (ref));
12393         }
12394
12395       if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
12396         redeclare_class_template (ref, current_template_parms);
12397     }
12398
12399   /* Until the type is defined, tentatively accept whatever
12400      structure tag the user hands us.  */
12401   if (TYPE_SIZE (ref) == NULL_TREE
12402       && ref != current_class_type
12403       /* Have to check this, in case we have contradictory tag info.  */
12404       && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12405     {
12406       if (tag_code == class_type)
12407         CLASSTYPE_DECLARED_CLASS (ref) = 1;
12408       else if (tag_code == record_type || tag_code == signature_type)
12409         CLASSTYPE_DECLARED_CLASS (ref) = 0;
12410     }
12411
12412   pop_obstacks ();
12413
12414   TREE_TYPE (ref) = attributes;
12415
12416   return ref;
12417 }
12418
12419 tree
12420 xref_tag_from_type (old, id, globalize)
12421      tree old, id;
12422      int globalize;
12423 {
12424   tree code_type_node;
12425
12426   if (TREE_CODE (old) == RECORD_TYPE)
12427     code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12428                       ? class_type_node : record_type_node);
12429   else
12430     code_type_node = union_type_node;
12431
12432   if (id == NULL_TREE)
12433     id = TYPE_IDENTIFIER (old);
12434
12435   return xref_tag (code_type_node, id, globalize);
12436 }
12437
12438 /* REF is a type (named NAME), for which we have just seen some
12439    baseclasses.  BINFO is a list of those baseclasses; the
12440    TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
12441    the base-class.  CODE_TYPE_NODE indicates whether REF is a class,
12442    struct, or union.  */
12443
12444 void
12445 xref_basetypes (code_type_node, name, ref, binfo)
12446      tree code_type_node;
12447      tree name, ref;
12448      tree binfo;
12449 {
12450   /* In the declaration `A : X, Y, ... Z' we mark all the types
12451      (A, X, Y, ..., Z) so we can check for duplicates.  */
12452   tree binfos;
12453   tree base;
12454
12455   int i, len;
12456   enum tag_types tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12457
12458   if (tag_code == union_type)
12459     {
12460       cp_error ("derived union `%T' invalid", ref);
12461       return;
12462     }
12463
12464   len = list_length (binfo);
12465   push_obstacks (TYPE_OBSTACK (ref), TYPE_OBSTACK (ref));
12466
12467   /* First, make sure that any templates in base-classes are
12468      instantiated.  This ensures that if we call ourselves recursively
12469      we do not get confused about which classes are marked and which
12470      are not.  */
12471   for (base = binfo; base; base = TREE_CHAIN (base))
12472     complete_type (TREE_VALUE (base));
12473
12474   SET_CLASSTYPE_MARKED (ref);
12475   BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12476
12477   for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12478     {
12479       /* The base of a derived struct is public by default.  */
12480       int via_public
12481         = (TREE_PURPOSE (binfo) == access_public_node
12482            || TREE_PURPOSE (binfo) == access_public_virtual_node
12483            || (tag_code != class_type
12484                && (TREE_PURPOSE (binfo) == access_default_node
12485                    || TREE_PURPOSE (binfo) == access_default_virtual_node)));
12486       int via_protected
12487         = (TREE_PURPOSE (binfo) == access_protected_node
12488            || TREE_PURPOSE (binfo) == access_protected_virtual_node);
12489       int via_virtual
12490         = (TREE_PURPOSE (binfo) == access_private_virtual_node
12491            || TREE_PURPOSE (binfo) == access_protected_virtual_node
12492            || TREE_PURPOSE (binfo) == access_public_virtual_node
12493            || TREE_PURPOSE (binfo) == access_default_virtual_node);
12494       tree basetype = TREE_VALUE (binfo);
12495       tree base_binfo;
12496
12497       if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12498         basetype = TREE_TYPE (basetype);
12499       if (!basetype
12500           || (TREE_CODE (basetype) != RECORD_TYPE
12501               && TREE_CODE (basetype) != TYPENAME_TYPE
12502               && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
12503               && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
12504         {
12505           cp_error ("base type `%T' fails to be a struct or class type",
12506                     TREE_VALUE (binfo));
12507           continue;
12508         }
12509
12510       GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
12511
12512       /* This code replaces similar code in layout_basetypes.
12513          We put the complete_type first for implicit `typename'.  */
12514       if (TYPE_SIZE (basetype) == NULL_TREE
12515           && ! (current_template_parms && uses_template_parms (basetype)))
12516         {
12517           cp_error ("base class `%T' has incomplete type", basetype);
12518           continue;
12519         }
12520       else
12521         {
12522           if (CLASSTYPE_MARKED (basetype))
12523             {
12524               if (basetype == ref)
12525                 cp_error ("recursive type `%T' undefined", basetype);
12526               else
12527                 cp_error ("duplicate base type `%T' invalid", basetype);
12528               continue;
12529             }
12530
12531           if (TYPE_FOR_JAVA (basetype)
12532               && current_lang_stack == current_lang_base)
12533             TYPE_FOR_JAVA (ref) = 1;
12534
12535           /* Note that the BINFO records which describe individual
12536              inheritances are *not* shared in the lattice!  They
12537              cannot be shared because a given baseclass may be
12538              inherited with different `accessibility' by different
12539              derived classes.  (Each BINFO record describing an
12540              individual inheritance contains flags which say what
12541              the `accessibility' of that particular inheritance is.)  */
12542   
12543           base_binfo 
12544             = make_binfo (integer_zero_node, basetype,
12545                           CLASS_TYPE_P (basetype)
12546                           ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12547                           CLASS_TYPE_P (basetype)
12548                           ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
12549  
12550           TREE_VEC_ELT (binfos, i) = base_binfo;
12551           TREE_VIA_PUBLIC (base_binfo) = via_public;
12552           TREE_VIA_PROTECTED (base_binfo) = via_protected;
12553           TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12554           BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12555
12556           /* We need to unshare the binfos now so that lookups during class
12557              definition work.  */
12558           unshare_base_binfos (base_binfo);
12559
12560           SET_CLASSTYPE_MARKED (basetype);
12561
12562           /* We are free to modify these bits because they are meaningless
12563              at top level, and BASETYPE is a top-level type.  */
12564           if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
12565             {
12566               TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
12567               TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12568             }
12569
12570           if (CLASS_TYPE_P (basetype))
12571             {
12572               TYPE_GETS_NEW (ref) |= TYPE_GETS_NEW (basetype);
12573               TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12574             }
12575
12576           i += 1;
12577         }
12578     }
12579   if (i)
12580     TREE_VEC_LENGTH (binfos) = i;
12581   else
12582     BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
12583
12584   if (i > 1)
12585     TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
12586   else if (i == 1)
12587     {
12588       tree basetype = BINFO_TYPE (TREE_VEC_ELT (binfos, 0));
12589       
12590       if (CLASS_TYPE_P (basetype))
12591         TYPE_USES_MULTIPLE_INHERITANCE (ref)
12592           = TYPE_USES_MULTIPLE_INHERITANCE (basetype);
12593     }
12594
12595   if (TYPE_USES_MULTIPLE_INHERITANCE (ref))
12596     TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12597
12598   /* Unmark all the types.  */
12599   while (--i >= 0)
12600     CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
12601   CLEAR_CLASSTYPE_MARKED (ref);
12602
12603   /* Now that we know all the base-classes, set up the list of virtual
12604      bases.  */
12605   CLASSTYPE_VBASECLASSES (ref) = get_vbase_types (ref);
12606
12607   pop_obstacks ();
12608 }
12609   
12610 \f
12611 /* Begin compiling the definition of an enumeration type.
12612    NAME is its name (or null if anonymous).
12613    Returns the type object, as yet incomplete.
12614    Also records info about it so that build_enumerator
12615    may be used to declare the individual values as they are read.  */
12616
12617 tree
12618 start_enum (name)
12619      tree name;
12620 {
12621   register tree enumtype = NULL_TREE;
12622   struct binding_level *b = current_binding_level;
12623
12624   /* We are wasting space here and putting these on the permanent_obstack so
12625      that typeid(local enum) will work correctly. */
12626   push_obstacks (&permanent_obstack, &permanent_obstack);
12627
12628   /* If this is the real definition for a previous forward reference,
12629      fill in the contents in the same object that used to be the
12630      forward reference.  */
12631
12632   if (name != NULL_TREE)
12633     enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
12634
12635   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12636     cp_error ("multiple definition of `%#T'", enumtype);
12637   else
12638     {
12639       enumtype = make_node (ENUMERAL_TYPE);
12640       pushtag (name, enumtype, 0);
12641     }
12642
12643   if (current_class_type)
12644     TREE_ADDRESSABLE (b->tags) = 1;
12645
12646   /* We don't copy this value because build_enumerator needs to do it.  */
12647   enum_next_value = integer_zero_node;
12648   enum_overflow = 0;
12649
12650   GNU_xref_decl (current_function_decl, enumtype);
12651   return enumtype;
12652 }
12653
12654 /* After processing and defining all the values of an enumeration type,
12655    install their decls in the enumeration type and finish it off.
12656    ENUMTYPE is the type object and VALUES a list of name-value pairs.
12657    Returns ENUMTYPE.  */
12658
12659 tree
12660 finish_enum (enumtype)
12661      tree enumtype;
12662 {
12663   register tree minnode = NULL_TREE, maxnode = NULL_TREE;
12664   /* Calculate the maximum value of any enumerator in this type.  */
12665
12666   tree values = TYPE_VALUES (enumtype);
12667   if (values)
12668     {
12669       tree pair;
12670
12671       for (pair = values; pair; pair = TREE_CHAIN (pair))
12672         {
12673           tree decl;
12674           tree value;
12675
12676           /* The TREE_VALUE is a CONST_DECL for this enumeration
12677              constant.  */
12678           decl = TREE_VALUE (pair);
12679
12680           /* The DECL_INITIAL will be NULL if we are processing a
12681              template declaration and this enumeration constant had no
12682              explicit initializer.  */
12683           value = DECL_INITIAL (decl);
12684           if (value && !processing_template_decl)
12685             {
12686               /* Set the TREE_TYPE for the VALUE as well.  That's so
12687                  that when we call decl_constant_value we get an
12688                  entity of the right type (but with the constant
12689                  value).  Since we shouldn't ever call
12690                  decl_constant_value on a template type, there's no
12691                  reason to do that when processing_template_decl.
12692                  And, if the expression is something like a
12693                  TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
12694                  wreak havoc on the intended type of the expression.  
12695
12696                  Of course, there's also no point in trying to compute
12697                  minimum or maximum values if we're in a template.  */
12698               TREE_TYPE (value) = enumtype;
12699
12700               if (!minnode)
12701                 minnode = maxnode = value;
12702               else if (tree_int_cst_lt (maxnode, value))
12703                 maxnode = value;
12704               else if (tree_int_cst_lt (value, minnode))
12705                 minnode = value;
12706             }
12707
12708           if (processing_template_decl) 
12709             /* If this is just a template, leave the CONST_DECL
12710                alone.  That way tsubst_copy will find CONST_DECLs for
12711                CONST_DECLs, and not INTEGER_CSTs.  */
12712             ;
12713           else
12714             /* In the list we're building up, we want the enumeration
12715                values, not the CONST_DECLs.  */
12716             TREE_VALUE (pair) = value;
12717         }
12718     }
12719   else
12720     maxnode = minnode = integer_zero_node;
12721
12722   TYPE_VALUES (enumtype) = nreverse (values);
12723
12724   if (processing_template_decl)
12725     {
12726       tree scope = current_scope ();
12727       if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12728         add_tree (build_min (TAG_DEFN, enumtype));
12729     }
12730   else
12731     {
12732       int unsignedp = tree_int_cst_sgn (minnode) >= 0;
12733       int lowprec = min_precision (minnode, unsignedp);
12734       int highprec = min_precision (maxnode, unsignedp);
12735       int precision = MAX (lowprec, highprec);
12736       tree tem;
12737
12738       TYPE_SIZE (enumtype) = NULL_TREE;
12739
12740       /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'.  */
12741
12742       TYPE_PRECISION (enumtype) = precision;
12743       if (unsignedp)
12744         fixup_unsigned_type (enumtype);
12745       else
12746         fixup_signed_type (enumtype);
12747
12748       if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
12749         /* Use the width of the narrowest normal C type which is wide
12750            enough.  */ 
12751         TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
12752                                                     (precision, 1));
12753       else
12754         TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
12755
12756       TYPE_SIZE (enumtype) = 0;
12757       layout_type (enumtype);
12758     
12759       /* Fix up all variant types of this enum type.  */
12760       for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
12761            tem = TYPE_NEXT_VARIANT (tem))
12762         {
12763           TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
12764           TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
12765           TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
12766           TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
12767           TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
12768           TYPE_MODE (tem) = TYPE_MODE (enumtype);
12769           TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
12770           TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
12771           TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
12772         }
12773
12774       /* Finish debugging output for this type.  */
12775       rest_of_type_compilation (enumtype, namespace_bindings_p ());
12776     }
12777
12778   /* In start_enum we pushed obstacks.  Here, we must pop them.  */
12779   pop_obstacks ();
12780
12781   return enumtype;
12782 }
12783
12784 /* Build and install a CONST_DECL for an enumeration constant of the
12785    enumeration type TYPE whose NAME and VALUE (if any) are provided.
12786    Assignment of sequential values by default is handled here.  */
12787
12788 tree
12789 build_enumerator (name, value, type)
12790      tree name;
12791      tree value;
12792      tree type;
12793 {
12794   tree decl, result;
12795   tree context;
12796
12797   /* Remove no-op casts from the value.  */
12798   if (value)
12799     STRIP_TYPE_NOPS (value);
12800
12801  if (! processing_template_decl)
12802    {
12803      /* Validate and default VALUE.  */
12804      if (value != NULL_TREE)
12805        {
12806          if (TREE_READONLY_DECL_P (value))
12807            value = decl_constant_value (value);
12808
12809          if (TREE_CODE (value) == INTEGER_CST)
12810            {
12811              value = default_conversion (value);
12812              constant_expression_warning (value);
12813            }
12814          else
12815            {
12816              cp_error ("enumerator value for `%D' not integer constant", name);
12817              value = NULL_TREE;
12818            }
12819        }
12820
12821      /* Default based on previous value.  */
12822      if (value == NULL_TREE && ! processing_template_decl)
12823        {
12824          value = enum_next_value;
12825          if (enum_overflow)
12826            cp_error ("overflow in enumeration values at `%D'", name);
12827        }
12828
12829      /* Remove no-op casts from the value.  */
12830      if (value)
12831        STRIP_TYPE_NOPS (value);
12832 #if 0
12833      /* To fix MAX_VAL enum consts. (bkoz)  */
12834      TREE_TYPE (value) = integer_type_node;
12835 #endif
12836    }
12837
12838  /* We always have to copy here; not all INTEGER_CSTs are unshared.
12839     Even in other cases, we will later (in finish_enum) be setting the
12840     type of VALUE.  */
12841  if (value != NULL_TREE)
12842    value = copy_node (value);
12843
12844   /* C++ associates enums with global, function, or class declarations.  */
12845  
12846  context = current_scope ();
12847  if (context && context == current_class_type)
12848    /* This enum declaration is local to the class.  */
12849    decl = build_lang_field_decl (CONST_DECL, name, type);
12850  else
12851    /* It's a global enum, or it's local to a function.  (Note local to
12852       a function could mean local to a class method.  */
12853    decl = build_decl (CONST_DECL, name, type);
12854
12855  DECL_CONTEXT (decl) = FROB_CONTEXT (context);
12856  DECL_INITIAL (decl) = value;
12857  TREE_READONLY (decl) = 1;
12858
12859  if (context && context == current_class_type)
12860    /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12861       on the TYPE_FIELDS list for `S'.  (That's so that you can say
12862       things like `S::i' later.)  */
12863    finish_member_declaration (decl);
12864  else
12865    {
12866      pushdecl (decl);
12867      GNU_xref_decl (current_function_decl, decl);
12868    }
12869
12870  if (! processing_template_decl)
12871    {
12872      /* Set basis for default for next value.  */
12873      enum_next_value = build_binary_op_nodefault (PLUS_EXPR, value,
12874                                                   integer_one_node, PLUS_EXPR);
12875      enum_overflow = tree_int_cst_lt (enum_next_value, value);
12876    }
12877
12878   result = saveable_tree_cons (name, decl, NULL_TREE);
12879   return result;
12880 }
12881
12882 \f
12883 static int function_depth;
12884
12885 /* Create the FUNCTION_DECL for a function definition.
12886    DECLSPECS and DECLARATOR are the parts of the declaration;
12887    they describe the function's name and the type it returns,
12888    but twisted together in a fashion that parallels the syntax of C.
12889
12890    If PRE_PARSED_P is non-zero then DECLARATOR is really the DECL for
12891    the function we are about to process; DECLSPECS are ignored.  For
12892    example, we set PRE_PARSED_P when processing the definition of
12893    inline function that was defined in-class; the definition is
12894    actually processed when the class is complete.  In this case,
12895    PRE_PARSED_P is 2.  We also set PRE_PARSED_P when instanting the
12896    body of a template function, and when constructing thunk functions
12897    and such; in these cases PRE_PARSED_P is 1.
12898    
12899    This function creates a binding context for the function body
12900    as well as setting up the FUNCTION_DECL in current_function_decl.
12901
12902    Returns 1 on success.  If the DECLARATOR is not suitable for a function
12903    (it defines a datum instead), we return 0, which tells
12904    yyparse to report a parse error.
12905
12906    For C++, we must first check whether that datum makes any sense.
12907    For example, "class A local_a(1,2);" means that variable local_a
12908    is an aggregate of type A, which should have a constructor
12909    applied to it with the argument list [1, 2].
12910
12911    @@ There is currently no way to retrieve the storage
12912    @@ allocated to FUNCTION (or all of its parms) if we return
12913    @@ something we had previously.  */
12914
12915 int
12916 start_function (declspecs, declarator, attrs, pre_parsed_p)
12917      tree declspecs, declarator, attrs;
12918      int pre_parsed_p;
12919 {
12920   tree decl1;
12921   tree ctype = NULL_TREE;
12922   tree fntype;
12923   tree restype;
12924   extern int have_extern_spec;
12925   extern int used_extern_spec;
12926   int doing_friend = 0;
12927
12928   /* Sanity check.  */
12929   my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
12930   my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
12931
12932   /* Assume, until we see it does.  */
12933   current_function_returns_value = 0;
12934   current_function_returns_null = 0;
12935   named_labels = 0;
12936   shadowed_labels = 0;
12937   current_function_assigns_this = 0;
12938   current_function_just_assigned_this = 0;
12939   current_function_parms_stored = 0;
12940   original_result_rtx = NULL_RTX;
12941   base_init_expr = NULL_TREE;
12942   current_base_init_list = NULL_TREE;
12943   current_member_init_list = NULL_TREE;
12944   ctor_label = dtor_label = NULL_TREE;
12945   static_labelno = 0;
12946
12947   clear_temp_name ();
12948
12949   /* This should only be done once on the top most decl.  */
12950   if (have_extern_spec && !used_extern_spec)
12951     {
12952       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
12953       used_extern_spec = 1;
12954     }
12955
12956   if (pre_parsed_p)
12957     {
12958       decl1 = declarator;
12959
12960 #if 0
12961       /* What was this testing for, exactly?  */
12962       if (! DECL_ARGUMENTS (decl1)
12963           && !DECL_STATIC_FUNCTION_P (decl1)
12964           && !DECL_ARTIFICIAL (decl1)
12965           && DECL_CLASS_SCOPE_P (decl1)
12966           && TYPE_IDENTIFIER (DECL_CONTEXT (decl1))
12967           && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (DECL_CONTEXT (decl1))))
12968         {
12969           tree binding = binding_for_name (DECL_NAME (decl1), 
12970                                            current_namespace);
12971           cp_error ("redeclaration of `%#D'", decl1);
12972           if (IDENTIFIER_CLASS_VALUE (DECL_NAME (decl1)))
12973             cp_error_at ("previous declaration here", IDENTIFIER_CLASS_VALUE (DECL_NAME (decl1)));
12974           else if (BINDING_VALUE (binding))
12975             cp_error_at ("previous declaration here", BINDING_VALUE (binding));
12976         }
12977 #endif
12978
12979       fntype = TREE_TYPE (decl1);
12980       if (TREE_CODE (fntype) == METHOD_TYPE)
12981         ctype = TYPE_METHOD_BASETYPE (fntype);
12982
12983       /* ANSI C++ June 5 1992 WP 11.4.5.  A friend function defined in a
12984          class is in the (lexical) scope of the class in which it is
12985          defined.  */
12986       if (!ctype && DECL_FRIEND_P (decl1))
12987         {
12988           ctype = DECL_CLASS_CONTEXT (decl1);
12989
12990           /* CTYPE could be null here if we're dealing with a template;
12991              for example, `inline friend float foo()' inside a template
12992              will have no CTYPE set.  */
12993           if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
12994             ctype = NULL_TREE;
12995           else
12996             doing_friend = 1;
12997         }
12998
12999       last_function_parms = DECL_ARGUMENTS (decl1);
13000       last_function_parm_tags = NULL_TREE;
13001     }
13002   else
13003     {
13004       decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
13005       /* If the declarator is not suitable for a function definition,
13006          cause a syntax error.  */
13007       if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
13008
13009       fntype = TREE_TYPE (decl1);
13010
13011       restype = TREE_TYPE (fntype);
13012       if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
13013         {
13014           cp_error ("semicolon missing after declaration of `%#T'", restype);
13015           shadow_tag (build_expr_list (NULL_TREE, restype));
13016           CLASSTYPE_GOT_SEMICOLON (restype) = 1;
13017           if (TREE_CODE (fntype) == FUNCTION_TYPE)
13018             fntype = build_function_type (integer_type_node,
13019                                           TYPE_ARG_TYPES (fntype));
13020           else
13021             fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
13022                                               integer_type_node,
13023                                               TYPE_ARG_TYPES (fntype));
13024           TREE_TYPE (decl1) = fntype;
13025         }
13026
13027       if (TREE_CODE (fntype) == METHOD_TYPE)
13028         ctype = TYPE_METHOD_BASETYPE (fntype);
13029       else if (DECL_MAIN_P (decl1))
13030         {
13031           /* If this doesn't return integer_type, complain.  */
13032           if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
13033             {
13034               if (pedantic || warn_return_type)
13035                 pedwarn ("return type for `main' changed to `int'");
13036               TREE_TYPE (decl1) = fntype = default_function_type;
13037             }
13038         }
13039     }
13040
13041   /* Warn if function was previously implicitly declared
13042      (but not if we warned then).  */
13043   if (! warn_implicit
13044       && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
13045     cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
13046
13047   announce_function (decl1);
13048
13049   /* Set up current_class_type, and enter the scope of the class, if
13050      appropriate.  */
13051   if (ctype)
13052     push_nested_class (ctype, 1);
13053   else if (DECL_STATIC_FUNCTION_P (decl1))
13054     push_nested_class (DECL_CONTEXT (decl1), 2);
13055
13056   /* Now that we have entered the scope of the class, we must restore
13057      the bindings for any template parameters surrounding DECL1, if it
13058      is an inline member template.  (Order is important; consider the
13059      case where a template parameter has the same name as a field of
13060      the class.)  It is not until after this point that
13061      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
13062   if (pre_parsed_p == 2)
13063     maybe_begin_member_template_processing (decl1);
13064
13065   /* We are now in the scope of the function being defined.  */
13066   current_function_decl = decl1;
13067
13068   /* Save the parm names or decls from this function's declarator
13069      where store_parm_decls will find them.  */
13070   current_function_parms = last_function_parms;
13071   current_function_parm_tags = last_function_parm_tags;
13072
13073   if (! processing_template_decl)
13074     {
13075       /* In a function definition, arg types must be complete.  */
13076       require_complete_types_for_parms (current_function_parms);
13077
13078       if (TYPE_SIZE (complete_type (TREE_TYPE (fntype))) == NULL_TREE)
13079         {
13080           cp_error ("return-type `%#T' is an incomplete type",
13081                     TREE_TYPE (fntype));
13082
13083           /* Make it return void instead, but don't change the
13084              type of the DECL_RESULT, in case we have a named return value.  */
13085           if (ctype)
13086             TREE_TYPE (decl1)
13087               = build_cplus_method_type (build_type_variant (ctype,
13088                                                              TREE_READONLY (decl1),
13089                                                              TREE_SIDE_EFFECTS (decl1)),
13090                                          void_type_node,
13091                                          FUNCTION_ARG_CHAIN (decl1));
13092           else
13093             TREE_TYPE (decl1)
13094               = build_function_type (void_type_node,
13095                                      TYPE_ARG_TYPES (TREE_TYPE (decl1)));
13096           DECL_RESULT (decl1)
13097             = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (TREE_TYPE (fntype)));
13098           TREE_READONLY (DECL_RESULT (decl1))
13099             = CP_TYPE_CONST_P (TREE_TYPE (fntype));
13100           TREE_THIS_VOLATILE (DECL_RESULT (decl1))
13101             = CP_TYPE_VOLATILE_P (TREE_TYPE (fntype));
13102         }
13103
13104       abstract_virtuals_error (decl1, TREE_TYPE (fntype));
13105     }
13106
13107   /* Effective C++ rule 15.  See also c_expand_return.  */
13108   if (warn_ecpp
13109       && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
13110       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
13111     cp_warning ("`operator=' should return a reference to `*this'");
13112
13113   /* Make the init_value nonzero so pushdecl knows this is not tentative.
13114      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
13115   DECL_INITIAL (decl1) = error_mark_node;
13116
13117 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
13118   SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
13119 #endif
13120   
13121   /* This function exists in static storage.
13122      (This does not mean `static' in the C sense!)  */
13123   TREE_STATIC (decl1) = 1;
13124
13125   /* We must call push_template_decl after current_class_type is set
13126      up.  (If we are processing inline definitions after exiting a
13127      class scope, current_class_type will be NULL_TREE until set above
13128      by push_nested_class.)  */
13129   if (processing_template_decl)
13130     decl1 = push_template_decl (decl1);
13131
13132   /* Record the decl so that the function name is defined.
13133      If we already have a decl for this name, and it is a FUNCTION_DECL,
13134      use the old decl.  */
13135   if (!processing_template_decl && pre_parsed_p == 0)
13136     {
13137       /* A specialization is not used to guide overload resolution.  */
13138       if ((flag_guiding_decls 
13139            || !DECL_TEMPLATE_SPECIALIZATION (decl1))
13140           && ! DECL_FUNCTION_MEMBER_P (decl1))
13141         decl1 = pushdecl (decl1);
13142       else
13143         {
13144           /* We need to set the DECL_CONTEXT. */
13145           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13146             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13147           /* And make sure we have enough default args.  */
13148           check_default_args (decl1);
13149         }
13150       DECL_MAIN_VARIANT (decl1) = decl1;
13151       fntype = TREE_TYPE (decl1);
13152     }
13153
13154   current_function_decl = decl1;
13155
13156   if (DECL_INTERFACE_KNOWN (decl1))
13157     {
13158       tree ctx = hack_decl_function_context (decl1);
13159
13160       if (DECL_NOT_REALLY_EXTERN (decl1))
13161         DECL_EXTERNAL (decl1) = 0;
13162
13163       if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx) 
13164           && TREE_PUBLIC (ctx))
13165         /* This is a function in a local class in an extern inline
13166            function.  */
13167         comdat_linkage (decl1);
13168     }
13169   /* If this function belongs to an interface, it is public.
13170      If it belongs to someone else's interface, it is also external.
13171      This only affects inlines and template instantiations.  */
13172   else if (interface_unknown == 0
13173            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13174                || flag_alt_external_templates))
13175     {
13176       if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
13177           || processing_template_decl)
13178         {
13179           DECL_EXTERNAL (decl1)
13180             = (interface_only
13181                || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines
13182                    && !DECL_VINDEX (decl1)));
13183
13184           /* For WIN32 we also want to put these in linkonce sections.  */
13185           maybe_make_one_only (decl1);
13186         }
13187       else
13188         DECL_EXTERNAL (decl1) = 0;
13189       DECL_NOT_REALLY_EXTERN (decl1) = 0;
13190       DECL_INTERFACE_KNOWN (decl1) = 1;
13191     }
13192   else if (interface_unknown && interface_only
13193            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13194                || flag_alt_external_templates))
13195     {
13196       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13197          interface, we will have interface_only set but not
13198          interface_known.  In that case, we don't want to use the normal
13199          heuristics because someone will supply a #pragma implementation
13200          elsewhere, and deducing it here would produce a conflict.  */
13201       comdat_linkage (decl1);
13202       DECL_EXTERNAL (decl1) = 0;
13203       DECL_INTERFACE_KNOWN (decl1) = 1;
13204       DECL_DEFER_OUTPUT (decl1) = 1;
13205     }
13206   else
13207     {
13208       /* This is a definition, not a reference.
13209          So clear DECL_EXTERNAL.  */
13210       DECL_EXTERNAL (decl1) = 0;
13211
13212       if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
13213           && ! DECL_INTERFACE_KNOWN (decl1)
13214           /* Don't try to defer nested functions for now.  */
13215           && ! hack_decl_function_context (decl1))
13216         DECL_DEFER_OUTPUT (decl1) = 1;
13217       else
13218         DECL_INTERFACE_KNOWN (decl1) = 1;
13219     }
13220
13221   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1))
13222     {
13223       if (TREE_CODE (fntype) == METHOD_TYPE)
13224         TREE_TYPE (decl1) = fntype
13225           = build_function_type (TREE_TYPE (fntype),
13226                                  TREE_CHAIN (TYPE_ARG_TYPES (fntype)));
13227       current_function_parms = TREE_CHAIN (current_function_parms);
13228       DECL_ARGUMENTS (decl1) = current_function_parms;
13229       ctype = NULL_TREE;
13230     }
13231   restype = TREE_TYPE (fntype);
13232
13233   if (ctype)
13234     {
13235       /* If we're compiling a friend function, neither of the variables
13236          current_class_ptr nor current_class_type will have values.  */
13237       if (! doing_friend)
13238         {
13239           /* We know that this was set up by `grokclassfn'.
13240              We do not wait until `store_parm_decls', since evil
13241              parse errors may never get us to that point.  Here
13242              we keep the consistency between `current_class_type'
13243              and `current_class_ptr'.  */
13244           tree t = current_function_parms;
13245
13246           my_friendly_assert (t != NULL_TREE
13247                               && TREE_CODE (t) == PARM_DECL, 162);
13248
13249           if (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE)
13250             {
13251               int i;
13252
13253               if (! hack_decl_function_context (decl1))
13254                 temporary_allocation ();
13255               i = suspend_momentary ();
13256
13257               /* Normally, build_indirect_ref returns
13258                  current_class_ref whenever current_class_ptr is
13259                  dereferenced.  This time, however, we want it to
13260                  *create* current_class_ref, so we temporarily clear
13261                  current_class_ptr to fool it.  */
13262               current_class_ptr = NULL_TREE;
13263               current_class_ref = build_indirect_ref (t, NULL_PTR);
13264               current_class_ptr = t;
13265
13266               resume_momentary (i);
13267               if (! hack_decl_function_context (decl1))
13268                 end_temporary_allocation ();
13269             }
13270           else
13271             /* We're having a signature pointer here.  */
13272             current_class_ref = current_class_ptr = t;
13273
13274         }
13275     }
13276   else
13277     current_class_ptr = current_class_ref = NULL_TREE;
13278
13279   pushlevel (0);
13280   current_binding_level->parm_flag = 1;
13281
13282   GNU_xref_function (decl1, current_function_parms);
13283
13284   if (attrs)
13285     cplus_decl_attributes (decl1, NULL_TREE, attrs);
13286   
13287   make_function_rtl (decl1);
13288
13289   /* Promote the value to int before returning it.  */
13290   if (C_PROMOTING_INTEGER_TYPE_P (restype))
13291     restype = type_promotes_to (restype);
13292
13293   /* If this fcn was already referenced via a block-scope `extern' decl
13294      (or an implicit decl), propagate certain information about the usage.  */
13295   if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
13296     TREE_ADDRESSABLE (decl1) = 1;
13297
13298   if (DECL_RESULT (decl1) == NULL_TREE)
13299     {
13300       DECL_RESULT (decl1)
13301         = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13302       TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13303       TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
13304     }
13305
13306   /* Allocate further tree nodes temporarily during compilation
13307      of this function only.  Tiemann moved up here from bottom of fn.  */
13308   /* If this is a nested function, then we must continue to allocate RTL
13309      on the permanent obstack in case we need to inline it later.  */
13310   if (! hack_decl_function_context (decl1))
13311     temporary_allocation ();
13312
13313   if (processing_template_decl)
13314     {
13315       ++minimal_parse_mode;
13316       last_tree = DECL_SAVED_TREE (decl1)
13317         = build_nt (EXPR_STMT, void_zero_node);
13318     }
13319
13320   ++function_depth;
13321
13322   if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl1))
13323       && DECL_LANGUAGE (decl1) == lang_cplusplus)
13324     {
13325       dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13326       ctor_label = NULL_TREE;
13327     }
13328   else
13329     {
13330       dtor_label = NULL_TREE;
13331       if (DECL_CONSTRUCTOR_P (decl1))
13332         ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13333     }
13334
13335   return 1;
13336 }
13337 \f
13338 /* Called after store_parm_decls for a function-try-block.  We need to update
13339    last_parm_cleanup_insn so that the base initializers for a constructor
13340    are run within this block, not before it.  */
13341
13342 void
13343 expand_start_early_try_stmts ()
13344 {
13345   expand_start_try_stmts ();
13346   last_parm_cleanup_insn = get_last_insn ();
13347 }
13348
13349 /* Store the parameter declarations into the current function declaration.
13350    This is called after parsing the parameter declarations, before
13351    digesting the body of the function.
13352
13353    Also install to binding contour return value identifier, if any.  */
13354
13355 void
13356 store_parm_decls ()
13357 {
13358   register tree fndecl = current_function_decl;
13359   register tree parm;
13360   int parms_have_cleanups = 0;
13361   tree cleanups = NULL_TREE;
13362
13363   /* This is either a chain of PARM_DECLs (when a prototype is used).  */
13364   tree specparms = current_function_parms;
13365
13366   /* This is a list of types declared among parms in a prototype.  */
13367   tree parmtags = current_function_parm_tags;
13368
13369   /* This is a chain of any other decls that came in among the parm
13370      declarations.  If a parm is declared with  enum {foo, bar} x;
13371      then CONST_DECLs for foo and bar are put here.  */
13372   tree nonparms = NULL_TREE;
13373
13374   if (toplevel_bindings_p ())
13375     fatal ("parse errors have confused me too much");
13376
13377   /* Initialize RTL machinery.  */
13378   init_function_start (fndecl, input_filename, lineno);
13379
13380   /* Create a binding level for the parms.  */
13381   expand_start_bindings (0);
13382
13383   if (specparms != NULL_TREE)
13384     {
13385       /* This case is when the function was defined with an ANSI prototype.
13386          The parms already have decls, so we need not do anything here
13387          except record them as in effect
13388          and complain if any redundant old-style parm decls were written.  */
13389
13390       register tree next;
13391
13392       /* Must clear this because it might contain TYPE_DECLs declared
13393          at class level.  */
13394       storedecls (NULL_TREE);
13395
13396       for (parm = nreverse (specparms); parm; parm = next)
13397         {
13398           next = TREE_CHAIN (parm);
13399           if (TREE_CODE (parm) == PARM_DECL)
13400             {
13401               tree cleanup;
13402               if (DECL_NAME (parm) == NULL_TREE)
13403                 {
13404                   pushdecl (parm);
13405                 }
13406               else if (TREE_CODE (TREE_TYPE (parm)) == VOID_TYPE)
13407                 cp_error ("parameter `%D' declared void", parm);
13408               else
13409                 {
13410                   /* Now fill in DECL_REFERENCE_SLOT for any of the parm decls.
13411                      A parameter is assumed not to have any side effects.
13412                      If this should change for any reason, then this
13413                      will have to wrap the bashed reference type in a save_expr.
13414                      
13415                      Also, if the parameter type is declared to be an X
13416                      and there is an X(X&) constructor, we cannot lay it
13417                      into the stack (any more), so we make this parameter
13418                      look like it is really of reference type.  Functions
13419                      which pass parameters to this function will know to
13420                      create a temporary in their frame, and pass a reference
13421                      to that.  */
13422
13423                   if (TREE_CODE (TREE_TYPE (parm)) == REFERENCE_TYPE
13424                       && TYPE_SIZE (TREE_TYPE (TREE_TYPE (parm))))
13425                     SET_DECL_REFERENCE_SLOT (parm, convert_from_reference (parm));
13426
13427                   pushdecl (parm);
13428                 }
13429               if (! processing_template_decl
13430                   && (cleanup = maybe_build_cleanup (parm), cleanup))
13431                 {
13432                   expand_decl (parm);
13433                   parms_have_cleanups = 1;
13434
13435                   /* Keep track of the cleanups.  */
13436                   cleanups = tree_cons (parm, cleanup, cleanups);
13437                 }
13438             }
13439           else
13440             {
13441               /* If we find an enum constant or a type tag,
13442                  put it aside for the moment.  */
13443               TREE_CHAIN (parm) = NULL_TREE;
13444               nonparms = chainon (nonparms, parm);
13445             }
13446         }
13447
13448       /* Get the decls in their original chain order
13449          and record in the function.  This is all and only the
13450          PARM_DECLs that were pushed into scope by the loop above.  */
13451       DECL_ARGUMENTS (fndecl) = getdecls ();
13452
13453       storetags (chainon (parmtags, gettags ()));
13454     }
13455   else
13456     DECL_ARGUMENTS (fndecl) = NULL_TREE;
13457
13458   /* Now store the final chain of decls for the arguments
13459      as the decl-chain of the current lexical scope.
13460      Put the enumerators in as well, at the front so that
13461      DECL_ARGUMENTS is not modified.  */
13462
13463   storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
13464
13465   /* Declare __FUNCTION__ and __PRETTY_FUNCTION__ for this function.  */
13466   declare_function_name ();
13467
13468   /* Initialize the RTL code for the function.  */
13469   DECL_SAVED_INSNS (fndecl) = NULL_RTX;
13470   if (! processing_template_decl)
13471     expand_function_start (fndecl, parms_have_cleanups);
13472
13473   current_function_parms_stored = 1;
13474
13475   /* If this function is `main', emit a call to `__main'
13476      to run global initializers, etc.  */
13477   if (DECL_MAIN_P (fndecl))
13478     expand_main_function ();
13479
13480   /* Now that we have initialized the parms, we can start their
13481      cleanups.  We cannot do this before, since expand_decl_cleanup
13482      should not be called before the parm can be used.  */
13483   if (cleanups
13484       && ! processing_template_decl)      
13485     {
13486       for (cleanups = nreverse (cleanups); cleanups; cleanups = TREE_CHAIN (cleanups))
13487         {
13488           if (! expand_decl_cleanup (TREE_PURPOSE (cleanups), TREE_VALUE (cleanups)))
13489             cp_error ("parser lost in parsing declaration of `%D'",
13490                       TREE_PURPOSE (cleanups));
13491         }
13492     }
13493
13494   /* Create a binding contour which can be used to catch
13495      cleanup-generated temporaries.  Also, if the return value needs or
13496      has initialization, deal with that now.  */
13497   if (parms_have_cleanups)
13498     {
13499       pushlevel (0);
13500       expand_start_bindings (0);
13501     }
13502
13503   if (! processing_template_decl && flag_exceptions)
13504     {
13505       /* Do the starting of the exception specifications, if we have any.  */
13506       if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13507         expand_start_eh_spec ();
13508     }
13509
13510   last_parm_cleanup_insn = get_last_insn ();
13511   last_dtor_insn = get_last_insn ();
13512 }
13513
13514 /* Bind a name and initialization to the return value of
13515    the current function.  */
13516
13517 void
13518 store_return_init (return_id, init)
13519      tree return_id, init;
13520 {
13521   tree decl = DECL_RESULT (current_function_decl);
13522
13523   if (pedantic)
13524     /* Give this error as many times as there are occurrences,
13525        so that users can use Emacs compilation buffers to find
13526        and fix all such places.  */
13527     pedwarn ("ANSI C++ does not permit named return values");
13528
13529   if (return_id != NULL_TREE)
13530     {
13531       if (DECL_NAME (decl) == NULL_TREE)
13532         {
13533           DECL_NAME (decl) = return_id;
13534           DECL_ASSEMBLER_NAME (decl) = return_id;
13535         }
13536       else
13537         cp_error ("return identifier `%D' already in place", decl);
13538     }
13539
13540   /* Can't let this happen for constructors.  */
13541   if (DECL_CONSTRUCTOR_P (current_function_decl))
13542     {
13543       error ("can't redefine default return value for constructors");
13544       return;
13545     }
13546
13547   /* If we have a named return value, put that in our scope as well.  */
13548   if (DECL_NAME (decl) != NULL_TREE)
13549     {
13550       /* If this named return value comes in a register,
13551          put it in a pseudo-register.  */
13552       if (DECL_REGISTER (decl))
13553         {
13554           original_result_rtx = DECL_RTL (decl);
13555           DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
13556         }
13557
13558       /* Let `cp_finish_decl' know that this initializer is ok.  */
13559       DECL_INITIAL (decl) = init;
13560       pushdecl (decl);
13561
13562       if (minimal_parse_mode)
13563         add_tree (build_min_nt (RETURN_INIT, return_id,
13564                                 copy_to_permanent (init)));
13565       else
13566         cp_finish_decl (decl, init, NULL_TREE, 0, 0);
13567     }
13568 }
13569
13570 \f
13571 /* Finish up a function declaration and compile that function
13572    all the way to assembler language output.  The free the storage
13573    for the function definition.
13574
13575    This is called after parsing the body of the function definition.
13576    LINENO is the current line number.
13577
13578    FLAGS is a bitwise or of the following values: 
13579      1 - CALL_POPLEVEL 
13580        An extra call to poplevel (and expand_end_bindings) must be
13581        made to take care of the binding contour for the base
13582        initializers.  This is only relevant for constructors.
13583      2 - INCLASS_INLINE
13584        We just finished processing the body of an in-class inline
13585        function definition.  (This processing will have taken place
13586        after the class definition is complete.)
13587
13588    NESTED is nonzero if we were in the middle of compiling another function
13589    when we started on this one.  */
13590
13591 void
13592 finish_function (lineno, flags, nested)
13593      int lineno;
13594      int flags;
13595      int nested;
13596 {
13597   register tree fndecl = current_function_decl;
13598   tree fntype, ctype = NULL_TREE;
13599   rtx last_parm_insn, insns;
13600   /* Label to use if this function is supposed to return a value.  */
13601   tree no_return_label = NULL_TREE;
13602   tree decls = NULL_TREE;
13603   int call_poplevel = (flags & 1) != 0;
13604   int inclass_inline = (flags & 2) != 0;
13605   int in_template;
13606
13607   /* When we get some parse errors, we can end up without a
13608      current_function_decl, so cope.  */
13609   if (fndecl == NULL_TREE)
13610     return;
13611
13612   if (function_depth > 1)
13613     nested = 1;
13614
13615   fntype = TREE_TYPE (fndecl);
13616
13617 /*  TREE_READONLY (fndecl) = 1;
13618     This caused &foo to be of type ptr-to-const-function
13619     which then got a warning when stored in a ptr-to-function variable.  */
13620
13621   /* This happens on strange parse errors.  */
13622   if (! current_function_parms_stored)
13623     {
13624       call_poplevel = 0;
13625       store_parm_decls ();
13626     }
13627
13628   if (processing_template_decl)
13629     {
13630       if (DECL_CONSTRUCTOR_P (fndecl) && call_poplevel)
13631         {
13632           decls = getdecls ();
13633           expand_end_bindings (decls, decls != NULL_TREE, 0);
13634           poplevel (decls != NULL_TREE, 0, 0);
13635         }
13636     }
13637   else
13638     {
13639       if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
13640         {
13641           tree ttype = target_type (fntype);
13642           tree parmdecl;
13643
13644           if (IS_AGGR_TYPE (ttype))
13645             /* Let debugger know it should output info for this type.  */
13646             note_debug_info_needed (ttype);
13647
13648           for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
13649             {
13650               ttype = target_type (TREE_TYPE (parmdecl));
13651               if (IS_AGGR_TYPE (ttype))
13652                 /* Let debugger know it should output info for this type.  */
13653                 note_debug_info_needed (ttype);
13654             }
13655         }
13656
13657       /* Clean house because we will need to reorder insns here.  */
13658       do_pending_stack_adjust ();
13659
13660       if (dtor_label)
13661         {
13662           tree binfo = TYPE_BINFO (current_class_type);
13663           tree cond = integer_one_node;
13664           tree exprstmt;
13665           tree in_charge_node = lookup_name (in_charge_identifier, 0);
13666           tree virtual_size;
13667           int ok_to_optimize_dtor = 0;
13668           int empty_dtor = get_last_insn () == last_dtor_insn;
13669
13670           if (current_function_assigns_this)
13671             cond = build (NE_EXPR, boolean_type_node,
13672                           current_class_ptr, integer_zero_node);
13673           else
13674             {
13675               int n_baseclasses = CLASSTYPE_N_BASECLASSES (current_class_type);
13676
13677               /* If this destructor is empty, then we don't need to check
13678                  whether `this' is NULL in some cases.  */
13679               if ((flag_this_is_variable & 1) == 0)
13680                 ok_to_optimize_dtor = 1;
13681               else if (empty_dtor)
13682                 ok_to_optimize_dtor
13683                   = (n_baseclasses == 0
13684                      || (n_baseclasses == 1
13685                          && TYPE_HAS_DESTRUCTOR (TYPE_BINFO_BASETYPE (current_class_type, 0))));
13686             }
13687
13688           /* These initializations might go inline.  Protect
13689              the binding level of the parms.  */
13690           pushlevel (0);
13691           expand_start_bindings (0);
13692
13693           if (current_function_assigns_this)
13694             {
13695               current_function_assigns_this = 0;
13696               current_function_just_assigned_this = 0;
13697             }
13698
13699           /* Generate the code to call destructor on base class.
13700              If this destructor belongs to a class with virtual
13701              functions, then set the virtual function table
13702              pointer to represent the type of our base class.  */
13703
13704           /* This side-effect makes call to `build_delete' generate the
13705              code we have to have at the end of this destructor.
13706              `build_delete' will set the flag again.  */
13707           TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
13708
13709           /* These are two cases where we cannot delegate deletion.  */
13710           if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)
13711               || TYPE_GETS_REG_DELETE (current_class_type))
13712             exprstmt = build_delete (current_class_type, current_class_ref, integer_zero_node,
13713                                      LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
13714           else
13715             exprstmt = build_delete (current_class_type, current_class_ref, in_charge_node,
13716                                      LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
13717
13718           /* If we did not assign to this, then `this' is non-zero at
13719              the end of a destructor.  As a special optimization, don't
13720              emit test if this is an empty destructor.  If it does nothing,
13721              it does nothing.  If it calls a base destructor, the base
13722              destructor will perform the test.  */
13723
13724           if (exprstmt != error_mark_node
13725               && (TREE_CODE (exprstmt) != NOP_EXPR
13726                   || TREE_OPERAND (exprstmt, 0) != integer_zero_node
13727                   || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
13728             {
13729               expand_label (dtor_label);
13730               if (cond != integer_one_node)
13731                 expand_start_cond (cond, 0);
13732               if (exprstmt != void_zero_node)
13733                 /* Don't call `expand_expr_stmt' if we're not going to do
13734                    anything, since -Wall will give a diagnostic.  */
13735                 expand_expr_stmt (exprstmt);
13736
13737               /* Run destructor on all virtual baseclasses.  */
13738               if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13739                 {
13740                   tree vbases = nreverse (copy_list (CLASSTYPE_VBASECLASSES (current_class_type)));
13741                   expand_start_cond (build (BIT_AND_EXPR, integer_type_node,
13742                                             in_charge_node, integer_two_node), 0);
13743                   while (vbases)
13744                     {
13745                       if (TYPE_NEEDS_DESTRUCTOR (BINFO_TYPE (vbases)))
13746                         {
13747                           tree vb = get_vbase
13748                             (BINFO_TYPE (vbases),
13749                              TYPE_BINFO (current_class_type));
13750                           expand_expr_stmt
13751                             (build_scoped_method_call
13752                              (current_class_ref, vb, dtor_identifier,
13753                               build_expr_list (NULL_TREE, integer_zero_node)));
13754                         }
13755                       vbases = TREE_CHAIN (vbases);
13756                     }
13757                   expand_end_cond ();
13758                 }
13759
13760               do_pending_stack_adjust ();
13761               if (cond != integer_one_node)
13762                 expand_end_cond ();
13763             }
13764
13765           virtual_size = c_sizeof (current_class_type);
13766
13767           /* At the end, call delete if that's what's requested.  */
13768
13769           /* FDIS sez: At the point of definition of a virtual destructor
13770                (including an implicit definition), non-placement operator
13771                delete shall be looked up in the scope of the destructor's
13772                class and if found shall be accessible and unambiguous.
13773
13774              This is somewhat unclear, but I take it to mean that if the
13775              class only defines placement deletes we don't do anything here.
13776              So we pass LOOKUP_SPECULATIVELY; delete_sanity will complain
13777              for us if they ever try to delete one of these.  */
13778
13779           if (TYPE_GETS_REG_DELETE (current_class_type)
13780               || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13781             exprstmt = build_op_delete_call
13782               (DELETE_EXPR, current_class_ptr, virtual_size,
13783                LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
13784           else
13785             exprstmt = NULL_TREE;
13786
13787           if (exprstmt)
13788             {
13789               cond = build (BIT_AND_EXPR, integer_type_node,
13790                             in_charge_node, integer_one_node);
13791               expand_start_cond (cond, 0);
13792               expand_expr_stmt (exprstmt);
13793               expand_end_cond ();
13794             }
13795
13796           /* End of destructor.  */
13797           expand_end_bindings (NULL_TREE, getdecls () != NULL_TREE, 0);
13798           poplevel (getdecls () != NULL_TREE, 0, 0);
13799
13800           /* Back to the top of destructor.  */
13801           /* Don't execute destructor code if `this' is NULL.  */
13802
13803           start_sequence ();
13804
13805           /* If the dtor is empty, and we know there is not possible way we
13806              could use any vtable entries, before they are possibly set by
13807              a base class dtor, we don't have to setup the vtables, as we
13808              know that any base class dtoring will set up any vtables it
13809              needs.  We avoid MI, because one base class dtor can do a
13810              virtual dispatch to an overridden function that would need to
13811              have a non-related vtable set up, we cannot avoid setting up
13812              vtables in that case.  We could change this to see if there is
13813              just one vtable.  */
13814           if (! empty_dtor || TYPE_USES_COMPLEX_INHERITANCE (current_class_type))
13815             {
13816               /* Make all virtual function table pointers in non-virtual base
13817                  classes point to CURRENT_CLASS_TYPE's virtual function
13818                  tables.  */
13819               expand_direct_vtbls_init (binfo, binfo, 1, 0, current_class_ptr);
13820
13821               if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13822                 expand_indirect_vtbls_init (binfo, current_class_ref, current_class_ptr);
13823             }
13824           
13825           if (! ok_to_optimize_dtor)
13826             {
13827               cond = build_binary_op (NE_EXPR,
13828                                       current_class_ptr, integer_zero_node);
13829               expand_start_cond (cond, 0);
13830             }
13831
13832           insns = get_insns ();
13833           end_sequence ();
13834
13835           last_parm_insn = get_first_nonparm_insn ();
13836           if (last_parm_insn == NULL_RTX)
13837             last_parm_insn = get_last_insn ();
13838           else
13839             last_parm_insn = previous_insn (last_parm_insn);
13840
13841           emit_insns_after (insns, last_parm_insn);
13842
13843           if (! ok_to_optimize_dtor)
13844             expand_end_cond ();
13845         }
13846       else if (current_function_assigns_this)
13847         {
13848           /* Does not need to call emit_base_init, because
13849              that is done (if needed) just after assignment to this
13850              is seen.  */
13851
13852           if (DECL_CONSTRUCTOR_P (current_function_decl))
13853             {
13854               end_protect_partials ();
13855               expand_label (ctor_label);
13856               ctor_label = NULL_TREE;
13857
13858               if (call_poplevel)
13859                 {
13860                   decls = getdecls ();
13861                   expand_end_bindings (decls, decls != NULL_TREE, 0);
13862                   poplevel (decls != NULL_TREE, 0, 0);
13863                 }
13864               /* c_expand_return knows to return 'this' from a constructor.  */
13865               c_expand_return (NULL_TREE);
13866             }
13867           else if (TREE_CODE (TREE_TYPE (DECL_RESULT (current_function_decl))) != VOID_TYPE
13868                    && return_label != NULL_RTX)
13869             no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13870
13871           current_function_assigns_this = 0;
13872           current_function_just_assigned_this = 0;
13873           base_init_expr = NULL_TREE;
13874         }
13875       else if (DECL_CONSTRUCTOR_P (fndecl))
13876         {
13877           tree cond = NULL_TREE, thenclause = NULL_TREE;
13878           /* Allow constructor for a type to get a new instance of the object
13879              using `build_new'.  */
13880           tree abstract_virtuals = CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type);
13881           CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = NULL_TREE;
13882
13883           if (flag_this_is_variable > 0)
13884             {
13885               cond = build_binary_op (EQ_EXPR,
13886                                       current_class_ptr, integer_zero_node);
13887               thenclause = build_modify_expr (current_class_ptr, NOP_EXPR,
13888                                               build_new (NULL_TREE, current_class_type, void_type_node, 0));
13889             }
13890
13891           CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = abstract_virtuals;
13892
13893           start_sequence ();
13894
13895           if (flag_this_is_variable > 0)
13896             {
13897               expand_start_cond (cond, 0);
13898               expand_expr_stmt (thenclause);
13899               expand_end_cond ();
13900             }
13901
13902           /* Emit insns from `emit_base_init' which sets up virtual
13903              function table pointer(s).  */
13904           if (base_init_expr)
13905             {
13906               expand_expr_stmt (base_init_expr);
13907               base_init_expr = NULL_TREE;
13908             }
13909
13910           insns = get_insns ();
13911           end_sequence ();
13912
13913           /* This is where the body of the constructor begins.  */
13914
13915           emit_insns_after (insns, last_parm_cleanup_insn);
13916
13917           end_protect_partials ();
13918
13919           /* This is where the body of the constructor ends.  */
13920           expand_label (ctor_label);
13921           ctor_label = NULL_TREE;
13922
13923           if (call_poplevel)
13924             {
13925               decls = getdecls ();
13926               expand_end_bindings (decls, decls != NULL_TREE, 0);
13927               poplevel (decls != NULL_TREE, 1, 0);
13928             }
13929
13930           /* c_expand_return knows to return 'this' from a constructor.  */
13931           c_expand_return (NULL_TREE);
13932
13933           current_function_assigns_this = 0;
13934           current_function_just_assigned_this = 0;
13935         }
13936       else if (DECL_MAIN_P (fndecl))
13937         {
13938           /* Make it so that `main' always returns 0 by default.  */
13939 #ifdef VMS
13940           c_expand_return (integer_one_node);
13941 #else
13942           c_expand_return (integer_zero_node);
13943 #endif
13944         }
13945       else if (return_label != NULL_RTX
13946                && current_function_return_value == NULL_TREE
13947                && ! DECL_NAME (DECL_RESULT (current_function_decl)))
13948         no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13949
13950       if (flag_exceptions)
13951         expand_exception_blocks ();
13952
13953       /* If this function is supposed to return a value, ensure that
13954          we do not fall into the cleanups by mistake.  The end of our
13955          function will look like this:
13956          
13957          user code (may have return stmt somewhere)
13958          goto no_return_label
13959          cleanup_label:
13960          cleanups
13961          goto return_label
13962          no_return_label:
13963          NOTE_INSN_FUNCTION_END
13964          return_label:
13965          things for return
13966          
13967          If the user omits a return stmt in the USER CODE section, we
13968          will have a control path which reaches NOTE_INSN_FUNCTION_END.
13969          Otherwise, we won't.  */
13970       if (no_return_label)
13971         {
13972           DECL_CONTEXT (no_return_label) = fndecl;
13973           DECL_INITIAL (no_return_label) = error_mark_node;
13974           DECL_SOURCE_FILE (no_return_label) = input_filename;
13975           DECL_SOURCE_LINE (no_return_label) = lineno;
13976           expand_goto (no_return_label);
13977         }
13978
13979       if (cleanup_label)
13980         {
13981           /* Remove the binding contour which is used
13982              to catch cleanup-generated temporaries.  */
13983           expand_end_bindings (0, 0, 0);
13984           poplevel (0, 0, 0);
13985
13986           /* Emit label at beginning of cleanup code for parameters.  */
13987           emit_label (cleanup_label);
13988         }
13989
13990       /* Get return value into register if that's where it's supposed to be.  */
13991       if (original_result_rtx)
13992         fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
13993
13994       /* Finish building code that will trigger warnings if users forget
13995          to make their functions return values.  */
13996       if (no_return_label || cleanup_label)
13997         emit_jump (return_label);
13998       if (no_return_label)
13999         {
14000           /* We don't need to call `expand_*_return' here because we
14001              don't need any cleanups here--this path of code is only
14002              for error checking purposes.  */
14003           expand_label (no_return_label);
14004         }
14005
14006       /* Generate rtl for function exit.  */
14007       expand_function_end (input_filename, lineno, 1);
14008     }
14009   
14010   /* If we're processing a template, squirrel away the definition
14011      until we do an instantiation.  */
14012   if (processing_template_decl)
14013     {
14014       --minimal_parse_mode;
14015       DECL_SAVED_TREE (fndecl) = TREE_CHAIN (DECL_SAVED_TREE (fndecl));
14016       /* We have to save this value here in case
14017          maybe_end_member_template_processing decides to pop all the
14018          template parameters.  */
14019       in_template = 1;
14020     }
14021   else
14022     in_template = 0;
14023
14024   /* This must come after expand_function_end because cleanups might
14025      have declarations (from inline functions) that need to go into
14026      this function's blocks.  */
14027   if (current_binding_level->parm_flag != 1)
14028     my_friendly_abort (122);
14029   poplevel (1, 0, 1);
14030
14031   /* If this is a in-class inline definition, we may have to pop the
14032      bindings for the template parameters that we added in
14033      maybe_begin_member_template_processing when start_function was
14034      called.  */
14035   if (inclass_inline)
14036     maybe_end_member_template_processing ();
14037
14038   /* Reset scope for C++: if we were in the scope of a class,
14039      then when we finish this function, we are not longer so.
14040      This cannot be done until we know for sure that no more
14041      class members will ever be referenced in this function
14042      (i.e., calls to destructors).  */
14043   if (current_class_name)
14044     {
14045       ctype = current_class_type;
14046       pop_nested_class ();
14047     }
14048
14049   /* Must mark the RESULT_DECL as being in this function.  */
14050   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
14051
14052   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
14053      to the FUNCTION_DECL node itself.  */
14054   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
14055
14056   if (!in_template)
14057     {
14058       int saved_flag_keep_inline_functions =
14059         flag_keep_inline_functions;
14060
14061       /* So we can tell if jump_optimize sets it to 1.  */
14062       can_reach_end = 0;
14063
14064       if (DECL_CONTEXT (fndecl) != NULL_TREE
14065           && hack_decl_function_context (fndecl))
14066         /* Trick rest_of_compilation into not deferring output of this
14067            function, even if it is inline, since the rtl_obstack for
14068            this function is the function_obstack of the enclosing
14069            function and will be deallocated when the enclosing
14070            function is gone.  See save_tree_status.  */
14071         flag_keep_inline_functions = 1;
14072
14073       /* Run the optimizers and output the assembler code for this
14074          function.  */
14075
14076       if (DECL_ARTIFICIAL (fndecl))
14077         {
14078           /* Do we really *want* to inline this synthesized method?  */
14079
14080           int save_fif = flag_inline_functions;
14081           flag_inline_functions = 1;
14082
14083           /* Turn off DECL_INLINE for the moment so function_cannot_inline_p
14084              will check our size.  */
14085           DECL_INLINE (fndecl) = 0;
14086
14087           rest_of_compilation (fndecl);
14088           flag_inline_functions = save_fif;
14089         }
14090       else
14091         rest_of_compilation (fndecl);
14092
14093       flag_keep_inline_functions = saved_flag_keep_inline_functions;
14094
14095       if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
14096         {
14097           /* Set DECL_EXTERNAL so that assemble_external will be called as
14098              necessary.  We'll clear it again in finish_file.  */
14099           if (! DECL_EXTERNAL (fndecl))
14100             DECL_NOT_REALLY_EXTERN (fndecl) = 1;
14101           DECL_EXTERNAL (fndecl) = 1;
14102           mark_inline_for_output (fndecl);
14103         }
14104
14105       if (ctype && TREE_ASM_WRITTEN (fndecl))
14106         note_debug_info_needed (ctype);
14107
14108       current_function_returns_null |= can_reach_end;
14109
14110       /* Since we don't normally go through c_expand_return for constructors,
14111          this normally gets the wrong value.
14112          Also, named return values have their return codes emitted after
14113          NOTE_INSN_FUNCTION_END, confusing jump.c.  */
14114       if (DECL_CONSTRUCTOR_P (fndecl)
14115           || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
14116         current_function_returns_null = 0;
14117
14118       if (TREE_THIS_VOLATILE (fndecl) && current_function_returns_null)
14119         cp_warning ("`noreturn' function `%D' does return", fndecl);
14120       else if ((warn_return_type || pedantic)
14121                && current_function_returns_null
14122                && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE)
14123         {
14124           /* If this function returns non-void and control can drop through,
14125              complain.  */
14126           cp_warning ("control reaches end of non-void function `%D'", fndecl);
14127         }
14128       /* With just -W, complain only if function returns both with
14129          and without a value.  */
14130       else if (extra_warnings
14131                && current_function_returns_value && current_function_returns_null)
14132         warning ("this function may return with or without a value");
14133     }
14134
14135   --function_depth;
14136
14137   /* Free all the tree nodes making up this function.  */
14138   /* Switch back to allocating nodes permanently
14139      until we start another function.  */
14140   if (! nested)
14141     permanent_allocation (1);
14142
14143   if (DECL_SAVED_INSNS (fndecl) == NULL_RTX)
14144     {
14145       tree t;
14146
14147       /* Stop pointing to the local nodes about to be freed.  */
14148       /* But DECL_INITIAL must remain nonzero so we know this
14149          was an actual function definition.  */
14150       DECL_INITIAL (fndecl) = error_mark_node;
14151       for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
14152         DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
14153     }
14154
14155   if (DECL_STATIC_CONSTRUCTOR (fndecl))
14156     static_ctors = perm_tree_cons (NULL_TREE, fndecl, static_ctors);
14157   if (DECL_STATIC_DESTRUCTOR (fndecl))
14158     static_dtors = perm_tree_cons (NULL_TREE, fndecl, static_dtors);
14159
14160   if (! nested)
14161     {
14162       /* Let the error reporting routines know that we're outside a
14163          function.  For a nested function, this value is used in
14164          pop_cp_function_context and then reset via pop_function_context.  */
14165       current_function_decl = NULL_TREE;
14166     }
14167
14168   named_label_uses = NULL;
14169   current_class_ptr = NULL_TREE;
14170   current_class_ref = NULL_TREE;
14171 }
14172 \f
14173 /* Create the FUNCTION_DECL for a function definition.
14174    DECLSPECS and DECLARATOR are the parts of the declaration;
14175    they describe the return type and the name of the function,
14176    but twisted together in a fashion that parallels the syntax of C.
14177
14178    This function creates a binding context for the function body
14179    as well as setting up the FUNCTION_DECL in current_function_decl.
14180
14181    Returns a FUNCTION_DECL on success.
14182
14183    If the DECLARATOR is not suitable for a function (it defines a datum
14184    instead), we return 0, which tells yyparse to report a parse error.
14185
14186    May return void_type_node indicating that this method is actually
14187    a friend.  See grokfield for more details.
14188
14189    Came here with a `.pushlevel' .
14190
14191    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14192    CHANGES TO CODE IN `grokfield'.  */
14193
14194 tree
14195 start_method (declspecs, declarator, attrlist)
14196      tree declarator, declspecs, attrlist;
14197 {
14198   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
14199                                 attrlist);
14200
14201   /* Something too ugly to handle.  */
14202   if (fndecl == NULL_TREE)
14203     return NULL_TREE;
14204
14205   /* Pass friends other than inline friend functions back.  */
14206   if (fndecl == void_type_node)
14207     return fndecl;
14208
14209   if (TREE_CODE (fndecl) != FUNCTION_DECL)
14210     /* Not a function, tell parser to report parse error.  */
14211     return NULL_TREE;
14212
14213   if (IS_SIGNATURE (current_class_type))
14214     IS_DEFAULT_IMPLEMENTATION (fndecl) = 1;
14215
14216   if (DECL_IN_AGGR_P (fndecl))
14217     {
14218       if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
14219         {
14220           if (DECL_CONTEXT (fndecl) 
14221               && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
14222             cp_error ("`%D' is already defined in class %s", fndecl,
14223                              TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
14224         }
14225       return void_type_node;
14226     }
14227
14228   check_template_shadow (fndecl);
14229
14230   DECL_THIS_INLINE (fndecl) = 1;
14231
14232   if (flag_default_inline)
14233     DECL_INLINE (fndecl) = 1;
14234
14235   /* We process method specializations in finish_struct_1.  */
14236   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
14237     fndecl = push_template_decl (fndecl);
14238
14239   /* We read in the parameters on the maybepermanent_obstack,
14240      but we won't be getting back to them until after we
14241      may have clobbered them.  So the call to preserve_data
14242      will keep them safe.  */
14243   preserve_data ();
14244
14245   if (! DECL_FRIEND_P (fndecl))
14246     {
14247       if (TREE_CHAIN (fndecl))
14248         {
14249           fndecl = copy_node (fndecl);
14250           TREE_CHAIN (fndecl) = NULL_TREE;
14251         }
14252
14253       if (DECL_CONSTRUCTOR_P (fndecl))
14254         {
14255           if (! grok_ctor_properties (current_class_type, fndecl))
14256             return void_type_node;
14257         }
14258       else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
14259         grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
14260     }
14261
14262   cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0, 0);
14263
14264   /* Make a place for the parms */
14265   pushlevel (0);
14266   current_binding_level->parm_flag = 1;
14267   
14268   DECL_IN_AGGR_P (fndecl) = 1;
14269   return fndecl;
14270 }
14271
14272 /* Go through the motions of finishing a function definition.
14273    We don't compile this method until after the whole class has
14274    been processed.
14275
14276    FINISH_METHOD must return something that looks as though it
14277    came from GROKFIELD (since we are defining a method, after all).
14278
14279    This is called after parsing the body of the function definition.
14280    STMTS is the chain of statements that makes up the function body.
14281
14282    DECL is the ..._DECL that `start_method' provided.  */
14283
14284 tree
14285 finish_method (decl)
14286      tree decl;
14287 {
14288   register tree fndecl = decl;
14289   tree old_initial;
14290
14291   register tree link;
14292
14293   if (decl == void_type_node)
14294     return decl;
14295
14296   old_initial = DECL_INITIAL (fndecl);
14297
14298   /* Undo the level for the parms (from start_method).
14299      This is like poplevel, but it causes nothing to be
14300      saved.  Saving information here confuses symbol-table
14301      output routines.  Besides, this information will
14302      be correctly output when this method is actually
14303      compiled.  */
14304
14305   /* Clear out the meanings of the local variables of this level;
14306      also record in each decl which block it belongs to.  */
14307
14308   for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
14309     {
14310       if (DECL_NAME (link) != NULL_TREE)
14311         pop_binding (DECL_NAME (link), link);
14312       my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
14313       DECL_CONTEXT (link) = NULL_TREE;
14314     }
14315
14316   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
14317                       (HOST_WIDE_INT) current_binding_level->level_chain,
14318                       current_binding_level->parm_flag,
14319                       current_binding_level->keep);
14320
14321   poplevel (0, 0, 0);
14322
14323   DECL_INITIAL (fndecl) = old_initial;
14324
14325   /* We used to check if the context of FNDECL was different from
14326      current_class_type as another way to get inside here.  This didn't work
14327      for String.cc in libg++.  */
14328   if (DECL_FRIEND_P (fndecl))
14329     {
14330       CLASSTYPE_INLINE_FRIENDS (current_class_type)
14331         = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
14332       decl = void_type_node;
14333     }
14334
14335   return decl;
14336 }
14337 \f
14338 /* Called when a new struct TYPE is defined.
14339    If this structure or union completes the type of any previous
14340    variable declaration, lay it out and output its rtl.  */
14341
14342 void
14343 hack_incomplete_structures (type)
14344      tree type;
14345 {
14346   tree *list;
14347
14348   if (current_binding_level->incomplete == NULL_TREE)
14349     return;
14350
14351   if (!type) /* Don't do this for class templates.  */
14352     return;
14353
14354   for (list = &current_binding_level->incomplete; *list; )
14355     {
14356       tree decl = TREE_VALUE (*list);
14357       if ((decl && TREE_TYPE (decl) == type)
14358           || (TREE_TYPE (decl)
14359               && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14360               && TREE_TYPE (TREE_TYPE (decl)) == type))
14361         {
14362           int toplevel = toplevel_bindings_p ();
14363           if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14364               && TREE_TYPE (TREE_TYPE (decl)) == type)
14365             layout_type (TREE_TYPE (decl));
14366           layout_decl (decl, 0);
14367           rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
14368           if (! toplevel)
14369             {
14370               tree cleanup;
14371               expand_decl (decl);
14372               cleanup = maybe_build_cleanup (decl);
14373               expand_decl_init (decl);
14374               if (! expand_decl_cleanup (decl, cleanup))
14375                 cp_error ("parser lost in parsing declaration of `%D'",
14376                           decl);
14377             }
14378           *list = TREE_CHAIN (*list);
14379         }
14380       else
14381         list = &TREE_CHAIN (*list);
14382     }
14383 }
14384
14385 /* If DECL is of a type which needs a cleanup, build that cleanup here.
14386    See build_delete for information about AUTO_DELETE.
14387
14388    Don't build these on the momentary obstack; they must live
14389    the life of the binding contour.  */
14390
14391 static tree
14392 maybe_build_cleanup_1 (decl, auto_delete)
14393      tree decl, auto_delete;
14394 {
14395   tree type = TREE_TYPE (decl);
14396   if (type != error_mark_node && TYPE_NEEDS_DESTRUCTOR (type))
14397     {
14398       int temp = 0, flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
14399       tree rval;
14400
14401       if (TREE_CODE (decl) != PARM_DECL)
14402         temp = suspend_momentary ();
14403
14404       if (TREE_CODE (type) == ARRAY_TYPE)
14405         rval = decl;
14406       else
14407         {
14408           mark_addressable (decl);
14409           rval = build_unary_op (ADDR_EXPR, decl, 0);
14410         }
14411
14412       /* Optimize for space over speed here.  */
14413       if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14414           || flag_expensive_optimizations)
14415         flags |= LOOKUP_NONVIRTUAL;
14416
14417       rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
14418
14419       if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14420           && ! TYPE_HAS_DESTRUCTOR (type))
14421         rval = build_compound_expr (expr_tree_cons (NULL_TREE, rval,
14422                                                build_expr_list (NULL_TREE, build_vbase_delete (type, decl))));
14423
14424       if (TREE_CODE (decl) != PARM_DECL)
14425         resume_momentary (temp);
14426
14427       return rval;
14428     }
14429   return 0;
14430 }
14431
14432 /* If DECL is of a type which needs a cleanup, build that cleanup
14433    here.  The cleanup does free the storage with a call to delete.  */
14434
14435 tree
14436 maybe_build_cleanup_and_delete (decl)
14437      tree decl;
14438 {
14439   return maybe_build_cleanup_1 (decl, integer_three_node);
14440 }
14441
14442 /* If DECL is of a type which needs a cleanup, build that cleanup
14443    here.  The cleanup does not free the storage with a call a delete.  */
14444
14445 tree
14446 maybe_build_cleanup (decl)
14447      tree decl;
14448 {
14449   return maybe_build_cleanup_1 (decl, integer_two_node);
14450 }
14451 \f
14452 /* Expand a C++ expression at the statement level.
14453    This is needed to ferret out nodes which have UNKNOWN_TYPE.
14454    The C++ type checker should get all of these out when
14455    expressions are combined with other, type-providing, expressions,
14456    leaving only orphan expressions, such as:
14457
14458    &class::bar;         / / takes its address, but does nothing with it.  */
14459
14460 void
14461 cplus_expand_expr_stmt (exp)
14462      tree exp;
14463 {
14464   if (processing_template_decl)
14465     {
14466       add_tree (build_min_nt (EXPR_STMT, exp));
14467       return;
14468     }
14469
14470   /* Arrange for all temps to disappear.  */
14471   expand_start_target_temps ();
14472
14473   exp = require_complete_type_in_void (exp);
14474   
14475   if (TREE_CODE (exp) == FUNCTION_DECL)
14476     {
14477       cp_warning ("reference, not call, to function `%D'", exp);
14478       warning ("at this point in file");
14479     }
14480
14481 #if 0
14482   /* We should do this eventually, but right now this causes regex.o from
14483      libg++ to miscompile, and tString to core dump.  */
14484   exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
14485 #endif
14486
14487   /* Strip unused implicit INDIRECT_REFs of references.  */
14488   if (TREE_CODE (exp) == INDIRECT_REF
14489       && TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 0))) == REFERENCE_TYPE)
14490     exp = TREE_OPERAND (exp, 0);
14491
14492   /* If we don't do this, we end up down inside expand_expr
14493      trying to do TYPE_MODE on the ERROR_MARK, and really
14494      go outside the bounds of the type.  */
14495   if (exp != error_mark_node)
14496     expand_expr_stmt (break_out_cleanups (exp));
14497
14498   /* Clean up any pending cleanups.  This happens when a function call
14499      returns a cleanup-needing value that nobody uses.  */
14500   expand_end_target_temps ();
14501 }
14502
14503 /* When a stmt has been parsed, this function is called.
14504
14505    Currently, this function only does something within a
14506    constructor's scope: if a stmt has just assigned to this,
14507    and we are in a derived class, we call `emit_base_init'.  */
14508
14509 void
14510 finish_stmt ()
14511 {
14512   if (current_function_assigns_this
14513       || ! current_function_just_assigned_this)
14514     return;
14515   if (DECL_CONSTRUCTOR_P (current_function_decl))
14516     {
14517       /* Constructors must wait until we are out of control
14518          zones before calling base constructors.  */
14519       if (in_control_zone_p ())
14520         return;
14521       expand_expr_stmt (base_init_expr);
14522       check_base_init (current_class_type);
14523     }
14524   current_function_assigns_this = 1;
14525 }
14526
14527 /* Change a static member function definition into a FUNCTION_TYPE, instead
14528    of the METHOD_TYPE that we create when it's originally parsed.
14529
14530    WARNING: DO NOT pass &TREE_TYPE (decl) to FN or &TYPE_ARG_TYPES
14531    (TREE_TYPE (decl)) to ARGTYPES, as doing so will corrupt the types of
14532    other decls.  Either pass the addresses of local variables or NULL.  */
14533
14534 void
14535 revert_static_member_fn (decl, fn, argtypes)
14536      tree *decl, *fn, *argtypes;
14537 {
14538   tree tmp;
14539   tree function = fn ? *fn : TREE_TYPE (*decl);
14540   tree args = argtypes ? *argtypes : TYPE_ARG_TYPES (function);
14541
14542   if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args))) 
14543       != TYPE_UNQUALIFIED)
14544     cp_error ("static member function `%#D' declared with type qualifiers", 
14545               *decl);
14546
14547   args = TREE_CHAIN (args);
14548   tmp = build_function_type (TREE_TYPE (function), args);
14549   tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
14550   tmp = build_exception_variant (tmp,
14551                                  TYPE_RAISES_EXCEPTIONS (function));
14552   TREE_TYPE (*decl) = tmp;
14553   if (DECL_ARGUMENTS (*decl))
14554     DECL_ARGUMENTS (*decl) = TREE_CHAIN (DECL_ARGUMENTS (*decl));
14555   DECL_STATIC_FUNCTION_P (*decl) = 1;
14556   if (fn)
14557     *fn = tmp;
14558   if (argtypes)
14559     *argtypes = args;
14560 }
14561
14562 struct cp_function
14563 {
14564   int returns_value;
14565   int returns_null;
14566   int assigns_this;
14567   int just_assigned_this;
14568   int parms_stored;
14569   int temp_name_counter;
14570   tree named_labels;
14571   struct named_label_list *named_label_uses;
14572   tree shadowed_labels;
14573   tree ctor_label;
14574   tree dtor_label;
14575   rtx last_dtor_insn;
14576   rtx last_parm_cleanup_insn;
14577   tree base_init_list;
14578   tree member_init_list;
14579   tree base_init_expr;
14580   tree current_class_ptr;
14581   tree current_class_ref;
14582   rtx result_rtx;
14583   struct cp_function *next;
14584   struct binding_level *binding_level;
14585   int static_labelno;
14586 };
14587
14588 static struct cp_function *cp_function_chain;
14589
14590 extern int temp_name_counter;
14591
14592 /* Save and reinitialize the variables
14593    used during compilation of a C++ function.  */
14594
14595 void
14596 push_cp_function_context (context)
14597      tree context;
14598 {
14599   struct cp_function *p
14600     = (struct cp_function *) xmalloc (sizeof (struct cp_function));
14601
14602   push_function_context_to (context);
14603
14604   p->next = cp_function_chain;
14605   cp_function_chain = p;
14606
14607   p->named_labels = named_labels;
14608   p->named_label_uses = named_label_uses;
14609   p->shadowed_labels = shadowed_labels;
14610   p->returns_value = current_function_returns_value;
14611   p->returns_null = current_function_returns_null;
14612   p->binding_level = current_binding_level;
14613   p->ctor_label = ctor_label;
14614   p->dtor_label = dtor_label;
14615   p->last_dtor_insn = last_dtor_insn;
14616   p->last_parm_cleanup_insn = last_parm_cleanup_insn;
14617   p->assigns_this = current_function_assigns_this;
14618   p->just_assigned_this = current_function_just_assigned_this;
14619   p->parms_stored = current_function_parms_stored;
14620   p->result_rtx = original_result_rtx;
14621   p->base_init_expr = base_init_expr;
14622   p->temp_name_counter = temp_name_counter;
14623   p->base_init_list = current_base_init_list;
14624   p->member_init_list = current_member_init_list;
14625   p->current_class_ptr = current_class_ptr;
14626   p->current_class_ref = current_class_ref;
14627   p->static_labelno = static_labelno;
14628 }
14629
14630 /* Restore the variables used during compilation of a C++ function.  */
14631
14632 void
14633 pop_cp_function_context (context)
14634      tree context;
14635 {
14636   struct cp_function *p = cp_function_chain;
14637   tree link;
14638
14639   /* Bring back all the labels that were shadowed.  */
14640   for (link = shadowed_labels; link; link = TREE_CHAIN (link))
14641     if (DECL_NAME (TREE_VALUE (link)) != 0)
14642       SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link)),
14643                                   TREE_VALUE (link));
14644
14645   pop_function_context_from (context);
14646
14647   cp_function_chain = p->next;
14648
14649   named_labels = p->named_labels;
14650   named_label_uses = p->named_label_uses;
14651   shadowed_labels = p->shadowed_labels;
14652   current_function_returns_value = p->returns_value;
14653   current_function_returns_null = p->returns_null;
14654   current_binding_level = p->binding_level;
14655   ctor_label = p->ctor_label;
14656   dtor_label = p->dtor_label;
14657   last_dtor_insn = p->last_dtor_insn;
14658   last_parm_cleanup_insn = p->last_parm_cleanup_insn;
14659   current_function_assigns_this = p->assigns_this;
14660   current_function_just_assigned_this = p->just_assigned_this;
14661   current_function_parms_stored = p->parms_stored;
14662   original_result_rtx = p->result_rtx;
14663   base_init_expr = p->base_init_expr;
14664   temp_name_counter = p->temp_name_counter;
14665   current_base_init_list = p->base_init_list;
14666   current_member_init_list = p->member_init_list;
14667   current_class_ptr = p->current_class_ptr;
14668   current_class_ref = p->current_class_ref;
14669   static_labelno = p->static_labelno;
14670
14671   free (p);
14672 }
14673
14674 int
14675 in_function_p ()
14676 {
14677   return function_depth != 0;
14678 }