OSDN Git Service

374717cc1a6d5beaa13b2979e823350b46c82c50
[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 "function.h"
35 #include "flags.h"
36 #include "cp-tree.h"
37 #include "decl.h"
38 #include "lex.h"
39 #include <signal.h>
40 #include "obstack.h"
41 #include "defaults.h"
42 #include "output.h"
43 #include "except.h"
44 #include "toplev.h"
45 #include "../hash.h"
46 #include "defaults.h"
47
48 #define obstack_chunk_alloc xmalloc
49 #define obstack_chunk_free free
50
51 extern struct obstack permanent_obstack;
52 extern struct obstack* saveable_obstack;
53
54 extern int current_class_depth;
55
56 extern tree static_ctors, static_dtors;
57
58 extern int static_labelno;
59
60 extern tree current_namespace;
61 extern tree global_namespace;
62
63 extern 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((const 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 int lookup_flags PROTO((int, int));
183 static tree qualify_lookup PROTO((tree, int));
184 static tree record_builtin_java_type PROTO((const char *, int));
185 static const char *tag_name PROTO((enum tag_types code));
186 static void find_class_binding_level PROTO((void));
187 static struct binding_level *innermost_nonclass_level PROTO((void));
188 static tree poplevel_class PROTO((void));
189 static void warn_about_implicit_typename_lookup PROTO((tree, tree));
190 static int walk_namespaces_r PROTO((tree, walk_namespaces_fn, void *));
191 static int walk_globals_r PROTO((tree, void *));
192
193 #if defined (DEBUG_CP_BINDING_LEVELS)
194 static void indent PROTO((void));
195 #endif
196
197 /* A node which has tree code ERROR_MARK, and whose type is itself.
198    All erroneous expressions are replaced with this node.  All functions
199    that accept nodes as arguments should avoid generating error messages
200    if this node is one of the arguments, since it is undesirable to get
201    multiple error messages from one error in the input.  */
202
203 tree error_mark_node;
204
205 /* Erroneous argument lists can use this *IFF* they do not modify it.  */
206 tree error_mark_list;
207
208 /* The following symbols are subsumed in the cp_global_trees array, and
209    listed here individually for documentation purposes. 
210
211    C++ extensions
212         tree wchar_decl_node;
213         tree void_zero_node;
214
215         tree vtable_entry_type;
216         tree delta_type_node;
217 #if 0
218    Old rtti stuff.
219         tree __baselist_desc_type_node;
220         tree __i_desc_type_node, __m_desc_type_node;
221         tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
222 #endif
223         tree __t_desc_type_node;
224 #if 0
225         tree __tp_desc_type_node;
226 #endif
227         tree __access_mode_type_node;
228         tree __bltn_desc_type_node, __user_desc_type_node, __class_desc_type_node;
229         tree __ptr_desc_type_node, __attr_desc_type_node, __func_desc_type_node;
230         tree __ptmf_desc_type_node, __ptmd_desc_type_node;
231 #if 0
232    Not needed yet?  May be needed one day?
233         tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
234         tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
235         tree __ptmf_desc_array_type, __ptmd_desc_array_type;
236 #endif
237
238         tree class_star_type_node;
239         tree class_type_node, record_type_node, union_type_node, enum_type_node;
240         tree unknown_type_node;
241
242    Array type `vtable_entry_type[]'
243
244         tree vtbl_type_node;
245         tree vtbl_ptr_type_node;
246
247    Nnamespace std
248
249         tree std_node;
250
251    A FUNCTION_DECL which can call `abort'.  Not necessarily the
252    one that the user will declare, but sufficient to be called
253    by routines that want to abort the program.
254
255         tree abort_fndecl;
256
257    The FUNCTION_DECL for the default `::operator delete'.
258
259         tree global_delete_fndecl;
260
261    Used by RTTI
262         tree type_info_type_node, tinfo_fn_id, tinfo_fn_type;
263
264 */
265
266 tree cp_global_trees[CPTI_MAX];
267
268 /* These can't be part of the above array, since they are declared
269    individually in tree.h, and used by the debug output routines.  */
270
271 tree void_type_node;
272 tree char_type_node;
273 tree integer_type_node;
274 tree unsigned_type_node;
275
276 /* These can't be part of the above array, since they are declared
277    individially in tree.h and used by the target routines.  */
278
279 tree ptr_type_node;
280 tree va_list_type_node;
281
282 /* Indicates that there is a type value in some namespace, although
283    that is not necessarily in scope at the moment.  */
284
285 static tree global_type_node;
286
287 /* Namespace std.  */
288 int in_std;
289
290 /* Expect only namespace names now. */
291 static int only_namespace_names;
292
293 /* In a destructor, the point at which all derived class destroying
294    has been done, just before any base class destroying will be done.  */
295
296 tree dtor_label;
297
298 /* In a destructor, the last insn emitted after the start of the
299    function and the parms.  */
300
301 static rtx last_dtor_insn;
302
303 /* In a constructor, the last insn emitted after the start of the
304    function and the parms, the exception specification and any
305    function-try-block.  The constructor initializers are emitted after
306    this insn.  */
307
308 static rtx last_parm_cleanup_insn;
309
310 /* In a constructor, the point at which we are ready to return
311    the pointer to the initialized object.  */
312
313 tree ctor_label;
314
315 /* If original DECL_RESULT of current function was a register,
316    but due to being an addressable named return value, would up
317    on the stack, this variable holds the named return value's
318    original location.  */
319 static rtx original_result_rtx;
320
321 /* Sequence of insns which represents base initialization.  */
322 tree base_init_expr;
323
324 /* C++: Keep these around to reduce calls to `get_identifier'.
325    Identifiers for `this' in member functions and the auto-delete
326    parameter for destructors.  */
327 tree this_identifier, in_charge_identifier;
328 tree ctor_identifier, dtor_identifier;
329 /* Used in pointer to member functions, in vtables, and in sigtables.  */
330 tree pfn_identifier, index_identifier, delta_identifier, delta2_identifier;
331 tree pfn_or_delta2_identifier, tag_identifier;
332 tree vt_off_identifier;
333
334 /* Exception specifier used for throw().  */
335 tree empty_except_spec;
336
337 /* Nonzero if we're in a handler for a function-try-block.  */
338 int in_function_try_handler;
339
340 struct named_label_list
341 {
342   struct binding_level *binding_level;
343   tree names_in_scope;
344   tree label_decl;
345   const char *filename_o_goto;
346   int lineno_o_goto;
347   struct named_label_list *next;
348 };
349
350 /* A list (chain of TREE_LIST nodes) of named label uses.
351    The TREE_PURPOSE field is the list of variables defined
352    in the label's scope defined at the point of use.
353    The TREE_VALUE field is the LABEL_DECL used.
354    The TREE_TYPE field holds `current_binding_level' at the
355    point of the label's use.
356
357    BWAHAHAAHAHahhahahahaah.  No, no, no, said the little chicken.
358
359    Look at the pretty struct named_label_list. See the pretty struct
360    with the pretty named fields that describe what they do. See the
361    pretty lack of gratuitous casts. Notice the code got a lot cleaner.
362
363    Used only for jumps to as-yet undefined labels, since
364    jumps to defined labels can have their validity checked
365    by stmt.c.  */
366
367 static struct named_label_list *named_label_uses = NULL;
368
369 /* A list of objects which have constructors or destructors
370    which reside in the global scope.  The decl is stored in
371    the TREE_VALUE slot and the initializer is stored
372    in the TREE_PURPOSE slot.  */
373 tree static_aggregates;
374
375 /* -- end of C++ */
376
377 /* Two expressions that are constants with value zero.
378    The first is of type `int', the second of type `void *'.  */
379
380 tree integer_zero_node;
381 tree null_pointer_node;
382
383 /* The value for __null (NULL), namely, a zero of an integer type with
384    the same number of bits as a pointer.  */
385 tree null_node;
386
387 /* A node for the integer constants 1, 2, and 3.  */
388
389 tree integer_one_node, integer_two_node, integer_three_node;
390
391 /* While defining an enum type, this is 1 plus the last enumerator
392    constant value.  */
393
394 static tree enum_next_value;
395
396 /* Nonzero means that there was overflow computing enum_next_value.  */
397
398 static int enum_overflow;
399
400 /* Parsing a function declarator leaves a list of parameter names
401    or a chain or parameter decls here.  */
402
403 tree last_function_parms;
404
405 /* Parsing a function declarator leaves here a chain of structure
406    and enum types declared in the parmlist.  */
407
408 static tree last_function_parm_tags;
409
410 /* After parsing the declarator that starts a function definition,
411    `start_function' puts here the list of parameter names or chain of decls.
412    `store_parm_decls' finds it here.  */
413
414 static tree current_function_parms;
415
416 /* Similar, for last_function_parm_tags.  */
417 static tree current_function_parm_tags;
418
419 /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
420    that have names.  Here so we can clear out their names' definitions
421    at the end of the function.  */
422
423 static tree named_labels;
424
425 /* A list of LABEL_DECLs from outer contexts that are currently shadowed.  */
426
427 static tree shadowed_labels;
428
429 /* The FUNCTION_DECL for the function currently being compiled,
430    or 0 if between functions.  */
431 tree current_function_decl;
432
433 /* Set to 0 at beginning of a function definition, set to 1 if
434    a return statement that specifies a return value is seen.  */
435
436 int current_function_returns_value;
437
438 /* Set to 0 at beginning of a function definition, set to 1 if
439    a return statement with no argument is seen.  */
440
441 int current_function_returns_null;
442
443 /* Set to 0 at beginning of a function definition, and whenever
444    a label (case or named) is defined.  Set to value of expression
445    returned from function when that value can be transformed into
446    a named return value.  */
447
448 tree current_function_return_value;
449
450 /* Nonzero means give `double' the same size as `float'.  */
451
452 extern int flag_short_double;
453
454 /* Nonzero means don't recognize any builtin functions.  */
455
456 extern int flag_no_builtin;
457
458 /* Nonzero means don't recognize the non-ANSI builtin functions.
459    -ansi sets this.  */
460
461 extern int flag_no_nonansi_builtin;
462
463 /* Nonzero means enable obscure ANSI features and disable GNU extensions
464    that might cause ANSI-compliant code to be miscompiled.  */
465
466 extern int flag_ansi;
467
468 /* Nonzero if we want to support huge (> 2^(sizeof(short)*8-1) bytes)
469    objects.  */
470 extern int flag_huge_objects;
471
472 /* Nonzero if we want to conserve space in the .o files.  We do this
473    by putting uninitialized data and runtime initialized data into
474    .common instead of .data at the expense of not flagging multiple
475    definitions.  */
476 extern int flag_conserve_space;
477
478 /* Pointers to the base and current top of the language name stack.  */
479
480 extern tree *current_lang_base, *current_lang_stack;
481 \f
482 /* C and C++ flags are in decl2.c.  */
483
484 /* Set to 0 at beginning of a constructor, set to 1
485    if that function does an allocation before referencing its
486    instance variable.  */
487 static int current_function_assigns_this;
488 int current_function_just_assigned_this;
489
490 /* Set to 0 at beginning of a function.  Set non-zero when
491    store_parm_decls is called.  Don't call store_parm_decls
492    if this flag is non-zero!  */
493 int current_function_parms_stored;
494
495 /* Flag used when debugging spew.c */
496
497 extern int spew_debug;
498
499 /* This is a copy of the class_shadowed list of the previous class binding
500    contour when at global scope.  It's used to reset IDENTIFIER_CLASS_VALUEs
501    when entering another class scope (i.e. a cache miss).  */
502 extern tree previous_class_values;
503
504 /* A expression of value 0 with the same precision as a sizetype
505    node, but signed.  */
506 tree signed_size_zero_node;
507
508 /* The name of the anonymous namespace, throughout this translation
509    unit.  */
510 tree anonymous_namespace_name;
511
512 \f
513 /* Allocate a level of searching.  */
514
515 static
516 struct stack_level *
517 push_decl_level (stack, obstack)
518      struct stack_level *stack;
519      struct obstack *obstack;
520 {
521   struct stack_level tem;
522   tem.prev = stack;
523
524   return push_stack_level (obstack, (char *)&tem, sizeof (tem));
525 }
526 \f
527 /* For each binding contour we allocate a binding_level structure
528    which records the names defined in that contour.
529    Contours include:
530     0) the global one
531     1) one for each function definition,
532        where internal declarations of the parameters appear.
533     2) one for each compound statement,
534        to record its declarations.
535
536    The current meaning of a name can be found by searching the levels
537    from the current one out to the global one.
538
539    Off to the side, may be the class_binding_level.  This exists only
540    to catch class-local declarations.  It is otherwise nonexistent.
541
542    Also there may be binding levels that catch cleanups that must be
543    run when exceptions occur.  Thus, to see whether a name is bound in
544    the current scope, it is not enough to look in the
545    CURRENT_BINDING_LEVEL.  You should use lookup_name_current_level
546    instead.  */
547
548 /* Note that the information in the `names' component of the global contour
549    is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers.  */
550
551 struct binding_level
552   {
553     /* A chain of _DECL nodes for all variables, constants, functions,
554        and typedef types.  These are in the reverse of the order
555        supplied.  There may be OVERLOADs on this list, too, but they
556        are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD.  */
557     tree names;
558
559     /* A list of structure, union and enum definitions, for looking up
560        tag names.
561        It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
562        or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
563        or ENUMERAL_TYPE node.
564
565        C++: the TREE_VALUE nodes can be simple types for
566        component_bindings.  */
567     tree tags;
568
569     /* A list of USING_DECL nodes. */
570     tree usings;
571
572     /* A list of used namespaces. PURPOSE is the namespace,
573        VALUE the common ancestor with this binding_level's namespace. */
574     tree using_directives;
575
576     /* If this binding level is the binding level for a class, then
577        class_shadowed is a TREE_LIST.  The TREE_PURPOSE of each node
578        is the name of an entity bound in the class; the TREE_VALUE is
579        the IDENTIFIER_CLASS_VALUE before we entered the class.  Thus,
580        when leaving class scope, we can restore the
581        IDENTIFIER_CLASS_VALUE by walking this list.  The TREE_TYPE is
582        the DECL bound by this name in the class.  */
583     tree class_shadowed;
584
585     /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
586        is used for all binding levels.  */
587     tree type_shadowed;
588
589     /* For each level (except not the global one),
590        a chain of BLOCK nodes for all the levels
591        that were entered and exited one level down.  */
592     tree blocks;
593
594     /* The BLOCK node for this level, if one has been preallocated.
595        If 0, the BLOCK is allocated (if needed) when the level is popped.  */
596     tree this_block;
597
598     /* The binding level which this one is contained in (inherits from).  */
599     struct binding_level *level_chain;
600
601     /* List of decls in `names' that have incomplete
602        structure or union types.  */
603     tree incomplete;
604
605     /* List of VAR_DECLS saved from a previous for statement.
606        These would be dead in ANSI-conforming code, but might
607        be referenced in ARM-era code.  These are stored in a
608        TREE_LIST; the TREE_VALUE is the actual declaration.  */
609     tree dead_vars_from_for;
610
611     /* 1 for the level that holds the parameters of a function.
612        2 for the level that holds a class declaration.
613        3 for levels that hold parameter declarations.  */
614     unsigned parm_flag : 4;
615
616     /* 1 means make a BLOCK for this level regardless of all else.
617        2 for temporary binding contours created by the compiler.  */
618     unsigned keep : 3;
619
620     /* Nonzero if this level "doesn't exist" for tags.  */
621     unsigned tag_transparent : 1;
622
623     /* Nonzero if this level can safely have additional
624        cleanup-needing variables added to it.  */
625     unsigned more_cleanups_ok : 1;
626     unsigned have_cleanups : 1;
627
628     /* Nonzero if this level is for storing the decls for template
629        parameters and generic decls; these decls will be discarded and
630        replaced with a TEMPLATE_DECL.  */
631     unsigned pseudo_global : 1;
632
633     /* This is set for a namespace binding level.  */
634     unsigned namespace_p : 1;
635
636     /* True if this level is that of a for-statement where we need to
637        worry about ambiguous (ARM or ANSI) scope rules.  */
638     unsigned is_for_scope : 1;
639
640     /* True if this level corresponds to an EH region, as for a try block.  */
641     unsigned eh_region : 1;
642
643     /* One bit left for this word.  */
644
645 #if defined(DEBUG_CP_BINDING_LEVELS)
646     /* Binding depth at which this level began.  */
647     unsigned binding_depth;
648 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
649   };
650
651 #define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
652   
653 /* The binding level currently in effect.  */
654
655 static struct binding_level *current_binding_level;
656
657 /* The binding level of the current class, if any.  */
658
659 static struct binding_level *class_binding_level;
660
661 /* A chain of binding_level structures awaiting reuse.  */
662
663 static struct binding_level *free_binding_level;
664
665 /* The outermost binding level, for names of file scope.
666    This is created when the compiler is started and exists
667    through the entire run.  */
668
669 static struct binding_level *global_binding_level;
670
671 /* Binding level structures are initialized by copying this one.  */
672
673 static struct binding_level clear_binding_level;
674
675 /* Nonzero means unconditionally make a BLOCK for the next level pushed.  */
676
677 static int keep_next_level_flag;
678
679 #if defined(DEBUG_CP_BINDING_LEVELS)
680 static int binding_depth = 0;
681 static int is_class_level = 0;
682
683 static void
684 indent ()
685 {
686   register unsigned i;
687
688   for (i = 0; i < binding_depth*2; i++)
689     putc (' ', stderr);
690 }
691 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
692
693 static tree pushdecl_with_scope PROTO((tree, struct binding_level *));
694
695 static void
696 push_binding_level (newlevel, tag_transparent, keep)
697      struct binding_level *newlevel;
698      int tag_transparent, keep;
699 {
700   /* Add this level to the front of the chain (stack) of levels that
701      are active.  */
702   *newlevel = clear_binding_level;
703   newlevel->level_chain = current_binding_level;
704   current_binding_level = newlevel;
705   newlevel->tag_transparent = tag_transparent;
706   newlevel->more_cleanups_ok = 1;
707
708   /* We are called before expand_start_bindings, but after
709      expand_eh_region_start for a try block; so we check this now,
710      before the EH block is covered up.  */
711   newlevel->eh_region = is_eh_region ();
712
713   newlevel->keep = keep;
714 #if defined(DEBUG_CP_BINDING_LEVELS)
715   newlevel->binding_depth = binding_depth;
716   indent ();
717   fprintf (stderr, "push %s level 0x%08x line %d\n",
718            (is_class_level) ? "class" : "block", newlevel, lineno);
719   is_class_level = 0;
720   binding_depth++;
721 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
722 }
723
724 /* Find the innermost enclosing class scope, and reset
725    CLASS_BINDING_LEVEL appropriately.  */
726
727 static void
728 find_class_binding_level ()
729 {
730   struct binding_level *level = current_binding_level;
731
732   while (level && level->parm_flag != 2)
733     level = level->level_chain;
734   if (level && level->parm_flag == 2)
735     class_binding_level = level;
736   else
737     class_binding_level = 0;
738 }
739
740 static void
741 pop_binding_level ()
742 {
743   if (global_binding_level)
744     {
745       /* Cannot pop a level, if there are none left to pop.  */
746       if (current_binding_level == global_binding_level)
747         my_friendly_abort (123);
748     }
749   /* Pop the current level, and free the structure for reuse.  */
750 #if defined(DEBUG_CP_BINDING_LEVELS)
751   binding_depth--;
752   indent ();
753   fprintf (stderr, "pop  %s level 0x%08x line %d\n",
754           (is_class_level) ? "class" : "block",
755           current_binding_level, lineno);
756   if (is_class_level != (current_binding_level == class_binding_level))
757     {
758       indent ();
759       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
760     }
761   is_class_level = 0;
762 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
763   {
764     register struct binding_level *level = current_binding_level;
765     current_binding_level = current_binding_level->level_chain;
766     level->level_chain = free_binding_level;
767 #if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
768     if (level->binding_depth != binding_depth)
769       abort ();
770 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
771     free_binding_level = level;
772     find_class_binding_level ();
773   }
774 }
775
776 static void
777 suspend_binding_level ()
778 {
779   if (class_binding_level)
780     current_binding_level = class_binding_level;
781
782   if (global_binding_level)
783     {
784       /* Cannot suspend a level, if there are none left to suspend.  */
785       if (current_binding_level == global_binding_level)
786         my_friendly_abort (123);
787     }
788   /* Suspend the current level.  */
789 #if defined(DEBUG_CP_BINDING_LEVELS)
790   binding_depth--;
791   indent ();
792   fprintf (stderr, "suspend  %s level 0x%08x line %d\n",
793           (is_class_level) ? "class" : "block",
794           current_binding_level, lineno);
795   if (is_class_level != (current_binding_level == class_binding_level))
796     {
797       indent ();
798       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
799     }
800   is_class_level = 0;
801 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
802   current_binding_level = current_binding_level->level_chain;
803   find_class_binding_level ();
804 }
805
806 static void
807 resume_binding_level (b)
808      struct binding_level *b;
809 {
810   /* Resuming binding levels is meant only for namespaces,
811      and those cannot nest into classes. */
812   my_friendly_assert(!class_binding_level, 386);
813   /* Also, resuming a non-directly nested namespace is a no-no.  */
814   my_friendly_assert(b->level_chain == current_binding_level, 386);
815   current_binding_level = b;
816 #if defined(DEBUG_CP_BINDING_LEVELS)
817   b->binding_depth = binding_depth;
818   indent ();
819   fprintf (stderr, "resume %s level 0x%08x line %d\n",
820            (is_class_level) ? "class" : "block", b, lineno);
821   is_class_level = 0;
822   binding_depth++;
823 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
824 }
825 \f
826 /* Create a new `struct binding_level'.  */
827
828 static
829 struct binding_level *
830 make_binding_level ()
831 {
832   /* NOSTRICT */
833   return (struct binding_level *) xmalloc (sizeof (struct binding_level));
834 }
835
836 /* Nonzero if we are currently in the global binding level.  */
837
838 int
839 global_bindings_p ()
840 {
841   return current_binding_level == global_binding_level;
842 }
843
844 /* Return the innermost binding level that is not for a class scope.  */
845
846 static struct binding_level *
847 innermost_nonclass_level ()
848 {
849   struct binding_level *b;
850
851   b = current_binding_level;
852   while (b->parm_flag == 2)
853     b = b->level_chain;
854
855   return b;
856 }
857
858 /* Nonzero if we are currently in a toplevel binding level.  This
859    means either the global binding level or a namespace in a toplevel
860    binding level.  Since there are no non-toplevel namespace levels,
861    this really means any namespace or pseudo-global level.  We also
862    include a class whose context is toplevel.  */
863
864 int
865 toplevel_bindings_p ()
866 {
867   struct binding_level *b = innermost_nonclass_level ();
868
869   return b->namespace_p || b->pseudo_global;
870 }
871
872 /* Nonzero if this is a namespace scope, or if we are defining a class
873    which is itself at namespace scope, or whose enclosing class is
874    such a class, etc.  */
875
876 int
877 namespace_bindings_p ()
878 {
879   struct binding_level *b = innermost_nonclass_level ();
880
881   return b->namespace_p;
882 }
883
884 void
885 keep_next_level ()
886 {
887   keep_next_level_flag = 1;
888 }
889
890 /* Nonzero if the current level needs to have a BLOCK made.  */
891
892 int
893 kept_level_p ()
894 {
895   return (current_binding_level->blocks != NULL_TREE
896           || current_binding_level->keep
897           || current_binding_level->names != NULL_TREE
898           || (current_binding_level->tags != NULL_TREE
899               && !current_binding_level->tag_transparent));
900 }
901
902 /* Identify this binding level as a level of parameters.  */
903
904 void
905 declare_parm_level ()
906 {
907   current_binding_level->parm_flag = 1;
908 }
909
910 void
911 declare_pseudo_global_level ()
912 {
913   current_binding_level->pseudo_global = 1;
914 }
915
916 static void
917 declare_namespace_level ()
918 {
919   current_binding_level->namespace_p = 1;
920 }
921
922 int
923 pseudo_global_level_p ()
924 {
925   return current_binding_level->pseudo_global;
926 }
927
928 void
929 set_class_shadows (shadows)
930      tree shadows;
931 {
932   class_binding_level->class_shadowed = shadows;
933 }
934
935 /* Enter a new binding level.
936    If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
937    not for that of tags.  */
938
939 void
940 pushlevel (tag_transparent)
941      int tag_transparent;
942 {
943   register struct binding_level *newlevel = NULL_BINDING_LEVEL;
944
945   /* If this is the top level of a function,
946      just make sure that NAMED_LABELS is 0.
947      They should have been set to 0 at the end of the previous function.  */
948
949   if (current_binding_level == global_binding_level)
950     my_friendly_assert (named_labels == NULL_TREE, 134);
951
952   /* Reuse or create a struct for this binding level.  */
953
954 #if defined(DEBUG_CP_BINDING_LEVELS)
955   if (0)
956 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
957   if (free_binding_level)
958 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
959     {
960       newlevel = free_binding_level;
961       free_binding_level = free_binding_level->level_chain;
962     }
963   else
964     {
965       newlevel = make_binding_level ();
966     }
967
968   push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
969   GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
970   keep_next_level_flag = 0;
971 }
972
973 void
974 note_level_for_for ()
975 {
976   current_binding_level->is_for_scope = 1;
977 }
978
979 void
980 pushlevel_temporary (tag_transparent)
981      int tag_transparent;
982 {
983   pushlevel (tag_transparent);
984   current_binding_level->keep = 2;
985   clear_last_expr ();
986
987   /* Note we don't call push_momentary() here.  Otherwise, it would cause
988      cleanups to be allocated on the momentary obstack, and they will be
989      overwritten by the next statement.  */
990
991   expand_start_bindings (0);
992 }
993
994 /* For a binding between a name and an entity at a block scope,
995    this is the `struct binding_level' for the block.  */
996 #define BINDING_LEVEL(NODE) \
997    (((struct tree_binding*)NODE)->scope.level)
998
999 /* These are currently unused, but permanent, CPLUS_BINDING nodes.
1000    They are kept here because they are allocated from the permanent
1001    obstack and cannot be easily freed.  */
1002 static tree free_binding_nodes;
1003
1004 /* Make DECL the innermost binding for ID.  The LEVEL is the binding
1005    level at which this declaration is being bound.  */
1006
1007 static void
1008 push_binding (id, decl, level)
1009      tree id;
1010      tree decl;
1011      struct binding_level* level;
1012 {
1013   tree binding;
1014
1015   if (!free_binding_nodes)
1016     {
1017       /* There are no free nodes, so we must build one here.  */
1018       push_permanent_obstack ();
1019       binding = make_node (CPLUS_BINDING);
1020       pop_obstacks ();
1021     }
1022   else
1023     {
1024       /* There are nodes on the free list.  Grab the first one.  */
1025       binding = free_binding_nodes;
1026       
1027       /* And update the free list.  */
1028       free_binding_nodes = TREE_CHAIN (free_binding_nodes);
1029     }
1030
1031   /* Now, fill in the binding information.  */
1032   BINDING_VALUE (binding) = decl;
1033   BINDING_TYPE (binding) = NULL_TREE;
1034   BINDING_LEVEL (binding) = level;
1035   INHERITED_VALUE_BINDING_P (binding) = 0;
1036   LOCAL_BINDING_P (binding) = (level != class_binding_level);
1037
1038   /* And put it on the front of the list of bindings for ID.  */
1039   TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
1040   IDENTIFIER_BINDING (id) = binding;
1041 }
1042
1043 /* ID is already bound in the current scope.  But, DECL is an
1044    additional binding for ID in the same scope.  This is the `struct
1045    stat' hack whereby a non-typedef class-name or enum-name can be
1046    bound at the same level as some other kind of entity.  It's the
1047    responsibility of the caller to check that inserting this name is
1048    legal here.  Returns nonzero if the new binding was successful.  */
1049 static int
1050 add_binding (id, decl)
1051      tree id;
1052      tree decl;
1053 {
1054   tree binding = IDENTIFIER_BINDING (id);
1055   int ok = 1;
1056
1057   if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
1058     /* The new name is the type name.  */
1059     BINDING_TYPE (binding) = decl;
1060   else if (!BINDING_VALUE (binding))
1061     /* This situation arises when push_class_level_binding moves an
1062        inherited type-binding out of the way to make room for a new
1063        value binding.  */
1064     BINDING_VALUE (binding) = decl;
1065   else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
1066            && DECL_ARTIFICIAL (BINDING_VALUE (binding)))
1067     {
1068       /* The old binding was a type name.  It was placed in
1069          BINDING_VALUE because it was thought, at the point it was
1070          declared, to be the only entity with such a name.  Move the
1071          type name into the type slot; it is now hidden by the new
1072          binding.  */
1073       BINDING_TYPE (binding) = BINDING_VALUE (binding);
1074       BINDING_VALUE (binding) = decl;
1075       INHERITED_VALUE_BINDING_P (binding) = 0;
1076     }
1077   else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
1078            && TREE_CODE (decl) == TYPE_DECL
1079            && DECL_NAME (decl) == DECL_NAME (BINDING_VALUE (binding))
1080            && same_type_p (TREE_TYPE (decl),
1081                            TREE_TYPE (BINDING_VALUE (binding))))
1082     /* We have two typedef-names, both naming the same type to have
1083        the same name.  This is OK because of:
1084
1085          [dcl.typedef]
1086
1087          In a given scope, a typedef specifier can be used to redefine
1088          the name of any type declared in that scope to refer to the
1089          type to which it already refers.  */
1090     ok = 0;
1091   else
1092     {
1093       cp_error ("declaration of `%#D'", decl);
1094       cp_error_at ("conflicts with previous declaration `%#D'",
1095                    BINDING_VALUE (binding));
1096       ok = 0;
1097     }
1098
1099   return ok;
1100 }
1101
1102 /* Bind DECL to ID in the current_binding_level.
1103    If PUSH_USING is set in FLAGS, we know that DECL doesn't really belong
1104    to this binding level, that it got here through a using-declaration.  */
1105
1106 void
1107 push_local_binding (id, decl, flags)
1108      tree id;
1109      tree decl;
1110      int flags;
1111 {
1112   struct binding_level *b;
1113
1114   /* Skip over any local classes.  This makes sense if we call
1115      push_local_binding with a friend decl of a local class.  */
1116   b = current_binding_level;
1117   while (b->parm_flag == 2)
1118     b = b->level_chain;
1119
1120   if (lookup_name_current_level (id))
1121     {
1122       /* Supplement the existing binding.  */
1123       if (!add_binding (id, decl))
1124         /* It didn't work.  Something else must be bound at this
1125            level.  Do not add DECL to the list of things to pop
1126            later.  */
1127         return;
1128     }
1129   else
1130     /* Create a new binding.  */
1131     push_binding (id, decl, b);
1132
1133   if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
1134     /* We must put the OVERLOAD into a TREE_LIST since the
1135        TREE_CHAIN of an OVERLOAD is already used.  Similarly for
1136        decls that got here through a using-declaration.  */
1137     decl = build_tree_list (NULL_TREE, decl);
1138
1139   /* And put DECL on the list of things declared by the current
1140      binding level.  */
1141   TREE_CHAIN (decl) = b->names;
1142   b->names = decl;
1143 }
1144
1145 /* Bind DECL to ID in the class_binding_level.  Returns nonzero if the
1146    binding was successful.  */
1147
1148 int
1149 push_class_binding (id, decl)
1150      tree id;
1151      tree decl;
1152 {
1153   int result = 1;
1154   tree binding = IDENTIFIER_BINDING (id);
1155   tree context;
1156
1157   /* Note that we declared this value so that we can issue an error if
1158      this an illegal redeclaration of a name already used for some
1159      other purpose.  */
1160   note_name_declared_in_class (id, decl);
1161
1162   if (binding && BINDING_LEVEL (binding) == class_binding_level)
1163     /* Supplement the existing binding.  */
1164     result = add_binding (id, decl);
1165   else
1166     /* Create a new binding.  */
1167     push_binding (id, decl, class_binding_level);
1168
1169   /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
1170      class-level declaration.  Note that we do not use DECL here
1171      because of the possibility of the `struct stat' hack; if DECL is
1172      a class-name or enum-name we might prefer a field-name, or some
1173      such.  */
1174   IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
1175
1176   /* If this is a binding from a base class, mark it as such.  */
1177   binding = IDENTIFIER_BINDING (id);
1178   if (BINDING_VALUE (binding) == decl && TREE_CODE (decl) != TREE_LIST)
1179     {
1180       /* Any implicit typename must be from a base-class.  The
1181          context for an implicit typename declaration is always
1182          the derived class in which the lookup was done, so the checks
1183          based on the context of DECL below will not trigger.  */
1184       if (IMPLICIT_TYPENAME_TYPE_DECL_P (decl))
1185         INHERITED_VALUE_BINDING_P (binding) = 1;
1186       else
1187         {
1188           if (TREE_CODE (decl) == OVERLOAD)
1189             context = DECL_REAL_CONTEXT (OVL_CURRENT (decl));
1190           else
1191             {
1192               my_friendly_assert (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd',
1193                                   0);
1194               context = DECL_REAL_CONTEXT (decl);
1195             }
1196
1197           if (is_properly_derived_from (current_class_type, context))
1198             INHERITED_VALUE_BINDING_P (binding) = 1;
1199           else
1200             INHERITED_VALUE_BINDING_P (binding) = 0;
1201         }
1202     }
1203   else if (BINDING_VALUE (binding) == decl)
1204     /* We only encounter a TREE_LIST when push_class_decls detects an
1205        ambiguity.  Such an ambiguity can be overridden by a definition
1206        in this class.  */
1207     INHERITED_VALUE_BINDING_P (binding) = 1;
1208
1209   return result;
1210 }
1211
1212 /* Remove the binding for DECL which should be the innermost binding
1213    for ID.  */
1214
1215 static void 
1216 pop_binding (id, decl) 
1217      tree id;
1218      tree decl;
1219 {
1220   tree binding;
1221     
1222   if (id == NULL_TREE)
1223     /* It's easiest to write the loops that call this function without
1224        checking whether or not the entities involved have names.  We
1225        get here for such an entity.  */
1226     return;
1227
1228   /* Get the innermost binding for ID.  */
1229   binding = IDENTIFIER_BINDING (id);
1230
1231   /* The name should be bound.  */
1232   my_friendly_assert (binding != NULL_TREE, 0);
1233
1234   /* The DECL will be either the ordinary binding or the type
1235      binding for this identifier.  Remove that binding.  */
1236   if (BINDING_VALUE (binding) == decl)
1237     BINDING_VALUE (binding) = NULL_TREE;
1238   else if (BINDING_TYPE (binding) == decl)
1239     BINDING_TYPE (binding) = NULL_TREE;
1240   else
1241     my_friendly_abort (0);
1242
1243   if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
1244     {
1245       /* We're completely done with the innermost binding for this
1246          identifier.  Unhook it from the list of bindings.  */
1247       IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
1248
1249       /* And place it on the free list.  */
1250       TREE_CHAIN (binding) = free_binding_nodes;
1251       free_binding_nodes = binding;
1252     }
1253 }
1254
1255 /* Exit a binding level.
1256    Pop the level off, and restore the state of the identifier-decl mappings
1257    that were in effect when this level was entered.
1258
1259    If KEEP == 1, this level had explicit declarations, so
1260    and create a "block" (a BLOCK node) for the level
1261    to record its declarations and subblocks for symbol table output.
1262
1263    If FUNCTIONBODY is nonzero, this level is the body of a function,
1264    so create a block as if KEEP were set and also clear out all
1265    label names.
1266
1267    If REVERSE is nonzero, reverse the order of decls before putting
1268    them into the BLOCK.  */
1269
1270 tree
1271 poplevel (keep, reverse, functionbody)
1272      int keep;
1273      int reverse;
1274      int functionbody;
1275 {
1276   register tree link;
1277   /* The chain of decls was accumulated in reverse order.
1278      Put it into forward order, just for cleanliness.  */
1279   tree decls;
1280   int tmp = functionbody;
1281   int real_functionbody = current_binding_level->keep == 2
1282     ? ((functionbody = 0), tmp) : functionbody;
1283   tree tags = functionbody >= 0 ? current_binding_level->tags : 0;
1284   tree subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1285   tree block = NULL_TREE;
1286   tree decl;
1287   int block_previously_created;
1288   int leaving_for_scope;
1289
1290   if (current_binding_level->parm_flag == 2)
1291     return poplevel_class ();
1292
1293   my_friendly_assert (!current_binding_level->class_shadowed,
1294                       19990414);
1295
1296   /* We used to use KEEP == 2 to indicate that the new block should go
1297      at the beginning of the list of blocks at this binding level,
1298      rather than the end.  This hack is no longer used.  */
1299   my_friendly_assert (keep == 0 || keep == 1, 0);
1300
1301   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1302                       (HOST_WIDE_INT) current_binding_level->level_chain,
1303                       current_binding_level->parm_flag,
1304                       current_binding_level->keep);
1305
1306   if (current_binding_level->keep == 1)
1307     keep = 1;
1308
1309   /* Get the decls in the order they were written.
1310      Usually current_binding_level->names is in reverse order.
1311      But parameter decls were previously put in forward order.  */
1312
1313   if (reverse)
1314     current_binding_level->names
1315       = decls = nreverse (current_binding_level->names);
1316   else
1317     decls = current_binding_level->names;
1318
1319   /* Output any nested inline functions within this block
1320      if they weren't already output.  */
1321
1322   for (decl = decls; decl; decl = TREE_CHAIN (decl))
1323     if (TREE_CODE (decl) == FUNCTION_DECL
1324         && ! TREE_ASM_WRITTEN (decl)
1325         && DECL_INITIAL (decl) != NULL_TREE
1326         && TREE_ADDRESSABLE (decl)
1327         && decl_function_context (decl) == current_function_decl)
1328       {
1329         /* If this decl was copied from a file-scope decl
1330            on account of a block-scope extern decl,
1331            propagate TREE_ADDRESSABLE to the file-scope decl.  */
1332         if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1333           TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1334         else
1335           {
1336             push_function_context ();
1337             output_inline_function (decl);
1338             pop_function_context ();
1339           }
1340       }
1341
1342   /* If there were any declarations or structure tags in that level,
1343      or if this level is a function body,
1344      create a BLOCK to record them for the life of this function.  */
1345
1346   block = NULL_TREE;
1347   block_previously_created = (current_binding_level->this_block != NULL_TREE);
1348   if (block_previously_created)
1349     block = current_binding_level->this_block;
1350   else if (keep == 1 || functionbody)
1351     block = make_node (BLOCK);
1352   if (block != NULL_TREE)
1353     {
1354       if (block_previously_created)
1355         {
1356           if (decls || tags || subblocks)
1357             {
1358               if (BLOCK_VARS (block) || BLOCK_TYPE_TAGS (block))
1359                 warning ("internal compiler error: debugging info corrupted");
1360
1361               BLOCK_VARS (block) = decls;
1362               BLOCK_TYPE_TAGS (block) = tags;
1363
1364               /* We can have previous subblocks and new subblocks when
1365                  doing fixup_gotos with complex cleanups.  We chain the new
1366                  subblocks onto the end of any pre-existing subblocks.  */
1367               BLOCK_SUBBLOCKS (block) = chainon (BLOCK_SUBBLOCKS (block),
1368                                                  subblocks);
1369             }
1370           /* If we created the block earlier on, and we are just
1371              diddling it now, then it already should have a proper
1372              BLOCK_END_NOTE value associated with it.  */
1373         }
1374       else
1375         {
1376           BLOCK_VARS (block) = decls;
1377           BLOCK_TYPE_TAGS (block) = tags;
1378           BLOCK_SUBBLOCKS (block) = subblocks;
1379           /* Otherwise, for a new block, install a new BLOCK_END_NOTE
1380              value.  */ 
1381           remember_end_note (block);
1382         }
1383     }
1384
1385   /* In each subblock, record that this is its superior.  */
1386
1387   if (keep >= 0)
1388     for (link = subblocks; link; link = TREE_CHAIN (link))
1389       BLOCK_SUPERCONTEXT (link) = block;
1390
1391   /* We still support the old for-scope rules, whereby the variables
1392      in a for-init statement were in scope after the for-statement
1393      ended.  We only use the new rules in flag_new_for_scope is
1394      nonzero.  */
1395   leaving_for_scope 
1396     = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1397
1398   /* Remove declarations for all the DECLs in this level.  */
1399   for (link = decls; link; link = TREE_CHAIN (link))
1400     {
1401       if (leaving_for_scope && TREE_CODE (link) == VAR_DECL)
1402         {
1403           tree outer_binding 
1404             = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1405           tree ns_binding;
1406
1407           if (!outer_binding)
1408             ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
1409           else
1410             ns_binding = NULL_TREE;
1411
1412           if (outer_binding 
1413               && (BINDING_LEVEL (outer_binding) 
1414                   == current_binding_level->level_chain))
1415             /* We have something like:
1416                
1417                  int i;
1418                  for (int i; ;);
1419                  
1420                and we are leaving the `for' scope.  There's no reason to
1421                keep the binding of the inner `i' in this case.  */
1422             pop_binding (DECL_NAME (link), link);
1423           else if ((outer_binding 
1424                     && (TREE_CODE (BINDING_VALUE (outer_binding)) 
1425                         == TYPE_DECL))
1426                    || (ns_binding 
1427                        && TREE_CODE (ns_binding) == TYPE_DECL))
1428             /* Here, we have something like:
1429
1430                  typedef int I;
1431
1432                  void f () {
1433                    for (int I; ;);
1434                  }
1435
1436                We must pop the for-scope binding so we know what's a
1437                type and what isn't.  */
1438             pop_binding (DECL_NAME (link), link);
1439           else
1440             {
1441               /* Mark this VAR_DECL as dead so that we can tell we left it
1442                  there only for backward compatibility.  */
1443               DECL_DEAD_FOR_LOCAL (link) = 1;
1444               
1445               /* Keep track of what should of have happenned when we
1446                  popped the binding.  */
1447               if (outer_binding && BINDING_VALUE (outer_binding))
1448                 DECL_SHADOWED_FOR_VAR (link) 
1449                   = BINDING_VALUE (outer_binding);
1450
1451               /* Add it to the list of dead variables in the next
1452                  outermost binding to that we can remove these when we
1453                  leave that binding.  */
1454               current_binding_level->level_chain->dead_vars_from_for
1455                 = tree_cons (NULL_TREE, link,
1456                              current_binding_level->level_chain->
1457                              dead_vars_from_for);
1458
1459               /* Although we don't pop the CPLUS_BINDING, we do clear
1460                  its BINDING_LEVEL since the level is going away now.  */
1461               BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1462                 = 0;
1463             }
1464         }
1465       else 
1466         {
1467           /* Remove the binding.  */
1468           decl = link;
1469           if (TREE_CODE (decl) == TREE_LIST)
1470             decl = TREE_VALUE (decl);
1471           if (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd')
1472             pop_binding (DECL_NAME (decl), decl);
1473           else if (TREE_CODE (decl) == OVERLOAD)
1474             pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
1475           else 
1476             my_friendly_abort (0);
1477         }
1478     }
1479
1480   /* Remove declarations for any `for' variables from inner scopes
1481      that we kept around.  */
1482   for (link = current_binding_level->dead_vars_from_for;
1483        link; link = TREE_CHAIN (link))
1484     pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
1485
1486   /* Restore the IDENTIFIER_TYPE_VALUEs.  */
1487   for (link = current_binding_level->type_shadowed;
1488        link; link = TREE_CHAIN (link))
1489     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
1490   
1491   /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1492      list if a `using' declaration put them there.  The debugging
1493      back-ends won't understand OVERLOAD, so we remove them here.
1494      Because the BLOCK_VARS are (temporarily) shared with
1495      CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1496      popped all the bindings.  */
1497   if (block)
1498     {
1499       tree* d;
1500
1501       for (d = &BLOCK_VARS (block); *d; )
1502         {
1503           if (TREE_CODE (*d) == TREE_LIST)
1504             *d = TREE_CHAIN (*d);
1505           else
1506             d = &TREE_CHAIN (*d);
1507         }
1508     }
1509
1510   /* If the level being exited is the top level of a function,
1511      check over all the labels.  */
1512
1513   if (functionbody)
1514     {
1515       /* If this is the top level block of a function,
1516          the vars are the function's parameters.
1517          Don't leave them in the BLOCK because they are
1518          found in the FUNCTION_DECL instead.  */
1519
1520       BLOCK_VARS (block) = 0;
1521
1522       /* Clear out the definitions of all label names,
1523          since their scopes end here.  */
1524
1525       for (link = named_labels; link; link = TREE_CHAIN (link))
1526         {
1527           register tree label = TREE_VALUE (link);
1528
1529           if (DECL_INITIAL (label) == NULL_TREE)
1530             {
1531               cp_error_at ("label `%D' used but not defined", label);
1532               /* Avoid crashing later.  */
1533               define_label (input_filename, 1, DECL_NAME (label));
1534             }
1535           else if (warn_unused && !TREE_USED (label))
1536             cp_warning_at ("label `%D' defined but not used", label);
1537           SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), NULL_TREE);
1538
1539           /* Put the labels into the "variables" of the
1540              top-level block, so debugger can see them.  */
1541           TREE_CHAIN (label) = BLOCK_VARS (block);
1542           BLOCK_VARS (block) = label;
1543         }
1544
1545       named_labels = NULL_TREE;
1546     }
1547
1548   /* Any uses of undefined labels now operate under constraints
1549      of next binding contour.  */
1550   {
1551     struct binding_level *level_chain;
1552     level_chain = current_binding_level->level_chain;
1553     if (level_chain)
1554       {
1555         struct named_label_list *labels;
1556         for (labels = named_label_uses; labels; labels = labels->next)
1557           if (labels->binding_level == current_binding_level)
1558             {
1559               labels->binding_level = level_chain;
1560               labels->names_in_scope = level_chain->names;
1561             }
1562       }
1563   }
1564
1565   tmp = current_binding_level->keep;
1566
1567   pop_binding_level ();
1568   if (functionbody)
1569     DECL_INITIAL (current_function_decl) = block;
1570   else if (block)
1571     {
1572       if (!block_previously_created)
1573         current_binding_level->blocks
1574           = chainon (current_binding_level->blocks, block);
1575     }
1576   /* If we did not make a block for the level just exited,
1577      any blocks made for inner levels
1578      (since they cannot be recorded as subblocks in that level)
1579      must be carried forward so they will later become subblocks
1580      of something else.  */
1581   else if (subblocks)
1582     current_binding_level->blocks
1583       = chainon (current_binding_level->blocks, subblocks);
1584
1585   /* Take care of compiler's internal binding structures.  */
1586   if (tmp == 2)
1587     {
1588       expand_end_bindings (getdecls (), keep, 1);
1589       /* Each and every BLOCK node created here in `poplevel' is important
1590          (e.g. for proper debugging information) so if we created one
1591          earlier, mark it as "used".  */
1592       if (block)
1593         TREE_USED (block) = 1;
1594       block = poplevel (keep, reverse, real_functionbody);
1595     }
1596
1597   /* Each and every BLOCK node created here in `poplevel' is important
1598      (e.g. for proper debugging information) so if we created one
1599      earlier, mark it as "used".  */
1600   if (block)
1601     TREE_USED (block) = 1;
1602   return block;
1603 }
1604
1605 /* Delete the node BLOCK from the current binding level.
1606    This is used for the block inside a stmt expr ({...})
1607    so that the block can be reinserted where appropriate.  */
1608
1609 void
1610 delete_block (block)
1611      tree block;
1612 {
1613   tree t;
1614   if (current_binding_level->blocks == block)
1615     current_binding_level->blocks = TREE_CHAIN (block);
1616   for (t = current_binding_level->blocks; t;)
1617     {
1618       if (TREE_CHAIN (t) == block)
1619         TREE_CHAIN (t) = TREE_CHAIN (block);
1620       else
1621         t = TREE_CHAIN (t);
1622     }
1623   TREE_CHAIN (block) = NULL_TREE;
1624   /* Clear TREE_USED which is always set by poplevel.
1625      The flag is set again if insert_block is called.  */
1626   TREE_USED (block) = 0;
1627 }
1628
1629 /* Insert BLOCK at the end of the list of subblocks of the
1630    current binding level.  This is used when a BIND_EXPR is expanded,
1631    to handle the BLOCK node inside the BIND_EXPR.  */
1632
1633 void
1634 insert_block (block)
1635      tree block;
1636 {
1637   TREE_USED (block) = 1;
1638   current_binding_level->blocks
1639     = chainon (current_binding_level->blocks, block);
1640 }
1641
1642 /* Set the BLOCK node for the innermost scope
1643    (the one we are currently in).  */
1644
1645 void
1646 set_block (block)
1647     register tree block;
1648 {
1649   current_binding_level->this_block = block;
1650 }
1651
1652 /* Do a pushlevel for class declarations.  */
1653
1654 void
1655 pushlevel_class ()
1656 {
1657   register struct binding_level *newlevel;
1658
1659   /* Reuse or create a struct for this binding level.  */
1660 #if defined(DEBUG_CP_BINDING_LEVELS)
1661   if (0)
1662 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1663   if (free_binding_level)
1664 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1665     {
1666       newlevel = free_binding_level;
1667       free_binding_level = free_binding_level->level_chain;
1668     }
1669   else
1670     newlevel = make_binding_level ();
1671
1672 #if defined(DEBUG_CP_BINDING_LEVELS)
1673   is_class_level = 1;
1674 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1675
1676   push_binding_level (newlevel, 0, 0);
1677
1678   decl_stack = push_decl_level (decl_stack, &decl_obstack);
1679   class_binding_level = current_binding_level;
1680   class_binding_level->parm_flag = 2;
1681 }
1682
1683 /* ...and a poplevel for class declarations.  */
1684
1685 static tree
1686 poplevel_class ()
1687 {
1688   register struct binding_level *level = class_binding_level;
1689   tree shadowed;
1690
1691   my_friendly_assert (level != 0, 354);
1692   
1693   decl_stack = pop_stack_level (decl_stack);
1694   /* If we're leaving a toplevel class, don't bother to do the setting
1695      of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
1696      shouldn't even be used when current_class_type isn't set, and second,
1697      if we don't touch it here, we're able to use the cache effect if the
1698      next time we're entering a class scope, it is the same class.  */
1699   if (current_class_depth != 1)
1700     {
1701       struct binding_level* b;
1702
1703       /* Clear out our IDENTIFIER_CLASS_VALUEs.  */
1704       for (shadowed = level->class_shadowed;
1705            shadowed;
1706            shadowed = TREE_CHAIN (shadowed))
1707         IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = NULL_TREE;
1708         
1709       /* Find the next enclosing class, and recreate
1710          IDENTIFIER_CLASS_VALUEs appropriate for that class.  */
1711       b = level->level_chain;
1712       while (b && b->parm_flag != 2)
1713         b = b->level_chain;
1714
1715       if (b)
1716         for (shadowed = b->class_shadowed; 
1717              shadowed; 
1718              shadowed = TREE_CHAIN (shadowed))
1719           {
1720             tree t;
1721
1722             t = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
1723             while (t && BINDING_LEVEL (t) != b)
1724               t = TREE_CHAIN (t);
1725       
1726             if (t)
1727               IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) 
1728                 = BINDING_VALUE (t);
1729           }
1730     }
1731   else
1732     /* Remember to save what IDENTIFIER's were bound in this scope so we
1733        can recover from cache misses.  */
1734     {
1735       previous_class_type = current_class_type;
1736       previous_class_values = class_binding_level->class_shadowed;
1737     }
1738   for (shadowed = level->type_shadowed;
1739        shadowed;
1740        shadowed = TREE_CHAIN (shadowed))
1741     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
1742
1743   /* Remove the bindings for all of the class-level declarations.  */
1744   for (shadowed = level->class_shadowed; 
1745        shadowed; 
1746        shadowed = TREE_CHAIN (shadowed))
1747     pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
1748
1749   GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1750                       (HOST_WIDE_INT) class_binding_level->level_chain,
1751                       class_binding_level->parm_flag,
1752                       class_binding_level->keep);
1753
1754   /* Now, pop out of the binding level which we created up in the
1755      `pushlevel_class' routine.  */
1756 #if defined(DEBUG_CP_BINDING_LEVELS)
1757   is_class_level = 1;
1758 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1759
1760   pop_binding_level ();
1761
1762   return NULL_TREE;
1763 }
1764
1765 /* We are entering the scope of a class.  Clear IDENTIFIER_CLASS_VALUE
1766    for any names in enclosing classes.  */
1767
1768 void
1769 clear_identifier_class_values ()
1770 {
1771   tree t;
1772
1773   if (!class_binding_level)
1774     return;
1775
1776   for (t = class_binding_level->class_shadowed;
1777        t;
1778        t = TREE_CHAIN (t))
1779     IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
1780 }
1781
1782 /* Returns non-zero if T is a virtual function table.  */
1783
1784 int
1785 vtable_decl_p (t, data)
1786      tree t;
1787      void *data ATTRIBUTE_UNUSED;
1788 {
1789   return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
1790 }
1791
1792 /* Returns non-zero if T is a TYPE_DECL for a type with virtual
1793    functions.  */
1794
1795 int
1796 vtype_decl_p (t, data)
1797      tree t;
1798      void *data ATTRIBUTE_UNUSED;
1799 {
1800   return (TREE_CODE (t) == TYPE_DECL
1801           && TREE_TYPE (t) != error_mark_node
1802           && TYPE_LANG_SPECIFIC (TREE_TYPE (t))
1803           && CLASSTYPE_VSIZE (TREE_TYPE (t)));
1804 }
1805
1806 /* Return the declarations that are members of the namespace NS.  */
1807
1808 tree
1809 cp_namespace_decls (ns)
1810      tree ns;
1811 {
1812   return NAMESPACE_LEVEL (ns)->names;
1813 }
1814
1815 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
1816    itself, calling F for each.  The DATA is passed to F as well.  */
1817
1818 static int
1819 walk_namespaces_r (namespace, f, data)
1820      tree namespace;
1821      walk_namespaces_fn f;
1822      void *data;
1823 {
1824   tree current;
1825   int result = 0;
1826
1827   result |= (*f) (namespace, data);
1828
1829   for (current = cp_namespace_decls (namespace);
1830        current;
1831        current = TREE_CHAIN (current))
1832     {
1833       if (TREE_CODE (current) != NAMESPACE_DECL
1834           || DECL_NAMESPACE_ALIAS (current))
1835         continue;
1836       if (!DECL_LANG_SPECIFIC (current))
1837         {
1838           /* Hmm. std. */
1839           my_friendly_assert (current == std_node, 393);
1840           continue;
1841         }
1842
1843       /* We found a namespace.  */
1844       result |= walk_namespaces_r (current, f, data);
1845     }
1846
1847   return result;
1848 }
1849
1850 /* Walk all the namespaces, calling F for each.  The DATA is passed to
1851    F as well.  */
1852
1853 int
1854 walk_namespaces (f, data)
1855      walk_namespaces_fn f;
1856      void *data;
1857 {
1858   return walk_namespaces_r (global_namespace, f, data);
1859 }
1860
1861 struct walk_globals_data {
1862   walk_globals_pred p;
1863   walk_globals_fn f;
1864   void *data;
1865 };
1866
1867 /* Walk the global declarations in NAMESPACE.  Whenever one is found
1868    for which P returns non-zero, call F with its address.  If any call
1869    to F returns a non-zero value, return a non-zero value.  */
1870
1871 static int 
1872 walk_globals_r (namespace, data)
1873      tree namespace;
1874      void *data;
1875 {
1876   struct walk_globals_data* wgd = (struct walk_globals_data *) data;
1877   walk_globals_pred p = wgd->p;
1878   walk_globals_fn f = wgd->f;
1879   void *d = wgd->data;
1880   tree *t;
1881   int result = 0;
1882
1883   t = &NAMESPACE_LEVEL (namespace)->names;
1884
1885   while (*t)
1886     {
1887       tree glbl = *t;
1888
1889       if ((*p) (glbl, d))
1890         result |= (*f) (t, d);
1891
1892       /* If F changed *T, then *T still points at the next item to
1893          examine.  */
1894       if (*t == glbl)
1895         t = &TREE_CHAIN (*t);
1896     }
1897
1898   return result;
1899 }
1900
1901 /* Walk the global declarations.  Whenever one is found for which P
1902    returns non-zero, call F with its address.  If any call to F
1903    returns a non-zero value, return a non-zero value.  */
1904
1905 int
1906 walk_globals (p, f, data)
1907      walk_globals_pred p;
1908      walk_globals_fn f;
1909      void *data;
1910 {
1911   struct walk_globals_data wgd;
1912   wgd.p = p;
1913   wgd.f = f;
1914   wgd.data = data;
1915
1916   return walk_namespaces (walk_globals_r, &wgd);
1917 }
1918
1919 /* Call wrapup_globals_declarations for the globals in NAMESPACE.  If
1920    DATA is non-NULL, this is the last time we will call
1921    wrapup_global_declarations for this NAMESPACE.  */
1922
1923 int
1924 wrapup_globals_for_namespace (namespace, data)
1925      tree namespace;
1926      void *data;
1927 {
1928   tree globals = cp_namespace_decls (namespace);
1929   int len = list_length (globals);
1930   tree *vec = (tree *) alloca (sizeof (tree) * len);
1931   int i;
1932   int result;
1933   tree decl;
1934   int last_time = (data != 0);
1935
1936   if (last_time && namespace == global_namespace)
1937     /* Let compile_file handle the global namespace.  */
1938     return 0;
1939
1940   /* Process the decls in reverse order--earliest first.
1941      Put them into VEC from back to front, then take out from front.  */
1942   
1943   for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
1944     vec[len - i - 1] = decl;
1945   
1946   if (last_time)
1947     {
1948       check_global_declarations (vec, len);
1949       return 0;
1950     }
1951
1952   /* Temporarily mark vtables as external.  That prevents
1953      wrapup_global_declarations from writing them out; we must process
1954      them ourselves in finish_vtable_vardecl.  */
1955   for (i = 0; i < len; ++i)
1956     if (vtable_decl_p (vec[i], /*data=*/0) && !DECL_EXTERNAL (vec[i]))
1957       {
1958         DECL_NOT_REALLY_EXTERN (vec[i]) = 1;
1959         DECL_EXTERNAL (vec[i]) = 1;
1960       }
1961
1962   /* Write out any globals that need to be output.  */
1963   result = wrapup_global_declarations (vec, len);
1964
1965   /* Undo the hack to DECL_EXTERNAL above.  */
1966   for (i = 0; i < len; ++i)
1967     if (vtable_decl_p (vec[i], /*data=*/0)
1968         && DECL_NOT_REALLY_EXTERN (vec[i]))
1969       {
1970         DECL_NOT_REALLY_EXTERN (vec[i]) = 0;
1971         DECL_EXTERNAL (vec[i]) = 0;
1972       }
1973
1974   return result;
1975 }
1976
1977 \f
1978 /* For debugging.  */
1979 static int no_print_functions = 0;
1980 static int no_print_builtins = 0;
1981
1982 void
1983 print_binding_level (lvl)
1984      struct binding_level *lvl;
1985 {
1986   tree t;
1987   int i = 0, len;
1988   fprintf (stderr, " blocks=");
1989   fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
1990   fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
1991            list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
1992   if (lvl->tag_transparent)
1993     fprintf (stderr, " tag-transparent");
1994   if (lvl->more_cleanups_ok)
1995     fprintf (stderr, " more-cleanups-ok");
1996   if (lvl->have_cleanups)
1997     fprintf (stderr, " have-cleanups");
1998   fprintf (stderr, "\n");
1999   if (lvl->names)
2000     {
2001       fprintf (stderr, " names:\t");
2002       /* We can probably fit 3 names to a line?  */
2003       for (t = lvl->names; t; t = TREE_CHAIN (t))
2004         {
2005           if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL)) 
2006             continue;
2007           if (no_print_builtins
2008               && (TREE_CODE (t) == TYPE_DECL)
2009               && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
2010             continue;
2011
2012           /* Function decls tend to have longer names.  */
2013           if (TREE_CODE (t) == FUNCTION_DECL)
2014             len = 3;
2015           else
2016             len = 2;
2017           i += len;
2018           if (i > 6)
2019             {
2020               fprintf (stderr, "\n\t");
2021               i = len;
2022             }
2023           print_node_brief (stderr, "", t, 0);
2024           if (t == error_mark_node)
2025             break;
2026         }
2027       if (i)
2028         fprintf (stderr, "\n");
2029     }
2030   if (lvl->tags)
2031     {
2032       fprintf (stderr, " tags:\t");
2033       i = 0;
2034       for (t = lvl->tags; t; t = TREE_CHAIN (t))
2035         {
2036           if (TREE_PURPOSE (t) == NULL_TREE)
2037             len = 3;
2038           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2039             len = 2;
2040           else
2041             len = 4;
2042           i += len;
2043           if (i > 5)
2044             {
2045               fprintf (stderr, "\n\t");
2046               i = len;
2047             }
2048           if (TREE_PURPOSE (t) == NULL_TREE)
2049             {
2050               print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
2051               fprintf (stderr, ">");
2052             }
2053           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2054             print_node_brief (stderr, "", TREE_VALUE (t), 0);
2055           else
2056             {
2057               print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
2058               print_node_brief (stderr, "", TREE_VALUE (t), 0);
2059               fprintf (stderr, ">");
2060             }
2061         }
2062       if (i)
2063         fprintf (stderr, "\n");
2064     }
2065   if (lvl->class_shadowed)
2066     {
2067       fprintf (stderr, " class-shadowed:");
2068       for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
2069         {
2070           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2071         }
2072       fprintf (stderr, "\n");
2073     }
2074   if (lvl->type_shadowed)
2075     {
2076       fprintf (stderr, " type-shadowed:");
2077       for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
2078         {
2079           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2080         }
2081       fprintf (stderr, "\n");
2082     }
2083 }
2084
2085 void
2086 print_other_binding_stack (stack)
2087      struct binding_level *stack;
2088 {
2089   struct binding_level *level;
2090   for (level = stack; level != global_binding_level; level = level->level_chain)
2091     {
2092       fprintf (stderr, "binding level ");
2093       fprintf (stderr, HOST_PTR_PRINTF, level);
2094       fprintf (stderr, "\n");
2095       print_binding_level (level);
2096     }
2097 }
2098
2099 void
2100 print_binding_stack ()
2101 {
2102   struct binding_level *b;
2103   fprintf (stderr, "current_binding_level=");
2104   fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
2105   fprintf (stderr, "\nclass_binding_level=");
2106   fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
2107   fprintf (stderr, "\nglobal_binding_level=");
2108   fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
2109   fprintf (stderr, "\n");
2110   if (class_binding_level)
2111     {
2112       for (b = class_binding_level; b; b = b->level_chain)
2113         if (b == current_binding_level)
2114           break;
2115       if (b)
2116         b = class_binding_level;
2117       else
2118         b = current_binding_level;
2119     }
2120   else
2121     b = current_binding_level;
2122   print_other_binding_stack (b);
2123   fprintf (stderr, "global:\n");
2124   print_binding_level (global_binding_level);
2125 }
2126
2127 /* Namespace binding access routines: The namespace_bindings field of
2128    the identifier is polymorphic, with three possible values:
2129    NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
2130    indicating the BINDING_VALUE of global_namespace. */
2131
2132 /* Check whether the a binding for the name to scope is known.
2133    Assumes that the bindings of the name are already a list
2134    of bindings. Returns the binding found, or NULL_TREE. */
2135
2136 static tree
2137 find_binding (name, scope)
2138      tree name;
2139      tree scope;
2140 {
2141   tree iter, prev = NULL_TREE;
2142
2143   scope = ORIGINAL_NAMESPACE (scope);
2144   
2145   for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
2146        iter = TREE_CHAIN (iter))
2147     {
2148       my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
2149       if (BINDING_SCOPE (iter) == scope)
2150         {
2151           /* Move binding found to the fron of the list, so
2152              subsequent lookups will find it faster. */
2153           if (prev)
2154             {
2155               TREE_CHAIN (prev) = TREE_CHAIN (iter);
2156               TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
2157               IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
2158             }
2159           return iter;
2160         }
2161       prev = iter;
2162     }
2163   return NULL_TREE;
2164 }
2165
2166 /* Always returns a binding for name in scope. If the
2167    namespace_bindings is not a list, convert it to one first.
2168    If no binding is found, make a new one. */
2169
2170 tree
2171 binding_for_name (name, scope)
2172      tree name;
2173      tree scope;
2174 {
2175   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2176   tree result;
2177
2178   scope = ORIGINAL_NAMESPACE (scope);
2179   
2180   if (b && TREE_CODE (b) != CPLUS_BINDING)
2181     {
2182       /* Get rid of optimization for global scope. */
2183       IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
2184       BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
2185       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2186     }
2187   if (b && (result = find_binding (name, scope)))
2188     return result;
2189   /* Not found, make a new permanent one. */
2190   push_obstacks (&permanent_obstack, &permanent_obstack);
2191   result = make_node (CPLUS_BINDING);
2192   TREE_CHAIN (result) = b;
2193   IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
2194   BINDING_SCOPE (result) = scope;
2195   BINDING_TYPE (result) = NULL_TREE;
2196   BINDING_VALUE (result) = NULL_TREE;
2197   pop_obstacks ();
2198   return result;
2199 }
2200
2201 /* Return the binding value for name in scope, considering that
2202    namespace_binding may or may not be a list of CPLUS_BINDINGS. */
2203
2204 tree
2205 namespace_binding (name, scope)
2206      tree name;
2207      tree scope;
2208 {
2209   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2210   if (b == NULL_TREE)
2211     return NULL_TREE;
2212   if (scope == NULL_TREE)
2213     scope = global_namespace;
2214   if (TREE_CODE (b) != CPLUS_BINDING)
2215     return (scope == global_namespace) ? b : NULL_TREE;
2216   name = find_binding (name,scope);
2217   if (name == NULL_TREE)
2218     return name;
2219   return BINDING_VALUE (name);
2220 }
2221
2222 /* Set the binding value for name in scope. If modifying the binding
2223    of global_namespace is attempted, try to optimize it. */
2224
2225 void
2226 set_namespace_binding (name, scope, val)
2227      tree name;
2228      tree scope;
2229      tree val;
2230 {
2231   tree b;
2232
2233   if (scope == NULL_TREE)
2234     scope = global_namespace;
2235   
2236   if (scope == global_namespace)
2237     {
2238       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2239       if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
2240         {
2241           IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
2242           return;
2243         }
2244     }
2245   b = binding_for_name (name, scope);
2246   BINDING_VALUE (b) = val;
2247 }
2248
2249 /* Push into the scope of the NAME namespace.  If NAME is NULL_TREE, then we
2250    select a name that is unique to this compilation unit.  */
2251
2252 void
2253 push_namespace (name)
2254      tree name;
2255 {
2256   tree d = NULL_TREE;
2257   int need_new = 1;
2258   int implicit_use = 0;
2259   int global = 0;
2260   if (!global_namespace)
2261     {
2262       /* This must be ::. */
2263       my_friendly_assert (name == get_identifier ("::"), 377);
2264       global = 1;
2265     }
2266   else if (!name)
2267     {
2268       /* The name of anonymous namespace is unique for the translation
2269          unit.  */
2270       if (!anonymous_namespace_name)
2271         anonymous_namespace_name = get_file_function_name ('N');
2272       name = anonymous_namespace_name;
2273       d = IDENTIFIER_NAMESPACE_VALUE (name);
2274       if (d)
2275         /* Reopening anonymous namespace.  */
2276         need_new = 0;
2277       implicit_use = 1;
2278     }
2279   else if (current_namespace == global_namespace
2280            && name == DECL_NAME (std_node))
2281     {
2282       in_std++;
2283       return;
2284     }
2285   else
2286     {
2287       /* Check whether this is an extended namespace definition. */
2288       d = IDENTIFIER_NAMESPACE_VALUE (name);
2289       if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
2290         {
2291           need_new = 0;
2292           if (DECL_NAMESPACE_ALIAS (d))
2293             {
2294               cp_error ("namespace alias `%D' not allowed here, assuming `%D'",
2295                         d, DECL_NAMESPACE_ALIAS (d));
2296               d = DECL_NAMESPACE_ALIAS (d);
2297             }
2298         }
2299     }
2300   
2301   if (need_new)
2302     {
2303       /* Make a new namespace, binding the name to it. */
2304       d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2305       /* The global namespace is not pushed, and the global binding
2306          level is set elsewhere.  */
2307       if (!global)
2308         {
2309           d = pushdecl (d);
2310           pushlevel (0);
2311           declare_namespace_level ();
2312           NAMESPACE_LEVEL (d) = current_binding_level;
2313         }
2314     }
2315   else
2316     resume_binding_level (NAMESPACE_LEVEL (d));
2317
2318   if (implicit_use)
2319     do_using_directive (d);
2320   /* Enter the name space. */
2321   current_namespace = d;
2322 }
2323
2324 /* Pop from the scope of the current namespace.  */
2325
2326 void
2327 pop_namespace ()
2328 {
2329   if (current_namespace == global_namespace)
2330     {
2331       my_friendly_assert (in_std>0, 980421);
2332       in_std--;
2333       return;
2334     }
2335   current_namespace = CP_DECL_CONTEXT (current_namespace);
2336   /* The binding level is not popped, as it might be re-opened later.  */
2337   suspend_binding_level ();
2338 }
2339
2340 /* Push into the scope of the namespace NS, even if it is deeply
2341    nested within another namespace.  */
2342
2343 void
2344 push_nested_namespace (ns)
2345      tree ns;
2346 {
2347   if (ns == global_namespace)
2348     push_to_top_level ();
2349   else
2350     {
2351       push_nested_namespace (CP_DECL_CONTEXT (ns));
2352       push_namespace (DECL_NAME (ns));
2353     }
2354 }
2355
2356 /* Pop back from the scope of the namespace NS, which was previously
2357    entered with push_nested_namespace.  */
2358      
2359 void
2360 pop_nested_namespace (ns)
2361      tree ns;
2362 {
2363   while (ns != global_namespace)
2364     {
2365       pop_namespace ();
2366       ns = CP_DECL_CONTEXT (ns);
2367     }
2368
2369   pop_from_top_level ();
2370 }
2371
2372 \f
2373 /* Subroutines for reverting temporarily to top-level for instantiation
2374    of templates and such.  We actually need to clear out the class- and
2375    local-value slots of all identifiers, so that only the global values
2376    are at all visible.  Simply setting current_binding_level to the global
2377    scope isn't enough, because more binding levels may be pushed.  */
2378 struct saved_scope {
2379   struct binding_level *old_binding_level;
2380   tree old_bindings;
2381   tree old_namespace;
2382   struct saved_scope *prev;
2383   tree class_name, class_type;
2384   tree access_specifier;
2385   tree function_decl;
2386   struct binding_level *class_bindings;
2387   tree *lang_base, *lang_stack, lang_name;
2388   int lang_stacksize;
2389   tree last_function_parms;
2390   tree template_parms;
2391   HOST_WIDE_INT processing_template_decl;
2392   tree previous_class_type, previous_class_values;
2393   int processing_specialization;
2394   int processing_explicit_instantiation;
2395   char *class_cache_firstobj;
2396 };
2397 static struct saved_scope *current_saved_scope;
2398
2399 /* A chain of the binding vecs created by store_bindings.  We create a
2400    whole bunch of these during compilation, on permanent_obstack, so we
2401    can't just throw them away.  */
2402 static tree free_binding_vecs;
2403
2404 static tree
2405 store_bindings (names, old_bindings)
2406      tree names, old_bindings;
2407 {
2408   tree t;
2409   for (t = names; t; t = TREE_CHAIN (t))
2410     {
2411       tree binding, t1, id;
2412
2413       if (TREE_CODE (t) == TREE_LIST)
2414         id = TREE_PURPOSE (t);
2415       else
2416         id = DECL_NAME (t);
2417
2418       if (!id 
2419           /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2420              we have no IDENTIFIER_BINDING if we have left the class
2421              scope, but cached the class-level declarations.  */
2422           || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
2423         continue;
2424
2425       for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
2426         if (TREE_VEC_ELT (t1, 0) == id)
2427           goto skip_it;
2428
2429       if (free_binding_vecs)
2430         {
2431           binding = free_binding_vecs;
2432           free_binding_vecs = TREE_CHAIN (free_binding_vecs);
2433         }
2434       else
2435         binding = make_tree_vec (4);
2436
2437       if (id)
2438         {
2439           my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
2440           TREE_VEC_ELT (binding, 0) = id;
2441           TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
2442           TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
2443           TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
2444           IDENTIFIER_BINDING (id) = NULL_TREE;
2445           IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
2446         }
2447       TREE_CHAIN (binding) = old_bindings;
2448       old_bindings = binding;
2449     skip_it:
2450       ;
2451     }
2452   return old_bindings;
2453 }
2454
2455 void
2456 maybe_push_to_top_level (pseudo)
2457      int pseudo;
2458 {
2459   extern int current_lang_stacksize;
2460   struct saved_scope *s
2461     = (struct saved_scope *) xmalloc (sizeof (struct saved_scope));
2462   struct binding_level *b = current_binding_level;
2463   tree old_bindings = NULL_TREE;
2464
2465   push_cp_function_context (NULL_TREE);
2466
2467   if (previous_class_type)
2468     old_bindings = store_bindings (previous_class_values, old_bindings);
2469
2470   /* Have to include global_binding_level, because class-level decls
2471      aren't listed anywhere useful.  */
2472   for (; b; b = b->level_chain)
2473     {
2474       tree t;
2475
2476       /* Template IDs are inserted into the global level. If they were
2477          inserted into namespace level, finish_file wouldn't find them
2478          when doing pending instantiations. Therefore, don't stop at
2479          namespace level, but continue until :: .  */
2480       if (b == global_binding_level || (pseudo && b->pseudo_global))
2481         break;
2482
2483       old_bindings = store_bindings (b->names, old_bindings);
2484       /* We also need to check class_shadowed to save class-level type
2485          bindings, since pushclass doesn't fill in b->names.  */
2486       if (b->parm_flag == 2)
2487         old_bindings = store_bindings (b->class_shadowed, old_bindings);
2488
2489       /* Unwind type-value slots back to top level.  */
2490       for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2491         SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2492     }
2493
2494   s->old_binding_level = current_binding_level;
2495   current_binding_level = b;
2496
2497   s->old_namespace = current_namespace;
2498   s->class_name = current_class_name;
2499   s->class_type = current_class_type;
2500   s->access_specifier = current_access_specifier;
2501   s->function_decl = current_function_decl;
2502   s->class_bindings = class_binding_level;
2503   s->lang_stack = current_lang_stack;
2504   s->lang_base = current_lang_base;
2505   s->lang_stacksize = current_lang_stacksize;
2506   s->lang_name = current_lang_name;
2507   s->last_function_parms = last_function_parms;
2508   s->template_parms = current_template_parms;
2509   s->processing_template_decl = processing_template_decl;
2510   s->previous_class_type = previous_class_type;
2511   s->previous_class_values = previous_class_values;
2512   s->class_cache_firstobj = class_cache_firstobj;
2513   s->processing_specialization = processing_specialization;
2514   s->processing_explicit_instantiation = processing_explicit_instantiation;
2515
2516   current_class_name = current_class_type = NULL_TREE;
2517   current_function_decl = NULL_TREE;
2518   class_binding_level = (struct binding_level *)0;
2519   current_lang_stacksize = 10;
2520   current_lang_stack = current_lang_base
2521     = (tree *) xmalloc (current_lang_stacksize * sizeof (tree));
2522   current_lang_name = lang_name_cplusplus;
2523   strict_prototype = strict_prototypes_lang_cplusplus;
2524   named_labels = NULL_TREE;
2525   shadowed_labels = NULL_TREE;
2526   previous_class_type = previous_class_values = NULL_TREE;
2527   class_cache_firstobj = 0;
2528   processing_specialization = 0;
2529   processing_explicit_instantiation = 0;
2530   current_template_parms = NULL_TREE;
2531   processing_template_decl = 0;
2532   current_namespace = global_namespace;
2533
2534   s->prev = current_saved_scope;
2535   s->old_bindings = old_bindings;
2536   current_saved_scope = s;
2537
2538   push_obstacks (&permanent_obstack, &permanent_obstack);
2539 }
2540
2541 void
2542 push_to_top_level ()
2543 {
2544   maybe_push_to_top_level (0);
2545 }
2546
2547 void
2548 pop_from_top_level ()
2549 {
2550   extern int current_lang_stacksize;
2551   struct saved_scope *s = current_saved_scope;
2552   tree t;
2553
2554   /* Clear out class-level bindings cache.  */
2555   if (previous_class_type)
2556     invalidate_class_lookup_cache ();
2557
2558   pop_obstacks ();
2559
2560   current_binding_level = s->old_binding_level;
2561   current_saved_scope = s->prev;
2562   for (t = s->old_bindings; t; )
2563     {
2564       tree save = t;
2565       tree id = TREE_VEC_ELT (t, 0);
2566       if (id)
2567         {
2568           SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
2569           IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
2570           IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
2571         }
2572       t = TREE_CHAIN (t);
2573       TREE_CHAIN (save) = free_binding_vecs;
2574       free_binding_vecs = save;
2575     }
2576   current_namespace = s->old_namespace;
2577   current_class_name = s->class_name;
2578   current_class_type = s->class_type;
2579   current_access_specifier = s->access_specifier;
2580   current_function_decl = s->function_decl;
2581   class_binding_level = s->class_bindings;
2582   free (current_lang_base);
2583   current_lang_base = s->lang_base;
2584   current_lang_stack = s->lang_stack;
2585   current_lang_name = s->lang_name;
2586   current_lang_stacksize = s->lang_stacksize;
2587   if (current_lang_name == lang_name_cplusplus)
2588     strict_prototype = strict_prototypes_lang_cplusplus;
2589   else if (current_lang_name == lang_name_c)
2590     strict_prototype = strict_prototypes_lang_c;
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 /* In C++, you don't have to write `struct S' to refer to `S'; you
2761    can just use `S'.  We accomplish this by creating a TYPE_DECL as
2762    if the user had written `typedef struct S S'.  Create and return
2763    the TYPE_DECL for TYPE.  */
2764
2765 tree
2766 create_implicit_typedef (name, type)
2767      tree name;
2768      tree type;
2769 {
2770   tree decl;
2771
2772   decl = build_decl (TYPE_DECL, name, type);
2773   SET_DECL_ARTIFICIAL (decl);
2774   /* There are other implicit type declarations, like the one *within*
2775      a class that allows you to write `S::S'.  We must distinguish
2776      amongst these.  */
2777   SET_DECL_IMPLICIT_TYPEDEF_P (decl);
2778   TYPE_NAME (type) = decl;
2779
2780   return decl;
2781 }
2782
2783 /* Push a tag name NAME for struct/class/union/enum type TYPE.
2784    Normally put it into the inner-most non-tag-transparent scope,
2785    but if GLOBALIZE is true, put it in the inner-most non-class scope.
2786    The latter is needed for implicit declarations.  */
2787
2788 void
2789 pushtag (name, type, globalize)
2790      tree name, type;
2791      int globalize;
2792 {
2793   register struct binding_level *b;
2794
2795   b = current_binding_level;
2796   while (b->tag_transparent
2797          || (globalize && b->parm_flag == 2))
2798     b = b->level_chain;
2799
2800   if (toplevel_bindings_p ())
2801     b->tags = perm_tree_cons (name, type, b->tags);
2802   else
2803     b->tags = saveable_tree_cons (name, type, b->tags);
2804
2805   if (name)
2806     {
2807       /* Do C++ gratuitous typedefing.  */
2808       if (IDENTIFIER_TYPE_VALUE (name) != type)
2809         {
2810           register tree d = NULL_TREE;
2811           int in_class = 0;
2812           tree context = TYPE_CONTEXT (type);
2813
2814           if (! context)
2815             {
2816               tree cs = current_scope ();
2817
2818               if (! globalize)
2819                 context = cs;
2820               else if (cs != NULL_TREE 
2821                        && TREE_CODE_CLASS (TREE_CODE (cs)) == 't')
2822                 /* When declaring a friend class of a local class, we want
2823                    to inject the newly named class into the scope
2824                    containing the local class, not the namespace scope.  */
2825                 context = hack_decl_function_context (get_type_decl (cs));
2826             }
2827           if (!context)
2828             context = current_namespace;
2829
2830           if ((b->pseudo_global && b->level_chain->parm_flag == 2)
2831               || b->parm_flag == 2)
2832             in_class = 1;
2833
2834           if (current_lang_name == lang_name_java)
2835             TYPE_FOR_JAVA (type) = 1;
2836
2837           d = create_implicit_typedef (name, type);
2838           DECL_CONTEXT (d) = FROB_CONTEXT (context);
2839           if (! in_class)
2840             set_identifier_type_value_with_scope (name, type, b);
2841
2842           d = maybe_process_template_type_declaration (type,
2843                                                        globalize, b);
2844
2845           if (b->parm_flag == 2)
2846             {
2847               if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
2848                 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2849                    class.  But if it's a member template class, we
2850                    want the TEMPLATE_DECL, not the TYPE_DECL, so this
2851                    is done later.  */
2852                 finish_member_declaration (d);
2853               else
2854                 pushdecl_class_level (d);
2855             }
2856           else
2857             d = pushdecl_with_scope (d, b);
2858
2859           if (ANON_AGGRNAME_P (name))
2860             DECL_IGNORED_P (d) = 1;
2861
2862           TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2863           DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
2864           if (!uses_template_parms (type))
2865             DECL_ASSEMBLER_NAME (d)
2866               = get_identifier (build_overload_name (type, 1, 1));
2867         }
2868       if (b->parm_flag == 2)
2869         {
2870           if (TYPE_SIZE (current_class_type) == NULL_TREE)
2871             CLASSTYPE_TAGS (current_class_type) = b->tags;
2872         }
2873     }
2874
2875   if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2876     /* Use the canonical TYPE_DECL for this node.  */
2877     TYPE_STUB_DECL (type) = TYPE_NAME (type);
2878   else
2879     {
2880       /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2881          will be the tagged type we just added to the current
2882          binding level.  This fake NULL-named TYPE_DECL node helps
2883          dwarfout.c to know when it needs to output a
2884          representation of a tagged type, and it also gives us a
2885          convenient place to record the "scope start" address for
2886          the tagged type.  */
2887
2888       tree d = build_decl (TYPE_DECL, NULL_TREE, type);
2889       TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2890     }
2891 }
2892
2893 /* Counter used to create anonymous type names.  */
2894
2895 static int anon_cnt = 0;
2896
2897 /* Return an IDENTIFIER which can be used as a name for
2898    anonymous structs and unions.  */
2899
2900 tree
2901 make_anon_name ()
2902 {
2903   char buf[32];
2904
2905   sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2906   return get_identifier (buf);
2907 }
2908
2909 /* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2910    This keeps dbxout from getting confused.  */
2911
2912 void
2913 clear_anon_tags ()
2914 {
2915   register struct binding_level *b;
2916   register tree tags;
2917   static int last_cnt = 0;
2918
2919   /* Fast out if no new anon names were declared.  */
2920   if (last_cnt == anon_cnt)
2921     return;
2922
2923   b = current_binding_level;
2924   while (b->tag_transparent)
2925     b = b->level_chain;
2926   tags = b->tags;
2927   while (tags)
2928     {
2929       /* A NULL purpose means we have already processed all tags
2930          from here to the end of the list.  */
2931       if (TREE_PURPOSE (tags) == NULL_TREE)
2932         break;
2933       if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2934         TREE_PURPOSE (tags) = NULL_TREE;
2935       tags = TREE_CHAIN (tags);
2936     }
2937   last_cnt = anon_cnt;
2938 }
2939 \f
2940 /* Subroutine of duplicate_decls: return truthvalue of whether
2941    or not types of these decls match.
2942
2943    For C++, we must compare the parameter list so that `int' can match
2944    `int&' in a parameter position, but `int&' is not confused with
2945    `const int&'.  */
2946
2947 int
2948 decls_match (newdecl, olddecl)
2949      tree newdecl, olddecl;
2950 {
2951   int types_match;
2952
2953   if (newdecl == olddecl)
2954     return 1;
2955
2956   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
2957     /* If the two DECLs are not even the same kind of thing, we're not
2958        interested in their types.  */
2959     return 0;
2960
2961   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2962     {
2963       tree f1 = TREE_TYPE (newdecl);
2964       tree f2 = TREE_TYPE (olddecl);
2965       tree p1 = TYPE_ARG_TYPES (f1);
2966       tree p2 = TYPE_ARG_TYPES (f2);
2967
2968       if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl)
2969           && ! (DECL_LANGUAGE (newdecl) == lang_c
2970                 && DECL_LANGUAGE (olddecl) == lang_c))
2971         return 0;
2972
2973       /* When we parse a static member function definition,
2974          we put together a FUNCTION_DECL which thinks its type
2975          is METHOD_TYPE.  Change that to FUNCTION_TYPE, and
2976          proceed.  */
2977       if (TREE_CODE (f1) == METHOD_TYPE && DECL_STATIC_FUNCTION_P (olddecl))
2978         revert_static_member_fn (&newdecl, &f1, &p1);
2979       else if (TREE_CODE (f2) == METHOD_TYPE
2980                && DECL_STATIC_FUNCTION_P (newdecl))
2981         revert_static_member_fn (&olddecl, &f2, &p2);
2982
2983       /* Here we must take care of the case where new default
2984          parameters are specified.  Also, warn if an old
2985          declaration becomes ambiguous because default
2986          parameters may cause the two to be ambiguous.  */
2987       if (TREE_CODE (f1) != TREE_CODE (f2))
2988         {
2989           if (TREE_CODE (f1) == OFFSET_TYPE)
2990             cp_compiler_error ("`%D' redeclared as member function", newdecl);
2991           else
2992             cp_compiler_error ("`%D' redeclared as non-member function", newdecl);
2993           return 0;
2994         }
2995
2996       if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
2997         {
2998           if (! strict_prototypes_lang_c && DECL_LANGUAGE (olddecl) == lang_c
2999               && p2 == NULL_TREE)
3000             {
3001               types_match = self_promoting_args_p (p1);
3002               if (p1 == void_list_node)
3003                 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
3004             }
3005           else if (!strict_prototypes_lang_c && DECL_LANGUAGE (olddecl)==lang_c
3006                    && DECL_LANGUAGE (newdecl) == lang_c && p1 == NULL_TREE)
3007             {
3008               types_match = self_promoting_args_p (p2);
3009               TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
3010             }
3011           else
3012             types_match = compparms (p1, p2);
3013         }
3014       else
3015         types_match = 0;
3016     }
3017   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3018     {
3019       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3020                                 DECL_TEMPLATE_PARMS (olddecl)))
3021         return 0;
3022       
3023       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3024         types_match = 1;
3025       else
3026         types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
3027                                    DECL_TEMPLATE_RESULT (newdecl));
3028     }
3029   else
3030     {
3031       if (TREE_TYPE (newdecl) == error_mark_node)
3032         types_match = TREE_TYPE (olddecl) == error_mark_node;
3033       else if (TREE_TYPE (olddecl) == NULL_TREE)
3034         types_match = TREE_TYPE (newdecl) == NULL_TREE;
3035       else if (TREE_TYPE (newdecl) == NULL_TREE)
3036         types_match = 0;
3037       else
3038         types_match = comptypes (TREE_TYPE (newdecl),
3039                                  TREE_TYPE (olddecl),
3040                                  COMPARE_REDECLARATION);
3041     }
3042
3043   return types_match;
3044 }
3045
3046 /* If NEWDECL is `static' and an `extern' was seen previously,
3047    warn about it.  (OLDDECL may be NULL_TREE; NAME contains
3048    information about previous usage as an `extern'.)
3049
3050    Note that this does not apply to the C++ case of declaring
3051    a variable `extern const' and then later `const'.
3052
3053    Don't complain about built-in functions, since they are beyond
3054    the user's control.  */
3055
3056 static void
3057 warn_extern_redeclared_static (newdecl, olddecl)
3058      tree newdecl, olddecl;
3059 {
3060   tree name;
3061
3062   static const char *explicit_extern_static_warning
3063     = "`%D' was declared `extern' and later `static'";
3064   static const char *implicit_extern_static_warning
3065     = "`%D' was declared implicitly `extern' and later `static'";
3066
3067   if (TREE_CODE (newdecl) == TYPE_DECL)
3068     return;
3069
3070   name = DECL_ASSEMBLER_NAME (newdecl);
3071   if (TREE_PUBLIC (name) && DECL_THIS_STATIC (newdecl))
3072     {
3073       /* It's okay to redeclare an ANSI built-in function as static,
3074          or to declare a non-ANSI built-in function as anything.  */
3075       if (! (TREE_CODE (newdecl) == FUNCTION_DECL
3076              && olddecl != NULL_TREE
3077              && TREE_CODE (olddecl) == FUNCTION_DECL
3078              && DECL_ARTIFICIAL (olddecl)))
3079         {
3080           cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
3081                       ? implicit_extern_static_warning
3082                       : explicit_extern_static_warning, newdecl);
3083           if (olddecl != NULL_TREE)
3084             cp_pedwarn_at ("previous declaration of `%D'", olddecl);
3085         }
3086     }
3087 }
3088
3089 /* Handle when a new declaration NEWDECL has the same name as an old
3090    one OLDDECL in the same binding contour.  Prints an error message
3091    if appropriate.
3092
3093    If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
3094    Otherwise, return 0.  */
3095
3096 int
3097 duplicate_decls (newdecl, olddecl)
3098      tree newdecl, olddecl;
3099 {
3100   extern struct obstack permanent_obstack;
3101   unsigned olddecl_uid = DECL_UID (olddecl);
3102   int olddecl_friend = 0, types_match = 0;
3103   int new_defines_function = 0;
3104
3105   if (newdecl == olddecl)
3106     return 1;
3107
3108   types_match = decls_match (newdecl, olddecl);
3109
3110   /* If either the type of the new decl or the type of the old decl is an
3111      error_mark_node, then that implies that we have already issued an
3112      error (earlier) for some bogus type specification, and in that case,
3113      it is rather pointless to harass the user with yet more error message
3114      about the same declaration, so just pretend the types match here.  */
3115   if (TREE_TYPE (newdecl) == error_mark_node
3116       || TREE_TYPE (olddecl) == error_mark_node)
3117     types_match = 1;
3118  
3119   /* Check for redeclaration and other discrepancies. */
3120   if (TREE_CODE (olddecl) == FUNCTION_DECL
3121       && DECL_ARTIFICIAL (olddecl))
3122     {
3123       if (TREE_CODE (newdecl) != FUNCTION_DECL)
3124         {
3125           /* If you declare a built-in or predefined function name as static,
3126              the old definition is overridden, but optionally warn this was a
3127              bad choice of name.  */
3128           if (! TREE_PUBLIC (newdecl))
3129             {
3130               if (warn_shadow)
3131                 cp_warning ("shadowing %s function `%#D'",
3132                             DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3133                             olddecl);
3134               /* Discard the old built-in function.  */
3135               return 0;
3136             }
3137           /* If the built-in is not ansi, then programs can override
3138              it even globally without an error.  */
3139           else if (! DECL_BUILT_IN (olddecl))
3140             cp_warning ("library function `%#D' redeclared as non-function `%#D'",
3141                         olddecl, newdecl);
3142           else
3143             {
3144               cp_error ("declaration of `%#D'", newdecl);
3145               cp_error ("conflicts with built-in declaration `%#D'",
3146                         olddecl);
3147             }
3148           return 0;
3149         }
3150       else if (!types_match)
3151         {
3152           if ((DECL_LANGUAGE (newdecl) == lang_c
3153                && DECL_LANGUAGE (olddecl) == lang_c)
3154               || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3155                             TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3156             {
3157               /* A near match; override the builtin.  */
3158
3159               if (TREE_PUBLIC (newdecl))
3160                 {
3161                   cp_warning ("new declaration `%#D'", newdecl);
3162                   cp_warning ("ambiguates built-in declaration `%#D'",
3163                               olddecl);
3164                 }
3165               else if (warn_shadow)
3166                 cp_warning ("shadowing %s function `%#D'",
3167                             DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3168                             olddecl);
3169             }
3170           else
3171             /* Discard the old built-in function.  */
3172             return 0;
3173         }
3174     }
3175   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
3176     {
3177       if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
3178            && TREE_CODE (newdecl) != TYPE_DECL
3179            && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
3180                  && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
3181           || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
3182               && TREE_CODE (olddecl) != TYPE_DECL
3183               && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
3184                     && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
3185                         == TYPE_DECL))))
3186         {
3187           /* We do nothing special here, because C++ does such nasty
3188              things with TYPE_DECLs.  Instead, just let the TYPE_DECL
3189              get shadowed, and know that if we need to find a TYPE_DECL
3190              for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3191              slot of the identifier.  */
3192           return 0;
3193         }
3194
3195       if ((TREE_CODE (newdecl) == FUNCTION_DECL
3196            && DECL_FUNCTION_TEMPLATE_P (olddecl))
3197           || (TREE_CODE (olddecl) == FUNCTION_DECL
3198               && DECL_FUNCTION_TEMPLATE_P (newdecl)))
3199         return 0;
3200
3201       cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
3202       if (TREE_CODE (olddecl) == TREE_LIST)
3203         olddecl = TREE_VALUE (olddecl);
3204       cp_error_at ("previous declaration of `%#D'", olddecl);
3205
3206       /* New decl is completely inconsistent with the old one =>
3207          tell caller to replace the old one.  */
3208
3209       return 0;
3210     }
3211   else if (!types_match)
3212     {
3213       if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl))
3214         /* These are certainly not duplicate declarations; they're
3215            from different scopes.  */
3216         return 0;
3217
3218       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3219         {
3220           /* The name of a class template may not be declared to refer to
3221              any other template, class, function, object, namespace, value,
3222              or type in the same scope.  */
3223           if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
3224               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3225             {
3226               cp_error ("declaration of template `%#D'", newdecl);
3227               cp_error_at ("conflicts with previous declaration `%#D'",
3228                            olddecl);
3229             }
3230           else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
3231                    && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3232                    && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
3233                                  TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
3234                    && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3235                                            DECL_TEMPLATE_PARMS (olddecl)))
3236             {
3237               cp_error ("new declaration `%#D'", newdecl);
3238               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3239             }
3240           return 0;
3241         }
3242       if (TREE_CODE (newdecl) == FUNCTION_DECL)
3243         {
3244           if (DECL_LANGUAGE (newdecl) == lang_c
3245               && DECL_LANGUAGE (olddecl) == lang_c)
3246             {
3247               cp_error ("declaration of C function `%#D' conflicts with",
3248                         newdecl);
3249               cp_error_at ("previous declaration `%#D' here", olddecl);
3250             }
3251           else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3252                               TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3253             {
3254               cp_error ("new declaration `%#D'", newdecl);
3255               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3256             }
3257           else
3258             return 0;
3259         }
3260
3261       /* Already complained about this, so don't do so again.  */
3262       else if (current_class_type == NULL_TREE
3263           || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3264         {
3265           cp_error ("conflicting types for `%#D'", newdecl);
3266           cp_error_at ("previous declaration as `%#D'", olddecl);
3267         }
3268     }
3269   else if (TREE_CODE (newdecl) == FUNCTION_DECL 
3270             && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3271                  && (!DECL_TEMPLATE_INFO (newdecl)
3272                      || (DECL_TI_TEMPLATE (newdecl) 
3273                          != DECL_TI_TEMPLATE (olddecl))))
3274                 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3275                     && (!DECL_TEMPLATE_INFO (olddecl)
3276                         || (DECL_TI_TEMPLATE (olddecl) 
3277                             != DECL_TI_TEMPLATE (newdecl))))))
3278     /* It's OK to have a template specialization and a non-template
3279        with the same type, or to have specializations of two
3280        different templates with the same type.  Note that if one is a
3281        specialization, and the other is an instantiation of the same
3282        template, that we do not exit at this point.  That situation
3283        can occur if we instantiate a template class, and then
3284        specialize one of its methods.  This situation is legal, but
3285        the declarations must be merged in the usual way.  */
3286     return 0;
3287   else if (TREE_CODE (newdecl) == FUNCTION_DECL 
3288            && ((DECL_TEMPLATE_INSTANTIATION (olddecl) 
3289                 && !DECL_USE_TEMPLATE (newdecl))
3290                || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3291                    && !DECL_USE_TEMPLATE (olddecl))))
3292     /* One of the declarations is a template instantiation, and the
3293        other is not a template at all.  That's OK.  */
3294     return 0;
3295   else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3296            && DECL_NAMESPACE_ALIAS (newdecl)
3297            && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3298     /* Redeclaration of namespace alias, ignore it. */
3299     return 1;
3300   else
3301     {
3302       const char *errmsg = redeclaration_error_message (newdecl, olddecl);
3303       if (errmsg)
3304         {
3305           cp_error (errmsg, newdecl);
3306           if (DECL_NAME (olddecl) != NULL_TREE)
3307             cp_error_at ((DECL_INITIAL (olddecl)
3308                           && namespace_bindings_p ())
3309                          ? "`%#D' previously defined here"
3310                          : "`%#D' previously declared here", olddecl);
3311         }
3312       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3313                && DECL_INITIAL (olddecl) != NULL_TREE
3314                && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3315                && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3316         {
3317           /* Prototype decl follows defn w/o prototype.  */
3318           cp_warning_at ("prototype for `%#D'", newdecl);
3319           cp_warning_at ("follows non-prototype definition here", olddecl);
3320         }
3321       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3322                && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
3323         {
3324           /* extern "C" int foo ();
3325              int foo () { bar (); }
3326              is OK.  */
3327           if (current_lang_stack == current_lang_base)
3328             DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3329           else
3330             {
3331               cp_error_at ("previous declaration of `%#D' with %L linkage",
3332                            olddecl, DECL_LANGUAGE (olddecl));
3333               cp_error ("conflicts with new declaration with %L linkage",
3334                         DECL_LANGUAGE (newdecl));
3335             }
3336         }
3337
3338       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
3339         ;
3340       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
3341         {
3342           tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3343           tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3344           int i = 1;
3345
3346           if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3347             t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
3348         
3349           for (; t1 && t1 != void_list_node;
3350                t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3351             if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3352               {
3353                 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3354                                            TREE_PURPOSE (t2)))
3355                   {
3356                     if (pedantic)
3357                       {
3358                         cp_pedwarn ("default argument given for parameter %d of `%#D'",
3359                                     i, newdecl);
3360                         cp_pedwarn_at ("after previous specification in `%#D'",
3361                                        olddecl);
3362                       }
3363                   }
3364                 else
3365                   {
3366                     cp_error ("default argument given for parameter %d of `%#D'",
3367                               i, newdecl);
3368                     cp_error_at ("after previous specification in `%#D'",
3369                                  olddecl);
3370                   }
3371               }
3372
3373           if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
3374               && TREE_ADDRESSABLE (olddecl) && warn_inline)
3375             {
3376               cp_warning ("`%#D' was used before it was declared inline",
3377                           newdecl);
3378               cp_warning_at ("previous non-inline declaration here",
3379                              olddecl);
3380             }
3381         }
3382     }
3383
3384   /* If new decl is `static' and an `extern' was seen previously,
3385      warn about it.  */
3386   warn_extern_redeclared_static (newdecl, olddecl);
3387
3388   /* We have committed to returning 1 at this point.  */
3389   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3390     {
3391       /* Now that functions must hold information normally held
3392          by field decls, there is extra work to do so that
3393          declaration information does not get destroyed during
3394          definition.  */
3395       if (DECL_VINDEX (olddecl))
3396         DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
3397       if (DECL_CONTEXT (olddecl))
3398         DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
3399       if (DECL_CLASS_CONTEXT (olddecl))
3400         DECL_CLASS_CONTEXT (newdecl) = DECL_CLASS_CONTEXT (olddecl);
3401       if (DECL_PENDING_INLINE_INFO (newdecl) == (struct pending_inline *)0)
3402         DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
3403       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3404       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
3405       DECL_ABSTRACT_VIRTUAL_P (newdecl) |= DECL_ABSTRACT_VIRTUAL_P (olddecl);
3406       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
3407       DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
3408       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
3409       
3410       /* Optionally warn about more than one declaration for the same
3411          name, but don't warn about a function declaration followed by a
3412          definition.  */
3413       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3414           && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3415           /* Don't warn about extern decl followed by definition. */
3416           && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3417           /* Don't warn about friends, let add_friend take care of it. */
3418           && ! DECL_FRIEND_P (newdecl))
3419         {
3420           cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3421           cp_warning_at ("previous declaration of `%D'", olddecl);
3422         }
3423     }
3424
3425   /* Deal with C++: must preserve virtual function table size.  */
3426   if (TREE_CODE (olddecl) == TYPE_DECL)
3427     {
3428       register tree newtype = TREE_TYPE (newdecl);
3429       register tree oldtype = TREE_TYPE (olddecl);
3430
3431       if (newtype != error_mark_node && oldtype != error_mark_node
3432           && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3433         {
3434           CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3435           CLASSTYPE_FRIEND_CLASSES (newtype)
3436             = CLASSTYPE_FRIEND_CLASSES (oldtype);
3437         }
3438     }
3439
3440   /* Copy all the DECL_... slots specified in the new decl
3441      except for any that we copy here from the old type.  */
3442   DECL_MACHINE_ATTRIBUTES (newdecl) 
3443     = merge_machine_decl_attributes (olddecl, newdecl);
3444
3445   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3446     {
3447       if (! duplicate_decls (DECL_TEMPLATE_RESULT (newdecl),
3448                              DECL_TEMPLATE_RESULT (olddecl)))
3449         cp_error ("invalid redeclaration of %D", newdecl);
3450       TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
3451       DECL_TEMPLATE_SPECIALIZATIONS (olddecl) 
3452         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3453                    DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
3454  
3455       return 1;
3456     }
3457     
3458   if (types_match)
3459     {
3460       /* Automatically handles default parameters.  */
3461       tree oldtype = TREE_TYPE (olddecl);
3462       tree newtype;
3463
3464       /* Make sure we put the new type in the same obstack as the old one.  */
3465       if (oldtype)
3466         push_obstacks (TYPE_OBSTACK (oldtype), TYPE_OBSTACK (oldtype));
3467       else
3468         push_permanent_obstack ();
3469
3470       /* Merge the data types specified in the two decls.  */
3471       newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3472
3473       if (TREE_CODE (newdecl) == VAR_DECL)
3474         DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3475       /* Do this after calling `common_type' so that default
3476          parameters don't confuse us.  */
3477       else if (TREE_CODE (newdecl) == FUNCTION_DECL
3478           && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3479               != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3480         {
3481           TREE_TYPE (newdecl) = build_exception_variant (newtype,
3482                                                          TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
3483           TREE_TYPE (olddecl) = build_exception_variant (newtype,
3484                                                          TYPE_RAISES_EXCEPTIONS (oldtype));
3485
3486           if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3487               && DECL_SOURCE_LINE (olddecl) != 0
3488               && flag_exceptions
3489               && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
3490                                      TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
3491             {
3492               cp_error ("declaration of `%F' throws different exceptions",
3493                         newdecl);
3494               cp_error_at ("to previous declaration `%F'", olddecl);
3495             }
3496         }
3497       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3498
3499       /* Lay the type out, unless already done.  */
3500       if (! same_type_p (newtype, oldtype)
3501           && TREE_TYPE (newdecl) != error_mark_node
3502           && !(processing_template_decl && uses_template_parms (newdecl)))
3503         layout_type (TREE_TYPE (newdecl));
3504
3505       if ((TREE_CODE (newdecl) == VAR_DECL
3506            || TREE_CODE (newdecl) == PARM_DECL
3507            || TREE_CODE (newdecl) == RESULT_DECL
3508            || TREE_CODE (newdecl) == FIELD_DECL
3509            || TREE_CODE (newdecl) == TYPE_DECL)
3510           && !(processing_template_decl && uses_template_parms (newdecl)))
3511         layout_decl (newdecl, 0);
3512
3513       /* Merge the type qualifiers.  */
3514       if (TREE_READONLY (newdecl))
3515         TREE_READONLY (olddecl) = 1;
3516       if (TREE_THIS_VOLATILE (newdecl))
3517         TREE_THIS_VOLATILE (olddecl) = 1;
3518
3519       /* Merge the initialization information.  */
3520       if (DECL_INITIAL (newdecl) == NULL_TREE
3521           && DECL_INITIAL (olddecl) != NULL_TREE)
3522         {
3523           DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3524           DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3525           DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
3526           if (DECL_LANG_SPECIFIC (newdecl)
3527               && DECL_LANG_SPECIFIC (olddecl))
3528             DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
3529         }
3530
3531       /* Merge the section attribute.
3532          We want to issue an error if the sections conflict but that must be
3533          done later in decl_attributes since we are called before attributes
3534          are assigned.  */
3535       if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3536         DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3537
3538       /* Keep the old rtl since we can safely use it, unless it's the
3539          call to abort() used for abstract virtuals.  */
3540       if ((DECL_LANG_SPECIFIC (olddecl)
3541            && !DECL_ABSTRACT_VIRTUAL_P (olddecl))
3542           || DECL_RTL (olddecl) != DECL_RTL (abort_fndecl))
3543         DECL_RTL (newdecl) = DECL_RTL (olddecl);
3544
3545       pop_obstacks ();
3546     }
3547   /* If cannot merge, then use the new type and qualifiers,
3548      and don't preserve the old rtl.  */
3549   else
3550     {
3551       /* Clean out any memory we had of the old declaration.  */
3552       tree oldstatic = value_member (olddecl, static_aggregates);
3553       if (oldstatic)
3554         TREE_VALUE (oldstatic) = error_mark_node;
3555
3556       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3557       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3558       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3559       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3560     }
3561
3562   /* Merge the storage class information.  */
3563   DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
3564   DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
3565   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3566   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3567   if (! DECL_EXTERNAL (olddecl))
3568     DECL_EXTERNAL (newdecl) = 0;
3569   
3570   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
3571     {
3572       DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3573       DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
3574       DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
3575       DECL_TEMPLATE_INSTANTIATED (newdecl) 
3576         |= DECL_TEMPLATE_INSTANTIATED (olddecl);
3577       /* Don't really know how much of the language-specific
3578          values we should copy from old to new.  */
3579       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3580       DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3581       DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
3582       DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3583       olddecl_friend = DECL_FRIEND_P (olddecl);
3584
3585       /* Only functions have DECL_BEFRIENDING_CLASSES.  */
3586       if (TREE_CODE (newdecl) == FUNCTION_DECL
3587           || DECL_FUNCTION_TEMPLATE_P (newdecl))
3588         DECL_BEFRIENDING_CLASSES (newdecl)
3589           = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3590                      DECL_BEFRIENDING_CLASSES (olddecl));
3591     }
3592
3593   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3594     {
3595       if (DECL_TEMPLATE_INSTANTIATION (olddecl) 
3596           && !DECL_TEMPLATE_INSTANTIATION (newdecl)) 
3597         {
3598           /* If newdecl is not a specialization, then it is not a
3599              template-related function at all.  And that means that we
3600              shoud have exited above, returning 0.  */
3601           my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3602                               0);
3603
3604           if (TREE_USED (olddecl)) 
3605             /* From [temp.expl.spec]:
3606                
3607                If a template, a member template or the member of a class
3608                template is explicitly specialized then that
3609                specialization shall be declared before the first use of
3610                that specialization that would cause an implicit
3611                instantiation to take place, in every translation unit in
3612                which such a use occurs.  */
3613             cp_error ("explicit specialization of %D after first use", 
3614                       olddecl);
3615
3616           SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3617         }
3618       DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3619
3620       /* If either decl says `inline', this fn is inline, unless its
3621          definition was passed already.  */
3622       if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3623         DECL_INLINE (olddecl) = 1;
3624       DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3625
3626       if (! types_match)
3627         {
3628           DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3629           DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3630           DECL_RTL (olddecl) = DECL_RTL (newdecl);
3631         }
3632       if (! types_match || new_defines_function)
3633         {
3634           /* These need to be copied so that the names are available.
3635              Note that if the types do match, we'll preserve inline
3636              info and other bits, but if not, we won't.  */
3637           DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3638           DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
3639         }
3640       if (new_defines_function)
3641         /* If defining a function declared with other language
3642            linkage, use the previously declared language linkage.  */
3643         DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3644       else if (types_match)
3645         {
3646           /* If redeclaring a builtin function, and not a definition,
3647              it stays built in.  */
3648           if (DECL_BUILT_IN (olddecl))
3649             {
3650               DECL_BUILT_IN (newdecl) = 1;
3651               DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
3652               /* If we're keeping the built-in definition, keep the rtl,
3653                  regardless of declaration matches.  */
3654               DECL_RTL (newdecl) = DECL_RTL (olddecl);
3655             }
3656           else
3657             DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
3658
3659           DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
3660           if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
3661             /* Previously saved insns go together with
3662                the function's previous definition.  */
3663             DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3664           /* Don't clear out the arguments if we're redefining a function.  */
3665           if (DECL_ARGUMENTS (olddecl))
3666             DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3667         }
3668       if (DECL_LANG_SPECIFIC (olddecl))
3669         DECL_MAIN_VARIANT (newdecl) = DECL_MAIN_VARIANT (olddecl);
3670     }
3671
3672   if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3673     {
3674       NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3675     }
3676
3677   /* Now preserve various other info from the definition.  */
3678   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3679   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3680   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
3681   DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
3682
3683   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3684     {
3685       int function_size;
3686       struct lang_decl *ol = DECL_LANG_SPECIFIC (olddecl);
3687       struct lang_decl *nl = DECL_LANG_SPECIFIC (newdecl);
3688
3689       function_size = sizeof (struct tree_decl);
3690
3691       bcopy ((char *) newdecl + sizeof (struct tree_common),
3692              (char *) olddecl + sizeof (struct tree_common),
3693              function_size - sizeof (struct tree_common));
3694
3695       /* Can we safely free the storage used by newdecl?  */
3696
3697 #define ROUND(x) ((x + obstack_alignment_mask (&permanent_obstack)) \
3698                   & ~ obstack_alignment_mask (&permanent_obstack))
3699
3700       if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3701         {
3702           /* If newdecl is a template instantiation, it is possible that
3703              the following sequence of events has occurred:
3704
3705              o A friend function was declared in a class template.  The
3706              class template was instantiated.  
3707
3708              o The instantiation of the friend declaration was 
3709              recorded on the instantiation list, and is newdecl.  
3710
3711              o Later, however, instantiate_class_template called pushdecl
3712              on the newdecl to perform name injection.  But, pushdecl in
3713              turn called duplicate_decls when it discovered that another
3714              declaration of a global function with the same name already
3715              existed. 
3716
3717              o Here, in duplicate_decls, we decided to clobber newdecl.
3718
3719              If we're going to do that, we'd better make sure that
3720              olddecl, and not newdecl, is on the list of
3721              instantiations so that if we try to do the instantiation
3722              again we won't get the clobbered declaration.  */
3723
3724           tree tmpl = DECL_TI_TEMPLATE (newdecl); 
3725           tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); 
3726
3727           for (; decls; decls = TREE_CHAIN (decls))
3728             if (TREE_VALUE (decls) == newdecl)
3729               TREE_VALUE (decls) = olddecl;
3730         }
3731
3732       if (((char *)newdecl + ROUND (function_size) == (char *)nl
3733            && ((char *)newdecl + ROUND (function_size)
3734                + ROUND (sizeof (struct lang_decl))
3735                == obstack_next_free (&permanent_obstack)))
3736           || ((char *)newdecl + ROUND (function_size)
3737               == obstack_next_free (&permanent_obstack)))
3738         {
3739           DECL_MAIN_VARIANT (newdecl) = olddecl;
3740           DECL_LANG_SPECIFIC (olddecl) = ol;
3741           bcopy ((char *)nl, (char *)ol, sizeof (struct lang_decl));
3742
3743           obstack_free (&permanent_obstack, newdecl);
3744         }
3745       else if (LANG_DECL_PERMANENT (ol) && ol != nl)
3746         {
3747           if (DECL_MAIN_VARIANT (olddecl) == olddecl)
3748             {
3749               struct lang_decl *free_lang_decl = ol;
3750
3751               /* Save these lang_decls that would otherwise be lost.  */
3752               if (DECL_LANG_SPECIFIC (olddecl) == ol)
3753                 abort ();
3754
3755               free_lang_decl->u.next = free_lang_decl_chain;
3756               free_lang_decl_chain = free_lang_decl;
3757             }
3758           else
3759             {
3760               /* Storage leak.  */;
3761             }
3762         }
3763     }
3764   else
3765     {
3766       bcopy ((char *) newdecl + sizeof (struct tree_common),
3767              (char *) olddecl + sizeof (struct tree_common),
3768              sizeof (struct tree_decl) - sizeof (struct tree_common)
3769              + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3770     }
3771
3772   DECL_UID (olddecl) = olddecl_uid;
3773   if (olddecl_friend)
3774     DECL_FRIEND_P (olddecl) = 1;
3775
3776   /* NEWDECL contains the merged attribute lists.
3777      Update OLDDECL to be the same.  */
3778   DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3779
3780   return 1;
3781 }
3782
3783 /* Record a decl-node X as belonging to the current lexical scope.
3784    Check for errors (such as an incompatible declaration for the same
3785    name already seen in the same scope).
3786
3787    Returns either X or an old decl for the same name.
3788    If an old decl is returned, it may have been smashed
3789    to agree with what X says.  */
3790
3791 tree
3792 pushdecl (x)
3793      tree x;
3794 {
3795   register tree t;
3796   register tree name = DECL_ASSEMBLER_NAME (x);
3797   int need_new_binding = 1;
3798
3799   if (DECL_TEMPLATE_PARM_P (x))
3800     /* Template parameters have no context; they are not X::T even
3801        when declared within a class or namespace.  */
3802     ;
3803   else
3804     {
3805       if (current_function_decl && x != current_function_decl
3806           /* A local declaration for a function doesn't constitute
3807              nesting.  */
3808           && (TREE_CODE (x) != FUNCTION_DECL || DECL_INITIAL (x))
3809           /* Don't change DECL_CONTEXT of virtual methods.  */
3810           && (TREE_CODE (x) != FUNCTION_DECL || !DECL_VIRTUAL_P (x))
3811           && !DECL_CONTEXT (x))
3812         DECL_CONTEXT (x) = current_function_decl;
3813       if (!DECL_CONTEXT (x))
3814         DECL_CONTEXT (x) = FROB_CONTEXT (current_namespace);
3815     }
3816
3817   /* Type are looked up using the DECL_NAME, as that is what the rest of the
3818      compiler wants to use.  */
3819   if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
3820       || TREE_CODE (x) == NAMESPACE_DECL)
3821     name = DECL_NAME (x);
3822
3823   if (name)
3824     {
3825 #if 0
3826       /* Not needed...see below.  */
3827       char *file;
3828       int line;
3829 #endif
3830       if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3831         name = TREE_OPERAND (name, 0);
3832       
3833       /* Namespace-scoped variables are not found in the current level. */
3834       if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x))
3835         t = namespace_binding (name, DECL_CONTEXT (x));
3836       else
3837         t = lookup_name_current_level (name);
3838       if (t == error_mark_node)
3839         {
3840           /* error_mark_node is 0 for a while during initialization!  */
3841           t = NULL_TREE;
3842           cp_error_at ("`%#D' used prior to declaration", x);
3843         }
3844
3845       else if (t != NULL_TREE)
3846         {
3847 #if 0
3848           /* This is turned off until I have time to do it right (bpk).  */
3849           /* With the code below that uses it...  */
3850           file = DECL_SOURCE_FILE (t);
3851           line = DECL_SOURCE_LINE (t);
3852 #endif
3853           if (TREE_CODE (t) == PARM_DECL)
3854             {
3855               if (DECL_CONTEXT (t) == NULL_TREE)
3856                 fatal ("parse errors have confused me too much");
3857
3858               /* Check for duplicate params.  */
3859               if (duplicate_decls (x, t))
3860                 return t;
3861             }
3862           else if (((TREE_CODE (x) == FUNCTION_DECL && DECL_LANGUAGE (x) == lang_c)
3863                     || DECL_FUNCTION_TEMPLATE_P (x))
3864                    && is_overloaded_fn (t))
3865             /* Don't do anything just yet. */;
3866           else if (t == wchar_decl_node)
3867             {
3868               if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
3869                 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
3870
3871               /* Throw away the redeclaration.  */
3872               return t;
3873             }
3874           else if (TREE_CODE (t) != TREE_CODE (x))
3875             {
3876               if (duplicate_decls (x, t))
3877                 return t;
3878             }
3879           else if (duplicate_decls (x, t))
3880             {
3881 #if 0
3882               /* This is turned off until I have time to do it right (bpk).  */
3883
3884               /* Also warn if they did a prototype with `static' on it, but
3885                  then later left the `static' off.  */
3886               if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
3887                 {
3888                   if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3889                     return t;
3890
3891                   if (extra_warnings)
3892                     {
3893                       cp_warning ("`static' missing from declaration of `%D'",
3894                                   t);
3895                       warning_with_file_and_line (file, line,
3896                                                   "previous declaration of `%s'",
3897                                                   decl_as_string (t, 0));
3898                     }
3899
3900                   /* Now fix things so it'll do what they expect.  */
3901                   if (current_function_decl)
3902                     TREE_PUBLIC (current_function_decl) = 0;
3903                 }
3904               /* Due to interference in memory reclamation (X may be
3905                  obstack-deallocated at this point), we must guard against
3906                  one really special case.  [jason: This should be handled
3907                  by start_function]  */
3908               if (current_function_decl == x)
3909                 current_function_decl = t;
3910 #endif
3911               if (TREE_CODE (t) == TYPE_DECL)
3912                 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
3913               else if (TREE_CODE (t) == FUNCTION_DECL)
3914                 check_default_args (t);
3915
3916               return t;
3917             }
3918           else if (DECL_MAIN_P (x))
3919             {
3920               /* A redeclaration of main, but not a duplicate of the
3921                  previous one. 
3922
3923                  [basic.start.main]
3924
3925                  This function shall not be overloaded.  */
3926               cp_error_at ("invalid redeclaration of `%D'", t);
3927               cp_error ("as `%D'", x);
3928               /* We don't try to push this declaration since that
3929                  causes a crash.  */
3930               return x;
3931             }
3932         }
3933
3934       check_template_shadow (x);
3935
3936       /* If this is a function conjured up by the backend, massage it
3937          so it looks friendly.  */
3938       if (TREE_CODE (x) == FUNCTION_DECL
3939           && ! DECL_LANG_SPECIFIC (x))
3940         {
3941           retrofit_lang_decl (x);
3942           DECL_LANGUAGE (x) = lang_c;
3943         }
3944
3945       if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_FUNCTION_MEMBER_P (x))
3946         {
3947           t = push_overloaded_decl (x, PUSH_LOCAL);
3948           if (t != x || DECL_LANGUAGE (x) == lang_c)
3949             return t;
3950           if (!namespace_bindings_p ())
3951             /* We do not need to create a binding for this name;
3952                push_overloaded_decl will have already done so if
3953                necessary.  */
3954             need_new_binding = 0;
3955         }
3956       else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
3957         return push_overloaded_decl (x, PUSH_GLOBAL);
3958
3959       /* If declaring a type as a typedef, copy the type (unless we're
3960          at line 0), and install this TYPE_DECL as the new type's typedef
3961          name.  See the extensive comment in ../c-decl.c (pushdecl). */
3962       if (TREE_CODE (x) == TYPE_DECL)
3963         {
3964           tree type = TREE_TYPE (x);
3965           if (DECL_SOURCE_LINE (x) == 0)
3966             {
3967               if (TYPE_NAME (type) == 0)
3968                 TYPE_NAME (type) = x;
3969             }
3970           else if (type != error_mark_node && TYPE_NAME (type) != x
3971                    /* We don't want to copy the type when all we're
3972                       doing is making a TYPE_DECL for the purposes of
3973                       inlining.  */
3974                    && (!TYPE_NAME (type) 
3975                        || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
3976             {
3977               push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
3978
3979               DECL_ORIGINAL_TYPE (x) = type;
3980               type = build_type_copy (type);
3981               TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
3982               TYPE_NAME (type) = x;
3983               TREE_TYPE (x) = type;
3984
3985               pop_obstacks ();
3986             }
3987
3988           if (type != error_mark_node
3989               && TYPE_NAME (type)
3990               && TYPE_IDENTIFIER (type))
3991             set_identifier_type_value_with_scope (DECL_NAME (x), type, 
3992                                                   current_binding_level);
3993
3994         }
3995
3996       /* Multiple external decls of the same identifier ought to match.
3997
3998          We get warnings about inline functions where they are defined.
3999          We get warnings about other functions from push_overloaded_decl.
4000          
4001          Avoid duplicate warnings where they are used.  */
4002       if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
4003         {
4004           tree decl;
4005
4006           if (IDENTIFIER_NAMESPACE_VALUE (name) != NULL_TREE
4007               && (DECL_EXTERNAL (IDENTIFIER_NAMESPACE_VALUE (name))
4008                   || TREE_PUBLIC (IDENTIFIER_NAMESPACE_VALUE (name))))
4009             decl = IDENTIFIER_NAMESPACE_VALUE (name);
4010           else
4011             decl = NULL_TREE;
4012
4013           if (decl
4014               /* If different sort of thing, we already gave an error.  */
4015               && TREE_CODE (decl) == TREE_CODE (x)
4016               && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
4017             {
4018               cp_pedwarn ("type mismatch with previous external decl", x);
4019               cp_pedwarn_at ("previous external decl of `%#D'", decl);
4020             }
4021         }
4022
4023       /* This name is new in its binding level.
4024          Install the new declaration and return it.  */
4025       if (namespace_bindings_p ())
4026         {
4027           /* Install a global value.  */
4028
4029           /* If the first global decl has external linkage,
4030              warn if we later see static one.  */
4031           if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
4032             TREE_PUBLIC (name) = 1;
4033
4034           if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
4035                 && t != NULL_TREE))
4036             {
4037               if (TREE_CODE (x) == FUNCTION_DECL)
4038                 my_friendly_assert 
4039                   ((IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
4040                   || (IDENTIFIER_GLOBAL_VALUE (name) == x), 378);
4041               SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
4042             }
4043
4044           /* Don't forget if the function was used via an implicit decl.  */
4045           if (IDENTIFIER_IMPLICIT_DECL (name)
4046               && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
4047             TREE_USED (x) = 1;
4048
4049           /* Don't forget if its address was taken in that way.  */
4050           if (IDENTIFIER_IMPLICIT_DECL (name)
4051               && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
4052             TREE_ADDRESSABLE (x) = 1;
4053
4054           /* Warn about mismatches against previous implicit decl.  */
4055           if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
4056               /* If this real decl matches the implicit, don't complain.  */
4057               && ! (TREE_CODE (x) == FUNCTION_DECL
4058                     && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
4059             cp_warning
4060               ("`%D' was previously implicitly declared to return `int'", x);
4061
4062           /* If new decl is `static' and an `extern' was seen previously,
4063              warn about it.  */
4064           if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
4065             warn_extern_redeclared_static (x, t);
4066         }
4067       else
4068         {
4069           /* Here to install a non-global value.  */
4070           tree oldlocal = IDENTIFIER_VALUE (name);
4071           tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
4072
4073           if (need_new_binding)
4074             {
4075               push_local_binding (name, x, 0);
4076               /* Because push_local_binding will hook X on to the
4077                  current_binding_level's name list, we don't want to
4078                  do that again below.  */
4079               need_new_binding = 0;
4080             }
4081
4082           /* If this is a TYPE_DECL, push it into the type value slot.  */
4083           if (TREE_CODE (x) == TYPE_DECL)
4084             set_identifier_type_value_with_scope (name, TREE_TYPE (x), 
4085                                                   current_binding_level);
4086
4087           /* Clear out any TYPE_DECL shadowed by a namespace so that
4088              we won't think this is a type.  The C struct hack doesn't
4089              go through namespaces.  */
4090           if (TREE_CODE (x) == NAMESPACE_DECL)
4091             set_identifier_type_value_with_scope (name, NULL_TREE, 
4092                                                   current_binding_level);
4093
4094           /* If this is an extern function declaration, see if we
4095              have a global definition or declaration for the function.  */
4096           if (oldlocal == NULL_TREE
4097               && DECL_EXTERNAL (x)
4098               && oldglobal != NULL_TREE
4099               && TREE_CODE (x) == FUNCTION_DECL
4100               && TREE_CODE (oldglobal) == FUNCTION_DECL)
4101             {
4102               /* We have one.  Their types must agree.  */
4103               if (decls_match (x, oldglobal))
4104                 /* OK */;
4105               else
4106                 {
4107                   cp_warning ("extern declaration of `%#D' doesn't match", x);
4108                   cp_warning_at ("global declaration `%#D'", oldglobal);
4109                 }
4110             }
4111           /* If we have a local external declaration,
4112              and no file-scope declaration has yet been seen,
4113              then if we later have a file-scope decl it must not be static.  */
4114           if (oldlocal == NULL_TREE
4115               && oldglobal == NULL_TREE
4116               && DECL_EXTERNAL (x)
4117               && TREE_PUBLIC (x))
4118             TREE_PUBLIC (name) = 1;
4119
4120           if (DECL_FROM_INLINE (x))
4121             /* Inline decls shadow nothing.  */;
4122
4123           /* Warn if shadowing an argument at the top level of the body.  */
4124           else if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
4125                    && TREE_CODE (oldlocal) == PARM_DECL
4126                    /* Don't complain if it's from an enclosing function.  */
4127                    && DECL_CONTEXT (oldlocal) == current_function_decl
4128                    && TREE_CODE (x) != PARM_DECL)
4129             {
4130               /* Go to where the parms should be and see if we
4131                  find them there.  */
4132               struct binding_level *b = current_binding_level->level_chain;
4133
4134               if (cleanup_label)
4135                 b = b->level_chain;
4136
4137               /* ARM $8.3 */
4138               if (b->parm_flag == 1)
4139                 cp_error ("declaration of `%#D' shadows a parameter", name);
4140             }
4141           else if (warn_shadow && oldlocal != NULL_TREE
4142                    && current_binding_level->is_for_scope
4143                    && !DECL_DEAD_FOR_LOCAL (oldlocal))
4144             {
4145               warning ("variable `%s' shadows local",
4146                        IDENTIFIER_POINTER (name));
4147               cp_warning_at ("  this is the shadowed declaration", oldlocal);
4148             }              
4149           /* Maybe warn if shadowing something else.  */
4150           else if (warn_shadow && !DECL_EXTERNAL (x)
4151                    /* No shadow warnings for internally generated vars.  */
4152                    && ! DECL_ARTIFICIAL (x)
4153                    /* No shadow warnings for vars made for inlining.  */
4154                    && ! DECL_FROM_INLINE (x))
4155             {
4156               const char *warnstring = NULL;
4157
4158               if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
4159                 warnstring = "declaration of `%s' shadows a parameter";
4160               else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
4161                        && current_class_ptr
4162                        && !TREE_STATIC (name))
4163                 warnstring = "declaration of `%s' shadows a member of `this'";
4164               else if (oldlocal != NULL_TREE)
4165                 warnstring = "declaration of `%s' shadows previous local";
4166               else if (oldglobal != NULL_TREE)
4167                 /* XXX shadow warnings in outer-more namespaces */
4168                 warnstring = "declaration of `%s' shadows global declaration";
4169
4170               if (warnstring)
4171                 warning (warnstring, IDENTIFIER_POINTER (name));
4172             }
4173         }
4174
4175       if (TREE_CODE (x) == FUNCTION_DECL)
4176         check_default_args (x);
4177
4178       /* Keep count of variables in this level with incomplete type.  */
4179       if (TREE_CODE (x) == VAR_DECL
4180           && TREE_TYPE (x) != error_mark_node
4181           && ((TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
4182                && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
4183               /* RTTI TD entries are created while defining the type_info.  */
4184               || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
4185                   && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
4186         current_binding_level->incomplete 
4187           = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
4188     }
4189
4190   if (need_new_binding)
4191     {
4192       /* Put decls on list in reverse order.
4193          We will reverse them later if necessary.  */
4194       TREE_CHAIN (x) = current_binding_level->names;
4195       current_binding_level->names = x;
4196       if (current_binding_level == global_binding_level
4197           && !TREE_PERMANENT (x))
4198         my_friendly_abort (124);
4199     }
4200
4201   return x;
4202 }
4203
4204 /* Same as pushdecl, but define X in binding-level LEVEL.  We rely on the
4205    caller to set DECL_CONTEXT properly.  */
4206
4207 static tree
4208 pushdecl_with_scope (x, level)
4209      tree x;
4210      struct binding_level *level;
4211 {
4212   register struct binding_level *b;
4213   tree function_decl = current_function_decl;
4214
4215   current_function_decl = NULL_TREE;
4216   if (level->parm_flag == 2)
4217     {
4218       b = class_binding_level;
4219       class_binding_level = level;
4220       pushdecl_class_level (x);
4221       class_binding_level = b;
4222     }
4223   else
4224     {
4225       b = current_binding_level;
4226       current_binding_level = level;
4227       x = pushdecl (x);
4228       current_binding_level = b;
4229     }
4230   current_function_decl = function_decl;
4231   return x;
4232 }
4233
4234 /* Like pushdecl, only it places X in the current namespace,
4235    if appropriate.  */
4236
4237 tree
4238 pushdecl_namespace_level (x)
4239      tree x;
4240 {
4241   register struct binding_level *b = current_binding_level;
4242   register tree t;
4243
4244   t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
4245
4246   /* Now, the type_shadowed stack may screw us.  Munge it so it does
4247      what we want.  */
4248   if (TREE_CODE (x) == TYPE_DECL)
4249     {
4250       tree name = DECL_NAME (x);
4251       tree newval;
4252       tree *ptr = (tree *)0;
4253       for (; b != global_binding_level; b = b->level_chain)
4254         {
4255           tree shadowed = b->type_shadowed;
4256           for (; shadowed; shadowed = TREE_CHAIN (shadowed))
4257             if (TREE_PURPOSE (shadowed) == name)
4258               {
4259                 ptr = &TREE_VALUE (shadowed);
4260                 /* Can't break out of the loop here because sometimes
4261                    a binding level will have duplicate bindings for
4262                    PT names.  It's gross, but I haven't time to fix it.  */
4263               }
4264         }
4265       newval = TREE_TYPE (x);
4266       if (ptr == (tree *)0)
4267         {
4268           /* @@ This shouldn't be needed.  My test case "zstring.cc" trips
4269              up here if this is changed to an assertion.  --KR  */
4270           SET_IDENTIFIER_TYPE_VALUE (name, newval);
4271         }
4272       else
4273         {
4274           *ptr = newval;
4275         }
4276     }
4277   return t;
4278 }
4279
4280 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4281    if appropriate.  */
4282
4283 tree
4284 pushdecl_top_level (x)
4285      tree x;
4286 {
4287   tree cur_namespace = current_namespace;
4288   current_namespace = global_namespace;
4289   x = pushdecl_namespace_level (x);
4290   current_namespace = cur_namespace;
4291   return x;
4292 }
4293
4294 /* Make the declaration of X appear in CLASS scope.  */
4295
4296 void
4297 pushdecl_class_level (x)
4298      tree x;
4299 {
4300   /* Don't use DECL_ASSEMBLER_NAME here!  Everything that looks in class
4301      scope looks for the pre-mangled name.  */
4302   register tree name;
4303
4304   if (TREE_CODE (x) == OVERLOAD)
4305     x = OVL_CURRENT (x);
4306   name = DECL_NAME (x);
4307
4308   if (name)
4309     {
4310       push_class_level_binding (name, x);
4311       if (TREE_CODE (x) == TYPE_DECL)
4312         set_identifier_type_value (name, TREE_TYPE (x));
4313     }
4314   else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
4315     {
4316       tree f;
4317
4318       for (f = TYPE_FIELDS (TREE_TYPE (x));
4319            f;
4320            f = TREE_CHAIN (f))
4321         pushdecl_class_level (f);
4322     }
4323 }
4324
4325 /* Enter DECL into the symbol table, if that's appropriate.  Returns
4326    DECL, or a modified version thereof.  */
4327
4328 tree
4329 maybe_push_decl (decl)
4330      tree decl;
4331 {
4332   tree type = TREE_TYPE (decl);
4333
4334   /* Add this decl to the current binding level, but not if it comes
4335      from another scope, e.g. a static member variable.  TEM may equal
4336      DECL or it may be a previous decl of the same name.  */
4337   if ((TREE_CODE (decl) != PARM_DECL 
4338        && DECL_CONTEXT (decl) != NULL_TREE 
4339        /* Definitions of namespace members outside their namespace are
4340           possible. */
4341        && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4342       || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
4343       || TREE_CODE (type) == UNKNOWN_TYPE
4344       /* The declaration of a template specialization does not affect
4345          the functions available for overload resolution, so we do not
4346          call pushdecl.  */
4347       || (TREE_CODE (decl) == FUNCTION_DECL
4348           && DECL_TEMPLATE_SPECIALIZATION (decl)))
4349     return decl;
4350   else
4351     return pushdecl (decl);
4352 }
4353
4354 #if 0
4355 /* This function is used to push the mangled decls for nested types into
4356    the appropriate scope.  Previously pushdecl_top_level was used, but that
4357    is incorrect for members of local classes.  */
4358
4359 void
4360 pushdecl_nonclass_level (x)
4361      tree x;
4362 {
4363   struct binding_level *b = current_binding_level;
4364
4365   my_friendly_assert (b->parm_flag != 2, 180);
4366
4367 #if 0
4368   /* Get out of template binding levels */
4369   while (b->pseudo_global)
4370     b = b->level_chain;
4371 #endif
4372
4373   pushdecl_with_scope (x, b);
4374 }
4375 #endif
4376
4377 /* Make the declaration(s) of X appear in CLASS scope
4378    under the name NAME.  */
4379
4380 void
4381 push_class_level_binding (name, x)
4382      tree name;
4383      tree x;
4384 {
4385   tree binding;
4386   /* The class_binding_level will be NULL if x is a template 
4387      parameter name in a member template.  */
4388   if (!class_binding_level)
4389     return;
4390
4391   /* Make sure that this new member does not have the same name
4392      as a template parameter.  */
4393   if (TYPE_BEING_DEFINED (current_class_type))
4394     check_template_shadow (x);
4395
4396   /* If this declaration shadows a declaration from an enclosing
4397      class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4398      we leave this class.  Record the shadowed declaration here.  */
4399   binding = IDENTIFIER_BINDING (name);
4400   if (binding 
4401       && ((TREE_CODE (x) == OVERLOAD
4402            && BINDING_VALUE (binding)
4403            && is_overloaded_fn (BINDING_VALUE (binding)))
4404           || INHERITED_VALUE_BINDING_P (binding)))
4405     {
4406       tree shadow;
4407       tree old_decl;
4408
4409       /* If the old binding was from a base class, and was for a tag
4410          name, slide it over to make room for the new binding.  The
4411          old binding is still visible if explicitly qualified with a
4412          class-key.  */
4413       if (INHERITED_VALUE_BINDING_P (binding)
4414           && BINDING_VALUE (binding)
4415           && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
4416           && DECL_ARTIFICIAL (BINDING_VALUE (binding))
4417           && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
4418         {
4419           old_decl = BINDING_TYPE (binding);
4420           BINDING_TYPE (binding) = BINDING_VALUE (binding);
4421           BINDING_VALUE (binding) = NULL_TREE;
4422           INHERITED_VALUE_BINDING_P (binding) = 0;
4423         }
4424       else
4425         old_decl = BINDING_VALUE (binding);
4426
4427       /* There was already a binding for X containing fewer
4428          functions than are named in X.  Find the previous
4429          declaration of X on the class-shadowed list, and update it.  */
4430       for (shadow = class_binding_level->class_shadowed;
4431            shadow;
4432            shadow = TREE_CHAIN (shadow))
4433         if (TREE_PURPOSE (shadow) == name
4434             && TREE_TYPE (shadow) == old_decl)
4435           {
4436             BINDING_VALUE (binding) = x;
4437             INHERITED_VALUE_BINDING_P (binding) = 0;
4438             TREE_TYPE (shadow) = x;
4439             return;
4440           }
4441     }
4442
4443   /* If we didn't replace an existing binding, put the binding on the
4444      stack of bindings for the identifier, and update
4445      IDENTIFIER_CLASS_VALUE.  */
4446   if (push_class_binding (name, x))
4447     {
4448       push_cache_obstack ();
4449       class_binding_level->class_shadowed
4450         = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
4451                      class_binding_level->class_shadowed);
4452       pop_obstacks ();
4453       /* Record the value we are binding NAME to so that we can know
4454          what to pop later.  */
4455       TREE_TYPE (class_binding_level->class_shadowed) = x;
4456     }
4457 }
4458
4459 /* Insert another USING_DECL into the current binding level,
4460    returning this declaration. If this is a redeclaration,
4461    do nothing and return NULL_TREE.  */
4462
4463 tree
4464 push_using_decl (scope, name)
4465      tree scope;
4466      tree name;
4467 {
4468   tree decl;
4469   
4470   my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4471   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4472   for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4473     if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4474       break;
4475   if (decl)
4476     return NULL_TREE;
4477   decl = build_lang_decl (USING_DECL, name, void_type_node);
4478   DECL_INITIAL (decl) = scope;
4479   TREE_CHAIN (decl) = current_binding_level->usings;
4480   current_binding_level->usings = decl;
4481   return decl;
4482 }
4483
4484 /* Add namespace to using_directives. Return NULL_TREE if nothing was
4485    changed (i.e. there was already a directive), or the fresh
4486    TREE_LIST otherwise.  */
4487
4488 tree
4489 push_using_directive (used)
4490      tree used;
4491 {
4492   tree ud = current_binding_level->using_directives;
4493   tree iter, ancestor;
4494   
4495   /* Check if we already have this. */
4496   if (purpose_member (used, ud) != NULL_TREE)
4497     return NULL_TREE;
4498
4499   /* Recursively add all namespaces used. */
4500   for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4501     push_using_directive (TREE_PURPOSE (iter));
4502
4503   ancestor = namespace_ancestor (current_decl_namespace (), used);
4504   ud = current_binding_level->using_directives;
4505   ud = perm_tree_cons (used, ancestor, ud);
4506   current_binding_level->using_directives = ud;
4507   return ud;
4508 }
4509
4510 /* DECL is a FUNCTION_DECL for a non-member function, which may have
4511    other definitions already in place.  We get around this by making
4512    the value of the identifier point to a list of all the things that
4513    want to be referenced by that name.  It is then up to the users of
4514    that name to decide what to do with that list.
4515
4516    DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its DECL_RESULT
4517    slot.  It is dealt with the same way.
4518
4519    FLAGS is a bitwise-or of the following values:
4520      PUSH_LOCAL: Bind DECL in the current scope, rather than at
4521                  namespace scope.
4522      PUSH_USING: DECL is being pushed as the result of a using
4523                  declaration. 
4524
4525    The value returned may be a previous declaration if we guessed wrong
4526    about what language DECL should belong to (C or C++).  Otherwise,
4527    it's always DECL (and never something that's not a _DECL).  */
4528
4529 tree
4530 push_overloaded_decl (decl, flags)
4531      tree decl;
4532      int flags;
4533 {
4534   tree name = DECL_NAME (decl);
4535   tree old;
4536   tree new_binding;
4537   int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
4538
4539   if (doing_global)
4540     old = namespace_binding (name, DECL_CONTEXT (decl));
4541   else
4542     old = lookup_name_current_level (name);
4543
4544   if (old)
4545     {
4546       if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
4547         {
4548           tree t = TREE_TYPE (old);
4549           if (IS_AGGR_TYPE (t) && warn_shadow
4550               && (! DECL_IN_SYSTEM_HEADER (decl)
4551                   || ! DECL_IN_SYSTEM_HEADER (old)))
4552             cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
4553           old = NULL_TREE;
4554         }
4555       else if (is_overloaded_fn (old))
4556         {
4557           tree tmp;
4558           
4559           for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
4560             {
4561               tree fn = OVL_CURRENT (tmp);
4562
4563               if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4564                   && !(flags & PUSH_USING)
4565                   && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4566                                 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4567                 cp_error ("`%#D' conflicts with previous using declaration `%#D'",
4568                           decl, fn);
4569               
4570               if (duplicate_decls (decl, fn))
4571                 return fn;
4572             }
4573         }
4574       else
4575         {
4576           cp_error_at ("previous non-function declaration `%#D'", old);
4577           cp_error ("conflicts with function declaration `%#D'", decl);
4578           return decl;
4579         }
4580     }
4581
4582   if (old || TREE_CODE (decl) == TEMPLATE_DECL)
4583     {
4584       if (old && TREE_CODE (old) != OVERLOAD)
4585         new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4586       else
4587         new_binding = ovl_cons (decl, old);
4588       if (flags & PUSH_USING)
4589         OVL_USED (new_binding) = 1;
4590     }
4591   else
4592     /* NAME is not ambiguous.  */
4593     new_binding = decl;
4594
4595   if (doing_global)
4596     set_namespace_binding (name, current_namespace, new_binding);
4597   else
4598     {
4599       /* We only create an OVERLOAD if there was a previous binding at
4600          this level, or if decl is a template. In the former case, we
4601          need to remove the old binding and replace it with the new
4602          binding.  We must also run through the NAMES on the binding
4603          level where the name was bound to update the chain.  */
4604
4605       if (TREE_CODE (new_binding) == OVERLOAD && old)
4606         {
4607           tree *d;
4608           
4609           for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4610                *d;
4611                d = &TREE_CHAIN (*d))
4612             if (*d == old
4613                 || (TREE_CODE (*d) == TREE_LIST
4614                     && TREE_VALUE (*d) == old))
4615               {
4616                 if (TREE_CODE (*d) == TREE_LIST)
4617                   /* Just replace the old binding with the new.  */
4618                   TREE_VALUE (*d) = new_binding;
4619                 else
4620                   /* Build a TREE_LIST to wrap the OVERLOAD.  */
4621                   *d = build_tree_list (NULL_TREE, new_binding);
4622
4623                 /* And update the CPLUS_BINDING node.  */
4624                 BINDING_VALUE (IDENTIFIER_BINDING (name))
4625                   = new_binding;
4626                 return decl;
4627               }
4628
4629           /* We should always find a previous binding in this case.  */
4630           my_friendly_abort (0);
4631         }
4632
4633       /* Install the new binding.  */
4634       push_local_binding (name, new_binding, flags);
4635     }
4636
4637   return decl;
4638 }
4639 \f
4640 /* Generate an implicit declaration for identifier FUNCTIONID
4641    as a function of type int ().  Print a warning if appropriate.  */
4642
4643 tree
4644 implicitly_declare (functionid)
4645      tree functionid;
4646 {
4647   register tree decl;
4648   int temp = allocation_temporary_p ();
4649
4650   push_obstacks_nochange ();
4651
4652   /* Save the decl permanently so we can warn if definition follows.
4653      In ANSI C, warn_implicit is usually false, so the saves little space.
4654      But in C++, it's usually true, hence the extra code.  */
4655   if (temp && (! warn_implicit || toplevel_bindings_p ()))
4656     end_temporary_allocation ();
4657
4658   /* We used to reuse an old implicit decl here,
4659      but this loses with inline functions because it can clobber
4660      the saved decl chains.  */
4661   decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4662
4663   DECL_EXTERNAL (decl) = 1;
4664   TREE_PUBLIC (decl) = 1;
4665
4666   /* ANSI standard says implicit declarations are in the innermost block.
4667      So we record the decl in the standard fashion.  */
4668   pushdecl (decl);
4669   rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4670
4671   if (warn_implicit
4672       /* Only one warning per identifier.  */
4673       && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4674     {
4675       cp_pedwarn ("implicit declaration of function `%#D'", decl);
4676     }
4677
4678   SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4679
4680   pop_obstacks ();
4681
4682   return decl;
4683 }
4684
4685 /* Return zero if the declaration NEWDECL is valid
4686    when the declaration OLDDECL (assumed to be for the same name)
4687    has already been seen.
4688    Otherwise return an error message format string with a %s
4689    where the identifier should go.  */
4690
4691 static const char *
4692 redeclaration_error_message (newdecl, olddecl)
4693      tree newdecl, olddecl;
4694 {
4695   if (TREE_CODE (newdecl) == TYPE_DECL)
4696     {
4697       /* Because C++ can put things into name space for free,
4698          constructs like "typedef struct foo { ... } foo"
4699          would look like an erroneous redeclaration.  */
4700       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
4701         return 0;
4702       else
4703         return "redefinition of `%#D'";
4704     }
4705   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4706     {
4707       /* If this is a pure function, its olddecl will actually be
4708          the original initialization to `0' (which we force to call
4709          abort()).  Don't complain about redefinition in this case.  */
4710       if (DECL_LANG_SPECIFIC (olddecl) && DECL_ABSTRACT_VIRTUAL_P (olddecl))
4711         return 0;
4712
4713       /* If both functions come from different namespaces, this is not
4714          a redeclaration - this is a conflict with a used function. */
4715       if (DECL_NAMESPACE_SCOPE_P (olddecl)
4716           && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
4717         return "`%D' conflicts with used function";
4718
4719       /* We'll complain about linkage mismatches in
4720          warn_extern_redeclared_static.  */
4721
4722       /* Defining the same name twice is no good.  */
4723       if (DECL_INITIAL (olddecl) != NULL_TREE
4724           && DECL_INITIAL (newdecl) != NULL_TREE)
4725         {
4726           if (DECL_NAME (olddecl) == NULL_TREE)
4727             return "`%#D' not declared in class";
4728           else
4729             return "redefinition of `%#D'";
4730         }
4731       return 0;
4732     }
4733   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4734     {
4735       if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
4736            && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4737            && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4738           || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
4739               && TYPE_SIZE (TREE_TYPE (newdecl))
4740               && TYPE_SIZE (TREE_TYPE (olddecl))))
4741         return "redefinition of `%#D'";
4742       return 0;
4743     }
4744   else if (toplevel_bindings_p ())
4745     {
4746       /* Objects declared at top level:  */
4747       /* If at least one is a reference, it's ok.  */
4748       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
4749         return 0;
4750       /* Reject two definitions.  */
4751       return "redefinition of `%#D'";
4752     }
4753   else
4754     {
4755       /* Objects declared with block scope:  */
4756       /* Reject two definitions, and reject a definition
4757          together with an external reference.  */
4758       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
4759         return "redeclaration of `%#D'";
4760       return 0;
4761     }
4762 }
4763 \f
4764 /* Get the LABEL_DECL corresponding to identifier ID as a label.
4765    Create one if none exists so far for the current function.
4766    This function is called for both label definitions and label references.  */
4767
4768 tree
4769 lookup_label (id)
4770      tree id;
4771 {
4772   register tree decl = IDENTIFIER_LABEL_VALUE (id);
4773
4774   if (current_function_decl == NULL_TREE)
4775     {
4776       error ("label `%s' referenced outside of any function",
4777              IDENTIFIER_POINTER (id));
4778       return NULL_TREE;
4779     }
4780
4781   if ((decl == NULL_TREE
4782       || DECL_SOURCE_LINE (decl) == 0)
4783       && (named_label_uses == NULL
4784           || named_label_uses->names_in_scope != current_binding_level->names
4785           || named_label_uses->label_decl != decl))
4786     {
4787       struct named_label_list *new_ent;
4788       new_ent
4789         = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
4790       new_ent->label_decl = decl;
4791       new_ent->names_in_scope = current_binding_level->names;
4792       new_ent->binding_level = current_binding_level;
4793       new_ent->lineno_o_goto = lineno;
4794       new_ent->filename_o_goto = input_filename;
4795       new_ent->next = named_label_uses;
4796       named_label_uses = new_ent;
4797     }
4798
4799   /* Use a label already defined or ref'd with this name.  */
4800   if (decl != NULL_TREE)
4801     {
4802       /* But not if it is inherited and wasn't declared to be inheritable.  */
4803       if (DECL_CONTEXT (decl) != current_function_decl
4804           && ! C_DECLARED_LABEL_FLAG (decl))
4805         return shadow_label (id);
4806       return decl;
4807     }
4808
4809   decl = build_decl (LABEL_DECL, id, void_type_node);
4810
4811   /* Make sure every label has an rtx.  */
4812   label_rtx (decl);
4813
4814   /* A label not explicitly declared must be local to where it's ref'd.  */
4815   DECL_CONTEXT (decl) = current_function_decl;
4816
4817   DECL_MODE (decl) = VOIDmode;
4818
4819   /* Say where one reference is to the label,
4820      for the sake of the error if it is not defined.  */
4821   DECL_SOURCE_LINE (decl) = lineno;
4822   DECL_SOURCE_FILE (decl) = input_filename;
4823
4824   SET_IDENTIFIER_LABEL_VALUE (id, decl);
4825
4826   named_labels = tree_cons (NULL_TREE, decl, named_labels);
4827   named_label_uses->label_decl = decl;
4828
4829   return decl;
4830 }
4831
4832 /* Make a label named NAME in the current function,
4833    shadowing silently any that may be inherited from containing functions
4834    or containing scopes.
4835
4836    Note that valid use, if the label being shadowed
4837    comes from another scope in the same function,
4838    requires calling declare_nonlocal_label right away.  */
4839
4840 tree
4841 shadow_label (name)
4842      tree name;
4843 {
4844   register tree decl = IDENTIFIER_LABEL_VALUE (name);
4845
4846   if (decl != NULL_TREE)
4847     {
4848       shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
4849       SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE);
4850     }
4851
4852   return lookup_label (name);
4853 }
4854
4855 /* Define a label, specifying the location in the source file.
4856    Return the LABEL_DECL node for the label, if the definition is valid.
4857    Otherwise return 0.  */
4858
4859 tree
4860 define_label (filename, line, name)
4861      char *filename;
4862      int line;
4863      tree name;
4864 {
4865   tree decl = lookup_label (name);
4866
4867   /* After labels, make any new cleanups go into their
4868      own new (temporary) binding contour.  */
4869   current_binding_level->more_cleanups_ok = 0;
4870
4871   /* If label with this name is known from an outer context, shadow it.  */
4872   if (decl != NULL_TREE && DECL_CONTEXT (decl) != current_function_decl)
4873     {
4874       shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
4875       SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE);
4876       decl = lookup_label (name);
4877     }
4878
4879   if (name == get_identifier ("wchar_t"))
4880     cp_pedwarn ("label named wchar_t");
4881
4882   if (DECL_INITIAL (decl) != NULL_TREE)
4883     {
4884       cp_error ("duplicate label `%D'", decl);
4885       return 0;
4886     }
4887   else
4888     {
4889       struct named_label_list *uses, *prev;
4890       int identified = 0;
4891       int saw_eh = 0;
4892
4893       /* Mark label as having been defined.  */
4894       DECL_INITIAL (decl) = error_mark_node;
4895       /* Say where in the source.  */
4896       DECL_SOURCE_FILE (decl) = filename;
4897       DECL_SOURCE_LINE (decl) = line;
4898
4899       prev = NULL;
4900       uses = named_label_uses;
4901       while (uses != NULL)
4902         if (uses->label_decl == decl)
4903           {
4904             struct binding_level *b = current_binding_level;
4905             while (b)
4906               {
4907                 tree new_decls = b->names;
4908                 tree old_decls = (b == uses->binding_level)
4909                                   ? uses->names_in_scope : NULL_TREE;
4910                 while (new_decls != old_decls)
4911                   {
4912                     if (TREE_CODE (new_decls) == VAR_DECL
4913                         /* Don't complain about crossing initialization
4914                            of internal entities.  They can't be accessed,
4915                            and they should be cleaned up
4916                            by the time we get to the label.  */
4917                         && ! DECL_ARTIFICIAL (new_decls)
4918                         && !(DECL_INITIAL (new_decls) == NULL_TREE
4919                              && pod_type_p (TREE_TYPE (new_decls))))
4920                       {
4921                         /* This is really only important if we're crossing
4922                            an initialization.  The POD stuff is just
4923                            pedantry; why should it matter if the class
4924                            contains a field of pointer to member type?  */
4925                         int problem = (DECL_INITIAL (new_decls)
4926                                        || (TYPE_NEEDS_CONSTRUCTING
4927                                            (TREE_TYPE (new_decls))));
4928
4929                         if (! identified)
4930                           {
4931                             if (problem)
4932                               {
4933                                 cp_error ("jump to label `%D'", decl);
4934                                 error_with_file_and_line
4935                                   (uses->filename_o_goto,
4936                                    uses->lineno_o_goto, "  from here");
4937                               }
4938                             else
4939                               {
4940                                 cp_pedwarn ("jump to label `%D'", decl);
4941                                 pedwarn_with_file_and_line
4942                                   (uses->filename_o_goto,
4943                                    uses->lineno_o_goto, "  from here");
4944                               }
4945                             identified = 1;
4946                           }
4947
4948                         if (problem)
4949                           cp_error_at ("  crosses initialization of `%#D'",
4950                                        new_decls);
4951                         else
4952                           cp_pedwarn_at ("  enters scope of non-POD `%#D'",
4953                                          new_decls);
4954                       }
4955                     new_decls = TREE_CHAIN (new_decls);
4956                   }
4957                 if (b == uses->binding_level)
4958                   break;
4959                 if (b->eh_region && ! saw_eh)
4960                   {
4961                     if (! identified)
4962                       {
4963                         cp_error ("jump to label `%D'", decl);
4964                         error_with_file_and_line
4965                           (uses->filename_o_goto,
4966                            uses->lineno_o_goto, "  from here");
4967                         identified = 1;
4968                       }
4969                     error ("  enters exception handling block");
4970                     saw_eh = 1;
4971                   }
4972                 b = b->level_chain;
4973               }
4974
4975             if (prev != NULL)
4976               prev->next = uses->next;
4977             else
4978               named_label_uses = uses->next;
4979
4980             uses = uses->next;
4981           }
4982         else
4983           {
4984             prev = uses;
4985             uses = uses->next;
4986           }
4987       current_function_return_value = NULL_TREE;
4988       return decl;
4989     }
4990 }
4991
4992 struct cp_switch
4993 {
4994   struct binding_level *level;
4995   struct cp_switch *next;
4996 };
4997
4998 static struct cp_switch *switch_stack;
4999
5000 void
5001 push_switch ()
5002 {
5003   struct cp_switch *p
5004     = (struct cp_switch *) oballoc (sizeof (struct cp_switch));
5005   p->level = current_binding_level;
5006   p->next = switch_stack;
5007   switch_stack = p;
5008 }
5009
5010 void
5011 pop_switch ()
5012 {
5013   switch_stack = switch_stack->next;
5014 }
5015
5016 /* Same, but for CASE labels.  If DECL is NULL_TREE, it's the default.  */
5017 /* XXX Note decl is never actually used. (bpk) */
5018
5019 void
5020 define_case_label ()
5021 {
5022   tree cleanup = last_cleanup_this_contour ();
5023   struct binding_level *b = current_binding_level;
5024   int identified = 0;
5025
5026   if (cleanup)
5027     {
5028       static int explained = 0;
5029       cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
5030       warning ("where case label appears here");
5031       if (!explained)
5032         {
5033           warning ("(enclose actions of previous case statements requiring");
5034           warning ("destructors in their own binding contours.)");
5035           explained = 1;
5036         }
5037     }
5038
5039   for (; b && b != switch_stack->level; b = b->level_chain)
5040     {
5041       tree new_decls = b->names;
5042       for (; new_decls; new_decls = TREE_CHAIN (new_decls))
5043         {
5044           if (TREE_CODE (new_decls) == VAR_DECL
5045               /* Don't complain about crossing initialization
5046                  of internal entities.  They can't be accessed,
5047                  and they should be cleaned up
5048                  by the time we get to the label.  */
5049               && ! DECL_ARTIFICIAL (new_decls)
5050               && ((DECL_INITIAL (new_decls) != NULL_TREE
5051                    && DECL_INITIAL (new_decls) != error_mark_node)
5052                   || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
5053             {
5054               if (! identified)
5055                 error ("jump to case label");
5056               identified = 1;
5057               cp_error_at ("  crosses initialization of `%#D'",
5058                            new_decls);
5059             }
5060         }
5061     }
5062
5063   /* After labels, make any new cleanups go into their
5064      own new (temporary) binding contour.  */
5065
5066   current_binding_level->more_cleanups_ok = 0;
5067   current_function_return_value = NULL_TREE;
5068 }
5069 \f
5070 /* Return the list of declarations of the current level.
5071    Note that this list is in reverse order unless/until
5072    you nreverse it; and when you do nreverse it, you must
5073    store the result back using `storedecls' or you will lose.  */
5074
5075 tree
5076 getdecls ()
5077 {
5078   return current_binding_level->names;
5079 }
5080
5081 /* Return the list of type-tags (for structs, etc) of the current level.  */
5082
5083 tree
5084 gettags ()
5085 {
5086   return current_binding_level->tags;
5087 }
5088
5089 /* Store the list of declarations of the current level.
5090    This is done for the parameter declarations of a function being defined,
5091    after they are modified in the light of any missing parameters.  */
5092
5093 static void
5094 storedecls (decls)
5095      tree decls;
5096 {
5097   current_binding_level->names = decls;
5098 }
5099
5100 /* Similarly, store the list of tags of the current level.  */
5101
5102 void
5103 storetags (tags)
5104      tree tags;
5105 {
5106   current_binding_level->tags = tags;
5107 }
5108 \f
5109 /* Given NAME, an IDENTIFIER_NODE,
5110    return the structure (or union or enum) definition for that name.
5111    Searches binding levels from BINDING_LEVEL up to the global level.
5112    If THISLEVEL_ONLY is nonzero, searches only the specified context
5113    (but skips any tag-transparent contexts to find one that is
5114    meaningful for tags).
5115    FORM says which kind of type the caller wants;
5116    it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
5117    If the wrong kind of type is found, and it's not a template, an error is
5118    reported.  */
5119
5120 static tree
5121 lookup_tag (form, name, binding_level, thislevel_only)
5122      enum tree_code form;
5123      tree name;
5124      struct binding_level *binding_level;
5125      int thislevel_only;
5126 {
5127   register struct binding_level *level;
5128   /* Non-zero if, we should look past a pseudo-global level, even if
5129      THISLEVEL_ONLY.  */
5130   int allow_pseudo_global = 1;
5131
5132   for (level = binding_level; level; level = level->level_chain)
5133     {
5134       register tree tail;
5135       if (ANON_AGGRNAME_P (name))
5136         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5137           {
5138             /* There's no need for error checking here, because
5139                anon names are unique throughout the compilation.  */
5140             if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
5141               return TREE_VALUE (tail);
5142           }
5143       else if (level->namespace_p)
5144         /* Do namespace lookup. */
5145         for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
5146           {
5147             tree old = binding_for_name (name, tail);
5148
5149             /* If we just skipped past a pseudo global level, even
5150                though THISLEVEL_ONLY, and we find a template class
5151                declaration, then we use the _TYPE node for the
5152                template.  See the example below.  */
5153             if (thislevel_only && !allow_pseudo_global
5154                 && old && BINDING_VALUE (old) 
5155                 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
5156               old = TREE_TYPE (BINDING_VALUE (old));
5157             else 
5158               old = BINDING_TYPE (old);
5159
5160             /* If it has an original type, it is a typedef, and we
5161                should not return it.  */
5162             if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
5163               old = NULL_TREE;
5164             if (old && TREE_CODE (old) != form
5165                 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
5166               {
5167                 cp_error ("`%#D' redeclared as %C", old, form);
5168                 return NULL_TREE;
5169               }
5170             if (old)
5171               return old;
5172             if (thislevel_only || tail == global_namespace)
5173               return NULL_TREE;
5174           }
5175       else
5176         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5177           {
5178             if (TREE_PURPOSE (tail) == name)
5179               {
5180                 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
5181                 /* Should tighten this up; it'll probably permit
5182                    UNION_TYPE and a struct template, for example.  */
5183                 if (code != form
5184                     && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
5185                   {
5186                     /* Definition isn't the kind we were looking for.  */
5187                     cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
5188                               form);
5189                     return NULL_TREE;
5190                   }
5191                 return TREE_VALUE (tail);
5192               }
5193           }
5194       if (thislevel_only && ! level->tag_transparent)
5195         {
5196           if (level->pseudo_global && allow_pseudo_global)
5197             {
5198               /* We must deal with cases like this:
5199                  
5200                    template <class T> struct S;
5201                    template <class T> struct S {};
5202                    
5203                  When looking up `S', for the second declaration, we
5204                  would like to find the first declaration.  But, we
5205                  are in the pseudo-global level created for the
5206                  template parameters, rather than the (surrounding)
5207                  namespace level.  Thus, we keep going one more level,
5208                  even though THISLEVEL_ONLY is non-zero.  */
5209               allow_pseudo_global = 0;
5210               continue;
5211             }
5212           else
5213             return NULL_TREE;
5214         }
5215     }
5216   return NULL_TREE;
5217 }
5218
5219 #if 0
5220 void
5221 set_current_level_tags_transparency (tags_transparent)
5222      int tags_transparent;
5223 {
5224   current_binding_level->tag_transparent = tags_transparent;
5225 }
5226 #endif
5227
5228 /* Given a type, find the tag that was defined for it and return the tag name.
5229    Otherwise return 0.  However, the value can never be 0
5230    in the cases in which this is used.
5231
5232    C++: If NAME is non-zero, this is the new name to install.  This is
5233    done when replacing anonymous tags with real tag names.  */
5234
5235 static tree
5236 lookup_tag_reverse (type, name)
5237      tree type;
5238      tree name;
5239 {
5240   register struct binding_level *level;
5241
5242   for (level = current_binding_level; level; level = level->level_chain)
5243     {
5244       register tree tail;
5245       for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5246         {
5247           if (TREE_VALUE (tail) == type)
5248             {
5249               if (name)
5250                 TREE_PURPOSE (tail) = name;
5251               return TREE_PURPOSE (tail);
5252             }
5253         }
5254     }
5255   return NULL_TREE;
5256 }
5257 \f
5258 /* Look up NAME in the NAMESPACE.  */
5259
5260 tree
5261 lookup_namespace_name (namespace, name)
5262      tree namespace, name;
5263 {
5264   struct tree_binding _b;
5265   tree val;
5266   tree template_id = NULL_TREE;
5267
5268   my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
5269
5270   if (TREE_CODE (name) == NAMESPACE_DECL)
5271     /* This happens for A::B<int> when B is a namespace. */
5272     return name;
5273   else if (TREE_CODE (name) == TEMPLATE_DECL)
5274     {
5275       /* This happens for A::B where B is a template, and there are no
5276          template arguments.  */
5277       cp_error ("invalid use of `%D'", name);
5278       return error_mark_node;
5279     }
5280
5281   namespace = ORIGINAL_NAMESPACE (namespace);
5282
5283   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5284     {
5285       template_id = name;
5286       name = TREE_OPERAND (name, 0);
5287       if (TREE_CODE (name) == OVERLOAD)
5288         name = DECL_NAME (OVL_CURRENT (name));
5289       else if (TREE_CODE_CLASS (TREE_CODE (name)) == 'd')
5290         name = DECL_NAME (name);
5291     }
5292
5293   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
5294   
5295   val = binding_init (&_b);
5296   if (!qualified_lookup_using_namespace (name, namespace, val, 0))
5297     return error_mark_node;
5298
5299   if (BINDING_VALUE (val))
5300     {
5301       val = BINDING_VALUE (val);
5302
5303       if (template_id)
5304         {
5305           if (DECL_CLASS_TEMPLATE_P (val))
5306             val = lookup_template_class (val, 
5307                                          TREE_OPERAND (template_id, 1),
5308                                          /*in_decl=*/NULL_TREE,
5309                                          /*context=*/NULL_TREE,
5310                                          /*entering_scope=*/0);
5311           else if (DECL_FUNCTION_TEMPLATE_P (val)
5312                    || TREE_CODE (val) == OVERLOAD)
5313             val = lookup_template_function (val, 
5314                                             TREE_OPERAND (template_id, 1));
5315           else
5316             {
5317               cp_error ("`%D::%D' is not a template",
5318                         namespace, name);
5319               return error_mark_node;
5320             }
5321         }
5322
5323       /* If we have a single function from a using decl, pull it out.  */
5324       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5325         val = OVL_FUNCTION (val);
5326       return val;
5327     }
5328
5329   cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
5330   return error_mark_node;
5331 }
5332
5333 /* Hash a TYPENAME_TYPE.  K is really of type `tree'.  */
5334
5335 static unsigned long
5336 typename_hash (k)
5337      hash_table_key k;
5338 {
5339   unsigned long hash;
5340   tree t;
5341
5342   t = (tree) k;
5343   hash = (((unsigned long) TYPE_CONTEXT (t))
5344           ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5345
5346   return hash;
5347 }
5348
5349 /* Compare two TYPENAME_TYPEs.  K1 and K2 are really of type `tree'.  */
5350
5351 static boolean
5352 typename_compare (k1, k2)
5353      hash_table_key k1;
5354      hash_table_key k2;
5355 {
5356   tree t1;
5357   tree t2;
5358   tree d1;
5359   tree d2;
5360
5361   t1 = (tree) k1;
5362   t2 = (tree) k2;
5363   d1 = TYPE_NAME (t1);
5364   d2 = TYPE_NAME (t2);
5365   
5366   return (DECL_NAME (d1) == DECL_NAME (d2)
5367           && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
5368           && ((TREE_TYPE (t1) != NULL_TREE) 
5369               == (TREE_TYPE (t2) != NULL_TREE))
5370           && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5371           && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5372 }
5373
5374 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
5375    the type of `T', NAME is the IDENTIFIER_NODE for `t'.  If BASE_TYPE
5376    is non-NULL, this type is being created by the implicit typename
5377    extension, and BASE_TYPE is a type named `t' in some base class of
5378    `T' which depends on template parameters.  
5379
5380    Returns the new TYPENAME_TYPE.  */
5381
5382 tree
5383 build_typename_type (context, name, fullname, base_type)
5384      tree context;
5385      tree name;
5386      tree fullname;
5387      tree base_type;
5388 {
5389   tree t;
5390   tree d;
5391   struct hash_entry* e;
5392
5393   static struct hash_table ht;
5394
5395   push_obstacks (&permanent_obstack, &permanent_obstack);
5396
5397   if (!ht.table
5398       && !hash_table_init (&ht, &hash_newfunc, &typename_hash, 
5399                            &typename_compare))
5400     fatal ("virtual memory exhausted");
5401
5402   /* The FULLNAME needs to exist for the life of the hash table, i.e.,
5403      for the entire compilation.  */
5404   if (!TREE_PERMANENT (fullname))
5405     fullname = copy_to_permanent (fullname);
5406
5407   /* Build the TYPENAME_TYPE.  */
5408   t = make_lang_type (TYPENAME_TYPE);
5409   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5410   TYPENAME_TYPE_FULLNAME (t) = fullname;
5411   TREE_TYPE (t) = base_type;
5412
5413   /* Build the corresponding TYPE_DECL.  */
5414   d = build_decl (TYPE_DECL, name, t);
5415   TYPE_NAME (TREE_TYPE (d)) = d;
5416   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5417   DECL_CONTEXT (d) = FROB_CONTEXT (context);
5418   DECL_ARTIFICIAL (d) = 1;
5419
5420   /* See if we already have this type.  */
5421   e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5422   if (e)
5423     {
5424       /* This will free not only TREE_TYPE, but the lang-specific data
5425          and the TYPE_DECL as well.  */
5426       obstack_free (&permanent_obstack, t);
5427       t = (tree) e->key;
5428     }
5429   else
5430     /* Insert the type into the table.  */
5431     hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5432
5433   pop_obstacks ();
5434
5435   return t;
5436 }
5437
5438 tree
5439 make_typename_type (context, name)
5440      tree context, name;
5441 {
5442   tree fullname;
5443
5444   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
5445     {
5446       if (!(TYPE_LANG_SPECIFIC (name) 
5447             && (CLASSTYPE_IS_TEMPLATE (name) 
5448                 || CLASSTYPE_USE_TEMPLATE (name))))
5449         name = TYPE_IDENTIFIER (name);
5450       else
5451         /* Create a TEMPLATE_ID_EXPR for the type.  */
5452         name = build_nt (TEMPLATE_ID_EXPR,
5453                          CLASSTYPE_TI_TEMPLATE (name),
5454                          CLASSTYPE_TI_ARGS (name));
5455     }
5456   else if (TREE_CODE (name) == TYPE_DECL)
5457     name = DECL_NAME (name);
5458
5459   fullname = name;
5460
5461   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5462     {
5463       name = TREE_OPERAND (name, 0);
5464       if (TREE_CODE (name) == TEMPLATE_DECL)
5465         name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5466     }
5467   if (TREE_CODE (name) != IDENTIFIER_NODE)
5468     my_friendly_abort (2000);
5469
5470   if (TREE_CODE (context) == NAMESPACE_DECL)
5471     {
5472       /* We can get here from typename_sub0 in the explicit_template_type
5473          expansion.  Just fail.  */
5474       cp_error ("no class template named `%#T' in `%#T'",
5475                 name, context);
5476       return error_mark_node;
5477     }
5478
5479   if (! uses_template_parms (context)
5480       || currently_open_class (context))
5481     {
5482       if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5483         {
5484           tree tmpl = NULL_TREE;
5485           if (IS_AGGR_TYPE (context))
5486             tmpl = lookup_field (context, name, 0, 0);
5487           if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5488             {
5489               cp_error ("no class template named `%#T' in `%#T'",
5490                         name, context);
5491               return error_mark_node;
5492             }
5493
5494           return lookup_template_class (tmpl, 
5495                                         TREE_OPERAND (fullname, 1),
5496                                         NULL_TREE, context, 
5497                                         /*entering_scope=*/0);
5498         }
5499       else
5500         {
5501           tree t;
5502           
5503           if (!IS_AGGR_TYPE (context))
5504             {
5505               cp_error ("no type named `%#T' in `%#T'", name, context);
5506               return error_mark_node;
5507             }
5508
5509           t = lookup_field (context, name, 0, 1);
5510           if (t)
5511             return TREE_TYPE (t);
5512         }
5513     }
5514
5515   /* If the CONTEXT is not a template type, then either the field is
5516      there now or its never going to be.  */
5517   if (!uses_template_parms (context))
5518     {
5519       cp_error ("no type named `%#T' in `%#T'", name, context);
5520       return error_mark_node;
5521     }
5522     
5523   
5524   return build_typename_type (context, name, fullname,  NULL_TREE);
5525 }
5526
5527 /* Select the right _DECL from multiple choices. */
5528
5529 static tree
5530 select_decl (binding, flags)
5531      tree binding;
5532      int flags;
5533 {
5534   tree val;
5535   val = BINDING_VALUE (binding);
5536   if (LOOKUP_NAMESPACES_ONLY (flags))
5537     {
5538       /* We are not interested in types. */
5539       if (val && TREE_CODE (val) == NAMESPACE_DECL)
5540         return val;
5541       return NULL_TREE;
5542     }
5543   
5544   /* If we could have a type and
5545      we have nothing or we need a type and have none.  */
5546   if (BINDING_TYPE (binding)
5547       && (!val || ((flags & LOOKUP_PREFER_TYPES)
5548                    && TREE_CODE (val) != TYPE_DECL)))
5549     val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5550   /* Don't return non-types if we really prefer types. */
5551   else if (val && LOOKUP_TYPES_ONLY (flags)  && TREE_CODE (val) != TYPE_DECL
5552            && (TREE_CODE (val) != TEMPLATE_DECL
5553                || !DECL_CLASS_TEMPLATE_P (val)))
5554     val = NULL_TREE;
5555
5556   return val;
5557 }
5558
5559 /* Unscoped lookup of a global: iterate over current namespaces,
5560    considering using-directives.  If SPACESP is non-NULL, store a list
5561    of the namespaces we've considered in it.  */
5562
5563 tree
5564 unqualified_namespace_lookup (name, flags, spacesp)
5565      tree name;
5566      int flags;
5567      tree *spacesp;
5568 {
5569   struct tree_binding _binding;
5570   tree b = binding_init (&_binding);
5571   tree initial = current_decl_namespace();
5572   tree scope = initial;
5573   tree siter;
5574   struct binding_level *level;
5575   tree val = NULL_TREE;
5576
5577   if (spacesp)
5578     *spacesp = NULL_TREE;
5579
5580   for (; !val; scope = CP_DECL_CONTEXT (scope))
5581     {
5582       if (spacesp)
5583         *spacesp = scratch_tree_cons (scope, NULL_TREE, *spacesp);
5584       val = binding_for_name (name, scope);
5585
5586       /* Initialize binding for this context. */
5587       BINDING_VALUE (b) = BINDING_VALUE (val);
5588       BINDING_TYPE (b) = BINDING_TYPE (val);
5589
5590       /* Add all _DECLs seen through local using-directives. */
5591       for (level = current_binding_level; 
5592            !level->namespace_p;
5593            level = level->level_chain)
5594         if (!lookup_using_namespace (name, b, level->using_directives,
5595                                      scope, flags, spacesp))
5596           /* Give up because of error. */
5597           return error_mark_node;
5598
5599       /* Add all _DECLs seen through global using-directives. */
5600       /* XXX local and global using lists should work equally. */
5601       siter = initial;
5602       while (1)
5603         {
5604           if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter), 
5605                                        scope, flags, spacesp))
5606             /* Give up because of error. */
5607             return error_mark_node;
5608           if (siter == scope) break;
5609           siter = CP_DECL_CONTEXT (siter);
5610         }
5611
5612       val = select_decl (b, flags);
5613       if (scope == global_namespace)
5614         break;
5615     }
5616   return val;
5617 }
5618
5619 /* Combine prefer_type and namespaces_only into flags.  */
5620
5621 static int
5622 lookup_flags (prefer_type, namespaces_only)
5623   int prefer_type, namespaces_only;
5624 {
5625   if (namespaces_only)
5626     return LOOKUP_PREFER_NAMESPACES;
5627   if (prefer_type > 1)
5628     return LOOKUP_PREFER_TYPES;
5629   if (prefer_type > 0)
5630     return LOOKUP_PREFER_BOTH;
5631   return 0;
5632 }
5633
5634 /* Given a lookup that returned VAL, use FLAGS to decide if we want to
5635    ignore it or not.  Subroutine of lookup_name_real.  */
5636
5637 static tree
5638 qualify_lookup (val, flags)
5639      tree val;
5640      int flags;
5641 {
5642   if (val == NULL_TREE)
5643     return val;
5644   if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5645     return val;
5646   if ((flags & LOOKUP_PREFER_TYPES)
5647       && (TREE_CODE (val) == TYPE_DECL
5648           || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5649               && DECL_CLASS_TEMPLATE_P (val))))
5650     return val;
5651   if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
5652     return NULL_TREE;
5653   return val;
5654 }
5655
5656 /* Any other BINDING overrides an implicit TYPENAME.  Warn about
5657    that.  */
5658
5659 static void
5660 warn_about_implicit_typename_lookup (typename, binding)
5661      tree typename;
5662      tree binding;
5663 {
5664   tree subtype = TREE_TYPE (TREE_TYPE (typename));
5665   tree name = DECL_NAME (typename);
5666
5667   if (! (TREE_CODE (binding) == TEMPLATE_DECL
5668          && CLASSTYPE_TEMPLATE_INFO (subtype)
5669          && CLASSTYPE_TI_TEMPLATE (subtype) == binding)
5670       && ! (TREE_CODE (binding) == TYPE_DECL
5671             && same_type_p (TREE_TYPE (binding), subtype)))
5672     {
5673       cp_warning ("lookup of `%D' finds `%#D'", 
5674                   name, binding);
5675       cp_warning ("  instead of `%D' from dependent base class",
5676                   typename);
5677       cp_warning ("  (use `typename %T::%D' if that's what you meant)",
5678                   constructor_name (current_class_type), name);
5679     }
5680 }
5681
5682 /* Look up NAME in the current binding level and its superiors in the
5683    namespace of variables, functions and typedefs.  Return a ..._DECL
5684    node of some kind representing its definition if there is only one
5685    such declaration, or return a TREE_LIST with all the overloaded
5686    definitions if there are many, or return 0 if it is undefined.
5687
5688    If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5689    If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
5690    If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
5691    Otherwise we prefer non-TYPE_DECLs.  
5692
5693    If NONCLASS is non-zero, we don't look for the NAME in class scope,
5694    using IDENTIFIER_CLASS_VALUE.  */
5695
5696 static tree
5697 lookup_name_real (name, prefer_type, nonclass, namespaces_only)
5698      tree name;
5699      int prefer_type, nonclass, namespaces_only;
5700 {
5701   tree t;
5702   tree val = NULL_TREE;
5703   int yylex = 0;
5704   tree from_obj = NULL_TREE;
5705   int flags;
5706   int val_is_implicit_typename = 0;
5707
5708   /* Hack: copy flag set by parser, if set. */
5709   if (only_namespace_names)
5710     namespaces_only = 1;
5711
5712   if (prefer_type == -2)
5713     {
5714       extern int looking_for_typename;
5715       tree type = NULL_TREE;
5716
5717       yylex = 1;
5718       prefer_type = looking_for_typename;
5719
5720       flags = lookup_flags (prefer_type, namespaces_only);
5721       /* If the next thing is '<', class templates are types. */
5722       if (looking_for_template)
5723         flags |= LOOKUP_TEMPLATES_EXPECTED;
5724
5725       /* std:: becomes :: for now.  */
5726       if (got_scope == std_node)
5727         got_scope = void_type_node;
5728
5729       if (got_scope)
5730         type = got_scope;
5731       else if (got_object != error_mark_node)
5732         type = got_object;
5733       
5734       if (type)
5735         {
5736           if (type == error_mark_node)
5737             return error_mark_node;
5738           if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5739             type = TREE_TYPE (type);
5740
5741           if (TYPE_P (type))
5742             type = complete_type (type);
5743
5744           if (TREE_CODE (type) == VOID_TYPE)
5745             type = global_namespace;
5746           if (TREE_CODE (type) == NAMESPACE_DECL)
5747             {
5748               struct tree_binding b;
5749               val = binding_init (&b);
5750               flags |= LOOKUP_COMPLAIN;
5751               if (!qualified_lookup_using_namespace (name, type, val, flags))
5752                 return NULL_TREE;
5753               val = select_decl (val, flags);
5754             }
5755           else if (! IS_AGGR_TYPE (type)
5756                    || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5757                    || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
5758                    || TREE_CODE (type) == TYPENAME_TYPE)
5759             /* Someone else will give an error about this if needed.  */
5760             val = NULL_TREE;
5761           else if (type == current_class_type)
5762             val = IDENTIFIER_CLASS_VALUE (name);
5763           else
5764             val = lookup_member (type, name, 0, prefer_type);
5765         }
5766       else
5767         val = NULL_TREE;
5768
5769       if (got_scope)
5770         goto done;
5771       else if (got_object && val)
5772         from_obj = val;
5773     }
5774   else
5775     {
5776       flags = lookup_flags (prefer_type, namespaces_only);
5777       /* If we're not parsing, we need to complain. */
5778       flags |= LOOKUP_COMPLAIN;
5779     }
5780
5781   /* First, look in non-namespace scopes.  */
5782
5783   if (current_class_type == NULL_TREE)
5784     nonclass = 1;
5785
5786   for (t = IDENTIFIER_BINDING (name); t; t = TREE_CHAIN (t))
5787     {
5788       tree binding;
5789
5790       if (!LOCAL_BINDING_P (t) && nonclass)
5791         /* We're not looking for class-scoped bindings, so keep going.  */
5792         continue;
5793       
5794       /* If this is the kind of thing we're looking for, we're done.  */
5795       if (qualify_lookup (BINDING_VALUE (t), flags))
5796         binding = BINDING_VALUE (t);
5797       else if ((flags & LOOKUP_PREFER_TYPES) 
5798                && qualify_lookup (BINDING_TYPE (t), flags))
5799         binding = BINDING_TYPE (t);
5800       else
5801         binding = NULL_TREE;
5802
5803       if (binding
5804           && (!val || !IMPLICIT_TYPENAME_TYPE_DECL_P (binding)))
5805         {
5806           if (val_is_implicit_typename && !yylex)
5807             warn_about_implicit_typename_lookup (val, binding);
5808           val = binding;
5809           val_is_implicit_typename 
5810             = IMPLICIT_TYPENAME_TYPE_DECL_P (val);
5811           if (!val_is_implicit_typename)
5812             break;
5813         }
5814     }
5815
5816   /* Now lookup in namespace scopes.  */
5817   if (!val || val_is_implicit_typename)
5818     {
5819       t = unqualified_namespace_lookup (name, flags, 0);
5820       if (t)
5821         {
5822           if (val_is_implicit_typename && !yylex)
5823             warn_about_implicit_typename_lookup (val, t);
5824           val = t;
5825         }
5826     }
5827
5828  done:
5829   if (val)
5830     {
5831       /* This should only warn about types used in qualified-ids.  */
5832       if (from_obj && from_obj != val)
5833         {
5834           if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
5835               && TREE_CODE (val) == TYPE_DECL
5836               && TREE_TYPE (from_obj) != TREE_TYPE (val))
5837             {
5838               cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
5839                           name, got_object, TREE_TYPE (from_obj));
5840               cp_pedwarn ("  does not match lookup in the current scope (`%#T')",
5841                           TREE_TYPE (val));
5842             }
5843
5844           /* We don't change val to from_obj if got_object depends on
5845              template parms because that breaks implicit typename for
5846              destructor calls.  */
5847           if (! uses_template_parms (got_object))
5848             val = from_obj;
5849         }
5850
5851       /* If we have a single function from a using decl, pull it out.  */
5852       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5853         val = OVL_FUNCTION (val);
5854     }
5855   else if (from_obj)
5856     val = from_obj;
5857
5858   return val;
5859 }
5860
5861 tree
5862 lookup_name_nonclass (name)
5863      tree name;
5864 {
5865   return lookup_name_real (name, 0, 1, 0);
5866 }
5867
5868 tree
5869 lookup_function_nonclass (name, args)
5870      tree name;
5871      tree args;
5872 {
5873   return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
5874 }
5875
5876 tree
5877 lookup_name_namespace_only (name)
5878      tree name;
5879 {
5880   /* type-or-namespace, nonclass, namespace_only */
5881   return lookup_name_real (name, 1, 1, 1);
5882 }
5883
5884 tree
5885 lookup_name (name, prefer_type)
5886      tree name;
5887      int prefer_type;
5888 {
5889   return lookup_name_real (name, prefer_type, 0, 0);
5890 }
5891
5892 /* Similar to `lookup_name' but look only in the innermost non-class
5893    binding level.  */
5894
5895 tree
5896 lookup_name_current_level (name)
5897      tree name;
5898 {
5899   struct binding_level *b;
5900   tree t = NULL_TREE;
5901
5902   b = current_binding_level;
5903   while (b->parm_flag == 2)
5904     b = b->level_chain;
5905
5906   if (b->namespace_p)
5907     {
5908       t =  IDENTIFIER_NAMESPACE_VALUE (name);
5909
5910       /* extern "C" function() */
5911       if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
5912         t = TREE_VALUE (t);
5913     }
5914   else if (IDENTIFIER_BINDING (name) 
5915            && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
5916     {
5917       while (1)
5918         {
5919           if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
5920             return IDENTIFIER_VALUE (name);
5921           
5922           if (b->keep == 2)
5923             b = b->level_chain;
5924           else
5925             break;
5926         }
5927     }
5928
5929   return t;
5930 }
5931
5932 /* Like lookup_name_current_level, but for types.  */
5933
5934 tree
5935 lookup_type_current_level (name)
5936      tree name;
5937 {
5938   register tree t = NULL_TREE;
5939
5940   my_friendly_assert (! current_binding_level->namespace_p, 980716);
5941
5942   if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
5943       && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
5944     {
5945       struct binding_level *b = current_binding_level;
5946       while (1)
5947         {
5948           if (purpose_member (name, b->type_shadowed))
5949             return REAL_IDENTIFIER_TYPE_VALUE (name);
5950           if (b->keep == 2)
5951             b = b->level_chain;
5952           else
5953             break;
5954         }
5955     }
5956
5957   return t;
5958 }
5959
5960 void
5961 begin_only_namespace_names ()
5962 {
5963   only_namespace_names = 1;
5964 }
5965
5966 void
5967 end_only_namespace_names ()
5968 {
5969   only_namespace_names = 0;
5970 }
5971 \f
5972 /* Arrange for the user to get a source line number, even when the
5973    compiler is going down in flames, so that she at least has a
5974    chance of working around problems in the compiler.  We used to
5975    call error(), but that let the segmentation fault continue
5976    through; now, it's much more passive by asking them to send the
5977    maintainers mail about the problem.  */
5978
5979 static void
5980 signal_catch (sig)
5981      int sig ATTRIBUTE_UNUSED;
5982 {
5983   signal (SIGSEGV, SIG_DFL);
5984 #ifdef SIGIOT
5985   signal (SIGIOT, SIG_DFL);
5986 #endif
5987 #ifdef SIGILL
5988   signal (SIGILL, SIG_DFL);
5989 #endif
5990 #ifdef SIGABRT
5991   signal (SIGABRT, SIG_DFL);
5992 #endif
5993 #ifdef SIGBUS
5994   signal (SIGBUS, SIG_DFL);
5995 #endif
5996   my_friendly_abort (0);
5997 }
5998
5999 #if 0
6000 /* Unused -- brendan 970107 */
6001 /* Array for holding types considered "built-in".  These types
6002    are output in the module in which `main' is defined.  */
6003 static tree *builtin_type_tdescs_arr;
6004 static int builtin_type_tdescs_len, builtin_type_tdescs_max;
6005 #endif
6006
6007 /* Push the declarations of builtin types into the namespace.
6008    RID_INDEX, if < RID_MAX is the index of the builtin type
6009    in the array RID_POINTERS.  NAME is the name used when looking
6010    up the builtin type.  TYPE is the _TYPE node for the builtin type.  */
6011
6012 static void
6013 record_builtin_type (rid_index, name, type)
6014      enum rid rid_index;
6015      const char *name;
6016      tree type;
6017 {
6018   tree rname = NULL_TREE, tname = NULL_TREE;
6019   tree tdecl = NULL_TREE;
6020
6021   if ((int) rid_index < (int) RID_MAX)
6022     rname = ridpointers[(int) rid_index];
6023   if (name)
6024     tname = get_identifier (name);
6025
6026   TYPE_BUILT_IN (type) = 1;
6027   
6028   if (tname)
6029     {
6030       tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
6031       set_identifier_type_value (tname, NULL_TREE);
6032       if ((int) rid_index < (int) RID_MAX)
6033         /* Built-in types live in the global namespace. */
6034         SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
6035     }
6036   if (rname != NULL_TREE)
6037     {
6038       if (tname != NULL_TREE)
6039         {
6040           set_identifier_type_value (rname, NULL_TREE);
6041           SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
6042         }
6043       else
6044         {
6045           tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
6046           set_identifier_type_value (rname, NULL_TREE);
6047         }
6048     }
6049 }
6050
6051 /* Record one of the standard Java types.
6052  * Declare it as having the given NAME.
6053  * If SIZE > 0, it is the size of one of the integral types;
6054  * otherwise it is the negative of the size of one of the other types.  */
6055
6056 static tree
6057 record_builtin_java_type (name, size)
6058      const char *name;
6059      int size;
6060 {
6061   tree type, decl;
6062   if (size > 0)
6063     type = make_signed_type (size);
6064   else if (size > -32)
6065     { /* "__java_char" or ""__java_boolean". */
6066       type = make_unsigned_type (-size);
6067       /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
6068     }
6069   else
6070     { /* "__java_float" or ""__java_double". */
6071       type = make_node (REAL_TYPE);
6072       TYPE_PRECISION (type) = - size;
6073       layout_type (type);
6074     }
6075   record_builtin_type (RID_MAX, name, type);
6076   decl = TYPE_NAME (type);
6077
6078   /* Suppress generate debug symbol entries for these types,
6079      since for normal C++ they are just clutter.
6080      However, push_lang_context undoes this if extern "Java" is seen. */
6081   DECL_IGNORED_P (decl) = 1;
6082
6083   TYPE_FOR_JAVA (type) = 1;
6084   return type;
6085 }
6086
6087 /* Push a type into the namespace so that the back-ends ignore it. */
6088
6089 static void
6090 record_unknown_type (type, name)
6091      tree type;
6092      const char *name;
6093 {
6094   tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
6095   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
6096   DECL_IGNORED_P (decl) = 1;
6097   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6098   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
6099   TYPE_ALIGN (type) = 1;
6100   TYPE_MODE (type) = TYPE_MODE (void_type_node);
6101
6102
6103 /* Push overloaded decl, in global scope, with one argument so it
6104    can be used as a callback from define_function.  */
6105
6106 static void
6107 push_overloaded_decl_1 (x)
6108      tree x;
6109 {
6110   push_overloaded_decl (x, PUSH_GLOBAL);
6111 }
6112
6113 #ifdef __GNUC__
6114 __inline
6115 #endif
6116 tree
6117 auto_function (name, type, code)
6118      tree name, type;
6119      enum built_in_function code;
6120 {
6121   return define_function
6122     (IDENTIFIER_POINTER (name), type, code, push_overloaded_decl_1,
6123      IDENTIFIER_POINTER (build_decl_overload (name, TYPE_ARG_TYPES (type),
6124                                               0)));
6125 }
6126
6127 /* Create the predefined scalar types of C,
6128    and some nodes representing standard constants (0, 1, (void *)0).
6129    Initialize the global binding level.
6130    Make definitions for built-in primitive functions.  */
6131
6132 void
6133 init_decl_processing ()
6134 {
6135   tree fields[20];
6136   int wchar_type_size;
6137   tree array_domain_type;
6138
6139   /* Have to make these distinct before we try using them.  */
6140   lang_name_cplusplus = get_identifier ("C++");
6141   lang_name_c = get_identifier ("C");
6142   lang_name_java = get_identifier ("Java");
6143
6144   /* Enter the global namespace. */
6145   my_friendly_assert (global_namespace == NULL_TREE, 375);
6146   my_friendly_assert (current_lang_name == NULL_TREE, 375);
6147   current_lang_name = lang_name_cplusplus;
6148   push_namespace (get_identifier ("::"));
6149   global_namespace = current_namespace;
6150   current_lang_name = NULL_TREE;
6151
6152   if (flag_strict_prototype == 2)
6153     flag_strict_prototype = pedantic;
6154   if (! flag_permissive && ! pedantic)
6155     flag_pedantic_errors = 1;
6156
6157   strict_prototypes_lang_c = flag_strict_prototype;
6158
6159   /* Initially, C.  */
6160   current_lang_name = lang_name_c;
6161
6162   current_function_decl = NULL_TREE;
6163   named_labels = NULL_TREE;
6164   named_label_uses = NULL;
6165   current_binding_level = NULL_BINDING_LEVEL;
6166   free_binding_level = NULL_BINDING_LEVEL;
6167
6168   /* Because most segmentation signals can be traced back into user
6169      code, catch them and at least give the user a chance of working
6170      around compiler bugs.  */
6171   signal (SIGSEGV, signal_catch);
6172
6173   /* We will also catch aborts in the back-end through signal_catch and
6174      give the user a chance to see where the error might be, and to defeat
6175      aborts in the back-end when there have been errors previously in their
6176      code.  */
6177 #ifdef SIGIOT
6178   signal (SIGIOT, signal_catch);
6179 #endif
6180 #ifdef SIGILL
6181   signal (SIGILL, signal_catch);
6182 #endif
6183 #ifdef SIGABRT
6184   signal (SIGABRT, signal_catch);
6185 #endif
6186 #ifdef SIGBUS
6187   signal (SIGBUS, signal_catch);
6188 #endif
6189
6190   gcc_obstack_init (&decl_obstack);
6191
6192   /* Must lay these out before anything else gets laid out.  */
6193   error_mark_node = make_node (ERROR_MARK);
6194   TREE_PERMANENT (error_mark_node) = 1;
6195   TREE_TYPE (error_mark_node) = error_mark_node;
6196   error_mark_list = build_tree_list (error_mark_node, error_mark_node);
6197   TREE_TYPE (error_mark_list) = error_mark_node;
6198
6199   /* Make the binding_level structure for global names.  */
6200   pushlevel (0);
6201   global_binding_level = current_binding_level;
6202   /* The global level is the namespace level of ::.  */
6203   NAMESPACE_LEVEL (global_namespace) = global_binding_level;
6204   declare_namespace_level ();
6205
6206   this_identifier = get_identifier (THIS_NAME);
6207   in_charge_identifier = get_identifier (IN_CHARGE_NAME);
6208   ctor_identifier = get_identifier (CTOR_NAME);
6209   dtor_identifier = get_identifier (DTOR_NAME);
6210   pfn_identifier = get_identifier (VTABLE_PFN_NAME);
6211   index_identifier = get_identifier (VTABLE_INDEX_NAME);
6212   delta_identifier = get_identifier (VTABLE_DELTA_NAME);
6213   delta2_identifier = get_identifier (VTABLE_DELTA2_NAME);
6214   pfn_or_delta2_identifier = get_identifier ("__pfn_or_delta2");
6215
6216   /* Define `int' and `char' first so that dbx will output them first.  */
6217
6218   integer_type_node = make_signed_type (INT_TYPE_SIZE);
6219   record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
6220
6221   /* Define `char', which is like either `signed char' or `unsigned char'
6222      but not the same as either.  */
6223
6224   char_type_node
6225     = (flag_signed_char
6226        ? make_signed_type (CHAR_TYPE_SIZE)
6227        : make_unsigned_type (CHAR_TYPE_SIZE));
6228   record_builtin_type (RID_CHAR, "char", char_type_node);
6229
6230   /* `signed' is the same as `int' */
6231   record_builtin_type (RID_SIGNED, NULL_PTR, integer_type_node);
6232   
6233   long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
6234   record_builtin_type (RID_LONG, "long int", long_integer_type_node);
6235
6236   unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
6237   record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
6238
6239   long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
6240   record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
6241   record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
6242
6243   long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
6244   record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
6245
6246   long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
6247   record_builtin_type (RID_MAX, "long long unsigned int",
6248                        long_long_unsigned_type_node);
6249   record_builtin_type (RID_MAX, "long long unsigned",
6250                        long_long_unsigned_type_node);
6251
6252   short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
6253   record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
6254   short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
6255   record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
6256   record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
6257
6258   /* `unsigned long' is the standard type for sizeof.
6259      Note that stddef.h uses `unsigned long',
6260      and this must agree, even if long and int are the same size.  */
6261   set_sizetype
6262     (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
6263
6264   ptrdiff_type_node
6265     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
6266
6267   /* Define both `signed char' and `unsigned char'.  */
6268   signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
6269   record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
6270   unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
6271   record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
6272
6273   /* Create the widest literal types. */
6274   widest_integer_literal_type_node = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
6275   pushdecl (build_decl (TYPE_DECL, NULL_TREE, 
6276                         widest_integer_literal_type_node));
6277
6278   widest_unsigned_literal_type_node = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
6279   pushdecl (build_decl (TYPE_DECL, NULL_TREE, 
6280                         widest_unsigned_literal_type_node));
6281
6282   /* These are types that type_for_size and type_for_mode use.  */
6283   intQI_type_node = make_signed_type (GET_MODE_BITSIZE (QImode));
6284   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
6285   intHI_type_node = make_signed_type (GET_MODE_BITSIZE (HImode));
6286   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
6287   intSI_type_node = make_signed_type (GET_MODE_BITSIZE (SImode));
6288   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
6289   intDI_type_node = make_signed_type (GET_MODE_BITSIZE (DImode));
6290   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
6291 #if HOST_BITS_PER_WIDE_INT >= 64
6292   intTI_type_node = make_signed_type (GET_MODE_BITSIZE (TImode));
6293   pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
6294 #endif
6295   unsigned_intQI_type_node = make_unsigned_type (GET_MODE_BITSIZE (QImode));
6296   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
6297   unsigned_intHI_type_node = make_unsigned_type (GET_MODE_BITSIZE (HImode));
6298   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
6299   unsigned_intSI_type_node = make_unsigned_type (GET_MODE_BITSIZE (SImode));
6300   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
6301   unsigned_intDI_type_node = make_unsigned_type (GET_MODE_BITSIZE (DImode));
6302   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
6303 #if HOST_BITS_PER_WIDE_INT >= 64
6304   unsigned_intTI_type_node = make_unsigned_type (GET_MODE_BITSIZE (TImode));
6305   pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
6306 #endif
6307
6308   float_type_node = make_node (REAL_TYPE);
6309   TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
6310   record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
6311   layout_type (float_type_node);
6312
6313   double_type_node = make_node (REAL_TYPE);
6314   if (flag_short_double)
6315     TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
6316   else
6317     TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
6318   record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
6319   layout_type (double_type_node);
6320
6321   long_double_type_node = make_node (REAL_TYPE);
6322   TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
6323   record_builtin_type (RID_MAX, "long double", long_double_type_node);
6324   layout_type (long_double_type_node);
6325
6326   complex_integer_type_node = make_node (COMPLEX_TYPE);
6327   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
6328                         complex_integer_type_node));
6329   TREE_TYPE (complex_integer_type_node) = integer_type_node;
6330   layout_type (complex_integer_type_node);
6331
6332   complex_float_type_node = make_node (COMPLEX_TYPE);
6333   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
6334                         complex_float_type_node));
6335   TREE_TYPE (complex_float_type_node) = float_type_node;
6336   layout_type (complex_float_type_node);
6337
6338   complex_double_type_node = make_node (COMPLEX_TYPE);
6339   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
6340                         complex_double_type_node));
6341   TREE_TYPE (complex_double_type_node) = double_type_node;
6342   layout_type (complex_double_type_node);
6343
6344   complex_long_double_type_node = make_node (COMPLEX_TYPE);
6345   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
6346                         complex_long_double_type_node));
6347   TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
6348   layout_type (complex_long_double_type_node);
6349
6350   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6351   java_short_type_node = record_builtin_java_type ("__java_short", 16);
6352   java_int_type_node = record_builtin_java_type ("__java_int", 32);
6353   java_long_type_node = record_builtin_java_type ("__java_long", 64);
6354   java_float_type_node = record_builtin_java_type ("__java_float", -32);
6355   java_double_type_node = record_builtin_java_type ("__java_double", -64);
6356   java_char_type_node = record_builtin_java_type ("__java_char", -16);
6357   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
6358
6359   integer_zero_node = build_int_2 (0, 0);
6360   TREE_TYPE (integer_zero_node) = integer_type_node;
6361   integer_one_node = build_int_2 (1, 0);
6362   TREE_TYPE (integer_one_node) = integer_type_node;
6363   integer_two_node = build_int_2 (2, 0);
6364   TREE_TYPE (integer_two_node) = integer_type_node;
6365   integer_three_node = build_int_2 (3, 0);
6366   TREE_TYPE (integer_three_node) = integer_type_node;
6367
6368   boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6369   TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
6370   TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6371   TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6372   TYPE_PRECISION (boolean_type_node) = 1;
6373   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6374   boolean_false_node = build_int_2 (0, 0);
6375   TREE_TYPE (boolean_false_node) = boolean_type_node;
6376   boolean_true_node = build_int_2 (1, 0);
6377   TREE_TYPE (boolean_true_node) = boolean_type_node;
6378
6379   /* These are needed by stor-layout.c.  */
6380   size_zero_node = size_int (0);
6381   size_one_node = size_int (1);
6382
6383   signed_size_zero_node = build_int_2 (0, 0);
6384   TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6385
6386   void_type_node = make_node (VOID_TYPE);
6387   record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
6388   layout_type (void_type_node); /* Uses integer_zero_node.  */
6389   void_list_node = build_tree_list (NULL_TREE, void_type_node);
6390   TREE_PARMLIST (void_list_node) = 1;
6391
6392   null_pointer_node = build_int_2 (0, 0);
6393   TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
6394   layout_type (TREE_TYPE (null_pointer_node));
6395      
6396   /* Used for expressions that do nothing, but are not errors.  */
6397   void_zero_node = build_int_2 (0, 0);
6398   TREE_TYPE (void_zero_node) = void_type_node;
6399
6400   string_type_node = build_pointer_type (char_type_node);
6401   const_string_type_node
6402     = build_pointer_type (build_qualified_type (char_type_node, 
6403                                                 TYPE_QUAL_CONST));
6404   empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
6405 #if 0
6406   record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6407 #endif
6408
6409   /* Make a type to be the domain of a few array types
6410      whose domains don't really matter.
6411      200 is small enough that it always fits in size_t
6412      and large enough that it can hold most function names for the
6413      initializations of __FUNCTION__ and __PRETTY_FUNCTION__.  */
6414   array_domain_type = build_index_type (build_int_2 (200, 0));
6415
6416   /* Make a type for arrays of characters.
6417      With luck nothing will ever really depend on the length of this
6418      array type.  */
6419   char_array_type_node
6420     = build_array_type (char_type_node, array_domain_type);
6421   /* Likewise for arrays of ints.  */
6422   int_array_type_node
6423     = build_array_type (integer_type_node, array_domain_type);
6424
6425   /* This is just some anonymous class type.  Nobody should ever
6426      need to look inside this envelope.  */
6427   class_star_type_node = build_pointer_type (make_lang_type (RECORD_TYPE));
6428
6429   if (flag_huge_objects)
6430     delta_type_node = long_integer_type_node;
6431   else
6432     delta_type_node = short_integer_type_node;
6433
6434   default_function_type
6435     = build_function_type (integer_type_node, NULL_TREE);
6436
6437   ptr_type_node = build_pointer_type (void_type_node);
6438   const_ptr_type_node
6439     = build_pointer_type (build_qualified_type (void_type_node,
6440                                                 TYPE_QUAL_CONST));
6441   c_common_nodes_and_builtins (1, flag_no_builtin, flag_no_nonansi_builtin);
6442
6443   void_ftype_ptr
6444     = build_exception_variant (void_ftype_ptr, empty_except_spec);
6445
6446   /* C++ extensions */
6447
6448   unknown_type_node = make_node (UNKNOWN_TYPE);
6449   record_unknown_type (unknown_type_node, "unknown type");
6450
6451   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
6452   TREE_TYPE (unknown_type_node) = unknown_type_node;
6453
6454   TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
6455
6456   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6457      result.  */
6458   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6459   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6460
6461   /* This is special for C++ so functions can be overloaded.  */
6462   wchar_type_node
6463     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (WCHAR_TYPE)));
6464   wchar_type_size = TYPE_PRECISION (wchar_type_node);
6465   signed_wchar_type_node = make_signed_type (wchar_type_size);
6466   unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
6467   wchar_type_node
6468     = TREE_UNSIGNED (wchar_type_node)
6469       ? unsigned_wchar_type_node
6470       : signed_wchar_type_node;
6471   record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
6472
6473   /* Artificial declaration of wchar_t -- can be bashed */
6474   wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
6475                                 wchar_type_node);
6476   pushdecl (wchar_decl_node);
6477
6478   /* This is for wide string constants.  */
6479   wchar_array_type_node
6480     = build_array_type (wchar_type_node, array_domain_type);
6481
6482   if (flag_vtable_thunks)
6483     {
6484       /* Make sure we get a unique function type, so we can give
6485          its pointer type a name.  (This wins for gdb.) */
6486       tree vfunc_type = make_node (FUNCTION_TYPE);
6487       TREE_TYPE (vfunc_type) = integer_type_node;
6488       TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6489       layout_type (vfunc_type);
6490
6491       vtable_entry_type = build_pointer_type (vfunc_type);
6492     }
6493   else
6494     {
6495       vtable_entry_type = make_lang_type (RECORD_TYPE);
6496       fields[0] = build_lang_field_decl (FIELD_DECL, delta_identifier,
6497                                          delta_type_node);
6498       fields[1] = build_lang_field_decl (FIELD_DECL, index_identifier,
6499                                          delta_type_node);
6500       fields[2] = build_lang_field_decl (FIELD_DECL, pfn_identifier,
6501                                          ptr_type_node);
6502       finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6503                            double_type_node);
6504
6505       /* Make this part of an invisible union.  */
6506       fields[3] = copy_node (fields[2]);
6507       TREE_TYPE (fields[3]) = delta_type_node;
6508       DECL_NAME (fields[3]) = delta2_identifier;
6509       DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6510       DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
6511       TREE_UNSIGNED (fields[3]) = 0;
6512       TREE_CHAIN (fields[2]) = fields[3];
6513       vtable_entry_type = build_qualified_type (vtable_entry_type,
6514                                                 TYPE_QUAL_CONST);
6515     }
6516   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
6517
6518   vtbl_type_node
6519     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
6520   layout_type (vtbl_type_node);
6521   vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
6522   record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
6523   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6524   layout_type (vtbl_ptr_type_node);
6525   record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
6526
6527   std_node = build_decl (NAMESPACE_DECL, 
6528                          get_identifier (flag_honor_std ? "fake std":"std"),
6529                          void_type_node);
6530   pushdecl (std_node);
6531
6532   global_type_node = make_node (LANG_TYPE);
6533   record_unknown_type (global_type_node, "global type");
6534
6535   /* Now, C++.  */
6536   current_lang_name = lang_name_cplusplus;
6537
6538   {
6539     tree bad_alloc_type_node, newtype, deltype;
6540     if (flag_honor_std)
6541       push_namespace (get_identifier ("std"));
6542     bad_alloc_type_node = xref_tag
6543       (class_type_node, get_identifier ("bad_alloc"), 1);
6544     if (flag_honor_std)
6545       pop_namespace ();
6546     newtype = build_exception_variant
6547       (ptr_ftype_sizetype, add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1));
6548     deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
6549     auto_function (ansi_opname[(int) NEW_EXPR], newtype, NOT_BUILT_IN);
6550     auto_function (ansi_opname[(int) VEC_NEW_EXPR], newtype, NOT_BUILT_IN);
6551     global_delete_fndecl
6552       = auto_function (ansi_opname[(int) DELETE_EXPR], deltype, NOT_BUILT_IN);
6553     auto_function (ansi_opname[(int) VEC_DELETE_EXPR], deltype, NOT_BUILT_IN);
6554   }
6555
6556   abort_fndecl
6557     = define_function ("__pure_virtual", void_ftype,
6558                        NOT_BUILT_IN, 0, 0);
6559
6560   /* Perform other language dependent initializations.  */
6561   init_class_processing ();
6562   init_init_processing ();
6563   init_search_processing ();
6564   if (flag_rtti)
6565     init_rtti_processing ();
6566
6567   if (flag_exceptions)
6568     init_exception_processing ();
6569   if (flag_no_inline)
6570     {
6571       flag_inline_functions = 0;
6572     }
6573
6574   if (! supports_one_only ())
6575     flag_weak = 0;
6576
6577   /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__.  */
6578   declare_function_name ();
6579
6580   /* Prepare to check format strings against argument lists.  */
6581   init_function_format_info ();
6582
6583   /* Show we use EH for cleanups.  */
6584   using_eh_for_cleanups ();
6585
6586   print_error_function = lang_print_error_function;
6587   lang_get_alias_set = &c_get_alias_set;
6588   valid_lang_attribute = cp_valid_lang_attribute;
6589
6590   /* Maintain consistency.  Perhaps we should just complain if they
6591      say -fwritable-strings?  */
6592   if (flag_writable_strings)
6593     flag_const_strings = 0;
6594 }
6595
6596 /* Function to print any language-specific context for an error message.  */
6597
6598 static void
6599 lang_print_error_function (file)
6600      const char *file;
6601 {
6602   default_print_error_function (file);
6603   maybe_print_template_context ();
6604 }
6605
6606 /* Make a definition for a builtin function named NAME and whose data type
6607    is TYPE.  TYPE should be a function type with argument types.
6608    FUNCTION_CODE tells later passes how to compile calls to this function.
6609    See tree.h for its possible values.
6610
6611    If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6612    the name to be called if we can't opencode the function.  */
6613
6614 tree
6615 define_function (name, type, function_code, pfn, library_name)
6616      const char *name;
6617      tree type;
6618      enum built_in_function function_code;
6619      void (*pfn) PROTO((tree));
6620      const char *library_name;
6621 {
6622   tree decl = build_lang_decl (FUNCTION_DECL, get_identifier (name), type);
6623   DECL_EXTERNAL (decl) = 1;
6624   TREE_PUBLIC (decl) = 1;
6625   DECL_ARTIFICIAL (decl) = 1;
6626
6627   my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
6628   DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
6629
6630   /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6631      we cannot change DECL_ASSEMBLER_NAME until we have installed this
6632      function in the namespace.  */
6633   if (pfn) (*pfn) (decl);
6634   if (library_name)
6635     DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
6636   make_function_rtl (decl);
6637   if (function_code != NOT_BUILT_IN)
6638     {
6639       DECL_BUILT_IN (decl) = 1;
6640       DECL_FUNCTION_CODE (decl) = function_code;
6641     }
6642   return decl;
6643 }
6644
6645 tree
6646 builtin_function (name, type, code, libname)
6647      const char *name;
6648      tree type;
6649      enum built_in_function code;
6650      const char *libname;
6651 {
6652   return define_function (name, type, code, (void (*) PROTO((tree)))pushdecl, libname);
6653 }
6654 \f
6655 /* When we call finish_struct for an anonymous union, we create
6656    default copy constructors and such.  But, an anonymous union
6657    shouldn't have such things; this function undoes the damage to the
6658    anonymous union type T.
6659
6660    (The reason that we create the synthesized methods is that we don't
6661    distinguish `union { int i; }' from `typedef union { int i; } U'.
6662    The first is an anonymous union; the second is just an ordinary
6663    union type.)  */
6664
6665 void
6666 fixup_anonymous_aggr (t)
6667      tree t;
6668 {
6669   tree *q;
6670
6671   /* Wipe out memory of synthesized methods */
6672   TYPE_HAS_CONSTRUCTOR (t) = 0;
6673   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6674   TYPE_HAS_INIT_REF (t) = 0;
6675   TYPE_HAS_CONST_INIT_REF (t) = 0;
6676   TYPE_HAS_ASSIGN_REF (t) = 0;
6677   TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6678
6679   /* Splice the implicitly generated functions out of the TYPE_METHODS
6680      list.  */
6681   q = &TYPE_METHODS (t);
6682   while (*q)
6683     {
6684       if (DECL_ARTIFICIAL (*q))
6685         *q = TREE_CHAIN (*q);
6686       else
6687         q = &TREE_CHAIN (*q);
6688     }
6689
6690   /* ANSI C++ June 5 1992 WP 9.5.3.  Anonymous unions may not have
6691      function members.  */
6692   if (TYPE_METHODS (t))
6693     error ("an anonymous union cannot have function members");
6694 }
6695
6696 /* Make sure that a declaration with no declarator is well-formed, i.e.
6697    just defines a tagged type or anonymous union.
6698
6699    Returns the type defined, if any.  */
6700
6701 tree
6702 check_tag_decl (declspecs)
6703      tree declspecs;
6704 {
6705   int found_type = 0;
6706   tree ob_modifier = NULL_TREE;
6707   register tree link;
6708   register tree t = NULL_TREE;
6709
6710   for (link = declspecs; link; link = TREE_CHAIN (link))
6711     {
6712       register tree value = TREE_VALUE (link);
6713
6714       if (TYPE_P (value))
6715         {
6716           ++found_type;
6717
6718           if (IS_AGGR_TYPE (value) || TREE_CODE (value) == ENUMERAL_TYPE)
6719             {
6720               my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
6721               t = value;
6722             }
6723         }
6724       else if (value == ridpointers[(int) RID_FRIEND])
6725         {
6726           if (current_class_type == NULL_TREE
6727               || current_scope () != current_class_type)
6728             ob_modifier = value;
6729         }
6730       else if (value == ridpointers[(int) RID_STATIC]
6731                || value == ridpointers[(int) RID_EXTERN]
6732                || value == ridpointers[(int) RID_AUTO]
6733                || value == ridpointers[(int) RID_REGISTER]
6734                || value == ridpointers[(int) RID_INLINE]
6735                || value == ridpointers[(int) RID_VIRTUAL]
6736                || value == ridpointers[(int) RID_CONST]
6737                || value == ridpointers[(int) RID_VOLATILE]
6738                || value == ridpointers[(int) RID_EXPLICIT])
6739         ob_modifier = value;
6740     }
6741
6742   if (found_type > 1)
6743     error ("multiple types in one declaration");
6744
6745   /* Inside a class, we might be in a friend or access declaration.
6746      Until we have a good way of detecting the latter, don't warn.  */
6747   if (t == NULL_TREE && ! current_class_type)
6748     pedwarn ("declaration does not declare anything");
6749
6750   /* Check for an anonymous union.  We're careful
6751      accessing TYPE_IDENTIFIER because some built-in types, like
6752      pointer-to-member types, do not have TYPE_NAME.  */
6753   else if (t && IS_AGGR_TYPE_CODE (TREE_CODE (t))
6754            && TYPE_NAME (t)
6755            && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
6756     {
6757       /* Anonymous unions are objects, so they can have specifiers.  */;
6758       SET_ANON_AGGR_TYPE_P (t);
6759
6760       if (TREE_CODE (t) != UNION_TYPE && pedantic && ! in_system_header)
6761         pedwarn ("ISO C++ prohibits anonymous structs");
6762     }
6763
6764   else if (ob_modifier)
6765     {
6766       if (ob_modifier == ridpointers[(int) RID_INLINE]
6767           || ob_modifier == ridpointers[(int) RID_VIRTUAL])
6768         cp_error ("`%D' can only be specified for functions", ob_modifier);
6769       else if (ob_modifier == ridpointers[(int) RID_FRIEND])
6770         cp_error ("`%D' can only be specified inside a class", ob_modifier);
6771       else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
6772         cp_error ("`%D' can only be specified for constructors",
6773                   ob_modifier);
6774       else
6775         cp_error ("`%D' can only be specified for objects and functions",
6776                   ob_modifier);
6777     }
6778
6779   return t;
6780 }
6781
6782 /* Called when a declaration is seen that contains no names to declare.
6783    If its type is a reference to a structure, union or enum inherited
6784    from a containing scope, shadow that tag name for the current scope
6785    with a forward reference.
6786    If its type defines a new named structure or union
6787    or defines an enum, it is valid but we need not do anything here.
6788    Otherwise, it is an error.
6789
6790    C++: may have to grok the declspecs to learn about static,
6791    complain for anonymous unions.  */
6792
6793 void
6794 shadow_tag (declspecs)
6795      tree declspecs;
6796 {
6797   tree t = check_tag_decl (declspecs);
6798
6799   if (t)
6800     maybe_process_partial_specialization (t);
6801
6802   /* This is where the variables in an anonymous union are
6803      declared.  An anonymous union declaration looks like:
6804      union { ... } ;
6805      because there is no declarator after the union, the parser
6806      sends that declaration here.  */
6807   if (t && ANON_AGGR_TYPE_P (t))
6808     {
6809       fixup_anonymous_aggr (t);
6810
6811       if (TYPE_FIELDS (t))
6812         {
6813           tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
6814                                       NULL_TREE);
6815           finish_anon_union (decl);
6816         }
6817     }
6818 }
6819 \f
6820 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
6821
6822 tree
6823 groktypename (typename)
6824      tree typename;
6825 {
6826   if (TREE_CODE (typename) != TREE_LIST)
6827     return typename;
6828   return grokdeclarator (TREE_VALUE (typename),
6829                          TREE_PURPOSE (typename),
6830                          TYPENAME, 0, NULL_TREE);
6831 }
6832
6833 /* Decode a declarator in an ordinary declaration or data definition.
6834    This is called as soon as the type information and variable name
6835    have been parsed, before parsing the initializer if any.
6836    Here we create the ..._DECL node, fill in its type,
6837    and put it on the list of decls for the current context.
6838    The ..._DECL node is returned as the value.
6839
6840    Exception: for arrays where the length is not specified,
6841    the type is left null, to be filled in by `cp_finish_decl'.
6842
6843    Function definitions do not come here; they go to start_function
6844    instead.  However, external and forward declarations of functions
6845    do go through here.  Structure field declarations are done by
6846    grokfield and not through here.  */
6847
6848 /* Set this to zero to debug not using the temporary obstack
6849    to parse initializers.  */
6850 int debug_temp_inits = 1;
6851
6852 tree
6853 start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
6854      tree declarator, declspecs;
6855      int initialized;
6856      tree attributes, prefix_attributes;
6857 {
6858   register tree decl;
6859   register tree type, tem;
6860   tree context;
6861   extern int have_extern_spec;
6862   extern int used_extern_spec;
6863   tree attrlist;
6864
6865 #if 0
6866   /* See code below that used this.  */
6867   int init_written = initialized;
6868 #endif
6869
6870   /* This should only be done once on the top most decl.  */
6871   if (have_extern_spec && !used_extern_spec)
6872     {
6873       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
6874                                   declspecs);
6875       used_extern_spec = 1;
6876     }
6877
6878   if (attributes || prefix_attributes)
6879     attrlist = build_scratch_list (attributes, prefix_attributes);
6880   else
6881     attrlist = NULL_TREE;
6882
6883   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
6884                          attrlist);
6885                          
6886   if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
6887     return NULL_TREE;
6888
6889   type = TREE_TYPE (decl);
6890
6891   if (type == error_mark_node)
6892     return NULL_TREE;
6893
6894   /* Don't lose if destructors must be executed at file-level.  */
6895   if (! processing_template_decl && TREE_STATIC (decl)
6896       && TYPE_NEEDS_DESTRUCTOR (complete_type (type))
6897       && !TREE_PERMANENT (decl))
6898     {
6899       push_obstacks (&permanent_obstack, &permanent_obstack);
6900       decl = copy_node (decl);
6901       if (TREE_CODE (type) == ARRAY_TYPE)
6902         {
6903           tree itype = TYPE_DOMAIN (type);
6904           if (itype && ! TREE_PERMANENT (itype))
6905             {
6906               itype = build_index_type (copy_to_permanent (TYPE_MAX_VALUE (itype)));
6907               type = build_cplus_array_type (TREE_TYPE (type), itype);
6908               TREE_TYPE (decl) = type;
6909             }
6910         }
6911       pop_obstacks ();
6912     }
6913
6914   context
6915     = (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
6916       ? DECL_CLASS_CONTEXT (decl)
6917       : DECL_CONTEXT (decl);
6918
6919   if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
6920       && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
6921     {
6922       /* When parsing the initializer, lookup should use the object's
6923          namespace. */
6924       push_decl_namespace (context);
6925     }
6926
6927   /* We are only interested in class contexts, later. */
6928   if (context && TREE_CODE (context) == NAMESPACE_DECL)
6929     context = NULL_TREE;
6930
6931   if (initialized)
6932     /* Is it valid for this decl to have an initializer at all?
6933        If not, set INITIALIZED to zero, which will indirectly
6934        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
6935     switch (TREE_CODE (decl))
6936       {
6937       case TYPE_DECL:
6938         /* typedef foo = bar  means give foo the same type as bar.
6939            We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
6940            Any other case of an initialization in a TYPE_DECL is an error.  */
6941         if (pedantic || list_length (declspecs) > 1)
6942           {
6943             cp_error ("typedef `%D' is initialized", decl);
6944             initialized = 0;
6945           }
6946         break;
6947
6948       case FUNCTION_DECL:
6949         cp_error ("function `%#D' is initialized like a variable", decl);
6950         initialized = 0;
6951         break;
6952
6953       default:
6954         break;
6955       }
6956
6957   if (initialized)
6958     {
6959       if (! toplevel_bindings_p ()
6960           && DECL_EXTERNAL (decl))
6961         cp_warning ("declaration of `%#D' has `extern' and is initialized",
6962                     decl);
6963       DECL_EXTERNAL (decl) = 0;
6964       if (toplevel_bindings_p ())
6965         TREE_STATIC (decl) = 1;
6966
6967       /* Tell `pushdecl' this is an initialized decl
6968          even though we don't yet have the initializer expression.
6969          Also tell `cp_finish_decl' it may store the real initializer.  */
6970       DECL_INITIAL (decl) = error_mark_node;
6971     }
6972
6973 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
6974   SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
6975 #endif
6976   
6977   /* Set attributes here so if duplicate decl, will have proper attributes.  */
6978   cplus_decl_attributes (decl, attributes, prefix_attributes);
6979
6980   if (context && TYPE_SIZE (complete_type (context)) != NULL_TREE)
6981     {
6982       push_nested_class (context, 2);
6983
6984       if (TREE_CODE (decl) == VAR_DECL)
6985         {
6986           tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
6987           if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
6988             cp_error ("`%#D' is not a static member of `%#T'", decl, context);
6989           else
6990             {
6991               if (DECL_CONTEXT (field) != context)
6992                 {
6993                   cp_pedwarn ("ANSI C++ does not permit `%T::%D' to be defined as `%T::%D'",
6994                               DECL_CONTEXT (field), DECL_NAME (decl),
6995                               context, DECL_NAME (decl));
6996                   DECL_CONTEXT (decl) = DECL_CONTEXT (field);
6997                 }
6998               /* Static data member are tricky; an in-class initialization
6999                  still doesn't provide a definition, so the in-class
7000                  declaration will have DECL_EXTERNAL set, but will have an
7001                  initialization.  Thus, duplicate_decls won't warn
7002                  about this situation, and so we check here.  */
7003               if (DECL_INITIAL (decl) && DECL_INITIAL (field))
7004                 cp_error ("duplicate initialization of %D", decl);
7005               if (duplicate_decls (decl, field))
7006                 decl = field;
7007             }
7008         }
7009       else
7010         {
7011           tree field = check_classfn (context, decl);
7012           if (field && duplicate_decls (decl, field))
7013             decl = field;
7014         }
7015
7016       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
7017       DECL_IN_AGGR_P (decl) = 0;
7018       if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl)) 
7019           || CLASSTYPE_USE_TEMPLATE (context))
7020         {
7021           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
7022           /* [temp.expl.spec] An explicit specialization of a static data
7023              member of a template is a definition if the declaration
7024              includes an initializer; otherwise, it is a declaration.
7025
7026              We check for processing_specialization so this only applies
7027              to the new specialization syntax.  */
7028           if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
7029             DECL_EXTERNAL (decl) = 1;
7030         }
7031
7032       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
7033         cp_pedwarn ("declaration of `%#D' outside of class is not definition",
7034                     decl);
7035     }
7036
7037   /* Enter this declaration into the symbol table.  */
7038   tem = maybe_push_decl (decl);
7039
7040   if (processing_template_decl)
7041     {
7042       if (at_function_scope_p ())
7043         push_permanent_obstack ();
7044
7045       tem = push_template_decl (tem);
7046       /* In a a local scope, add a representation of this declaration
7047          to the statement tree.  */
7048       if (at_function_scope_p ())
7049         {
7050           add_decl_stmt (decl);
7051           pop_obstacks ();
7052         }
7053     }
7054
7055
7056 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7057   /* Tell the back-end to use or not use .common as appropriate.  If we say
7058      -fconserve-space, we want this to save .data space, at the expense of
7059      wrong semantics.  If we say -fno-conserve-space, we want this to
7060      produce errors about redefs; to do this we force variables into the
7061      data segment.  */
7062   DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
7063 #endif
7064   
7065   if (! processing_template_decl)
7066     start_decl_1 (tem);
7067
7068   /* Corresponding pop_obstacks is done in `cp_finish_decl'.  */
7069   push_obstacks_nochange ();
7070
7071   return tem;
7072 }
7073
7074 void
7075 start_decl_1 (decl)
7076      tree decl;
7077 {
7078   tree type = TREE_TYPE (decl);
7079   int initialized = (DECL_INITIAL (decl) != NULL_TREE);
7080
7081   if (type == error_mark_node)
7082     return;
7083
7084   /* If this type of object needs a cleanup, and control may
7085      jump past it, make a new binding level so that it is cleaned
7086      up only when it is initialized first.  */
7087   if (TYPE_NEEDS_DESTRUCTOR (type)
7088       && current_binding_level->more_cleanups_ok == 0)
7089     pushlevel_temporary (1);
7090
7091   if (initialized)
7092     /* Is it valid for this decl to have an initializer at all?
7093        If not, set INITIALIZED to zero, which will indirectly
7094        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
7095     {
7096       /* Don't allow initializations for incomplete types except for
7097          arrays which might be completed by the initialization.  */
7098       if (TYPE_SIZE (complete_type (type)) != NULL_TREE)
7099         ;                       /* A complete type is ok.  */
7100       else if (TREE_CODE (type) != ARRAY_TYPE)
7101         {
7102           cp_error ("variable `%#D' has initializer but incomplete type",
7103                     decl);
7104           initialized = 0;
7105           type = TREE_TYPE (decl) = error_mark_node;
7106         }
7107       else if (TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
7108         {
7109           if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
7110             cp_error ("elements of array `%#D' have incomplete type", decl);
7111           /* else we already gave an error in start_decl.  */
7112           initialized = 0;
7113         }
7114     }
7115
7116   if (!initialized
7117       && TREE_CODE (decl) != TYPE_DECL
7118       && TREE_CODE (decl) != TEMPLATE_DECL
7119       && IS_AGGR_TYPE (type) && ! DECL_EXTERNAL (decl))
7120     {
7121       if ((! processing_template_decl || ! uses_template_parms (type))
7122           && TYPE_SIZE (complete_type (type)) == NULL_TREE)
7123         {
7124           cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
7125                  decl);
7126           /* Change the type so that assemble_variable will give
7127              DECL an rtl we can live with: (mem (const_int 0)).  */
7128           type = TREE_TYPE (decl) = error_mark_node;
7129         }
7130       else
7131         {
7132           /* If any base type in the hierarchy of TYPE needs a constructor,
7133              then we set initialized to 1.  This way any nodes which are
7134              created for the purposes of initializing this aggregate
7135              will live as long as it does.  This is necessary for global
7136              aggregates which do not have their initializers processed until
7137              the end of the file.  */
7138           initialized = TYPE_NEEDS_CONSTRUCTING (type);
7139         }
7140     }
7141
7142   if (! initialized)
7143     DECL_INITIAL (decl) = NULL_TREE;
7144 }
7145
7146 /* Handle initialization of references.
7147    These three arguments are from `cp_finish_decl', and have the
7148    same meaning here that they do there.
7149
7150    Quotes on semantics can be found in ARM 8.4.3.  */
7151
7152 static void
7153 grok_reference_init (decl, type, init)
7154      tree decl, type, init;
7155 {
7156   tree tmp;
7157
7158   if (init == NULL_TREE)
7159     {
7160       if ((DECL_LANG_SPECIFIC (decl) == 0
7161            || DECL_IN_AGGR_P (decl) == 0)
7162           && ! DECL_THIS_EXTERN (decl))
7163         {
7164           cp_error ("`%D' declared as reference but not initialized", decl);
7165           if (TREE_CODE (decl) == VAR_DECL)
7166             SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
7167         }
7168       return;
7169     }
7170
7171   if (init == error_mark_node)
7172     return;
7173
7174   if (TREE_CODE (type) == REFERENCE_TYPE
7175       && TREE_CODE (init) == CONSTRUCTOR)
7176     {
7177       cp_error ("ANSI C++ forbids use of initializer list to initialize reference `%D'", decl);
7178       return;
7179     }
7180
7181   if (TREE_CODE (init) == TREE_LIST)
7182     init = build_compound_expr (init);
7183
7184   if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
7185     init = convert_from_reference (init);
7186
7187   if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
7188       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
7189     {
7190       /* Note: default conversion is only called in very special cases.  */
7191       init = default_conversion (init);
7192     }
7193
7194   tmp = convert_to_reference
7195     (type, init, CONV_IMPLICIT,
7196      LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
7197
7198   if (tmp == error_mark_node)
7199     goto fail;
7200   else if (tmp != NULL_TREE)
7201     {
7202       init = tmp;
7203       DECL_INITIAL (decl) = save_expr (init);
7204     }
7205   else
7206     {
7207       cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
7208       goto fail;
7209     }
7210
7211   /* ?? Can this be optimized in some cases to
7212      hand back the DECL_INITIAL slot??  */
7213   if (TYPE_SIZE (TREE_TYPE (type)))
7214     {
7215       init = convert_from_reference (decl);
7216       if (TREE_PERMANENT (decl))
7217         init = copy_to_permanent (init);
7218       SET_DECL_REFERENCE_SLOT (decl, init);
7219     }
7220
7221   if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
7222     {
7223       expand_static_init (decl, DECL_INITIAL (decl));
7224       DECL_INITIAL (decl) = NULL_TREE;
7225     }
7226   return;
7227
7228  fail:
7229   if (TREE_CODE (decl) == VAR_DECL)
7230     SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
7231   return;
7232 }
7233
7234 /* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7235    mucking with forces it does not comprehend (i.e. initialization with a
7236    constructor).  If we are at global scope and won't go into COMMON, fill
7237    it in with a dummy CONSTRUCTOR to force the variable into .data;
7238    otherwise we can use error_mark_node.  */
7239
7240 static tree
7241 obscure_complex_init (decl, init)
7242      tree decl, init;
7243 {
7244   if (! flag_no_inline && TREE_STATIC (decl))
7245     {
7246       if (extract_init (decl, init))
7247         return NULL_TREE;
7248     }
7249
7250 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7251   if (toplevel_bindings_p () && ! DECL_COMMON (decl))
7252     DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7253                                  NULL_TREE);
7254   else
7255 #endif
7256     DECL_INITIAL (decl) = error_mark_node;
7257
7258   return init;
7259 }
7260
7261 /* Issue an error message if DECL is an uninitialized const variable.  */
7262
7263 static void
7264 check_for_uninitialized_const_var (decl)
7265      tree decl;
7266 {
7267   tree type = TREE_TYPE (decl);
7268
7269   /* ``Unless explicitly declared extern, a const object does not have
7270      external linkage and must be initialized. ($8.4; $12.1)'' ARM
7271      7.1.6 */
7272   if (TREE_CODE (decl) == VAR_DECL
7273       && TREE_CODE (type) != REFERENCE_TYPE
7274       && CP_TYPE_CONST_P (type)
7275       && !TYPE_NEEDS_CONSTRUCTING (type)
7276       && !DECL_INITIAL (decl))
7277     cp_error ("uninitialized const `%D'", decl);
7278 }
7279
7280 /* Finish processing of a declaration;
7281    install its line number and initial value.
7282    If the length of an array type is not known before,
7283    it must be determined now, from the initial value, or it is an error.
7284
7285    Call `pop_obstacks' iff NEED_POP is nonzero.
7286
7287    For C++, `cp_finish_decl' must be fairly evasive:  it must keep initializers
7288    for aggregates that have constructors alive on the permanent obstack,
7289    so that the global initializing functions can be written at the end.
7290
7291    INIT0 holds the value of an initializer that should be allowed to escape
7292    the normal rules.
7293
7294    FLAGS is LOOKUP_ONLYCONVERTING is the = init syntax was used, else 0
7295    if the (init) syntax was used.
7296
7297    For functions that take default parameters, DECL points to its
7298    "maximal" instantiation.  `cp_finish_decl' must then also declared its
7299    subsequently lower and lower forms of instantiation, checking for
7300    ambiguity as it goes.  This can be sped up later.  */
7301
7302 void
7303 cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
7304      tree decl, init;
7305      tree asmspec_tree;
7306      int need_pop;
7307      int flags;
7308 {
7309   register tree type;
7310   tree cleanup = NULL_TREE, ttype = NULL_TREE;
7311   int was_incomplete;
7312   int temporary = allocation_temporary_p ();
7313   const char *asmspec = NULL;
7314   int was_readonly = 0;
7315   int already_used = 0;
7316   tree core_type;
7317
7318   /* If this is 0, then we did not change obstacks.  */
7319   if (! decl)
7320     {
7321       if (init)
7322         error ("assignment (not initialization) in declaration");
7323       return;
7324     }
7325
7326   /* If a name was specified, get the string.  */
7327   if (asmspec_tree)
7328       asmspec = TREE_STRING_POINTER (asmspec_tree);
7329
7330   if (init && TREE_CODE (init) == NAMESPACE_DECL)
7331     {
7332       cp_error ("Cannot initialize `%D' to namespace `%D'",
7333                 decl, init);
7334       init = NULL_TREE;
7335     }
7336
7337   if (current_class_type
7338       && DECL_REAL_CONTEXT (decl) == current_class_type
7339       && TYPE_BEING_DEFINED (current_class_type)
7340       && (DECL_INITIAL (decl) || init))
7341     DECL_DEFINED_IN_CLASS_P (decl) = 1;
7342
7343   if (TREE_CODE (decl) == VAR_DECL 
7344       && DECL_CONTEXT (decl)
7345       && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
7346       && DECL_CONTEXT (decl) != current_namespace
7347       && init)
7348     {
7349       /* Leave the namespace of the object. */
7350       pop_decl_namespace ();
7351     }
7352
7353   /* If the type of the thing we are declaring either has
7354      a constructor, or has a virtual function table pointer,
7355      AND its initialization was accepted by `start_decl',
7356      then we stayed on the permanent obstack through the
7357      declaration, otherwise, changed obstacks as GCC would.  */
7358
7359   type = TREE_TYPE (decl);
7360
7361   if (type == error_mark_node)
7362     {
7363       if (toplevel_bindings_p () && temporary)
7364         end_temporary_allocation ();
7365
7366       return;
7367     }
7368
7369   if (TYPE_HAS_MUTABLE_P (type))
7370     TREE_READONLY (decl) = 0;
7371   
7372   if (processing_template_decl)
7373     {
7374       if (init && DECL_INITIAL (decl))
7375         DECL_INITIAL (decl) = copy_to_permanent (init);
7376       goto finish_end0;
7377     }
7378
7379   /* Take care of TYPE_DECLs up front.  */
7380   if (TREE_CODE (decl) == TYPE_DECL)
7381     {
7382       if (init && DECL_INITIAL (decl))
7383         {
7384           /* typedef foo = bar; store the type of bar as the type of foo.  */
7385           TREE_TYPE (decl) = type = TREE_TYPE (init);
7386           DECL_INITIAL (decl) = init = NULL_TREE;
7387         }
7388       if (type != error_mark_node
7389           && IS_AGGR_TYPE (type) && DECL_NAME (decl))
7390         {
7391           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7392             cp_warning ("shadowing previous type declaration of `%#D'", decl);
7393           set_identifier_type_value (DECL_NAME (decl), type);
7394           CLASSTYPE_GOT_SEMICOLON (type) = 1;
7395         }
7396       GNU_xref_decl (current_function_decl, decl);
7397
7398       /* If we have installed this as the canonical typedef for this
7399          type, and that type has not been defined yet, delay emitting
7400          the debug information for it, as we will emit it later.  */
7401       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7402           && TYPE_SIZE (TREE_TYPE (decl)) == NULL_TREE)
7403         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7404
7405       rest_of_decl_compilation (decl, NULL_PTR,
7406                                 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
7407       goto finish_end;
7408     }
7409
7410   if (TREE_CODE (decl) != FUNCTION_DECL)
7411     ttype = target_type (type);
7412
7413   if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
7414       && TYPE_NEEDS_CONSTRUCTING (type))
7415     {
7416       /* Currently, GNU C++ puts constants in text space, making them
7417          impossible to initialize.  In the future, one would hope for
7418          an operating system which understood the difference between
7419          initialization and the running of a program.  */
7420       was_readonly = 1;
7421       TREE_READONLY (decl) = 0;
7422     }
7423
7424   if (TREE_CODE (decl) == FIELD_DECL)
7425     {
7426       if (init && init != error_mark_node)
7427         my_friendly_assert (TREE_PERMANENT (init), 147);
7428
7429       if (asmspec)
7430         {
7431           /* This must override the asm specifier which was placed
7432              by grokclassfn.  Lay this out fresh.  */
7433           DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
7434           DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7435           make_decl_rtl (decl, asmspec, 0);
7436         }
7437     }
7438   /* If `start_decl' didn't like having an initialization, ignore it now.  */
7439   else if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7440     init = NULL_TREE;
7441   else if (DECL_EXTERNAL (decl))
7442     ;
7443   else if (TREE_CODE (type) == REFERENCE_TYPE)
7444     {
7445       if (TREE_STATIC (decl))
7446         make_decl_rtl (decl, NULL_PTR, toplevel_bindings_p ());
7447       grok_reference_init (decl, type, init);
7448       init = NULL_TREE;
7449     }
7450
7451   /* Check for certain invalid initializations.  */
7452   if (init)
7453     {
7454       if (TYPE_SIZE (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
7455         {
7456           cp_error ("variable-sized object `%D' may not be initialized", decl);
7457           init = NULL_TREE;
7458         }
7459       if (TREE_CODE (type) == ARRAY_TYPE
7460           && !TYPE_SIZE (complete_type (TREE_TYPE (type))))
7461         {
7462           cp_error ("elements of array `%#D' have incomplete type", decl);
7463           init = NULL_TREE;
7464         }
7465     }
7466
7467   GNU_xref_decl (current_function_decl, decl);
7468
7469   core_type = type;
7470   while (TREE_CODE (core_type) == ARRAY_TYPE)
7471     core_type = TREE_TYPE (core_type);
7472   
7473   if (TREE_CODE (decl) == FIELD_DECL)
7474     ;
7475   else if (TREE_CODE (decl) == CONST_DECL)
7476     {
7477       my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7478
7479       DECL_INITIAL (decl) = init;
7480
7481       /* This will keep us from needing to worry about our obstacks.  */
7482       my_friendly_assert (init != NULL_TREE, 149);
7483       init = NULL_TREE;
7484     }
7485   else if (init)
7486     {
7487       if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7488         {
7489           if (TREE_CODE (type) == ARRAY_TYPE)
7490             init = digest_init (type, init, (tree *) 0);
7491           else if (TREE_CODE (init) == CONSTRUCTOR
7492                    && TREE_HAS_CONSTRUCTOR (init))
7493             {
7494               if (TYPE_NON_AGGREGATE_CLASS (type))
7495                 {
7496                   cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7497                             decl);
7498                   init = error_mark_node;
7499                 }
7500               else
7501                 goto dont_use_constructor;
7502             }
7503         }
7504       else
7505         {
7506         dont_use_constructor:
7507           if (TREE_CODE (init) != TREE_VEC)
7508             init = store_init_value (decl, init);
7509         }
7510
7511       if (init)
7512         /* We must hide the initializer so that expand_decl
7513            won't try to do something it does not understand.  */
7514         init = obscure_complex_init (decl, init);
7515     }
7516   else if (DECL_EXTERNAL (decl))
7517     ;
7518   else if (TREE_CODE_CLASS (TREE_CODE (type)) == 't'
7519            && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7520     {
7521       if (! TYPE_NEEDS_CONSTRUCTING (core_type))
7522         {
7523           if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
7524             cp_error ("structure `%D' with uninitialized const members", decl);
7525           if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
7526             cp_error ("structure `%D' with uninitialized reference members",
7527                       decl);
7528         }
7529
7530       check_for_uninitialized_const_var (decl);
7531
7532       if (TYPE_SIZE (type) != NULL_TREE
7533           && TYPE_NEEDS_CONSTRUCTING (type))
7534         init = obscure_complex_init (decl, NULL_TREE);
7535
7536     }
7537   else
7538     check_for_uninitialized_const_var (decl);
7539   
7540   /* For top-level declaration, the initial value was read in
7541      the temporary obstack.  MAXINDEX, rtl, etc. to be made below
7542      must go in the permanent obstack; but don't discard the
7543      temporary data yet.  */
7544
7545   if (toplevel_bindings_p () && temporary)
7546     end_temporary_allocation ();
7547
7548   /* Deduce size of array from initialization, if not already known.  */
7549
7550   if (TREE_CODE (type) == ARRAY_TYPE
7551       && TYPE_DOMAIN (type) == NULL_TREE
7552       && TREE_CODE (decl) != TYPE_DECL)
7553     {
7554       int do_default
7555         = (TREE_STATIC (decl)
7556            /* Even if pedantic, an external linkage array
7557               may have incomplete type at first.  */
7558            ? pedantic && ! DECL_EXTERNAL (decl)
7559            : !DECL_EXTERNAL (decl));
7560       tree initializer = init ? init : DECL_INITIAL (decl);
7561       int failure = complete_array_type (type, initializer, do_default);
7562
7563       if (failure == 1)
7564         cp_error ("initializer fails to determine size of `%D'", decl);
7565
7566       if (failure == 2)
7567         {
7568           if (do_default)
7569             cp_error ("array size missing in `%D'", decl);
7570           /* If a `static' var's size isn't known, make it extern as
7571              well as static, so it does not get allocated.  If it's not
7572              `static', then don't mark it extern; finish_incomplete_decl
7573              will give it a default size and it will get allocated.  */
7574           else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7575             DECL_EXTERNAL (decl) = 1;
7576         }
7577
7578       if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7579           && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7580                               integer_zero_node))
7581         cp_error ("zero-size array `%D'", decl);
7582
7583       layout_decl (decl, 0);
7584     }
7585
7586   if (TREE_CODE (decl) == VAR_DECL)
7587     {
7588       if (DECL_SIZE (decl) == NULL_TREE
7589           && TYPE_SIZE (complete_type (TREE_TYPE (decl))) != NULL_TREE)
7590         layout_decl (decl, 0);
7591
7592       if (TREE_STATIC (decl) && DECL_SIZE (decl) == NULL_TREE)
7593         {
7594           /* A static variable with an incomplete type:
7595              that is an error if it is initialized.
7596              Otherwise, let it through, but if it is not `extern'
7597              then it may cause an error message later.  */
7598           if (DECL_INITIAL (decl) != NULL_TREE)
7599             cp_error ("storage size of `%D' isn't known", decl);
7600           init = NULL_TREE;
7601         }
7602       else if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
7603         {
7604           /* An automatic variable with an incomplete type: that is an error.
7605              Don't talk about array types here, since we took care of that
7606              message in grokdeclarator.  */
7607           cp_error ("storage size of `%D' isn't known", decl);
7608           TREE_TYPE (decl) = error_mark_node;
7609         }
7610       else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7611         /* Let debugger know it should output info for this type.  */
7612         note_debug_info_needed (ttype);
7613
7614       if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7615         note_debug_info_needed (DECL_CONTEXT (decl));
7616
7617       if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7618           && DECL_SIZE (decl) != NULL_TREE
7619           && ! TREE_CONSTANT (DECL_SIZE (decl)))
7620         {
7621           if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7622             constant_expression_warning (DECL_SIZE (decl));
7623           else
7624             cp_error ("storage size of `%D' isn't constant", decl);
7625         }
7626
7627       if (! DECL_EXTERNAL (decl) && TYPE_NEEDS_DESTRUCTOR (type)
7628           /* Cleanups for static variables are handled by `finish_file'.  */
7629           && ! TREE_STATIC (decl))
7630         {
7631           int yes = suspend_momentary ();
7632           cleanup = maybe_build_cleanup (decl);
7633           resume_momentary (yes);
7634         }
7635     }
7636   /* PARM_DECLs get cleanups, too.  */
7637   else if (TREE_CODE (decl) == PARM_DECL && TYPE_NEEDS_DESTRUCTOR (type))
7638     {
7639       if (temporary)
7640         end_temporary_allocation ();
7641       cleanup = maybe_build_cleanup (decl);
7642       if (temporary)
7643         resume_temporary_allocation ();
7644     }
7645
7646   /* Output the assembler code and/or RTL code for variables and functions,
7647      unless the type is an undefined structure or union.
7648      If not, it will get done when the type is completed.  */
7649
7650   was_incomplete = (DECL_SIZE (decl) == NULL_TREE);
7651
7652   if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
7653       || TREE_CODE (decl) == RESULT_DECL)
7654     {
7655       /* ??? FIXME: What about nested classes?  */
7656       int toplev = toplevel_bindings_p ();
7657       int was_temp
7658         = (TREE_STATIC (decl) && TYPE_NEEDS_DESTRUCTOR (type)
7659            && allocation_temporary_p ());
7660
7661       if (was_temp)
7662         end_temporary_allocation ();
7663
7664       /* Static data in a function with comdat linkage also has comdat
7665          linkage.  */
7666       if (TREE_CODE (decl) == VAR_DECL
7667           && TREE_STATIC (decl)
7668           /* Don't mess with __FUNCTION__.  */
7669           && ! TREE_ASM_WRITTEN (decl)
7670           && current_function_decl
7671           && DECL_CONTEXT (decl) == current_function_decl
7672           && (DECL_THIS_INLINE (current_function_decl)
7673               || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7674           && TREE_PUBLIC (current_function_decl))
7675         {
7676           /* Rather than try to get this right with inlining, we suppress
7677              inlining of such functions.  */
7678           current_function_cannot_inline
7679             = "function with static variable cannot be inline";
7680
7681           /* If flag_weak, we don't need to mess with this, as we can just
7682              make the function weak, and let it refer to its unique local
7683              copy.  This works because we don't allow the function to be
7684              inlined.  */
7685           if (! flag_weak)
7686             {
7687               if (DECL_INTERFACE_KNOWN (current_function_decl))
7688                 {
7689                   TREE_PUBLIC (decl) = 1;
7690                   DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7691                 }
7692               else if (DECL_INITIAL (decl) == NULL_TREE
7693                        || DECL_INITIAL (decl) == error_mark_node)
7694                 {
7695                   TREE_PUBLIC (decl) = 1;
7696                   DECL_COMMON (decl) = 1;
7697                 }
7698               /* else we lose. We can only do this if we can use common,
7699                  which we can't if it has been initialized.  */
7700
7701               if (TREE_PUBLIC (decl))
7702                 DECL_ASSEMBLER_NAME (decl)
7703                   = build_static_name (current_function_decl, DECL_NAME (decl));
7704               else if (! DECL_ARTIFICIAL (decl))
7705                 {
7706                   cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7707                   cp_warning_at ("  you can work around this by removing the initializer", decl);
7708                 }
7709             }
7710         }
7711
7712       else if (TREE_CODE (decl) == VAR_DECL
7713                && DECL_LANG_SPECIFIC (decl)
7714                && DECL_COMDAT (decl))
7715         /* Set it up again; we might have set DECL_INITIAL since the
7716            last time.  */
7717         comdat_linkage (decl);
7718
7719       if (TREE_CODE (decl) == VAR_DECL && DECL_VIRTUAL_P (decl))
7720         make_decl_rtl (decl, NULL_PTR, toplev);
7721       else if (TREE_CODE (decl) == VAR_DECL
7722                && TREE_READONLY (decl)
7723                && DECL_INITIAL (decl) != NULL_TREE
7724                && DECL_INITIAL (decl) != error_mark_node
7725                && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
7726         {
7727           DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
7728
7729           if (asmspec)
7730             DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7731
7732           if (! toplev
7733               && TREE_STATIC (decl)
7734               && ! TREE_SIDE_EFFECTS (decl)
7735               && ! TREE_PUBLIC (decl)
7736               && ! DECL_EXTERNAL (decl)
7737               && ! TYPE_NEEDS_DESTRUCTOR (type)
7738               && DECL_MODE (decl) != BLKmode)
7739             {
7740               /* If this variable is really a constant, then fill its DECL_RTL
7741                  slot with something which won't take up storage.
7742                  If something later should take its address, we can always give
7743                  it legitimate RTL at that time.  */
7744               DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
7745               store_expr (DECL_INITIAL (decl), DECL_RTL (decl), 0);
7746               TREE_ASM_WRITTEN (decl) = 1;
7747             }
7748           else if (toplev && ! TREE_PUBLIC (decl))
7749             {
7750               /* If this is a static const, change its apparent linkage
7751                  if it belongs to a #pragma interface.  */
7752               if (!interface_unknown)
7753                 {
7754                   TREE_PUBLIC (decl) = 1;
7755                   DECL_EXTERNAL (decl) = interface_only;
7756                 }
7757               make_decl_rtl (decl, asmspec, toplev);
7758             }
7759           else
7760             rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7761         }
7762       else if (TREE_CODE (decl) == VAR_DECL
7763                && DECL_LANG_SPECIFIC (decl)
7764                && DECL_IN_AGGR_P (decl))
7765         {
7766           if (TREE_STATIC (decl))
7767             {
7768               if (init == NULL_TREE
7769 #ifdef DEFAULT_STATIC_DEFS
7770                   /* If this code is dead, then users must
7771                      explicitly declare static member variables
7772                      outside the class def'n as well.  */
7773                   && TYPE_NEEDS_CONSTRUCTING (type)
7774 #endif
7775                   )
7776                 {
7777                   DECL_EXTERNAL (decl) = 1;
7778                   make_decl_rtl (decl, asmspec, 1);
7779                 }
7780               else
7781                 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7782             }
7783           else
7784             /* Just a constant field.  Should not need any rtl.  */
7785             goto finish_end0;
7786         }
7787       else
7788         rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7789
7790       if (was_temp)
7791         resume_temporary_allocation ();
7792
7793       if (!abstract_virtuals_error (decl, core_type)
7794           && (TREE_CODE (type) == FUNCTION_TYPE
7795               || TREE_CODE (type) == METHOD_TYPE))
7796         abstract_virtuals_error (decl, TREE_TYPE (type));
7797
7798       if (TREE_CODE (decl) == FUNCTION_DECL)
7799         ;
7800       else if (DECL_EXTERNAL (decl)
7801                && ! (DECL_LANG_SPECIFIC (decl)
7802                      && DECL_NOT_REALLY_EXTERN (decl)))
7803         {
7804           if (init)
7805             DECL_INITIAL (decl) = init;
7806         }
7807       else if (TREE_STATIC (decl) && type != error_mark_node)
7808         {
7809           /* Cleanups for static variables are handled by `finish_file'.  */
7810           if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
7811               || TYPE_NEEDS_DESTRUCTOR (type))
7812             expand_static_init (decl, init);
7813         }
7814       else if (! toplev)
7815         {
7816           /* This is a declared decl which must live until the
7817              end of the binding contour.  It may need a cleanup.  */
7818
7819           /* Recompute the RTL of a local array now
7820              if it used to be an incomplete type.  */
7821           if (was_incomplete && ! TREE_STATIC (decl))
7822             {
7823               /* If we used it already as memory, it must stay in memory.  */
7824               TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7825               /* If it's still incomplete now, no init will save it.  */
7826               if (DECL_SIZE (decl) == NULL_TREE)
7827                 DECL_INITIAL (decl) = NULL_TREE;
7828               expand_decl (decl);
7829             }
7830           else if (! TREE_ASM_WRITTEN (decl)
7831                    && (TYPE_SIZE (type) != NULL_TREE
7832                        || TREE_CODE (type) == ARRAY_TYPE))
7833             {
7834               /* Do this here, because we did not expand this decl's
7835                  rtl in start_decl.  */
7836               if (DECL_RTL (decl) == NULL_RTX)
7837                 expand_decl (decl);
7838               else if (cleanup)
7839                 {
7840                   /* XXX: Why don't we use decl here?  */
7841                   /* Ans: Because it was already expanded? */
7842                   if (! expand_decl_cleanup (NULL_TREE, cleanup))
7843                     cp_error ("parser lost in parsing declaration of `%D'",
7844                               decl);
7845                   /* Cleanup used up here.  */
7846                   cleanup = NULL_TREE;
7847                 }
7848             }
7849
7850           if (current_binding_level->is_for_scope)
7851             {
7852               struct binding_level *outer 
7853                 = current_binding_level->level_chain;
7854
7855               /* Check to see if the same name is already bound at
7856                  the outer level, either because it was directly declared,
7857                  or because a dead for-decl got preserved.  In either case,
7858                  the code would not have been valid under the ARM
7859                  scope rules, so clear is_for_scope for the
7860                  current_binding_level.
7861
7862                  Otherwise, we need to preserve the temp slot for decl
7863                  to last into the outer binding level.  */
7864
7865               tree outer_binding 
7866                 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
7867               
7868               if (outer_binding && BINDING_LEVEL (outer_binding) == outer
7869                   && (TREE_CODE (BINDING_VALUE (outer_binding)) 
7870                       == VAR_DECL)
7871                   && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
7872                 {
7873                   BINDING_VALUE (outer_binding)
7874                     = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
7875                   current_binding_level->is_for_scope = 0;
7876                 }
7877               else if (DECL_IN_MEMORY_P (decl))
7878                 preserve_temp_slots (DECL_RTL (decl));
7879             }
7880
7881           expand_start_target_temps ();
7882
7883           if (DECL_SIZE (decl) && type != error_mark_node)
7884             {
7885               /* Compute and store the initial value.  */
7886               expand_decl_init (decl);
7887               already_used = TREE_USED (decl) || TREE_USED (type);
7888
7889               if (init || TYPE_NEEDS_CONSTRUCTING (type))
7890                 {
7891                   emit_line_note (DECL_SOURCE_FILE (decl),
7892                                   DECL_SOURCE_LINE (decl));
7893                   expand_aggr_init (decl, init, flags);
7894                 }
7895
7896               /* Set this to 0 so we can tell whether an aggregate which
7897                  was initialized was ever used.  Don't do this if it has a
7898                  destructor, so we don't complain about the 'resource
7899                  allocation is initialization' idiom.  */
7900               /* Now set attribute((unused)) on types so decls of
7901                  that type will be marked used. (see TREE_USED, above.) 
7902                  This avoids the warning problems this particular code
7903                  tried to work around. */
7904
7905               if (TYPE_NEEDS_CONSTRUCTING (type)
7906                   && ! already_used
7907                   && cleanup == NULL_TREE
7908                   && DECL_NAME (decl))
7909                 TREE_USED (decl) = 0;
7910
7911               if (already_used)
7912                 TREE_USED (decl) = 1;
7913             }
7914
7915           /* Cleanup any temporaries needed for the initial value.  */
7916           expand_end_target_temps ();
7917
7918           if (DECL_SIZE (decl) && type != error_mark_node)
7919             {
7920               /* Store the cleanup, if there was one.  */
7921               if (cleanup)
7922                 {
7923                   if (! expand_decl_cleanup (decl, cleanup))
7924                     cp_error ("parser lost in parsing declaration of `%D'",
7925                               decl);
7926                 }
7927             }
7928         }
7929     finish_end0:
7930
7931       /* Undo call to `pushclass' that was done in `start_decl'
7932          due to initialization of qualified member variable.
7933          I.e., Foo::x = 10;  */
7934       {
7935         tree context = DECL_REAL_CONTEXT (decl);
7936         if (context
7937             && TREE_CODE_CLASS (TREE_CODE (context)) == 't'
7938             && (TREE_CODE (decl) == VAR_DECL
7939                 /* We also have a pushclass done that we need to undo here
7940                    if we're at top level and declare a method.  */
7941                 || TREE_CODE (decl) == FUNCTION_DECL)
7942             /* If size hasn't been set, we're still defining it,
7943                and therefore inside the class body; don't pop
7944                the binding level..  */
7945             && TYPE_SIZE (context) != NULL_TREE
7946             && context == current_class_type)
7947           pop_nested_class ();
7948       }
7949     }
7950
7951  finish_end:
7952
7953   /* If requested, warn about definitions of large data objects.  */
7954
7955   if (warn_larger_than
7956       && ! processing_template_decl
7957       && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
7958       && !DECL_EXTERNAL (decl))
7959     {
7960       register tree decl_size = DECL_SIZE (decl);
7961
7962       if (decl_size && TREE_CODE (decl_size) == INTEGER_CST)
7963         {
7964           unsigned units = TREE_INT_CST_LOW (decl_size) / BITS_PER_UNIT;
7965
7966           if (units > larger_than_size)
7967             warning_with_decl (decl, "size of `%s' is %u bytes", units);
7968         }
7969     }
7970
7971   if (need_pop)
7972     {
7973       /* Resume permanent allocation, if not within a function.  */
7974       /* The corresponding push_obstacks_nochange is in start_decl,
7975          start_method, groktypename, and in grokfield.  */
7976       pop_obstacks ();
7977     }
7978
7979   if (was_readonly)
7980     TREE_READONLY (decl) = 1;
7981 }
7982
7983 /* This is here for a midend callback from c-common.c */
7984
7985 void
7986 finish_decl (decl, init, asmspec_tree)
7987      tree decl, init;
7988      tree asmspec_tree;
7989 {
7990   cp_finish_decl (decl, init, asmspec_tree, 1, 0);
7991 }
7992
7993 void
7994 expand_static_init (decl, init)
7995      tree decl;
7996      tree init;
7997 {
7998   tree oldstatic = value_member (decl, static_aggregates);
7999
8000   if (oldstatic)
8001     {
8002       if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
8003         cp_error ("multiple initializations given for `%D'", decl);
8004     }
8005   else if (! toplevel_bindings_p ())
8006     {
8007       /* Emit code to perform this initialization but once.  */
8008       tree temp;
8009
8010       /* Remember this information until end of file.  */
8011       push_obstacks (&permanent_obstack, &permanent_obstack);
8012
8013       /* Emit code to perform this initialization but once.  This code
8014          looks like:
8015
8016            static int temp = 0;
8017            if (!temp) {
8018              // Do initialization.
8019              temp = 1;
8020              // Register variable for destruction at end of program.
8021            }
8022
8023          Note that the `temp' variable is only set to 1 *after* the
8024          initialization is complete.  This ensures that an exception,
8025          thrown during the construction, will cause the variable to
8026          reinitialized when we pass through this code again, as per:
8027          
8028            [stmt.dcl]
8029
8030            If the initialization exits by throwing an exception, the
8031            initialization is not complete, so it will be tried again
8032            the next time control enters the declaration.
8033
8034          In theory, this process should be thread-safe, too; multiple
8035          threads should not be able to initialize the variable more
8036          than once.  We don't yet attempt to ensure thread-safety.  */
8037       temp = get_temp_name (integer_type_node, 1);
8038       rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
8039
8040       /* Begin the conditional initialization.  */
8041       expand_start_cond (build_binary_op (EQ_EXPR, temp,
8042                                           integer_zero_node), 0);
8043       expand_start_target_temps ();
8044
8045       /* Do the initialization itself.  */
8046       if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
8047           || (init && TREE_CODE (init) == TREE_LIST))
8048         {
8049           expand_aggr_init (decl, init, 0);
8050           do_pending_stack_adjust ();
8051         }
8052       else if (init)
8053         expand_assignment (decl, init, 0, 0);
8054
8055       /* Set TEMP to 1.  */
8056       expand_assignment (temp, integer_one_node, 0, 0);
8057
8058       /* Cleanup any temporaries needed for the initial value.  If
8059          destroying one of the temporaries causes an exception to be
8060          thrown, then the object itself has still been fully
8061          constructed.  */
8062       expand_end_target_temps ();
8063
8064       /* Use atexit to register a function for destroying this static
8065          variable.  */
8066       if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
8067         {
8068           tree cleanup, fcall;
8069           static tree Atexit = 0;
8070           int saved_flag_access_control;
8071
8072           if (Atexit == 0)
8073             {
8074               tree atexit_fndecl, PFV, pfvlist;
8075               /* Remember this information until end of file.  */
8076               push_obstacks (&permanent_obstack, &permanent_obstack);
8077               PFV = build_pointer_type (build_function_type
8078                                         (void_type_node, void_list_node));
8079
8080               pfvlist = tree_cons (NULL_TREE, PFV, void_list_node);
8081
8082               push_lang_context (lang_name_c);
8083               /* Note that we do not call pushdecl for this function;
8084                  there's no reason that this declaration should be
8085                  accessible to anyone.  */
8086               atexit_fndecl
8087                 = define_function ("atexit",
8088                                    build_function_type (void_type_node,
8089                                                         pfvlist),
8090                                    NOT_BUILT_IN, 
8091                                    /*pfn=*/0,
8092                                    NULL_PTR);
8093               mark_used (atexit_fndecl);
8094               Atexit = default_conversion (atexit_fndecl);
8095               pop_lang_context ();
8096               pop_obstacks ();
8097             }
8098               
8099           /* Call build_cleanup before we enter the anonymous function
8100              so that any access checks will be done relative to the
8101              current scope, rather than the scope of the anonymous
8102              function.  */
8103           build_cleanup (decl);
8104
8105           /* Now start the function.  */
8106           cleanup = start_anon_func ();
8107
8108           /* Now, recompute the cleanup.  It may contain SAVE_EXPRs
8109              that refer to the original function, rather than the
8110              anonymous one.  That will make the back-end think that
8111              nested functions are in use, which causes confusion.  */
8112           saved_flag_access_control = flag_access_control;
8113           flag_access_control = 0;
8114           fcall = build_cleanup (decl);
8115           flag_access_control = saved_flag_access_control;
8116
8117           /* Finish off the function.  */
8118           expand_expr_stmt (fcall);
8119           end_anon_func ();
8120
8121           /* Call atexit with the cleanup function.  */
8122           mark_addressable (cleanup);
8123           cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
8124           fcall = build_function_call (Atexit, 
8125                                        expr_tree_cons (NULL_TREE, 
8126                                                        cleanup, 
8127                                                        NULL_TREE));
8128           expand_expr_stmt (fcall);
8129         }
8130
8131       expand_end_cond ();
8132       /* Resume old (possibly temporary) allocation.  */
8133       pop_obstacks ();
8134     }
8135   else
8136     {
8137       /* This code takes into account memory allocation policy of
8138          `start_decl'.  Namely, if TYPE_NEEDS_CONSTRUCTING does not
8139          hold for this object, then we must make permanent the storage
8140          currently in the temporary obstack.  */
8141       if (!TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
8142         preserve_initializer ();
8143       static_aggregates = perm_tree_cons (init, decl, static_aggregates);
8144     }
8145 }
8146 \f
8147 /* Make TYPE a complete type based on INITIAL_VALUE.
8148    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8149    2 if there was no information (in which case assume 0 if DO_DEFAULT).  */
8150
8151 int
8152 complete_array_type (type, initial_value, do_default)
8153      tree type, initial_value;
8154      int do_default;
8155 {
8156   register tree maxindex = NULL_TREE;
8157   int value = 0;
8158   
8159   /* Allocate on the same obstack as TYPE.  */
8160   push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8161   
8162   if (initial_value)
8163     {
8164       /* Note MAXINDEX  is really the maximum index,
8165          one less than the size.  */
8166       if (TREE_CODE (initial_value) == STRING_CST)
8167         {
8168           int eltsize
8169             = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8170           maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8171                                    / eltsize) - 1, 0);
8172         }
8173       else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8174         {
8175           tree elts = CONSTRUCTOR_ELTS (initial_value);
8176           maxindex = size_binop (MINUS_EXPR, integer_zero_node, size_one_node);
8177           for (; elts; elts = TREE_CHAIN (elts))
8178             {
8179               if (TREE_PURPOSE (elts))
8180                 maxindex = TREE_PURPOSE (elts);
8181               else
8182                 maxindex = size_binop (PLUS_EXPR, maxindex, size_one_node);
8183             }
8184           maxindex = copy_node (maxindex);
8185         }
8186       else
8187         {
8188           /* Make an error message unless that happened already.  */
8189           if (initial_value != error_mark_node)
8190             value = 1;
8191           else
8192             initial_value = NULL_TREE;
8193
8194           /* Prevent further error messages.  */
8195           maxindex = build_int_2 (0, 0);
8196         }
8197     }
8198
8199   if (!maxindex)
8200     {
8201       if (do_default)
8202         maxindex = build_int_2 (0, 0);
8203       value = 2;
8204     }
8205
8206   if (maxindex)
8207     {
8208       tree itype;
8209       tree domain;
8210
8211       domain = build_index_type (maxindex);
8212       TYPE_DOMAIN (type) = domain;
8213
8214       if (! TREE_TYPE (maxindex))
8215         TREE_TYPE (maxindex) = domain;
8216       if (initial_value)
8217         itype = TREE_TYPE (initial_value);
8218       else
8219         itype = NULL;
8220       if (itype && !TYPE_DOMAIN (itype))
8221         TYPE_DOMAIN (itype) = domain;
8222       /* The type of the main variant should never be used for arrays
8223          of different sizes.  It should only ever be completed with the
8224          size of the array.  */
8225       if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
8226         TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
8227     }
8228
8229   pop_obstacks();
8230   
8231   /* Lay out the type now that we can get the real answer.  */
8232
8233   layout_type (type);
8234
8235   return value;
8236 }
8237 \f
8238 /* Return zero if something is declared to be a member of type
8239    CTYPE when in the context of CUR_TYPE.  STRING is the error
8240    message to print in that case.  Otherwise, quietly return 1.  */
8241
8242 static int
8243 member_function_or_else (ctype, cur_type, string)
8244      tree ctype, cur_type;
8245      const char *string;
8246 {
8247   if (ctype && ctype != cur_type)
8248     {
8249       error (string, TYPE_NAME_STRING (ctype));
8250       return 0;
8251     }
8252   return 1;
8253 }
8254 \f
8255 /* Subroutine of `grokdeclarator'.  */
8256
8257 /* Generate errors possibly applicable for a given set of specifiers.
8258    This is for ARM $7.1.2.  */
8259
8260 static void
8261 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8262      tree object;
8263      const char *type;
8264      int virtualp, quals, friendp, raises, inlinep;
8265 {
8266   if (virtualp)
8267     cp_error ("`%D' declared as a `virtual' %s", object, type);
8268   if (inlinep)
8269     cp_error ("`%D' declared as an `inline' %s", object, type);
8270   if (quals)
8271     cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
8272               object, type);
8273   if (friendp)
8274     cp_error_at ("`%D' declared as a friend", object);
8275   if (raises)
8276     cp_error_at ("`%D' declared with an exception specification", object);
8277 }
8278
8279 /* CTYPE is class type, or null if non-class.
8280    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8281    or METHOD_TYPE.
8282    DECLARATOR is the function's name.
8283    VIRTUALP is truthvalue of whether the function is virtual or not.
8284    FLAGS are to be passed through to `grokclassfn'.
8285    QUALS are qualifiers indicating whether the function is `const'
8286    or `volatile'.
8287    RAISES is a list of exceptions that this function can raise.
8288    CHECK is 1 if we must find this method in CTYPE, 0 if we should
8289    not look, and -1 if we should not call `grokclassfn' at all.  
8290
8291    Returns `NULL_TREE' if something goes wrong, after issuing
8292    applicable error messages.  */
8293
8294 static tree
8295 grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
8296             raises, check, friendp, publicp, inlinep, funcdef_flag,
8297             template_count, in_namespace)
8298      tree ctype, type;
8299      tree declarator;
8300      tree orig_declarator;
8301      int virtualp;
8302      enum overload_flags flags;
8303      tree quals, raises;
8304      int check, friendp, publicp, inlinep, funcdef_flag, template_count;
8305      tree in_namespace;
8306 {
8307   tree cname, decl;
8308   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8309   int has_default_arg = 0;
8310   tree t;
8311
8312   if (ctype)
8313     cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8314       ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8315   else
8316     cname = NULL_TREE;
8317
8318   if (raises)
8319     {
8320       type = build_exception_variant (type, raises);
8321     }
8322
8323   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8324   /* Propagate volatile out from type to decl. */
8325   if (TYPE_VOLATILE (type))
8326     TREE_THIS_VOLATILE (decl) = 1;
8327
8328   /* If this decl has namespace scope, set that up.  */
8329   if (in_namespace)
8330     set_decl_namespace (decl, in_namespace, friendp);
8331   else if (publicp && ! ctype)
8332     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8333
8334   /* `main' and builtins have implicit 'C' linkage.  */
8335   if ((MAIN_NAME_P (declarator)
8336        || (IDENTIFIER_LENGTH (declarator) > 10
8337            && IDENTIFIER_POINTER (declarator)[0] == '_'
8338            && IDENTIFIER_POINTER (declarator)[1] == '_'
8339            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8340       && current_lang_name == lang_name_cplusplus
8341       && ctype == NULL_TREE
8342       /* NULL_TREE means global namespace.  */
8343       && DECL_CONTEXT (decl) == NULL_TREE)
8344     DECL_LANGUAGE (decl) = lang_c;
8345
8346   /* Should probably propagate const out from type to decl I bet (mrs).  */
8347   if (staticp)
8348     {
8349       DECL_STATIC_FUNCTION_P (decl) = 1;
8350       DECL_CONTEXT (decl) = ctype;
8351     }
8352
8353   if (ctype)
8354     DECL_CLASS_CONTEXT (decl) = ctype;
8355
8356   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8357     {
8358       if (processing_template_decl)
8359         error ("cannot declare `main' to be a template");
8360       if (inlinep)
8361         error ("cannot declare `main' to be inline");
8362       else if (! publicp)
8363         error ("cannot declare `main' to be static");
8364       inlinep = 0;
8365       publicp = 1;
8366     }
8367
8368   /* Members of anonymous types and local classes have no linkage; make
8369      them internal.  */
8370   if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
8371                 || hack_decl_function_context (TYPE_MAIN_DECL (ctype))))
8372     publicp = 0;
8373
8374   if (publicp)
8375     {
8376       /* [basic.link]: A name with no linkage (notably, the name of a class
8377          or enumeration declared in a local scope) shall not be used to
8378          declare an entity with linkage.
8379
8380          Only check this for public decls for now.  */
8381       t = no_linkage_check (TREE_TYPE (decl));
8382       if (t)
8383         {
8384           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8385             {
8386               if (DECL_LANGUAGE (decl) == lang_c)
8387                 /* Allow this; it's pretty common in C.  */;
8388               else
8389                 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8390                             decl);
8391             }
8392           else
8393             cp_pedwarn ("non-local function `%#D' uses local type `%T'",
8394                         decl, t);
8395         }
8396     }
8397
8398   TREE_PUBLIC (decl) = publicp;
8399   if (! publicp)
8400     {
8401       DECL_INTERFACE_KNOWN (decl) = 1;
8402       DECL_NOT_REALLY_EXTERN (decl) = 1;
8403     }
8404
8405   if (inlinep)
8406     DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8407
8408   DECL_EXTERNAL (decl) = 1;
8409   if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8410     {
8411       cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8412                 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8413       quals = NULL_TREE;
8414     }
8415
8416   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8417     grok_op_properties (decl, virtualp, check < 0);
8418
8419   if (ctype && hack_decl_function_context (decl))
8420     DECL_NO_STATIC_CHAIN (decl) = 1;
8421
8422   for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8423     if (TREE_PURPOSE (t)
8424         && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8425       {
8426         has_default_arg = 1;
8427         break;
8428       }
8429
8430   if (friendp
8431       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8432     {
8433       if (funcdef_flag)
8434         cp_error
8435           ("defining explicit specialization `%D' in friend declaration",
8436            orig_declarator);
8437       else
8438         {
8439           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8440             {
8441               /* Something like `template <class T> friend void f<T>()'.  */
8442               cp_error ("template-id `%D' in declaration of primary template", 
8443                         orig_declarator);
8444               return NULL_TREE;
8445             }
8446
8447
8448           /* A friend declaration of the form friend void f<>().  Record
8449              the information in the TEMPLATE_ID_EXPR.  */
8450           SET_DECL_IMPLICIT_INSTANTIATION (decl);
8451           DECL_TEMPLATE_INFO (decl)
8452             = perm_tree_cons (TREE_OPERAND (orig_declarator, 0),
8453                               TREE_OPERAND (orig_declarator, 1),
8454                               NULL_TREE);
8455
8456           if (has_default_arg)
8457             {
8458               cp_error ("default arguments are not allowed in declaration of friend template specialization `%D'",
8459                         decl);
8460               return NULL_TREE;
8461             }
8462
8463           if (inlinep)
8464             {
8465               cp_error ("`inline' is not allowed in declaration of friend template specialization `%D'", 
8466                         decl);
8467               return NULL_TREE;
8468             }
8469         }
8470     }
8471
8472   if (has_default_arg)
8473     add_defarg_fn (decl);
8474
8475   /* Plain overloading: will not be grok'd by grokclassfn.  */
8476   if (! ctype && ! processing_template_decl
8477       && DECL_LANGUAGE (decl) != lang_c
8478       && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
8479     set_mangled_name_for_decl (decl);
8480
8481   if (funcdef_flag)
8482     /* Make the init_value nonzero so pushdecl knows this is not
8483        tentative.  error_mark_node is replaced later with the BLOCK.  */
8484     DECL_INITIAL (decl) = error_mark_node;
8485
8486   /* Caller will do the rest of this.  */
8487   if (check < 0)
8488     return decl;
8489
8490   if (check && funcdef_flag)
8491     DECL_INITIAL (decl) = error_mark_node;
8492
8493   if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
8494     {
8495       tree tmp;
8496       /* Just handle constructors here.  We could do this
8497          inside the following if stmt, but I think
8498          that the code is more legible by breaking this
8499          case out.  See comments below for what each of
8500          the following calls is supposed to do.  */
8501       DECL_CONSTRUCTOR_P (decl) = 1;
8502
8503       grokclassfn (ctype, decl, flags, quals);
8504
8505       decl = check_explicit_specialization (orig_declarator, decl,
8506                                             template_count, 
8507                                             2 * (funcdef_flag != 0) + 
8508                                             4 * (friendp != 0));
8509       if (decl == error_mark_node)
8510         return NULL_TREE;
8511
8512       if ((! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8513           && check)
8514         {
8515           tmp = check_classfn (ctype, decl);
8516
8517           if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8518             tmp = DECL_TEMPLATE_RESULT(tmp);
8519
8520           if (tmp && DECL_ARTIFICIAL (tmp))
8521             cp_error ("definition of implicitly-declared `%D'", tmp);
8522           if (tmp && duplicate_decls (decl, tmp))
8523             return tmp;
8524         }
8525       if (! grok_ctor_properties (ctype, decl))
8526         return NULL_TREE;
8527     }
8528   else
8529     {
8530       tree tmp;
8531
8532       /* Function gets the ugly name, field gets the nice one.
8533          This call may change the type of the function (because
8534          of default parameters)!  */
8535       if (ctype != NULL_TREE)
8536         grokclassfn (ctype, decl, flags, quals);
8537
8538       decl = check_explicit_specialization (orig_declarator, decl,
8539                                             template_count, 
8540                                             2 * (funcdef_flag != 0) + 
8541                                             4 * (friendp != 0));
8542       if (decl == error_mark_node)
8543         return NULL_TREE;
8544
8545       if (ctype != NULL_TREE
8546           && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8547           && check)
8548         {
8549           tmp = check_classfn (ctype, decl);
8550
8551           if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8552             tmp = DECL_TEMPLATE_RESULT (tmp);
8553               
8554           if (tmp && DECL_STATIC_FUNCTION_P (tmp)
8555               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8556             {
8557               /* Remove the `this' parm added by grokclassfn.
8558                  XXX Isn't this done in start_function, too?  */
8559               revert_static_member_fn (&decl, NULL, NULL);
8560               last_function_parms = TREE_CHAIN (last_function_parms);
8561             }
8562           if (tmp && DECL_ARTIFICIAL (tmp))
8563             cp_error ("definition of implicitly-declared `%D'", tmp);
8564           if (tmp)
8565             {
8566               /* Attempt to merge the declarations.  This can fail, in
8567                  the case of some illegal specialization declarations.  */
8568               if (!duplicate_decls (decl, tmp))
8569                 cp_error ("no `%#D' member function declared in class `%T'",
8570                           decl, ctype);
8571               return tmp;
8572             }
8573         }
8574
8575       if (ctype == NULL_TREE || check)
8576         return decl;
8577
8578       if (virtualp)
8579         {
8580           DECL_VIRTUAL_P (decl) = 1;
8581           if (DECL_VINDEX (decl) == NULL_TREE)
8582             DECL_VINDEX (decl) = error_mark_node;
8583           IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
8584         }
8585     }
8586   return decl;
8587 }
8588
8589 static tree
8590 grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
8591      tree type;
8592      tree declarator;
8593      RID_BIT_TYPE *specbits_in;
8594      int initialized;
8595      int constp;
8596      tree in_namespace;
8597 {
8598   tree decl;
8599   RID_BIT_TYPE specbits;
8600
8601   specbits = *specbits_in;
8602
8603   if (TREE_CODE (type) == OFFSET_TYPE)
8604     {
8605       /* If you declare a static member so that it
8606          can be initialized, the code will reach here.  */
8607       tree basetype = TYPE_OFFSET_BASETYPE (type);
8608       type = TREE_TYPE (type);
8609       decl = build_lang_field_decl (VAR_DECL, declarator, type);
8610       DECL_CONTEXT (decl) = basetype;
8611       DECL_CLASS_CONTEXT (decl) = basetype;
8612       DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
8613     }
8614   else
8615     {
8616       tree context;
8617
8618       if (in_namespace)
8619         context = in_namespace;
8620       else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
8621         context = current_namespace;
8622       else
8623         context = NULL_TREE;
8624
8625       if (processing_template_decl) 
8626         {
8627           /* If we're in a template, we need DECL_LANG_SPECIFIC so that
8628              we can call push_template_decl.  */
8629           push_permanent_obstack ();
8630           decl = build_lang_field_decl (VAR_DECL, declarator,
8631                                         complete_type (type));
8632           pop_obstacks ();
8633         }
8634       else
8635         decl = build_decl (VAR_DECL, declarator, complete_type (type));
8636
8637       if (context)
8638         set_decl_namespace (decl, context, 0);
8639
8640       context = DECL_CONTEXT (decl);
8641       if (declarator && context && current_lang_name != lang_name_c)
8642         DECL_ASSEMBLER_NAME (decl) = build_static_name (context, declarator);
8643     }
8644
8645   if (in_namespace)
8646     set_decl_namespace (decl, in_namespace, 0);
8647
8648   if (RIDBIT_SETP (RID_EXTERN, specbits))
8649     {
8650       DECL_THIS_EXTERN (decl) = 1;
8651       DECL_EXTERNAL (decl) = !initialized;
8652     }
8653
8654   /* In class context, static means one per class,
8655      public access, and static storage.  */
8656   if (DECL_CLASS_SCOPE_P (decl))
8657     {
8658       TREE_PUBLIC (decl) = 1;
8659       TREE_STATIC (decl) = 1;
8660       DECL_EXTERNAL (decl) = 0;
8661     }
8662   /* At top level, either `static' or no s.c. makes a definition
8663      (perhaps tentative), and absence of `static' makes it public.  */
8664   else if (toplevel_bindings_p ())
8665     {
8666       TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
8667                             && (DECL_THIS_EXTERN (decl) || ! constp));
8668       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8669     }
8670   /* Not at top level, only `static' makes a static definition.  */
8671   else
8672     {
8673       TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
8674       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8675     }
8676
8677   if (TREE_PUBLIC (decl))
8678     {
8679       /* [basic.link]: A name with no linkage (notably, the name of a class
8680          or enumeration declared in a local scope) shall not be used to
8681          declare an entity with linkage.
8682
8683          Only check this for public decls for now.  */
8684       tree t = no_linkage_check (TREE_TYPE (decl));
8685       if (t)
8686         {
8687           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8688             /* Ignore for now; `enum { foo } e' is pretty common.  */;
8689           else
8690             cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
8691                         decl, t);
8692         }
8693     }
8694
8695   return decl;
8696 }
8697
8698 /* Create and return a canonical pointer to member function type, for
8699    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
8700
8701 tree
8702 build_ptrmemfunc_type (type)
8703      tree type;
8704 {
8705   tree fields[4];
8706   tree t;
8707   tree u;
8708   tree unqualified_variant = NULL_TREE;
8709
8710   /* If a canonical type already exists for this type, use it.  We use
8711      this method instead of type_hash_canon, because it only does a
8712      simple equality check on the list of field members.  */
8713
8714   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
8715     return t;
8716
8717   /* Make sure that we always have the unqualified pointer-to-member
8718      type first.  */
8719   if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
8720     unqualified_variant 
8721       = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
8722
8723   push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8724
8725   u = make_lang_type (UNION_TYPE);
8726   SET_IS_AGGR_TYPE (u, 0);
8727   fields[0] = build_lang_field_decl (FIELD_DECL, pfn_identifier, type);
8728   fields[1] = build_lang_field_decl (FIELD_DECL, delta2_identifier,
8729                                      delta_type_node);
8730   finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
8731   TYPE_NAME (u) = NULL_TREE;
8732
8733   t = make_lang_type (RECORD_TYPE);
8734
8735   /* Let the front-end know this is a pointer to member function...  */
8736   TYPE_PTRMEMFUNC_FLAG (t) = 1;
8737   /* ... and not really an aggregate.  */
8738   SET_IS_AGGR_TYPE (t, 0);
8739
8740   fields[0] = build_lang_field_decl (FIELD_DECL, delta_identifier,
8741                                      delta_type_node);
8742   fields[1] = build_lang_field_decl (FIELD_DECL, index_identifier,
8743                                      delta_type_node);
8744   fields[2] = build_lang_field_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
8745   finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
8746
8747   pop_obstacks ();
8748
8749   /* Zap out the name so that the back-end will give us the debugging
8750      information for this anonymous RECORD_TYPE.  */
8751   TYPE_NAME (t) = NULL_TREE;
8752
8753   /* If this is not the unqualified form of this pointer-to-member
8754      type, set the TYPE_MAIN_VARIANT for this type to be the
8755      unqualified type.  Since they are actually RECORD_TYPEs that are
8756      not variants of each other, we must do this manually.  */
8757   if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
8758     {
8759       t = build_qualified_type (t, CP_TYPE_QUALS (type));
8760       TYPE_MAIN_VARIANT (t) = unqualified_variant;
8761       TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
8762       TYPE_NEXT_VARIANT (unqualified_variant) = t;
8763     }
8764
8765   /* Cache this pointer-to-member type so that we can find it again
8766      later.  */
8767   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
8768
8769   /* Seems to be wanted.  */
8770   CLASSTYPE_GOT_SEMICOLON (t) = 1;
8771
8772   return t;
8773 }
8774
8775 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
8776    Check to see that the definition is valid.  Issue appropriate error
8777    messages.  Return 1 if the definition is particularly bad, or 0
8778    otherwise.  */
8779
8780 int
8781 check_static_variable_definition (decl, type)
8782      tree decl;
8783      tree type;
8784 {
8785   /* Motion 10 at San Diego: If a static const integral data member is
8786      initialized with an integral constant expression, the initializer
8787      may appear either in the declaration (within the class), or in
8788      the definition, but not both.  If it appears in the class, the
8789      member is a member constant.  The file-scope definition is always
8790      required.  */
8791   if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
8792     {
8793       cp_error ("in-class initialization of static data member of non-integral type `%T'", 
8794                 type);
8795       /* If we just return the declaration, crashes will sometimes
8796          occur.  We therefore return void_type_node, as if this was a
8797          friend declaration, to cause callers to completely ignore
8798          this declaration.  */
8799       return 1;
8800     }
8801   else if (!CP_TYPE_CONST_P (type))
8802     cp_error ("ANSI C++ forbids in-class initialization of non-const static member `%D'",
8803               decl);
8804   else if (pedantic && !INTEGRAL_TYPE_P (type))
8805     cp_pedwarn ("ANSI C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
8806
8807   return 0;
8808 }
8809
8810 /* Given declspecs and a declarator,
8811    determine the name and type of the object declared
8812    and construct a ..._DECL node for it.
8813    (In one case we can return a ..._TYPE node instead.
8814     For invalid input we sometimes return 0.)
8815
8816    DECLSPECS is a chain of tree_list nodes whose value fields
8817     are the storage classes and type specifiers.
8818
8819    DECL_CONTEXT says which syntactic context this declaration is in:
8820      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8821      FUNCDEF for a function definition.  Like NORMAL but a few different
8822       error messages in each case.  Return value may be zero meaning
8823       this definition is too screwy to try to parse.
8824      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
8825       handle member functions (which have FIELD context).
8826       Return value may be zero meaning this definition is too screwy to
8827       try to parse.
8828      PARM for a parameter declaration (either within a function prototype
8829       or before a function body).  Make a PARM_DECL, or return void_type_node.
8830      CATCHPARM for a parameter declaration before a catch clause.
8831      TYPENAME if for a typename (in a cast or sizeof).
8832       Don't make a DECL node; just return the ..._TYPE node.
8833      FIELD for a struct or union field; make a FIELD_DECL.
8834      BITFIELD for a field with specified width.
8835    INITIALIZED is 1 if the decl has an initializer.
8836
8837    ATTRLIST is a TREE_LIST node with prefix attributes in TREE_VALUE and
8838    normal attributes in TREE_PURPOSE, or NULL_TREE.
8839
8840    In the TYPENAME case, DECLARATOR is really an absolute declarator.
8841    It may also be so in the PARM case, for a prototype where the
8842    argument type is specified but not the name.
8843
8844    This function is where the complicated C meanings of `static'
8845    and `extern' are interpreted.
8846
8847    For C++, if there is any monkey business to do, the function which
8848    calls this one must do it, i.e., prepending instance variables,
8849    renaming overloaded function names, etc.
8850
8851    Note that for this C++, it is an error to define a method within a class
8852    which does not belong to that class.
8853
8854    Except in the case where SCOPE_REFs are implicitly known (such as
8855    methods within a class being redundantly qualified),
8856    declarations which involve SCOPE_REFs are returned as SCOPE_REFs
8857    (class_name::decl_name).  The caller must also deal with this.
8858
8859    If a constructor or destructor is seen, and the context is FIELD,
8860    then the type gains the attribute TREE_HAS_x.  If such a declaration
8861    is erroneous, NULL_TREE is returned.
8862
8863    QUALS is used only for FUNCDEF and MEMFUNCDEF cases.  For a member
8864    function, these are the qualifiers to give to the `this' pointer.
8865
8866    May return void_type_node if the declarator turned out to be a friend.
8867    See grokfield for details.  */
8868
8869 enum return_types { return_normal, return_ctor, return_dtor, return_conversion };
8870
8871 tree
8872 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
8873      tree declspecs;
8874      tree declarator;
8875      enum decl_context decl_context;
8876      int initialized;
8877      tree attrlist;
8878 {
8879   RID_BIT_TYPE specbits;
8880   int nclasses = 0;
8881   tree spec;
8882   tree type = NULL_TREE;
8883   int longlong = 0;
8884   int constp;
8885   int restrictp;
8886   int volatilep;
8887   int type_quals;
8888   int virtualp, explicitp, friendp, inlinep, staticp;
8889   int explicit_int = 0;
8890   int explicit_char = 0;
8891   int defaulted_int = 0;
8892   tree typedef_decl = NULL_TREE;
8893   const char *name;
8894   tree typedef_type = NULL_TREE;
8895   int funcdef_flag = 0;
8896   enum tree_code innermost_code = ERROR_MARK;
8897   int bitfield = 0;
8898 #if 0
8899   /* See the code below that used this.  */
8900   tree decl_machine_attr = NULL_TREE;
8901 #endif
8902   /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
8903      All FIELD_DECLs we build here have `init' put into their DECL_INITIAL.  */
8904   tree init = NULL_TREE;
8905
8906   /* Keep track of what sort of function is being processed
8907      so that we can warn about default return values, or explicit
8908      return values which do not match prescribed defaults.  */
8909   enum return_types return_type = return_normal;
8910
8911   tree dname = NULL_TREE;
8912   tree ctype = current_class_type;
8913   tree ctor_return_type = NULL_TREE;
8914   enum overload_flags flags = NO_SPECIAL;
8915   tree quals = NULL_TREE;
8916   tree raises = NULL_TREE;
8917   int template_count = 0;
8918   tree in_namespace = NULL_TREE;
8919   tree inner_attrs;
8920   int ignore_attrs;
8921
8922   RIDBIT_RESET_ALL (specbits);
8923   if (decl_context == FUNCDEF)
8924     funcdef_flag = 1, decl_context = NORMAL;
8925   else if (decl_context == MEMFUNCDEF)
8926     funcdef_flag = -1, decl_context = FIELD;
8927   else if (decl_context == BITFIELD)
8928     bitfield = 1, decl_context = FIELD;
8929
8930   /* Look inside a declarator for the name being declared
8931      and get it as a string, for an error message.  */
8932   {
8933     tree *next = &declarator;
8934     register tree decl;
8935     name = NULL;
8936
8937     while (next && *next)
8938       {
8939         decl = *next;
8940         switch (TREE_CODE (decl))
8941           {
8942           case TREE_LIST:
8943             /* For attributes.  */
8944             next = &TREE_VALUE (decl);
8945             break;
8946
8947           case COND_EXPR:
8948             ctype = NULL_TREE;
8949             next = &TREE_OPERAND (decl, 0);
8950             break;
8951
8952           case BIT_NOT_EXPR:    /* For C++ destructors!  */
8953             {
8954               tree name = TREE_OPERAND (decl, 0);
8955               tree rename = NULL_TREE;
8956
8957               my_friendly_assert (flags == NO_SPECIAL, 152);
8958               flags = DTOR_FLAG;
8959               return_type = return_dtor;
8960               if (TREE_CODE (name) == TYPE_DECL)
8961                 TREE_OPERAND (decl, 0) = name = constructor_name (name);
8962               my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
8963               if (ctype == NULL_TREE)
8964                 {
8965                   if (current_class_type == NULL_TREE)
8966                     {
8967                       error ("destructors must be member functions");
8968                       flags = NO_SPECIAL;
8969                     }
8970                   else
8971                     {
8972                       tree t = constructor_name (current_class_name);
8973                       if (t != name)
8974                         rename = t;
8975                     }
8976                 }
8977               else
8978                 {
8979                   tree t = constructor_name (ctype);
8980                   if (t != name)
8981                     rename = t;
8982                 }
8983
8984               if (rename)
8985                 {
8986                   cp_error ("destructor `%T' must match class name `%T'",
8987                             name, rename);
8988                   TREE_OPERAND (decl, 0) = rename;
8989                 }
8990               next = &name;
8991             }
8992             break;
8993
8994           case ADDR_EXPR:       /* C++ reference declaration */
8995             /* Fall through. */
8996           case ARRAY_REF:
8997           case INDIRECT_REF:
8998             ctype = NULL_TREE;
8999             innermost_code = TREE_CODE (decl);
9000             next = &TREE_OPERAND (decl, 0);
9001             break;
9002
9003           case CALL_EXPR:
9004             if (parmlist_is_exprlist (TREE_OPERAND (decl, 1)))
9005               {
9006                 /* This is actually a variable declaration using
9007                    constructor syntax.  We need to call start_decl and
9008                    cp_finish_decl so we can get the variable
9009                    initialized...  */
9010
9011                 tree attributes, prefix_attributes;
9012
9013                 *next = TREE_OPERAND (decl, 0);
9014                 init = TREE_OPERAND (decl, 1);
9015
9016                 if (attrlist)
9017                   {
9018                     attributes = TREE_PURPOSE (attrlist);
9019                     prefix_attributes = TREE_VALUE (attrlist);
9020                   }
9021                 else
9022                   {
9023                     attributes = NULL_TREE;
9024                     prefix_attributes = NULL_TREE;
9025                   }
9026
9027                 decl = start_decl (declarator, declspecs, 1,
9028                                    attributes, prefix_attributes);
9029                 if (decl)
9030                   {
9031                     /* Look for __unused__ attribute */
9032                     if (TREE_USED (TREE_TYPE (decl)))
9033                       TREE_USED (decl) = 1;
9034                     finish_decl (decl, init, NULL_TREE);
9035                   }
9036                 else
9037                   cp_error ("invalid declarator");
9038                 return 0;
9039               }
9040             innermost_code = TREE_CODE (decl);
9041             if (decl_context == FIELD && ctype == NULL_TREE)
9042               ctype = current_class_type;
9043             if (ctype
9044                 && TREE_OPERAND (decl, 0)
9045                 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
9046                     && ((DECL_NAME (TREE_OPERAND (decl, 0))
9047                          == constructor_name_full (ctype))
9048                         || (DECL_NAME (TREE_OPERAND (decl, 0))
9049                             == constructor_name (ctype)))))
9050               TREE_OPERAND (decl, 0) = constructor_name (ctype);
9051             next = &TREE_OPERAND (decl, 0);
9052             decl = *next;
9053             if (ctype != NULL_TREE
9054                 && decl != NULL_TREE && flags != DTOR_FLAG
9055                 && decl == constructor_name (ctype))
9056               {
9057                 return_type = return_ctor;
9058                 ctor_return_type = ctype;
9059               }
9060             ctype = NULL_TREE;
9061             break;
9062             
9063           case TEMPLATE_ID_EXPR:
9064               {
9065                 tree fns = TREE_OPERAND (decl, 0);
9066
9067                 if (TREE_CODE (fns) == LOOKUP_EXPR)
9068                   fns = TREE_OPERAND (fns, 0);
9069
9070                 dname = fns;
9071                 if (TREE_CODE (dname) == COMPONENT_REF)
9072                   dname = TREE_OPERAND (dname, 1);
9073                 if (TREE_CODE (dname) != IDENTIFIER_NODE)
9074                   {
9075                     my_friendly_assert (is_overloaded_fn (dname),
9076                                         19990331);
9077                     dname = DECL_NAME (get_first_fn (dname));
9078                   }
9079               }
9080           /* Fall through. */
9081
9082           case IDENTIFIER_NODE:
9083             if (TREE_CODE (decl) == IDENTIFIER_NODE)
9084               dname = decl;
9085
9086             next = 0;
9087
9088             if (is_rid (dname))
9089               {
9090                 cp_error ("declarator-id missing; using reserved word `%D'",
9091                           dname);
9092                 name = IDENTIFIER_POINTER (dname);
9093               }
9094             if (! IDENTIFIER_OPNAME_P (dname)
9095                 /* GNU/Linux headers use '__op'.  Arrgh.  */
9096                 || (IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname)))
9097               name = IDENTIFIER_POINTER (dname);
9098             else
9099               {
9100                 if (IDENTIFIER_TYPENAME_P (dname))
9101                   {
9102                     my_friendly_assert (flags == NO_SPECIAL, 154);
9103                     flags = TYPENAME_FLAG;
9104                     ctor_return_type = TREE_TYPE (dname);
9105                     return_type = return_conversion;
9106                   }
9107                 name = operator_name_string (dname);
9108               }
9109             break;
9110
9111             /* C++ extension */
9112           case SCOPE_REF:
9113             {
9114               /* Perform error checking, and decide on a ctype.  */
9115               tree cname = TREE_OPERAND (decl, 0);
9116               if (cname == NULL_TREE)
9117                 ctype = NULL_TREE;
9118               else if (TREE_CODE (cname) == NAMESPACE_DECL)
9119                 {
9120                   ctype = NULL_TREE;
9121                   in_namespace = TREE_OPERAND (decl, 0);
9122                   TREE_OPERAND (decl, 0) = NULL_TREE;
9123                 }
9124               else if (! is_aggr_type (cname, 1))
9125                 TREE_OPERAND (decl, 0) = NULL_TREE;
9126               /* Must test TREE_OPERAND (decl, 1), in case user gives
9127                  us `typedef (class::memfunc)(int); memfunc *memfuncptr;'  */
9128               else if (TREE_OPERAND (decl, 1)
9129                        && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9130                 ctype = cname;
9131               else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
9132                        || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
9133                 {
9134                   cp_error ("`%T::%D' is not a valid declarator", cname,
9135                             TREE_OPERAND (decl, 1));
9136                   cp_error ("  perhaps you want `typename %T::%D' to make it a type",
9137                             cname, TREE_OPERAND (decl, 1));
9138                   return void_type_node;
9139                 }
9140               else if (ctype == NULL_TREE)
9141                 ctype = cname;
9142               else if (TREE_COMPLEXITY (decl) == current_class_depth)
9143                 TREE_OPERAND (decl, 0) = ctype;
9144               else
9145                 {
9146                   if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
9147                     {
9148                       cp_error ("type `%T' is not derived from type `%T'",
9149                                 cname, ctype);
9150                       TREE_OPERAND (decl, 0) = NULL_TREE;
9151                     }
9152                   else
9153                     ctype = cname;
9154                 }
9155
9156               if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
9157                   && ((DECL_NAME (TREE_OPERAND (decl, 1))
9158                        == constructor_name_full (ctype))
9159                       || (DECL_NAME (TREE_OPERAND (decl, 1))
9160                           == constructor_name (ctype))))
9161                 TREE_OPERAND (decl, 1) = constructor_name (ctype);
9162               next = &TREE_OPERAND (decl, 1);
9163               decl = *next;
9164               if (ctype)
9165                 {
9166                   if (TREE_CODE (decl) == IDENTIFIER_NODE
9167                       && constructor_name (ctype) == decl)
9168                     {
9169                       return_type = return_ctor;
9170                       ctor_return_type = ctype;
9171                     }
9172                   else if (TREE_CODE (decl) == BIT_NOT_EXPR
9173                            && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9174                            && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9175                                || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9176                     {
9177                       return_type = return_dtor;
9178                       ctor_return_type = ctype;
9179                       flags = DTOR_FLAG;
9180                       TREE_OPERAND (decl, 0) = constructor_name (ctype);
9181                       next = &TREE_OPERAND (decl, 0);
9182                     }
9183                 }
9184             }
9185             break;
9186
9187           case ERROR_MARK:
9188             next = 0;
9189             break;
9190
9191           case TYPE_DECL:
9192             /* Parse error puts this typespec where
9193                a declarator should go.  */
9194             cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
9195             if (TREE_TYPE (decl) == current_class_type)
9196               cp_error ("  perhaps you want `%T' for a constructor",
9197                         current_class_name);
9198             dname = DECL_NAME (decl);
9199             name = IDENTIFIER_POINTER (dname);
9200
9201             /* Avoid giving two errors for this.  */
9202             IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9203
9204             declspecs = temp_tree_cons (NULL_TREE, integer_type_node,
9205                                         declspecs);
9206             *next = dname;
9207             next = 0;
9208             break;
9209
9210           default:
9211             cp_compiler_error ("`%D' as declarator", decl);
9212             return 0; /* We used to do a 155 abort here.  */
9213           }
9214       }
9215     if (name == NULL)
9216       name = "type name";
9217   }
9218
9219   /* A function definition's declarator must have the form of
9220      a function declarator.  */
9221
9222   if (funcdef_flag && innermost_code != CALL_EXPR)
9223     return 0;
9224
9225   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9226       && innermost_code != CALL_EXPR
9227       && ! (ctype && declspecs == NULL_TREE))
9228     {
9229       cp_error ("declaration of `%D' as non-function", dname);
9230       return void_type_node;
9231     }
9232
9233   /* Anything declared one level down from the top level
9234      must be one of the parameters of a function
9235      (because the body is at least two levels down).  */
9236
9237   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9238      by not allowing C++ class definitions to specify their parameters
9239      with xdecls (must be spec.d in the parmlist).
9240
9241      Since we now wait to push a class scope until we are sure that
9242      we are in a legitimate method context, we must set oldcname
9243      explicitly (since current_class_name is not yet alive).
9244
9245      We also want to avoid calling this a PARM if it is in a namespace.  */
9246
9247   if (decl_context == NORMAL && !toplevel_bindings_p ())
9248     {
9249       struct binding_level *b = current_binding_level;
9250       current_binding_level = b->level_chain;
9251       if (current_binding_level != 0 && toplevel_bindings_p ())
9252         decl_context = PARM;
9253       current_binding_level = b;
9254     }
9255
9256   /* Look through the decl specs and record which ones appear.
9257      Some typespecs are defined as built-in typenames.
9258      Others, the ones that are modifiers of other types,
9259      are represented by bits in SPECBITS: set the bits for
9260      the modifiers that appear.  Storage class keywords are also in SPECBITS.
9261
9262      If there is a typedef name or a type, store the type in TYPE.
9263      This includes builtin typedefs such as `int'.
9264
9265      Set EXPLICIT_INT if the type is `int' or `char' and did not
9266      come from a user typedef.
9267
9268      Set LONGLONG if `long' is mentioned twice.
9269
9270      For C++, constructors and destructors have their own fast treatment.  */
9271
9272   for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9273     {
9274       register int i;
9275       register tree id;
9276
9277       /* Certain parse errors slip through.  For example,
9278          `int class;' is not caught by the parser. Try
9279          weakly to recover here.  */
9280       if (TREE_CODE (spec) != TREE_LIST)
9281         return 0;
9282
9283       id = TREE_VALUE (spec);
9284
9285       if (TREE_CODE (id) == IDENTIFIER_NODE)
9286         {
9287           if (id == ridpointers[(int) RID_INT]
9288               || id == ridpointers[(int) RID_CHAR]
9289               || id == ridpointers[(int) RID_BOOL]
9290               || id == ridpointers[(int) RID_WCHAR])
9291             {
9292               if (type)
9293                 {
9294                   if (id == ridpointers[(int) RID_BOOL])
9295                     error ("`bool' is now a keyword");
9296                   else
9297                     cp_error ("extraneous `%T' ignored", id);
9298                 }
9299               else
9300                 {
9301                   if (id == ridpointers[(int) RID_INT])
9302                     explicit_int = 1;
9303                   else if (id == ridpointers[(int) RID_CHAR])
9304                     explicit_char = 1;
9305                   type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
9306                 }
9307               goto found;
9308             }
9309           /* C++ aggregate types.  */
9310           if (IDENTIFIER_HAS_TYPE_VALUE (id))
9311             {
9312               if (type)
9313                 cp_error ("multiple declarations `%T' and `%T'", type, id);
9314               else
9315                 type = IDENTIFIER_TYPE_VALUE (id);
9316               goto found;
9317             }
9318
9319           for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
9320             {
9321               if (ridpointers[i] == id)
9322                 {
9323                   if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
9324                     {
9325                       if (pedantic && ! in_system_header && warn_long_long)
9326                         pedwarn ("ANSI C++ does not support `long long'");
9327                       if (longlong)
9328                         error ("`long long long' is too long for GCC");
9329                       else
9330                         longlong = 1;
9331                     }
9332                   else if (RIDBIT_SETP (i, specbits))
9333                     pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
9334                   RIDBIT_SET (i, specbits);
9335                   goto found;
9336                 }
9337             }
9338         }
9339       /* C++ aggregate types.  */
9340       else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
9341         {
9342           if (type)
9343             cp_error ("multiple declarations `%T' and `%T'", type,
9344                       TREE_TYPE (id));
9345           else
9346             {
9347               type = TREE_TYPE (id);
9348               TREE_VALUE (spec) = type;
9349             }
9350           goto found;
9351         }
9352       if (type)
9353         error ("two or more data types in declaration of `%s'", name);
9354       else if (TREE_CODE (id) == IDENTIFIER_NODE)
9355         {
9356           register tree t = lookup_name (id, 1);
9357           if (!t || TREE_CODE (t) != TYPE_DECL)
9358             error ("`%s' fails to be a typedef or built in type",
9359                    IDENTIFIER_POINTER (id));
9360           else
9361             {
9362               type = TREE_TYPE (t);
9363 #if 0
9364               /* See the code below that used this.  */
9365               decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
9366 #endif
9367               typedef_decl = t;
9368             }
9369         }
9370       else if (id != error_mark_node)
9371         /* Can't change CLASS nodes into RECORD nodes here!  */
9372         type = id;
9373
9374     found: ;
9375     }
9376
9377   typedef_type = type;
9378
9379   /* No type at all: default to `int', and set DEFAULTED_INT
9380      because it was not a user-defined typedef.  */
9381
9382   if (type == NULL_TREE
9383       && (RIDBIT_SETP (RID_SIGNED, specbits)
9384           || RIDBIT_SETP (RID_UNSIGNED, specbits)
9385           || RIDBIT_SETP (RID_LONG, specbits)
9386           || RIDBIT_SETP (RID_SHORT, specbits)))
9387     {
9388       /* These imply 'int'.  */
9389       type = integer_type_node;
9390       defaulted_int = 1;
9391     }
9392
9393   if (type == NULL_TREE)
9394     {
9395       explicit_int = -1;
9396       if (return_type == return_dtor)
9397         type = void_type_node;
9398       else if (return_type == return_ctor)
9399         type = build_pointer_type (ctor_return_type);
9400       else if (return_type == return_conversion)
9401         type = ctor_return_type;
9402       else
9403         {
9404           /* We handle `main' specially here, because 'main () { }' is so
9405              common.  With no options, it is allowed.  With -Wreturn-type,
9406              it is a warning.  It is only an error with -pedantic-errors.  */
9407           int is_main = (funcdef_flag
9408                          && MAIN_NAME_P (dname)
9409                          && ctype == NULL_TREE
9410                          && in_namespace == NULL_TREE
9411                          && current_namespace == global_namespace);
9412
9413           if (in_system_header || flag_ms_extensions)
9414             /* Allow it, sigh.  */;
9415           else if (pedantic || ! is_main)
9416             cp_pedwarn ("ANSI C++ forbids declaration `%D' with no type",
9417                         dname);
9418           else if (warn_return_type)
9419             cp_warning ("ANSI C++ forbids declaration `%D' with no type",
9420                         dname);
9421
9422           type = integer_type_node;
9423         }
9424     }
9425   else if (return_type == return_dtor)
9426     {
9427       error ("return type specification for destructor invalid");
9428       type = void_type_node;
9429     }
9430   else if (return_type == return_ctor)
9431     {
9432       error ("return type specification for constructor invalid");
9433       type = build_pointer_type (ctor_return_type);
9434     }
9435   else if (return_type == return_conversion)
9436     {
9437       if (!same_type_p (type, ctor_return_type))
9438         cp_error ("operator `%T' declared to return `%T'",
9439                   ctor_return_type, type);
9440       else
9441         cp_pedwarn ("return type specified for `operator %T'",
9442                     ctor_return_type);
9443
9444       type = ctor_return_type;
9445     }
9446
9447   ctype = NULL_TREE;
9448
9449   /* Now process the modifiers that were specified
9450      and check for invalid combinations.  */
9451
9452   /* Long double is a special combination.  */
9453
9454   if (RIDBIT_SETP (RID_LONG, specbits)
9455       && TYPE_MAIN_VARIANT (type) == double_type_node)
9456     {
9457       RIDBIT_RESET (RID_LONG, specbits);
9458       type = build_qualified_type (long_double_type_node, 
9459                                    CP_TYPE_QUALS (type));
9460     }
9461
9462   /* Check all other uses of type modifiers.  */
9463
9464   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9465       || RIDBIT_SETP (RID_SIGNED, specbits)
9466       || RIDBIT_SETP (RID_LONG, specbits)
9467       || RIDBIT_SETP (RID_SHORT, specbits))
9468     {
9469       int ok = 0;
9470
9471       if (TREE_CODE (type) == REAL_TYPE)
9472         error ("short, signed or unsigned invalid for `%s'", name);
9473       else if (TREE_CODE (type) != INTEGER_TYPE)
9474         error ("long, short, signed or unsigned invalid for `%s'", name);
9475       else if (RIDBIT_SETP (RID_LONG, specbits)
9476                && RIDBIT_SETP (RID_SHORT, specbits))
9477         error ("long and short specified together for `%s'", name);
9478       else if ((RIDBIT_SETP (RID_LONG, specbits)
9479                 || RIDBIT_SETP (RID_SHORT, specbits))
9480                && explicit_char)
9481         error ("long or short specified with char for `%s'", name);
9482       else if ((RIDBIT_SETP (RID_LONG, specbits)
9483                 || RIDBIT_SETP (RID_SHORT, specbits))
9484                && TREE_CODE (type) == REAL_TYPE)
9485         error ("long or short specified with floating type for `%s'", name);
9486       else if (RIDBIT_SETP (RID_SIGNED, specbits)
9487                && RIDBIT_SETP (RID_UNSIGNED, specbits))
9488         error ("signed and unsigned given together for `%s'", name);
9489       else
9490         {
9491           ok = 1;
9492           if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
9493             {
9494               pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
9495                        name);
9496               if (flag_pedantic_errors)
9497                 ok = 0;
9498             }
9499         }
9500
9501       /* Discard the type modifiers if they are invalid.  */
9502       if (! ok)
9503         {
9504           RIDBIT_RESET (RID_UNSIGNED, specbits);
9505           RIDBIT_RESET (RID_SIGNED, specbits);
9506           RIDBIT_RESET (RID_LONG, specbits);
9507           RIDBIT_RESET (RID_SHORT, specbits);
9508           longlong = 0;
9509         }
9510     }
9511
9512   if (RIDBIT_SETP (RID_COMPLEX, specbits)
9513       && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9514     {
9515       error ("complex invalid for `%s'", name);
9516       RIDBIT_RESET (RID_COMPLEX, specbits);
9517     }
9518
9519   /* Decide whether an integer type is signed or not.
9520      Optionally treat bitfields as signed by default.  */
9521   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9522       /* [class.bit]
9523
9524          It is implementation-defined whether a plain (neither
9525          explicitly signed or unsigned) char, short, int, or long
9526          bit-field is signed or unsigned.
9527              
9528          Naturally, we extend this to long long as well.  Note that
9529          this does not include wchar_t.  */
9530       || (bitfield && !flag_signed_bitfields
9531           && RIDBIT_NOTSETP (RID_SIGNED, specbits)
9532           /* A typedef for plain `int' without `signed' can be
9533              controlled just like plain `int', but a typedef for
9534              `signed int' cannot be so controlled.  */
9535           && !(typedef_decl 
9536                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
9537           && (TREE_CODE (type) == INTEGER_TYPE
9538               || TREE_CODE (type) == CHAR_TYPE)
9539           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
9540     {
9541       if (longlong)
9542         type = long_long_unsigned_type_node;
9543       else if (RIDBIT_SETP (RID_LONG, specbits))
9544         type = long_unsigned_type_node;
9545       else if (RIDBIT_SETP (RID_SHORT, specbits))
9546         type = short_unsigned_type_node;
9547       else if (type == char_type_node)
9548         type = unsigned_char_type_node;
9549       else if (typedef_decl)
9550         type = unsigned_type (type);
9551       else
9552         type = unsigned_type_node;
9553     }
9554   else if (RIDBIT_SETP (RID_SIGNED, specbits)
9555            && type == char_type_node)
9556     type = signed_char_type_node;
9557   else if (longlong)
9558     type = long_long_integer_type_node;
9559   else if (RIDBIT_SETP (RID_LONG, specbits))
9560     type = long_integer_type_node;
9561   else if (RIDBIT_SETP (RID_SHORT, specbits))
9562     type = short_integer_type_node;
9563
9564   if (RIDBIT_SETP (RID_COMPLEX, specbits))
9565     {
9566       /* If we just have "complex", it is equivalent to
9567          "complex double", but if any modifiers at all are specified it is
9568          the complex form of TYPE.  E.g, "complex short" is
9569          "complex short int".  */
9570
9571       if (defaulted_int && ! longlong
9572           && ! (RIDBIT_SETP (RID_LONG, specbits)
9573                 || RIDBIT_SETP (RID_SHORT, specbits)
9574                 || RIDBIT_SETP (RID_SIGNED, specbits)
9575                 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
9576         type = complex_double_type_node;
9577       else if (type == integer_type_node)
9578         type = complex_integer_type_node;
9579       else if (type == float_type_node)
9580         type = complex_float_type_node;
9581       else if (type == double_type_node)
9582         type = complex_double_type_node;
9583       else if (type == long_double_type_node)
9584         type = complex_long_double_type_node;
9585       else
9586         type = build_complex_type (type);
9587     }
9588
9589   if (return_type == return_conversion 
9590       && (RIDBIT_SETP (RID_CONST, specbits)
9591           || RIDBIT_SETP (RID_VOLATILE, specbits)
9592           || RIDBIT_SETP (RID_RESTRICT, specbits)))
9593     cp_error ("qualifiers are not allowed on declaration of `operator %T'",
9594               ctor_return_type);
9595
9596   /* Set CONSTP if this declaration is `const', whether by
9597      explicit specification or via a typedef.
9598      Likewise for VOLATILEP.  */
9599
9600   constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
9601   restrictp = 
9602     !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
9603   volatilep = 
9604     !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
9605   type_quals = ((constp ? TYPE_QUAL_CONST : 0)
9606                 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
9607                 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
9608   type = cp_build_qualified_type (type, type_quals);
9609   staticp = 0;
9610   inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
9611   virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
9612   RIDBIT_RESET (RID_VIRTUAL, specbits);
9613   explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
9614   RIDBIT_RESET (RID_EXPLICIT, specbits);
9615
9616   if (RIDBIT_SETP (RID_STATIC, specbits))
9617     staticp = 1 + (decl_context == FIELD);
9618
9619   if (virtualp && staticp == 2)
9620     {
9621       cp_error ("member `%D' cannot be declared both virtual and static",
9622                 dname);
9623       staticp = 0;
9624     }
9625   friendp = RIDBIT_SETP (RID_FRIEND, specbits);
9626   RIDBIT_RESET (RID_FRIEND, specbits);
9627
9628   /* $7.1.2, Function specifiers */
9629   if (friendp && explicitp)
9630     error ("only declarations of constructors can be `explicit'");
9631
9632   if (RIDBIT_SETP (RID_MUTABLE, specbits))
9633     {
9634       if (decl_context == PARM)
9635         {
9636           error ("non-member `%s' cannot be declared `mutable'", name);
9637           RIDBIT_RESET (RID_MUTABLE, specbits);
9638         }
9639       else if (friendp || decl_context == TYPENAME)
9640         {
9641           error ("non-object member `%s' cannot be declared `mutable'", name);
9642           RIDBIT_RESET (RID_MUTABLE, specbits);
9643         }
9644     }
9645
9646   /* Warn if two storage classes are given. Default to `auto'.  */
9647
9648   if (RIDBIT_ANY_SET (specbits))
9649     {
9650       if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
9651       if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
9652       if (decl_context == PARM && nclasses > 0)
9653         error ("storage class specifiers invalid in parameter declarations");
9654       if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9655         {
9656           if (decl_context == PARM)
9657             error ("typedef declaration invalid in parameter declaration");
9658           nclasses++;
9659         }
9660       if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
9661       if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
9662     }
9663
9664   /* Give error if `virtual' is used outside of class declaration.  */
9665   if (virtualp
9666       && (current_class_name == NULL_TREE || decl_context != FIELD))
9667     {
9668       error ("virtual outside class declaration");
9669       virtualp = 0;
9670     }
9671   if (current_class_name == NULL_TREE && RIDBIT_SETP (RID_MUTABLE, specbits))
9672     {
9673       error ("only members can be declared mutable");
9674       RIDBIT_RESET (RID_MUTABLE, specbits);
9675     }
9676
9677   /* Static anonymous unions are dealt with here.  */
9678   if (staticp && decl_context == TYPENAME
9679       && TREE_CODE (declspecs) == TREE_LIST
9680       && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
9681     decl_context = FIELD;
9682
9683   /* Warn about storage classes that are invalid for certain
9684      kinds of declarations (parameters, typenames, etc.).  */
9685
9686   if (nclasses > 1)
9687     error ("multiple storage classes in declaration of `%s'", name);
9688   else if (decl_context != NORMAL && nclasses > 0)
9689     {
9690       if ((decl_context == PARM || decl_context == CATCHPARM)
9691           && (RIDBIT_SETP (RID_REGISTER, specbits)
9692               || RIDBIT_SETP (RID_AUTO, specbits)))
9693         ;
9694       else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9695         ;
9696       else if (decl_context == FIELD
9697                /* C++ allows static class elements  */
9698                && RIDBIT_SETP (RID_STATIC, specbits))
9699         /* C++ also allows inlines and signed and unsigned elements,
9700            but in those cases we don't come in here.  */
9701         ;
9702       else
9703         {
9704           if (decl_context == FIELD)
9705             {
9706               tree tmp = NULL_TREE;
9707               register int op = 0;
9708
9709               if (declarator)
9710                 {
9711                   /* Avoid trying to get an operand off an identifier node.  */ 
9712                   if (TREE_CODE (declarator) == IDENTIFIER_NODE)
9713                     tmp = declarator;
9714                   else
9715                     tmp = TREE_OPERAND (declarator, 0);
9716                   op = IDENTIFIER_OPNAME_P (tmp);
9717                 }
9718               error ("storage class specified for %s `%s'",
9719                      op ? "member operator" : "field",
9720                      op ? operator_name_string (tmp) : name);
9721             }
9722           else
9723             error (((decl_context == PARM || decl_context == CATCHPARM)
9724                     ? "storage class specified for parameter `%s'"
9725                     : "storage class specified for typename"), name);
9726           RIDBIT_RESET (RID_REGISTER, specbits);
9727           RIDBIT_RESET (RID_AUTO, specbits);
9728           RIDBIT_RESET (RID_EXTERN, specbits);
9729         }
9730     }
9731   else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
9732     {
9733       if (toplevel_bindings_p ())
9734         {
9735           /* It's common practice (and completely valid) to have a const
9736              be initialized and declared extern.  */
9737           if (!(type_quals & TYPE_QUAL_CONST))
9738             warning ("`%s' initialized and declared `extern'", name);
9739         }
9740       else
9741         error ("`%s' has both `extern' and initializer", name);
9742     }
9743   else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
9744            && ! toplevel_bindings_p ())
9745     error ("nested function `%s' declared `extern'", name);
9746   else if (toplevel_bindings_p ())
9747     {
9748       if (RIDBIT_SETP (RID_AUTO, specbits))
9749         error ("top-level declaration of `%s' specifies `auto'", name);
9750     }
9751
9752   if (nclasses > 0 && friendp)
9753     error ("storage class specifiers invalid in friend function declarations");
9754
9755   /* Now figure out the structure of the declarator proper.
9756      Descend through it, creating more complex types, until we reach
9757      the declared identifier (or NULL_TREE, in an absolute declarator).  */
9758
9759   inner_attrs = NULL_TREE;
9760   ignore_attrs = 0;  
9761
9762   while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
9763          && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
9764     {
9765       /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
9766          an INDIRECT_REF (for *...),
9767          a CALL_EXPR (for ...(...)),
9768          an identifier (for the name being declared)
9769          or a null pointer (for the place in an absolute declarator
9770          where the name was omitted).
9771          For the last two cases, we have just exited the loop.
9772
9773          For C++ it could also be
9774          a SCOPE_REF (for class :: ...).  In this case, we have converted
9775          sensible names to types, and those are the values we use to
9776          qualify the member name.
9777          an ADDR_EXPR (for &...),
9778          a BIT_NOT_EXPR (for destructors)
9779
9780          At this point, TYPE is the type of elements of an array,
9781          or for a function to return, or for a pointer to point to.
9782          After this sequence of ifs, TYPE is the type of the
9783          array or function or pointer, and DECLARATOR has had its
9784          outermost layer removed.  */
9785
9786       if (type == error_mark_node)
9787         {
9788           if (TREE_CODE (declarator) == SCOPE_REF)
9789             declarator = TREE_OPERAND (declarator, 1);
9790           else
9791             declarator = TREE_OPERAND (declarator, 0);
9792           continue;
9793         }
9794       if (quals != NULL_TREE
9795           && (declarator == NULL_TREE
9796               || TREE_CODE (declarator) != SCOPE_REF))
9797         {
9798           if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
9799             ctype = TYPE_METHOD_BASETYPE (type);
9800           if (ctype != NULL_TREE)
9801             {
9802               tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
9803               ctype = grok_method_quals (ctype, dummy, quals);
9804               type = TREE_TYPE (dummy);
9805               quals = NULL_TREE;
9806             }
9807         }
9808
9809       /* See the comment for the TREE_LIST case, below.  */
9810       if (ignore_attrs)
9811         ignore_attrs = 0;
9812       else if (inner_attrs)
9813         {
9814           decl_attributes (type, inner_attrs, NULL_TREE);
9815           inner_attrs = NULL_TREE;
9816         }
9817
9818       switch (TREE_CODE (declarator))
9819         {
9820         case TREE_LIST:
9821           {
9822             /* We encode a declarator with embedded attributes using
9823                a TREE_LIST.  The attributes apply to the declarator
9824                directly inside them, so we have to skip an iteration
9825                before applying them to the type.  If the declarator just
9826                inside is the declarator-id, we apply the attrs to the
9827                decl itself.  */
9828             inner_attrs = TREE_PURPOSE (declarator);
9829             ignore_attrs = 1;
9830             declarator = TREE_VALUE (declarator);
9831           }
9832           break;
9833
9834         case ARRAY_REF:
9835           {
9836             register tree itype = NULL_TREE;
9837             register tree size = TREE_OPERAND (declarator, 1);
9838             /* The index is a signed object `sizetype' bits wide.  */
9839             tree index_type = signed_type (sizetype);
9840
9841             declarator = TREE_OPERAND (declarator, 0);
9842
9843             /* Check for some types that there cannot be arrays of.  */
9844
9845             if (TREE_CODE (type) == VOID_TYPE)
9846               {
9847                 cp_error ("declaration of `%D' as array of voids", dname);
9848                 type = error_mark_node;
9849               }
9850
9851             if (TREE_CODE (type) == FUNCTION_TYPE)
9852               {
9853                 cp_error ("declaration of `%D' as array of functions", dname);
9854                 type = error_mark_node;
9855               }
9856
9857             /* ARM $8.4.3: Since you can't have a pointer to a reference,
9858                you can't have arrays of references.  If we allowed them,
9859                then we'd be saying x[i] is valid for an array x, but
9860                then you'd have to ask: what does `*(x + i)' mean?  */
9861             if (TREE_CODE (type) == REFERENCE_TYPE)
9862               {
9863                 if (decl_context == TYPENAME)
9864                   cp_error ("cannot make arrays of references");
9865                 else
9866                   cp_error ("declaration of `%D' as array of references",
9867                             dname);
9868                 type = error_mark_node;
9869               }
9870
9871             if (TREE_CODE (type) == OFFSET_TYPE)
9872               {
9873                   cp_error ("declaration of `%D' as array of data members",
9874                             dname);
9875                 type = error_mark_node;
9876               }
9877
9878             if (TREE_CODE (type) == METHOD_TYPE)
9879               {
9880                 cp_error ("declaration of `%D' as array of function members",
9881                           dname);
9882                 type = error_mark_node;
9883               }
9884
9885             if (size == error_mark_node)
9886               type = error_mark_node;
9887             else if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9888               {
9889                 /* [dcl.array]
9890
9891                    the constant expressions that specify the bounds of
9892                    the arrays can be omitted only for the first member
9893                    of the sequence.  */
9894                 cp_error ("declaration of `%D' as multidimensional array",
9895                           dname);
9896                 cp_error ("must have bounds for all dimensions except the first");
9897                 type = error_mark_node;
9898               }
9899
9900             if (type == error_mark_node)
9901               continue;
9902
9903             /* VC++ spells a zero-sized array with [].  */
9904             if (size == NULL_TREE && decl_context == FIELD && ! staticp
9905                 && ! RIDBIT_SETP (RID_TYPEDEF, specbits))
9906               size = integer_zero_node;
9907
9908             if (size)
9909               {
9910                 /* Must suspend_momentary here because the index
9911                    type may need to live until the end of the function.
9912                    For example, it is used in the declaration of a
9913                    variable which requires destructing at the end of
9914                    the function; then build_vec_delete will need this
9915                    value.  */
9916                 int yes = suspend_momentary ();
9917                 /* Might be a cast. */
9918                 if (TREE_CODE (size) == NOP_EXPR
9919                     && TREE_TYPE (size) == TREE_TYPE (TREE_OPERAND (size, 0)))
9920                   size = TREE_OPERAND (size, 0);
9921                 if (TREE_READONLY_DECL_P (size))
9922                   size = decl_constant_value (size);
9923
9924                 /* If this involves a template parameter, it will be a
9925                    constant at instantiation time, but we don't know
9926                    what the value is yet.  Even if no template
9927                    parameters are involved, we may an expression that
9928                    is not a constant; we don't even simplify `1 + 2'
9929                    when processing a template.  */
9930                 if (processing_template_decl)
9931                   {
9932                     /* Resolve a qualified reference to an enumerator or
9933                        static const data member of ours.  */
9934                     if (TREE_CODE (size) == SCOPE_REF
9935                         && TREE_OPERAND (size, 0) == current_class_type)
9936                       {
9937                         tree t = lookup_field (current_class_type,
9938                                                TREE_OPERAND (size, 1), 0, 0);
9939                         if (t)
9940                           size = t;
9941                       }
9942
9943                     itype = build_index_type (build_min
9944                       (MINUS_EXPR, sizetype, size, integer_one_node));
9945                     goto dont_grok_size;
9946                   }
9947
9948                 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
9949                     && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
9950                     && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
9951                   {
9952                     cp_error ("size of array `%D' has non-integer type",
9953                               dname);
9954                     size = integer_one_node;
9955                   }
9956                 if (pedantic && integer_zerop (size))
9957                   cp_pedwarn ("ANSI C++ forbids zero-size array `%D'", dname);
9958                 if (TREE_CONSTANT (size))
9959                   {
9960                     int old_flag_pedantic_errors = flag_pedantic_errors;
9961                     int old_pedantic = pedantic;
9962                     pedantic = flag_pedantic_errors = 1;
9963                     /* Always give overflow errors on array subscripts.  */
9964                     constant_expression_warning (size);
9965                     pedantic = old_pedantic;
9966                     flag_pedantic_errors = old_flag_pedantic_errors;
9967                     if (INT_CST_LT (size, integer_zero_node))
9968                       {
9969                         cp_error ("size of array `%D' is negative", dname);
9970                         size = integer_one_node;
9971                       }
9972                   }
9973                 else
9974                   {
9975                     if (pedantic)
9976                       {
9977                         if (dname)
9978                           cp_pedwarn ("ANSI C++ forbids variable-size array `%D'",
9979                                       dname);
9980                         else
9981                           cp_pedwarn ("ANSI C++ forbids variable-size array");
9982                       }
9983                   }
9984
9985                 itype
9986                   = fold (build_binary_op (MINUS_EXPR,
9987                                            cp_convert (index_type, size),
9988                                            cp_convert (index_type,
9989                                                        integer_one_node)));
9990                 if (! TREE_CONSTANT (itype))
9991                   itype = variable_size (itype);
9992                 else if (TREE_OVERFLOW (itype))
9993                   {
9994                     error ("overflow in array dimension");
9995                     TREE_OVERFLOW (itype) = 0;
9996                   }
9997
9998                 /* If we're a parm, we need to have a permanent type so
9999                    mangling checks for re-use will work right.  If both the
10000                    element and index types are permanent, the array type
10001                    will be, too.  */
10002                 if (decl_context == PARM
10003                     && allocation_temporary_p () && TREE_PERMANENT (type))
10004                   {
10005                     push_obstacks (&permanent_obstack, &permanent_obstack);
10006                     itype = build_index_type (itype);
10007                     pop_obstacks ();
10008                   }
10009                 else
10010                   itype = build_index_type (itype);
10011
10012               dont_grok_size:
10013                 resume_momentary (yes);
10014               }
10015
10016             type = build_cplus_array_type (type, itype);
10017             ctype = NULL_TREE;
10018           }
10019           break;
10020
10021         case CALL_EXPR:
10022           {
10023             tree arg_types;
10024             int funcdecl_p;
10025             tree inner_parms = TREE_OPERAND (declarator, 1);
10026             tree inner_decl = TREE_OPERAND (declarator, 0);
10027
10028             /* Declaring a function type.
10029                Make sure we have a valid type for the function to return.  */
10030
10031             /* We now know that the TYPE_QUALS don't apply to the
10032                decl, but to its return type.  */
10033             type_quals = TYPE_UNQUALIFIED;
10034
10035             /* Warn about some types functions can't return.  */
10036
10037             if (TREE_CODE (type) == FUNCTION_TYPE)
10038               {
10039                 error ("`%s' declared as function returning a function", name);
10040                 type = integer_type_node;
10041               }
10042             if (TREE_CODE (type) == ARRAY_TYPE)
10043               {
10044                 error ("`%s' declared as function returning an array", name);
10045                 type = integer_type_node;
10046               }
10047
10048             if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
10049               inner_decl = TREE_OPERAND (inner_decl, 1);
10050
10051             if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR) 
10052               inner_decl = dname;
10053
10054             /* Pick up type qualifiers which should be applied to `this'.  */
10055             quals = TREE_OPERAND (declarator, 2);
10056
10057             /* Pick up the exception specifications.  */
10058             raises = TREE_TYPE (declarator);
10059
10060             /* Say it's a definition only for the CALL_EXPR
10061                closest to the identifier.  */
10062             funcdecl_p
10063               = inner_decl 
10064               && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
10065                   || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR 
10066                   || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
10067             
10068             if (ctype == NULL_TREE
10069                 && decl_context == FIELD
10070                 && funcdecl_p
10071                 && (friendp == 0 || dname == current_class_name))
10072               ctype = current_class_type;
10073
10074             if (ctype && return_type == return_conversion)
10075               TYPE_HAS_CONVERSION (ctype) = 1;
10076             if (ctype && constructor_name (ctype) == dname)
10077               {
10078                 /* We are within a class's scope. If our declarator name
10079                    is the same as the class name, and we are defining
10080                    a function, then it is a constructor/destructor, and
10081                    therefore returns a void type.  */
10082
10083                 if (flags == DTOR_FLAG)
10084                   {
10085                     /* ANSI C++ June 5 1992 WP 12.4.1.  A destructor may
10086                        not be declared const or volatile.  A destructor
10087                        may not be static.  */
10088                     if (staticp == 2)
10089                       error ("destructor cannot be static member function");
10090                     if (quals)
10091                       {
10092                         cp_error ("destructors may not be `%s'",
10093                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10094                         quals = NULL_TREE;
10095                       }
10096                     if (decl_context == FIELD)
10097                       {
10098                         if (! member_function_or_else (ctype, current_class_type,
10099                                                        "destructor for alien class `%s' cannot be a member"))
10100                           return void_type_node;
10101                       }
10102                   }
10103                 else            /* It's a constructor.  */
10104                   {
10105                     if (explicitp == 1)
10106                       explicitp = 2;
10107                     /* ANSI C++ June 5 1992 WP 12.1.2.  A constructor may
10108                        not be declared const or volatile.  A constructor may
10109                        not be virtual.  A constructor may not be static.  */
10110                     if (staticp == 2)
10111                       error ("constructor cannot be static member function");
10112                     if (virtualp)
10113                       {
10114                         pedwarn ("constructors cannot be declared virtual");
10115                         virtualp = 0;
10116                       }
10117                     if (quals)
10118                       {
10119                         cp_error ("constructors may not be `%s'",
10120                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10121                         quals = NULL_TREE;
10122                       }
10123                     {
10124                       RID_BIT_TYPE tmp_bits;
10125                       bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
10126                       RIDBIT_RESET (RID_INLINE, tmp_bits);
10127                       RIDBIT_RESET (RID_STATIC, tmp_bits);
10128                       if (RIDBIT_ANY_SET (tmp_bits))
10129                         error ("return value type specifier for constructor ignored");
10130                     }
10131                     type = build_pointer_type (ctype);
10132                     if (decl_context == FIELD)
10133                       {
10134                         if (! member_function_or_else (ctype, current_class_type,
10135                                                        "constructor for alien class `%s' cannot be member"))
10136                           return void_type_node;
10137                         TYPE_HAS_CONSTRUCTOR (ctype) = 1;
10138                         if (return_type != return_ctor)
10139                           return NULL_TREE;
10140                       }
10141                   }
10142                 if (decl_context == FIELD)
10143                   staticp = 0;
10144               }
10145             else if (friendp)
10146               {
10147                 if (initialized)
10148                   error ("can't initialize friend function `%s'", name);
10149                 if (virtualp)
10150                   {
10151                     /* Cannot be both friend and virtual.  */
10152                     error ("virtual functions cannot be friends");
10153                     RIDBIT_RESET (RID_FRIEND, specbits);
10154                     friendp = 0;
10155                   }
10156                 if (decl_context == NORMAL)
10157                   error ("friend declaration not in class definition");
10158                 if (current_function_decl && funcdef_flag)
10159                   cp_error ("can't define friend function `%s' in a local class definition",
10160                             name);
10161               }
10162
10163             /* Construct the function type and go to the next
10164                inner layer of declarator.  */
10165
10166             declarator = TREE_OPERAND (declarator, 0);
10167
10168             /* FIXME: This is where default args should be fully
10169                processed.  */
10170
10171             arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
10172
10173             if (declarator && flags == DTOR_FLAG)
10174               {
10175                 /* A destructor declared in the body of a class will
10176                    be represented as a BIT_NOT_EXPR.  But, we just
10177                    want the underlying IDENTIFIER.  */
10178                 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
10179                   declarator = TREE_OPERAND (declarator, 0);
10180                 
10181                 if (strict_prototype == 0 && arg_types == NULL_TREE)
10182                   arg_types = void_list_node;
10183                 else if (arg_types == NULL_TREE
10184                          || arg_types != void_list_node)
10185                   {
10186                     cp_error ("destructors may not have parameters");
10187                     arg_types = void_list_node;
10188                     last_function_parms = NULL_TREE;
10189                   }
10190               }
10191
10192             /* ANSI says that `const int foo ();'
10193                does not make the function foo const.  */
10194             type = build_function_type (type, arg_types);
10195
10196             {
10197               tree t;
10198               for (t = arg_types; t; t = TREE_CHAIN (t))
10199                 if (TREE_PURPOSE (t)
10200                     && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10201                   {
10202                     add_defarg_fn (type);
10203                     break;
10204                   }
10205             }
10206           }
10207           break;
10208
10209         case ADDR_EXPR:
10210         case INDIRECT_REF:
10211           /* Filter out pointers-to-references and references-to-references.
10212              We can get these if a TYPE_DECL is used.  */
10213
10214           if (TREE_CODE (type) == REFERENCE_TYPE)
10215             {
10216               error ("cannot declare %s to references",
10217                      TREE_CODE (declarator) == ADDR_EXPR
10218                      ? "references" : "pointers");
10219               declarator = TREE_OPERAND (declarator, 0);
10220               continue;
10221             }
10222
10223           if (TREE_CODE (type) == OFFSET_TYPE
10224               && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10225                   || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10226             {
10227               cp_error ("cannot declare pointer to `%#T' member",
10228                         TREE_TYPE (type));
10229               type = TREE_TYPE (type);
10230             }
10231
10232           /* Merge any constancy or volatility into the target type
10233              for the pointer.  */
10234
10235           /* We now know that the TYPE_QUALS don't apply to the decl,
10236              but to the target of the pointer.  */
10237           type_quals = TYPE_UNQUALIFIED;
10238
10239           if (TREE_CODE (declarator) == ADDR_EXPR)
10240             {
10241               if (TREE_CODE (type) == VOID_TYPE)
10242                 error ("invalid type: `void &'");
10243               else
10244                 type = build_reference_type (type);
10245             }
10246           else if (TREE_CODE (type) == METHOD_TYPE)
10247             type = build_ptrmemfunc_type (build_pointer_type (type));
10248           else
10249             type = build_pointer_type (type);
10250
10251           /* Process a list of type modifier keywords (such as
10252              const or volatile) that were given inside the `*' or `&'.  */
10253
10254           if (TREE_TYPE (declarator))
10255             {
10256               register tree typemodlist;
10257               int erred = 0;
10258
10259               constp = 0;
10260               volatilep = 0;
10261               restrictp = 0;
10262               for (typemodlist = TREE_TYPE (declarator); typemodlist;
10263                    typemodlist = TREE_CHAIN (typemodlist))
10264                 {
10265                   tree qualifier = TREE_VALUE (typemodlist);
10266
10267                   if (qualifier == ridpointers[(int) RID_CONST])
10268                     constp++;
10269                   else if (qualifier == ridpointers[(int) RID_VOLATILE])
10270                     volatilep++;
10271                   else if (qualifier == ridpointers[(int) RID_RESTRICT])
10272                     restrictp++;
10273                   else if (!erred)
10274                     {
10275                       erred = 1;
10276                       error ("invalid type modifier within pointer declarator");
10277                     }
10278                 }
10279               if (constp > 1)
10280                 pedwarn ("duplicate `const'");
10281               if (volatilep > 1)
10282                 pedwarn ("duplicate `volatile'");
10283               if (restrictp > 1)
10284                 pedwarn ("duplicate `restrict'");
10285
10286               type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10287                             | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10288                             | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10289               if (TREE_CODE (declarator) == ADDR_EXPR
10290                   && (constp || volatilep))
10291                 {
10292                   if (constp)
10293                     pedwarn ("discarding `const' applied to a reference");
10294                   if (volatilep)
10295                     pedwarn ("discarding `volatile' applied to a reference");
10296                   type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
10297                 }
10298               type = cp_build_qualified_type (type, type_quals);
10299             }
10300           declarator = TREE_OPERAND (declarator, 0);
10301           ctype = NULL_TREE;
10302           break;
10303
10304         case SCOPE_REF:
10305           {
10306             /* We have converted type names to NULL_TREE if the
10307                name was bogus, or to a _TYPE node, if not.
10308
10309                The variable CTYPE holds the type we will ultimately
10310                resolve to.  The code here just needs to build
10311                up appropriate member types.  */
10312             tree sname = TREE_OPERAND (declarator, 1);
10313             tree t;
10314
10315             /* Destructors can have their visibilities changed as well.  */
10316             if (TREE_CODE (sname) == BIT_NOT_EXPR)
10317               sname = TREE_OPERAND (sname, 0);
10318
10319             if (TREE_COMPLEXITY (declarator) == 0)
10320               /* This needs to be here, in case we are called
10321                  multiple times.  */ ;
10322             else if (TREE_COMPLEXITY (declarator) == -1)
10323               /* Namespace member. */
10324               pop_decl_namespace ();
10325             else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
10326               /* Don't fall out into global scope. Hides real bug? --eichin */ ;
10327             else if (! IS_AGGR_TYPE_CODE
10328                      (TREE_CODE (TREE_OPERAND (declarator, 0))))
10329               ;
10330             else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10331               {
10332                 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10333                    that refer to ctype.  They couldn't be resolved earlier
10334                    because we hadn't pushed into the class yet.
10335                    Example: resolve 'B<T>::type' in
10336                    'B<typename B<T>::type> B<T>::f () { }'.  */
10337                 if (current_template_parms
10338                     && uses_template_parms (type)
10339                     && uses_template_parms (current_class_type))
10340                   {
10341                     tree args = current_template_args ();
10342                     type = tsubst (type, args, /*complain=*/1, NULL_TREE);
10343                   }
10344
10345                 /* This pop_nested_class corresponds to the
10346                    push_nested_class used to push into class scope for
10347                    parsing the argument list of a function decl, in
10348                    qualified_id.  */
10349                 pop_nested_class ();
10350                 TREE_COMPLEXITY (declarator) = current_class_depth;
10351               }
10352             else
10353               my_friendly_abort (16);
10354
10355             if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10356               {
10357                 /* We had a reference to a global decl, or
10358                    perhaps we were given a non-aggregate typedef,
10359                    in which case we cleared this out, and should just
10360                    keep going as though it wasn't there.  */
10361                 declarator = sname;
10362                 continue;
10363               }
10364             ctype = TREE_OPERAND (declarator, 0);
10365
10366             t = ctype;
10367             while (t != NULL_TREE && CLASS_TYPE_P (t)) 
10368               {
10369                 if (CLASSTYPE_TEMPLATE_INFO (t) &&
10370                     !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
10371                   template_count += 1;
10372                 t = TYPE_MAIN_DECL (t);
10373                 if (DECL_LANG_SPECIFIC (t))
10374                   t = DECL_CLASS_CONTEXT (t);
10375                 else
10376                   t = NULL_TREE;
10377               }
10378
10379             if (sname == NULL_TREE)
10380               goto done_scoping;
10381
10382             if (TREE_CODE (sname) == IDENTIFIER_NODE)
10383               {
10384                 /* This is the `standard' use of the scoping operator:
10385                    basetype :: member .  */
10386
10387                 if (ctype == current_class_type)
10388                   {
10389                     /* class A {
10390                          void A::f ();
10391                        };
10392
10393                        Is this ill-formed?  */
10394
10395                     if (pedantic)
10396                       cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
10397                                   ctype, name);
10398                   }
10399                 else if (TREE_CODE (type) == FUNCTION_TYPE)
10400                   {
10401                     if (current_class_type == NULL_TREE
10402                         || friendp)
10403                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10404                                                       TYPE_ARG_TYPES (type));
10405                     else
10406                       {
10407                         cp_error ("cannot declare member function `%T::%s' within `%T'",
10408                                   ctype, name, current_class_type);
10409                         return void_type_node;
10410                       }
10411                   }
10412                 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
10413                          || TYPE_SIZE (complete_type (ctype)) != NULL_TREE)
10414                   {
10415                     /* Have to move this code elsewhere in this function.
10416                        this code is used for i.e., typedef int A::M; M *pm;
10417
10418                        It is?  How? jason 10/2/94 */
10419
10420                     if (current_class_type)
10421                       {
10422                         cp_error ("cannot declare member `%T::%s' within `%T'",
10423                                   ctype, name, current_class_type);
10424                         return void_type_node;
10425                       }
10426                     type = build_offset_type (ctype, type);
10427                   }
10428                 else if (uses_template_parms (ctype))
10429                   {
10430                     if (TREE_CODE (type) == FUNCTION_TYPE)
10431                       type
10432                         = build_cplus_method_type (ctype, TREE_TYPE (type),
10433                                                    TYPE_ARG_TYPES (type));
10434                   }
10435                 else
10436                   {
10437                     cp_error ("structure `%T' not yet defined", ctype);
10438                     return error_mark_node;
10439                   }
10440
10441                 declarator = sname;
10442               }
10443             else if (TREE_CODE (sname) == SCOPE_REF)
10444               my_friendly_abort (17);
10445             else
10446               {
10447               done_scoping:
10448                 declarator = TREE_OPERAND (declarator, 1);
10449                 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10450                   /* In this case, we will deal with it later.  */
10451                   ;
10452                 else
10453                   {
10454                     if (TREE_CODE (type) == FUNCTION_TYPE)
10455                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10456                                                       TYPE_ARG_TYPES (type));
10457                     else
10458                       type = build_offset_type (ctype, type);
10459                   }
10460               }
10461           }
10462           break;
10463
10464         case BIT_NOT_EXPR:
10465           declarator = TREE_OPERAND (declarator, 0);
10466           break;
10467
10468         case RECORD_TYPE:
10469         case UNION_TYPE:
10470         case ENUMERAL_TYPE:
10471           declarator = NULL_TREE;
10472           break;
10473
10474         case ERROR_MARK:
10475           declarator = NULL_TREE;
10476           break;
10477
10478         default:
10479           my_friendly_abort (158);
10480         }
10481     }
10482
10483   /* See the comment for the TREE_LIST case, above.  */
10484   if (inner_attrs)
10485     {
10486       if (! ignore_attrs)
10487         decl_attributes (type, inner_attrs, NULL_TREE);
10488       else if (attrlist)
10489         TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
10490       else
10491         attrlist = build_decl_list (NULL_TREE, inner_attrs);
10492     }
10493
10494   /* Now TYPE has the actual type.  */
10495
10496   if (explicitp == 1)
10497     {
10498       error ("only constructors can be declared `explicit'");
10499       explicitp = 0;
10500     }
10501
10502   if (RIDBIT_SETP (RID_MUTABLE, specbits))
10503     {
10504       if (type_quals & TYPE_QUAL_CONST)
10505         {
10506           error ("const `%s' cannot be declared `mutable'", name);
10507           RIDBIT_RESET (RID_MUTABLE, specbits);
10508         }
10509       else if (staticp)
10510         {
10511           error ("static `%s' cannot be declared `mutable'", name);
10512           RIDBIT_RESET (RID_MUTABLE, specbits);
10513         }
10514     }
10515
10516   if (declarator == NULL_TREE
10517       || TREE_CODE (declarator) == IDENTIFIER_NODE
10518       || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
10519           && (TREE_CODE (type) == FUNCTION_TYPE
10520               || TREE_CODE (type) == METHOD_TYPE)))
10521     /* OK */;
10522   else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10523     {
10524       cp_error ("template-id `%D' used as a declarator", declarator);
10525       declarator = dname;
10526     }
10527   else
10528     /* Unexpected declarator format.  */
10529     my_friendly_abort (990210);
10530
10531   /* If this is declaring a typedef name, return a TYPE_DECL.  */
10532
10533   if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
10534     {
10535       tree decl;
10536
10537       /* Note that the grammar rejects storage classes
10538          in typenames, fields or parameters.  */
10539       if (current_lang_name == lang_name_java)
10540         TYPE_FOR_JAVA (type) = 1;
10541
10542       if (decl_context == FIELD)
10543         {
10544           if (declarator == constructor_name (current_class_type))
10545             cp_pedwarn ("ANSI C++ forbids nested type `%D' with same name as enclosing class",
10546                         declarator);
10547           decl = build_lang_decl (TYPE_DECL, declarator, type);
10548         }
10549       else
10550         {
10551           /* Make sure this typedef lives as long as its type,
10552              since it might be used as a template parameter. */
10553           if (type != error_mark_node)
10554             push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
10555           if (processing_template_decl)
10556             decl = build_lang_field_decl (TYPE_DECL, declarator, type);
10557           else
10558             decl = build_decl (TYPE_DECL, declarator, type);
10559           if (type != error_mark_node)
10560             pop_obstacks ();
10561         }
10562
10563       /* If the user declares "typedef struct {...} foo" then the
10564          struct will have an anonymous name.  Fill that name in now.
10565          Nothing can refer to it, so nothing needs know about the name
10566          change.  */
10567       if (type != error_mark_node
10568           && TYPE_NAME (type)
10569           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10570           && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type))
10571           && CP_TYPE_QUALS (type) == TYPE_UNQUALIFIED)
10572         {
10573           tree oldname = TYPE_NAME (type);
10574           tree t;
10575
10576           /* Replace the anonymous name with the real name everywhere.  */
10577           lookup_tag_reverse (type, declarator);
10578           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10579             if (TYPE_NAME (t) == oldname)
10580               TYPE_NAME (t) = decl;
10581
10582           if (TYPE_LANG_SPECIFIC (type))
10583             TYPE_WAS_ANONYMOUS (type) = 1;
10584
10585           /* If this is a typedef within a template class, the nested
10586              type is a (non-primary) template.  The name for the
10587              template needs updating as well.  */
10588           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10589             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)) 
10590               = TYPE_IDENTIFIER (type);
10591
10592           /* XXX Temporarily set the scope. 
10593              When returning, start_decl expects it as NULL_TREE,
10594              and will then then set it using pushdecl. */
10595           my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 980404);
10596           if (current_class_type)
10597             DECL_CONTEXT (decl) = current_class_type;
10598           else
10599             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10600
10601           DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
10602           DECL_ASSEMBLER_NAME (decl)
10603             = get_identifier (build_overload_name (type, 1, 1));
10604           DECL_CONTEXT (decl) = NULL_TREE;
10605
10606           /* FIXME remangle member functions; member functions of a
10607              type with external linkage have external linkage.  */
10608         }
10609
10610       if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
10611         {
10612           cp_error_at ("typedef name may not be class-qualified", decl);
10613           return NULL_TREE;
10614         }
10615       else if (quals)
10616         {
10617           if (ctype == NULL_TREE)
10618             {
10619               if (TREE_CODE (type) != METHOD_TYPE)
10620                 cp_error_at ("invalid type qualifier for non-method type", decl);
10621               else
10622                 ctype = TYPE_METHOD_BASETYPE (type);
10623             }
10624           if (ctype != NULL_TREE)
10625             grok_method_quals (ctype, decl, quals);
10626         }
10627
10628       if (RIDBIT_SETP (RID_SIGNED, specbits)
10629           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10630         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10631
10632       if (RIDBIT_SETP (RID_MUTABLE, specbits))
10633         error ("non-object member `%s' cannot be declared mutable", name);
10634
10635       bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
10636                       inlinep, friendp, raises != NULL_TREE);
10637
10638       if (initialized)
10639         error ("typedef declaration includes an initializer");
10640
10641       return decl;
10642     }
10643
10644   /* Detect the case of an array type of unspecified size
10645      which came, as such, direct from a typedef name.
10646      We must copy the type, so that each identifier gets
10647      a distinct type, so that each identifier's size can be
10648      controlled separately by its own initializer.  */
10649
10650   if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
10651       && TYPE_DOMAIN (type) == NULL_TREE)
10652     {
10653       type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
10654     }
10655
10656   /* If this is a type name (such as, in a cast or sizeof),
10657      compute the type and return it now.  */
10658
10659   if (decl_context == TYPENAME)
10660     {
10661       /* Note that the grammar rejects storage classes
10662          in typenames, fields or parameters.  */
10663       if (type_quals != TYPE_UNQUALIFIED)
10664         type_quals = TYPE_UNQUALIFIED;
10665
10666       /* Special case: "friend class foo" looks like a TYPENAME context.  */
10667       if (friendp)
10668         {
10669           if (type_quals != TYPE_UNQUALIFIED)
10670             {
10671               cp_error ("type qualifiers specified for friend class declaration");
10672               type_quals = TYPE_UNQUALIFIED;
10673             }
10674           if (inlinep)
10675             {
10676               cp_error ("`inline' specified for friend class declaration");
10677               inlinep = 0;
10678             }
10679
10680           /* Only try to do this stuff if we didn't already give up.  */
10681           if (type != integer_type_node)
10682             {
10683               /* A friendly class?  */
10684               if (current_class_type)
10685                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
10686               else
10687                 error ("trying to make class `%s' a friend of global scope",
10688                        TYPE_NAME_STRING (type));
10689               type = void_type_node;
10690             }
10691         }
10692       else if (quals)
10693         {
10694           tree dummy = build_decl (TYPE_DECL, declarator, type);
10695           if (ctype == NULL_TREE)
10696             {
10697               my_friendly_assert (TREE_CODE (type) == METHOD_TYPE, 159);
10698               ctype = TYPE_METHOD_BASETYPE (type);
10699             }
10700           grok_method_quals (ctype, dummy, quals);
10701           type = TREE_TYPE (dummy);
10702         }
10703
10704       return type;
10705     }
10706   else if (declarator == NULL_TREE && decl_context != PARM
10707            && decl_context != CATCHPARM
10708            && TREE_CODE (type) != UNION_TYPE
10709            && ! bitfield)
10710     {
10711       cp_error ("abstract declarator `%T' used as declaration", type);
10712       declarator = make_anon_name ();
10713     }
10714
10715   /* `void' at top level (not within pointer)
10716      is allowed only in typedefs or type names.
10717      We don't complain about parms either, but that is because
10718      a better error message can be made later.  */
10719
10720   if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
10721     {
10722       if (! declarator)
10723         error ("unnamed variable or field declared void");
10724       else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10725         {
10726           if (IDENTIFIER_OPNAME_P (declarator))
10727             my_friendly_abort (356);
10728           else
10729             error ("variable or field `%s' declared void", name);
10730         }
10731       else
10732         error ("variable or field declared void");
10733       type = integer_type_node;
10734     }
10735
10736   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10737      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
10738
10739   if (decl_context == PARM || decl_context == CATCHPARM)
10740     {
10741       if (ctype || in_namespace)
10742         error ("cannot use `::' in parameter declaration");
10743
10744       /* A parameter declared as an array of T is really a pointer to T.
10745          One declared as a function is really a pointer to a function.
10746          One declared as a member is really a pointer to member.  */
10747
10748       if (TREE_CODE (type) == ARRAY_TYPE)
10749         {
10750           /* Transfer const-ness of array into that of type pointed to.  */
10751           type = build_pointer_type (TREE_TYPE (type));
10752           type_quals = TYPE_UNQUALIFIED;
10753         }
10754       else if (TREE_CODE (type) == FUNCTION_TYPE)
10755         type = build_pointer_type (type);
10756       else if (TREE_CODE (type) == OFFSET_TYPE)
10757         type = build_pointer_type (type);
10758       else if (TREE_CODE (type) == VOID_TYPE && declarator)
10759         {
10760           error ("declaration of `%s' as void", name);
10761           return NULL_TREE;
10762         }
10763     }
10764   
10765   {
10766     register tree decl;
10767
10768     if (decl_context == PARM)
10769       {
10770         decl = build_decl (PARM_DECL, declarator, type);
10771
10772         bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
10773                         inlinep, friendp, raises != NULL_TREE);
10774
10775         /* Compute the type actually passed in the parmlist,
10776            for the case where there is no prototype.
10777            (For example, shorts and chars are passed as ints.)
10778            When there is a prototype, this is overridden later.  */
10779
10780         DECL_ARG_TYPE (decl) = type_promotes_to (type);
10781       }
10782     else if (decl_context == FIELD)
10783       {
10784         if (type == error_mark_node)
10785           {
10786             /* Happens when declaring arrays of sizes which
10787                are error_mark_node, for example.  */
10788             decl = NULL_TREE;
10789           }
10790         else if (in_namespace && !friendp)
10791           {
10792             /* Something like struct S { int N::j; };  */
10793             cp_error ("invalid use of `::'");
10794             decl = NULL_TREE;
10795           }
10796         else if (TREE_CODE (type) == FUNCTION_TYPE)
10797           {
10798             int publicp = 0;
10799             tree function_context;
10800
10801             /* We catch the others as conflicts with the builtin
10802                typedefs.  */
10803             if (friendp && declarator == ridpointers[(int) RID_SIGNED])
10804               {
10805                 cp_error ("function `%D' cannot be declared friend",
10806                           declarator);
10807                 friendp = 0;
10808               }
10809
10810             if (friendp == 0)
10811               {
10812                 if (ctype == NULL_TREE)
10813                   ctype = current_class_type;
10814
10815                 if (ctype == NULL_TREE)
10816                   {
10817                     cp_error ("can't make `%D' into a method -- not in a class",
10818                               declarator);
10819                     return void_type_node;
10820                   }
10821
10822                 /* ``A union may [ ... ] not [ have ] virtual functions.''
10823                    ARM 9.5 */
10824                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10825                   {
10826                     cp_error ("function `%D' declared virtual inside a union",
10827                               declarator);
10828                     return void_type_node;
10829                   }
10830
10831                 if (declarator == ansi_opname[(int) NEW_EXPR]
10832                     || declarator == ansi_opname[(int) VEC_NEW_EXPR]
10833                     || declarator == ansi_opname[(int) DELETE_EXPR]
10834                     || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
10835                   {
10836                     if (virtualp)
10837                       {
10838                         cp_error ("`%D' cannot be declared virtual, since it is always static",
10839                                   declarator);
10840                         virtualp = 0;
10841                       }
10842                   }
10843                 else if (staticp < 2)
10844                   type = build_cplus_method_type (ctype, TREE_TYPE (type),
10845                                                   TYPE_ARG_TYPES (type));
10846               }
10847
10848             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
10849             function_context = (ctype != NULL_TREE) ? 
10850               hack_decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10851             publicp = (! friendp || ! staticp)
10852               && function_context == NULL_TREE;
10853             decl = grokfndecl (ctype, type, 
10854                                TREE_CODE (declarator) != TEMPLATE_ID_EXPR
10855                                ? declarator : dname,
10856                                declarator,
10857                                virtualp, flags, quals, raises,
10858                                friendp ? -1 : 0, friendp, publicp, inlinep,
10859                                funcdef_flag, template_count, in_namespace);
10860             if (decl == NULL_TREE)
10861               return decl;
10862 #if 0
10863             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
10864             /* The decl and setting of decl_machine_attr is also turned off.  */
10865             decl = build_decl_attribute_variant (decl, decl_machine_attr);
10866 #endif
10867
10868             /* [class.conv.ctor]
10869
10870                A constructor declared without the function-specifier
10871                explicit that can be called with a single parameter
10872                specifies a conversion from the type of its first
10873                parameter to the type of its class.  Such a constructor
10874                is called a converting constructor.  */
10875             if (explicitp == 2)
10876               DECL_NONCONVERTING_P (decl) = 1;
10877             else if (DECL_CONSTRUCTOR_P (decl))
10878               {
10879                 /* The constructor can be called with exactly one
10880                    parameter if there is at least one parameter, and
10881                    any subsequent parameters have default arguments.
10882                    We don't look at the first parameter, which is
10883                    really just the `this' parameter for the new
10884                    object.  */
10885                 tree arg_types = 
10886                   TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)));
10887
10888                 /* Skip the `in_chrg' argument too, if present.  */
10889                 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (decl)))
10890                   arg_types = TREE_CHAIN (arg_types);
10891
10892                 if (arg_types == void_list_node
10893                     || (arg_types 
10894                         && TREE_CHAIN (arg_types) 
10895                         && TREE_CHAIN (arg_types) != void_list_node
10896                         && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
10897                   DECL_NONCONVERTING_P (decl) = 1;
10898               }
10899           }
10900         else if (TREE_CODE (type) == METHOD_TYPE)
10901           {
10902             /* We only get here for friend declarations of
10903                members of other classes.  */
10904             /* All method decls are public, so tell grokfndecl to set
10905                TREE_PUBLIC, also.  */
10906             decl = grokfndecl (ctype, type, declarator, declarator,
10907                                virtualp, flags, quals, raises,
10908                                friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
10909                                template_count, in_namespace);
10910             if (decl == NULL_TREE)
10911               return NULL_TREE;
10912           }
10913         else if (!staticp && ! processing_template_decl
10914                  && TYPE_SIZE (complete_type (type)) == NULL_TREE
10915                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
10916           {
10917             if (declarator)
10918               cp_error ("field `%D' has incomplete type", declarator);
10919             else
10920               cp_error ("name `%T' has incomplete type", type);
10921
10922             /* If we're instantiating a template, tell them which
10923                instantiation made the field's type be incomplete.  */
10924             if (current_class_type
10925                 && TYPE_NAME (current_class_type)
10926                 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
10927                 && declspecs && TREE_VALUE (declspecs)
10928                 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
10929               cp_error ("  in instantiation of template `%T'",
10930                         current_class_type);
10931
10932             type = error_mark_node;
10933             decl = NULL_TREE;
10934           }
10935         else
10936           {
10937             if (friendp)
10938               {
10939                 error ("`%s' is neither function nor method; cannot be declared friend",
10940                        IDENTIFIER_POINTER (declarator));
10941                 friendp = 0;
10942               }
10943             decl = NULL_TREE;
10944           }
10945
10946         if (friendp)
10947           {
10948             /* Friends are treated specially.  */
10949             if (ctype == current_class_type)
10950               warning ("member functions are implicitly friends of their class");
10951             else
10952               {
10953                 tree t = NULL_TREE;
10954                 if (decl && DECL_NAME (decl))
10955                   {
10956                     if (template_class_depth (current_class_type) == 0)
10957                       {
10958                         decl 
10959                           = check_explicit_specialization 
10960                           (declarator, decl,
10961                            template_count, 2 * (funcdef_flag != 0) + 4);
10962                         if (decl == error_mark_node)
10963                           return error_mark_node;
10964                       }
10965
10966                     t = do_friend (ctype, declarator, decl,
10967                                    last_function_parms, attrlist, flags, quals,
10968                                    funcdef_flag);
10969                   }
10970                 if (t && funcdef_flag)
10971                   return t;
10972                 
10973                 return void_type_node;
10974               }
10975           }
10976
10977         /* Structure field.  It may not be a function, except for C++ */
10978
10979         if (decl == NULL_TREE)
10980           {
10981             if (initialized)
10982               {
10983                 if (!staticp)
10984                   {
10985                     /* An attempt is being made to initialize a non-static
10986                        member.  But, from [class.mem]:
10987                        
10988                        4 A member-declarator can contain a
10989                        constant-initializer only if it declares a static
10990                        member (_class.static_) of integral or enumeration
10991                        type, see _class.static.data_.  
10992
10993                        This used to be relatively common practice, but
10994                        the rest of the compiler does not correctly
10995                        handle the initialization unless the member is
10996                        static so we make it static below.  */
10997                     cp_pedwarn ("ANSI C++ forbids initialization of member `%D'",
10998                                 declarator);
10999                     cp_pedwarn ("making `%D' static", declarator);
11000                     staticp = 1;
11001                   }
11002
11003                 if (uses_template_parms (type))
11004                   /* We'll check at instantiation time.  */
11005                   ;
11006                 else if (check_static_variable_definition (declarator,
11007                                                            type))
11008                   /* If we just return the declaration, crashes
11009                      will sometimes occur.  We therefore return
11010                      void_type_node, as if this was a friend
11011                      declaration, to cause callers to completely
11012                      ignore this declaration.  */
11013                   return void_type_node;
11014               }
11015
11016             /* 9.2p13 [class.mem] */
11017             if (declarator == constructor_name (current_class_type)
11018                 /* Divergence from the standard:  In extern "C", we
11019                    allow non-static data members here, because C does
11020                    and /usr/include/netinet/in.h uses that.  */
11021                 && (staticp || ! in_system_header))
11022               cp_pedwarn ("ANSI C++ forbids data member `%D' with same name as enclosing class",
11023                           declarator);
11024
11025             if (staticp)
11026               {
11027                 /* C++ allows static class members.
11028                    All other work for this is done by grokfield.
11029                    This VAR_DECL is built by build_lang_field_decl.
11030                    All other VAR_DECLs are built by build_decl.  */
11031                 decl = build_lang_field_decl (VAR_DECL, declarator, type);
11032                 TREE_STATIC (decl) = 1;
11033                 /* In class context, 'static' means public access.  */
11034                 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
11035               }
11036             else
11037               {
11038                 decl = build_lang_field_decl (FIELD_DECL, declarator, type);
11039                 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11040                   {
11041                     DECL_MUTABLE_P (decl) = 1;
11042                     RIDBIT_RESET (RID_MUTABLE, specbits);
11043                   }
11044               }
11045
11046             bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
11047                             inlinep, friendp, raises != NULL_TREE);
11048           }
11049       }
11050     else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
11051       {
11052         tree original_name;
11053         int publicp = 0;
11054
11055         if (! declarator)
11056           return NULL_TREE;
11057
11058         if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11059           original_name = dname;
11060         else
11061           original_name = declarator;
11062
11063         if (RIDBIT_SETP (RID_AUTO, specbits))
11064           error ("storage class `auto' invalid for function `%s'", name);
11065         else if (RIDBIT_SETP (RID_REGISTER, specbits))
11066           error ("storage class `register' invalid for function `%s'", name);
11067
11068         /* Function declaration not at top level.
11069            Storage classes other than `extern' are not allowed
11070            and `extern' makes no difference.  */
11071         if (! toplevel_bindings_p ()
11072             && (RIDBIT_SETP (RID_STATIC, specbits)
11073                 || RIDBIT_SETP (RID_INLINE, specbits))
11074             && pedantic)
11075           {
11076             if (RIDBIT_SETP (RID_STATIC, specbits))
11077               pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
11078             else
11079               pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
11080           }
11081         
11082         if (ctype == NULL_TREE)
11083           {
11084             if (virtualp)
11085               {
11086                 error ("virtual non-class function `%s'", name);
11087                 virtualp = 0;
11088               }
11089           }
11090         else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
11091           type = build_cplus_method_type (ctype, TREE_TYPE (type),
11092                                           TYPE_ARG_TYPES (type));
11093
11094         /* Record presence of `static'.  */
11095         publicp = (ctype != NULL_TREE
11096                    || RIDBIT_SETP (RID_EXTERN, specbits)
11097                    || !RIDBIT_SETP (RID_STATIC, specbits));
11098
11099         decl = grokfndecl (ctype, type, original_name, declarator,
11100                            virtualp, flags, quals, raises,
11101                            1, friendp,
11102                            publicp, inlinep, funcdef_flag, 
11103                            template_count, in_namespace);
11104         if (decl == NULL_TREE)
11105           return NULL_TREE;
11106
11107         if (staticp == 1)
11108           {
11109             int illegal_static = 0;
11110
11111             /* Don't allow a static member function in a class, and forbid
11112                declaring main to be static.  */
11113             if (TREE_CODE (type) == METHOD_TYPE)
11114               {
11115                 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
11116                 illegal_static = 1;
11117               }
11118             else if (current_function_decl)
11119               {
11120                 /* FIXME need arm citation */
11121                 error ("cannot declare static function inside another function");
11122                 illegal_static = 1;
11123               }
11124
11125             if (illegal_static)
11126               {
11127                 staticp = 0;
11128                 RIDBIT_RESET (RID_STATIC, specbits);
11129               }
11130           }
11131       }
11132     else
11133       {
11134         /* It's a variable.  */
11135
11136         /* An uninitialized decl with `extern' is a reference.  */
11137         decl = grokvardecl (type, declarator, &specbits, 
11138                             initialized, 
11139                             (type_quals & TYPE_QUAL_CONST) != 0, 
11140                             in_namespace);
11141         bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11142                         inlinep, friendp, raises != NULL_TREE);
11143
11144         if (ctype)
11145           {
11146             DECL_CONTEXT (decl) = ctype;
11147             if (staticp == 1)
11148               {
11149                 cp_pedwarn ("static member `%D' re-declared as static", decl);
11150                 staticp = 0;
11151                 RIDBIT_RESET (RID_STATIC, specbits);
11152               }
11153             if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11154               {
11155                 cp_error ("static member `%D' declared `register'", decl);
11156                 RIDBIT_RESET (RID_REGISTER, specbits);
11157               }
11158             if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
11159               {
11160                 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
11161                             decl);
11162                 RIDBIT_RESET (RID_EXTERN, specbits);
11163               }
11164           }
11165       }
11166
11167     if (RIDBIT_SETP (RID_MUTABLE, specbits))
11168       {
11169         error ("`%s' cannot be declared mutable", name);
11170       }
11171
11172     /* Record `register' declaration for warnings on &
11173        and in case doing stupid register allocation.  */
11174
11175     if (RIDBIT_SETP (RID_REGISTER, specbits))
11176       DECL_REGISTER (decl) = 1;
11177
11178     if (RIDBIT_SETP (RID_EXTERN, specbits))
11179       DECL_THIS_EXTERN (decl) = 1;
11180
11181     if (RIDBIT_SETP (RID_STATIC, specbits))
11182       DECL_THIS_STATIC (decl) = 1;
11183
11184     /* Record constancy and volatility.  There's no need to do this
11185        when processing a template; we'll do this for the instantiated
11186        declaration based on the type of DECL.  */
11187     if (!processing_template_decl)
11188       c_apply_type_quals_to_decl (type_quals, decl);
11189
11190     return decl;
11191   }
11192 }
11193 \f
11194 /* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11195    An empty exprlist is a parmlist.  An exprlist which
11196    contains only identifiers at the global level
11197    is a parmlist.  Otherwise, it is an exprlist.  */
11198
11199 int
11200 parmlist_is_exprlist (exprs)
11201      tree exprs;
11202 {
11203   if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11204     return 0;
11205
11206   if (toplevel_bindings_p ())
11207     {
11208       /* At the global level, if these are all identifiers,
11209          then it is a parmlist.  */
11210       while (exprs)
11211         {
11212           if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11213             return 1;
11214           exprs = TREE_CHAIN (exprs);
11215         }
11216       return 0;
11217     }
11218   return 1;
11219 }
11220
11221 /* Subroutine of start_function.  Ensure that each of the parameter
11222    types (as listed in PARMS) is complete, as is required for a
11223    function definition.  */
11224
11225 static void
11226 require_complete_types_for_parms (parms)
11227      tree parms;
11228 {
11229   while (parms)
11230     {
11231       tree type = TREE_TYPE (parms);
11232       if (TYPE_SIZE (complete_type (type)) == NULL_TREE)
11233         {
11234           if (DECL_NAME (parms))
11235             error ("parameter `%s' has incomplete type",
11236                    IDENTIFIER_POINTER (DECL_NAME (parms)));
11237           else
11238             error ("parameter has incomplete type");
11239           TREE_TYPE (parms) = error_mark_node;
11240         }
11241       else
11242         layout_decl (parms, 0);
11243
11244       parms = TREE_CHAIN (parms);
11245     }
11246 }
11247
11248 /* Returns DECL if DECL is a local variable (or parameter).  Returns
11249    NULL_TREE otherwise.  */
11250
11251 static tree
11252 local_variable_p (t)
11253      tree t;
11254 {
11255   if ((TREE_CODE (t) == VAR_DECL 
11256        /* A VAR_DECL with a context that is a _TYPE is a static data
11257           member.  */
11258        && !TYPE_P (CP_DECL_CONTEXT (t))
11259        /* Any other non-local variable must be at namespace scope.  */
11260        && TREE_CODE (CP_DECL_CONTEXT (t)) != NAMESPACE_DECL)
11261       || (TREE_CODE (t) == PARM_DECL))
11262     return t;
11263
11264   return NULL_TREE;
11265 }
11266
11267 /* Check that ARG, which is a default-argument expression for a
11268    parameter DECL, is legal.  Returns ARG, or ERROR_MARK_NODE, if
11269    something goes wrong.  DECL may also be a _TYPE node, rather than a
11270    DECL, if there is no DECL available.  */
11271
11272 tree
11273 check_default_argument (decl, arg)
11274      tree decl;
11275      tree arg;
11276 {
11277   tree var;
11278   tree decl_type;
11279
11280   if (TREE_CODE (arg) == DEFAULT_ARG)
11281     /* We get a DEFAULT_ARG when looking at an in-class declaration
11282        with a default argument.  Ignore the argument for now; we'll
11283        deal with it after the class is complete.  */
11284     return arg;
11285
11286   if (processing_template_decl || uses_template_parms (arg))
11287     /* We don't do anything checking until instantiation-time.  Note
11288        that there may be uninstantiated arguments even for an
11289        instantiated function, since default arguments are not
11290        instantiated until they are needed.  */
11291     return arg;
11292
11293   if (TYPE_P (decl))
11294     {
11295       decl_type = decl;
11296       decl = NULL_TREE;
11297     }
11298   else
11299     decl_type = TREE_TYPE (decl);
11300
11301   if (arg == error_mark_node 
11302       || decl == error_mark_node
11303       || TREE_TYPE (arg) == error_mark_node
11304       || decl_type == error_mark_node)
11305     /* Something already went wrong.  There's no need to check
11306        further.  */
11307     return error_mark_node;
11308
11309   /* [dcl.fct.default]
11310      
11311      A default argument expression is implicitly converted to the
11312      parameter type.  */
11313   if (!TREE_TYPE (arg)
11314       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
11315     {
11316       if (decl)
11317         cp_error ("default argument for `%#D' has type `%T'", 
11318                   decl, TREE_TYPE (arg));
11319       else
11320         cp_error ("default argument for paramter of type `%T' has type `%T'",
11321                   decl_type, TREE_TYPE (arg));
11322
11323       return error_mark_node;
11324     }
11325
11326   /* [dcl.fct.default]
11327
11328      Local variables shall not be used in default argument
11329      expressions. 
11330
11331      The keyword `this' shall not be used in a default argument of a
11332      member function.  */
11333   var = search_tree (arg, local_variable_p);
11334   if (var)
11335     {
11336       cp_error ("default argument `%E' uses local variable `%D'",
11337                 arg, var);
11338       return error_mark_node;
11339     }
11340
11341   /* All is well.  */
11342   return arg;
11343 }
11344
11345 /* Decode the list of parameter types for a function type.
11346    Given the list of things declared inside the parens,
11347    return a list of types.
11348
11349    The list we receive can have three kinds of elements:
11350    an IDENTIFIER_NODE for names given without types,
11351    a TREE_LIST node for arguments given as typespecs or names with typespecs,
11352    or void_type_node, to mark the end of an argument list
11353    when additional arguments are not permitted (... was not used).
11354
11355    FUNCDEF_FLAG is nonzero for a function definition, 0 for
11356    a mere declaration.  A nonempty identifier-list gets an error message
11357    when FUNCDEF_FLAG is zero.
11358    If FUNCDEF_FLAG is 1, then parameter types must be complete.
11359    If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
11360
11361    If all elements of the input list contain types,
11362    we return a list of the types.
11363    If all elements contain no type (except perhaps a void_type_node
11364    at the end), we return a null list.
11365    If some have types and some do not, it is an error, and we
11366    return a null list.
11367
11368    Also set last_function_parms to either
11369    a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
11370    A list of names is converted to a chain of PARM_DECLs
11371    by store_parm_decls so that ultimately it is always a chain of decls.
11372
11373    Note that in C++, parameters can take default values.  These default
11374    values are in the TREE_PURPOSE field of the TREE_LIST.  It is
11375    an error to specify default values which are followed by parameters
11376    that have no default values, or an ELLIPSES.  For simplicities sake,
11377    only parameters which are specified with their types can take on
11378    default values.  */
11379
11380 static tree
11381 grokparms (first_parm, funcdef_flag)
11382      tree first_parm;
11383      int funcdef_flag;
11384 {
11385   tree result = NULL_TREE;
11386   tree decls = NULL_TREE;
11387
11388   if (first_parm != NULL_TREE
11389       && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
11390     {
11391       if (! funcdef_flag)
11392         pedwarn ("parameter names (without types) in function declaration");
11393       last_function_parms = first_parm;
11394       return NULL_TREE;
11395     }
11396   else if (first_parm != NULL_TREE
11397            && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
11398            && TREE_CODE (TREE_VALUE (first_parm)) != VOID_TYPE)
11399     my_friendly_abort (145);
11400   else
11401     {
11402       /* Types were specified.  This is a list of declarators
11403          each represented as a TREE_LIST node.  */
11404       register tree parm, chain;
11405       int any_init = 0, any_error = 0;
11406
11407       if (first_parm != NULL_TREE)
11408         {
11409           tree last_result = NULL_TREE;
11410           tree last_decl = NULL_TREE;
11411
11412           for (parm = first_parm; parm != NULL_TREE; parm = chain)
11413             {
11414               tree type = NULL_TREE, list_node = parm;
11415               register tree decl = TREE_VALUE (parm);
11416               tree init = TREE_PURPOSE (parm);
11417
11418               chain = TREE_CHAIN (parm);
11419               /* @@ weak defense against parse errors.  */
11420               if (TREE_CODE (decl) != VOID_TYPE 
11421                   && TREE_CODE (decl) != TREE_LIST)
11422                 {
11423                   /* Give various messages as the need arises.  */
11424                   if (TREE_CODE (decl) == STRING_CST)
11425                     cp_error ("invalid string constant `%E'", decl);
11426                   else if (TREE_CODE (decl) == INTEGER_CST)
11427                     error ("invalid integer constant in parameter list, did you forget to give parameter name?");
11428                   continue;
11429                 }
11430
11431               if (TREE_CODE (decl) != VOID_TYPE)
11432                 {
11433                   decl = grokdeclarator (TREE_VALUE (decl),
11434                                          TREE_PURPOSE (decl),
11435                                          PARM, init != NULL_TREE,
11436                                          NULL_TREE);
11437                   if (! decl || TREE_TYPE (decl) == error_mark_node)
11438                     continue;
11439
11440                   /* Top-level qualifiers on the parameters are
11441                      ignored for function types.  */
11442                   type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
11443
11444                   if (TREE_CODE (type) == VOID_TYPE)
11445                     decl = void_type_node;
11446                   else if (TREE_CODE (type) == METHOD_TYPE)
11447                     {
11448                       if (DECL_NAME (decl))
11449                         /* Cannot use the decl here because
11450                            we don't have DECL_CONTEXT set up yet.  */
11451                         cp_error ("parameter `%D' invalidly declared method type",
11452                                   DECL_NAME (decl));
11453                       else
11454                         error ("parameter invalidly declared method type");
11455                       type = build_pointer_type (type);
11456                       TREE_TYPE (decl) = type;
11457                     }
11458                   else if (TREE_CODE (type) == OFFSET_TYPE)
11459                     {
11460                       if (DECL_NAME (decl))
11461                         cp_error ("parameter `%D' invalidly declared offset type",
11462                                   DECL_NAME (decl));
11463                       else
11464                         error ("parameter invalidly declared offset type");
11465                       type = build_pointer_type (type);
11466                       TREE_TYPE (decl) = type;
11467                     }
11468                   else if (abstract_virtuals_error (decl, type))
11469                     any_error = 1;  /* Seems like a good idea. */
11470                   else if (POINTER_TYPE_P (type))
11471                     {
11472                       tree t = type;
11473                       while (POINTER_TYPE_P (t)
11474                              || (TREE_CODE (t) == ARRAY_TYPE
11475                                  && TYPE_DOMAIN (t) != NULL_TREE))
11476                         t = TREE_TYPE (t);
11477                       if (TREE_CODE (t) == ARRAY_TYPE)
11478                         cp_error ("parameter type `%T' includes %s to array of unknown bound",
11479                                   type,
11480                                   TYPE_PTR_P (type) ? "pointer" : "reference");
11481                     }
11482                 }
11483
11484               if (TREE_CODE (decl) == VOID_TYPE)
11485                 {
11486                   if (result == NULL_TREE)
11487                     {
11488                       result = void_list_node;
11489                       last_result = result;
11490                     }
11491                   else
11492                     {
11493                       TREE_CHAIN (last_result) = void_list_node;
11494                       last_result = void_list_node;
11495                     }
11496                   if (chain
11497                       && (chain != void_list_node || TREE_CHAIN (chain)))
11498                     error ("`void' in parameter list must be entire list");
11499                   break;
11500                 }
11501
11502               /* Since there is a prototype, args are passed in their own types.  */
11503               DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
11504               if (PROMOTE_PROTOTYPES
11505                   && (TREE_CODE (type) == INTEGER_TYPE
11506                       || TREE_CODE (type) == ENUMERAL_TYPE)
11507                   && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
11508                 DECL_ARG_TYPE (decl) = integer_type_node;
11509               if (!any_error && init)
11510                 {
11511                   any_init++;
11512                   init = check_default_argument (decl, init);
11513                 }
11514               else
11515                 init = NULL_TREE;
11516
11517               if (decls == NULL_TREE)
11518                 {
11519                   decls = decl;
11520                   last_decl = decls;
11521                 }
11522               else
11523                 {
11524                   TREE_CHAIN (last_decl) = decl;
11525                   last_decl = decl;
11526                 }
11527               if (! current_function_decl && TREE_PERMANENT (list_node))
11528                 {
11529                   TREE_PURPOSE (list_node) = init;
11530                   TREE_VALUE (list_node) = type;
11531                   TREE_CHAIN (list_node) = NULL_TREE;
11532                 }
11533               else
11534                 list_node = saveable_tree_cons (init, type, NULL_TREE);
11535               if (result == NULL_TREE)
11536                 {
11537                   result = list_node;
11538                   last_result = result;
11539                 }
11540               else
11541                 {
11542                   TREE_CHAIN (last_result) = list_node;
11543                   last_result = list_node;
11544                 }
11545             }
11546           if (last_result)
11547             TREE_CHAIN (last_result) = NULL_TREE;
11548           /* If there are no parameters, and the function does not end
11549              with `...', then last_decl will be NULL_TREE.  */
11550           if (last_decl != NULL_TREE)
11551             TREE_CHAIN (last_decl) = NULL_TREE;
11552         }
11553     }
11554
11555   last_function_parms = decls;
11556
11557   return result;
11558 }
11559
11560 /* Called from the parser to update an element of TYPE_ARG_TYPES for some
11561    FUNCTION_TYPE with the newly parsed version of its default argument, which
11562    was previously digested as text.  See snarf_defarg et al in lex.c.  */
11563
11564 void
11565 replace_defarg (arg, init)
11566      tree arg, init;
11567 {
11568   if (! processing_template_decl
11569       && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
11570     cp_pedwarn ("invalid type `%T' for default argument to `%T'",
11571                 TREE_TYPE (init), TREE_VALUE (arg));
11572   TREE_PURPOSE (arg) = init;
11573 }
11574 \f
11575 int
11576 copy_args_p (d)
11577      tree d;
11578 {
11579   tree t = FUNCTION_ARG_CHAIN (d);
11580   if (DECL_CONSTRUCTOR_P (d)
11581       && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (d)))
11582     t = TREE_CHAIN (t);
11583   if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
11584       && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
11585           == DECL_CLASS_CONTEXT (d))
11586       && (TREE_CHAIN (t) == NULL_TREE
11587           || TREE_CHAIN (t) == void_list_node
11588           || TREE_PURPOSE (TREE_CHAIN (t))))
11589     return 1;
11590   return 0;
11591 }
11592
11593 /* These memoizing functions keep track of special properties which
11594    a class may have.  `grok_ctor_properties' notices whether a class
11595    has a constructor of the form X(X&), and also complains
11596    if the class has a constructor of the form X(X).
11597    `grok_op_properties' takes notice of the various forms of
11598    operator= which are defined, as well as what sorts of type conversion
11599    may apply.  Both functions take a FUNCTION_DECL as an argument.  */
11600
11601 int
11602 grok_ctor_properties (ctype, decl)
11603      tree ctype, decl;
11604 {
11605   tree parmtypes = FUNCTION_ARG_CHAIN (decl);
11606   tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
11607
11608   /* When a type has virtual baseclasses, a magical first int argument is
11609      added to any ctor so we can tell if the class has been initialized
11610      yet.  This could screw things up in this function, so we deliberately
11611      ignore the leading int if we're in that situation.  */
11612   if (TYPE_USES_VIRTUAL_BASECLASSES (ctype))
11613     {
11614       my_friendly_assert (parmtypes
11615                           && TREE_VALUE (parmtypes) == integer_type_node,
11616                           980529);
11617       parmtypes = TREE_CHAIN (parmtypes);
11618       parmtype = TREE_VALUE (parmtypes);
11619     }
11620
11621   /* [class.copy]
11622
11623      A non-template constructor for class X is a copy constructor if
11624      its first parameter is of type X&, const X&, volatile X& or const
11625      volatile X&, and either there are no other parameters or else all
11626      other parameters have default arguments.  */
11627   if (TREE_CODE (parmtype) == REFERENCE_TYPE
11628       && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
11629       && (TREE_CHAIN (parmtypes) == NULL_TREE
11630           || TREE_CHAIN (parmtypes) == void_list_node
11631           || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11632       && !(DECL_TEMPLATE_INSTANTIATION (decl)
11633            && is_member_template (DECL_TI_TEMPLATE (decl))))
11634     {
11635       TYPE_HAS_INIT_REF (ctype) = 1;
11636       if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11637         TYPE_HAS_CONST_INIT_REF (ctype) = 1;
11638     }
11639   /* [class.copy]
11640
11641      A declaration of a constructor for a class X is ill-formed if its
11642      first parameter is of type (optionally cv-qualified) X and either
11643      there are no other parameters or else all other parameters have
11644      default arguments.  
11645
11646      We *don't* complain about member template instantiations that
11647      have this form, though; they can occur as we try to decide what
11648      constructor to use during overload resolution.  Since overload
11649      resolution will never prefer such a constructor to the
11650      non-template copy constructor (which is either explicitly or
11651      implicitly defined), there's no need to worry about their
11652      existence.  Theoretically, they should never even be
11653      instantiated, but that's hard to forestall.  */
11654   else if (TYPE_MAIN_VARIANT (parmtype) == ctype
11655            && (TREE_CHAIN (parmtypes) == NULL_TREE
11656                || TREE_CHAIN (parmtypes) == void_list_node
11657                || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11658            && !(DECL_TEMPLATE_INSTANTIATION (decl)
11659                 && is_member_template (DECL_TI_TEMPLATE (decl))))
11660     {
11661       cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
11662                 ctype, ctype);
11663       SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
11664       return 0;
11665     }
11666   else if (TREE_CODE (parmtype) == VOID_TYPE
11667            || TREE_PURPOSE (parmtypes) != NULL_TREE)
11668     TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
11669
11670   return 1;
11671 }
11672
11673 /* An operator with this name can be either unary or binary.  */
11674
11675 static int
11676 ambi_op_p (name)
11677      tree name;
11678 {
11679   return (name == ansi_opname [(int) INDIRECT_REF]
11680           || name == ansi_opname [(int) ADDR_EXPR]
11681           || name == ansi_opname [(int) NEGATE_EXPR]
11682           || name == ansi_opname[(int) POSTINCREMENT_EXPR]
11683           || name == ansi_opname[(int) POSTDECREMENT_EXPR]
11684           || name == ansi_opname [(int) CONVERT_EXPR]);
11685 }
11686
11687 /* An operator with this name can only be unary.  */
11688
11689 static int
11690 unary_op_p (name)
11691      tree name;
11692 {
11693   return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
11694           || name == ansi_opname [(int) BIT_NOT_EXPR]
11695           || name == ansi_opname [(int) COMPONENT_REF]
11696           || IDENTIFIER_TYPENAME_P (name));
11697 }
11698
11699 /* Do a little sanity-checking on how they declared their operator.  */
11700
11701 void
11702 grok_op_properties (decl, virtualp, friendp)
11703      tree decl;
11704      int virtualp, friendp;
11705 {
11706   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11707   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11708   tree name = DECL_NAME (decl);
11709
11710   if (current_class_type == NULL_TREE)
11711     friendp = 1;
11712
11713   if (! friendp)
11714     {
11715       /* [class.copy]
11716
11717          A user-declared copy assignment operator X::operator= is a
11718          non-static non-template member function of class X with
11719          exactly one parameter of type X, X&, const X&, volatile X& or
11720          const volatile X&.  */
11721       if (name == ansi_opname[(int) MODIFY_EXPR]
11722           && !(DECL_TEMPLATE_INSTANTIATION (decl)
11723                && is_member_template (DECL_TI_TEMPLATE (decl))))
11724         ;
11725       else if (name == ansi_opname[(int) CALL_EXPR])
11726         TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
11727       else if (name == ansi_opname[(int) ARRAY_REF])
11728         TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
11729       else if (name == ansi_opname[(int) COMPONENT_REF]
11730                || name == ansi_opname[(int) MEMBER_REF])
11731         TYPE_OVERLOADS_ARROW (current_class_type) = 1;
11732       else if (name == ansi_opname[(int) NEW_EXPR])
11733         TYPE_GETS_NEW (current_class_type) |= 1;
11734       else if (name == ansi_opname[(int) DELETE_EXPR])
11735         TYPE_GETS_DELETE (current_class_type) |= 1;
11736       else if (name == ansi_opname[(int) VEC_NEW_EXPR])
11737         TYPE_GETS_NEW (current_class_type) |= 2;
11738       else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
11739         TYPE_GETS_DELETE (current_class_type) |= 2;
11740     }
11741
11742   if (name == ansi_opname[(int) NEW_EXPR]
11743       || name == ansi_opname[(int) VEC_NEW_EXPR])
11744     {
11745       /* When the compiler encounters the definition of A::operator new, it
11746          doesn't look at the class declaration to find out if it's static.  */
11747       if (methodp)
11748         revert_static_member_fn (&decl, NULL, NULL);
11749      
11750       /* Take care of function decl if we had syntax errors.  */
11751       if (argtypes == NULL_TREE)
11752         TREE_TYPE (decl)
11753           = build_function_type (ptr_type_node,
11754                                  hash_tree_chain (integer_type_node,
11755                                                   void_list_node));
11756       else
11757         TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11758     }
11759   else if (name == ansi_opname[(int) DELETE_EXPR]
11760            || name == ansi_opname[(int) VEC_DELETE_EXPR])
11761     {
11762       if (methodp)
11763         revert_static_member_fn (&decl, NULL, NULL);
11764      
11765       if (argtypes == NULL_TREE)
11766         TREE_TYPE (decl)
11767           = build_function_type (void_type_node,
11768                                  hash_tree_chain (ptr_type_node,
11769                                                   void_list_node));
11770       else
11771         {
11772           TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11773
11774           if (! friendp && name == ansi_opname[(int) VEC_DELETE_EXPR]
11775               && (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
11776                   != void_list_node))
11777             TYPE_VEC_DELETE_TAKES_SIZE (current_class_type) = 1;
11778         }
11779     }
11780   else
11781     {
11782       /* An operator function must either be a non-static member function
11783          or have at least one parameter of a class, a reference to a class,
11784          an enumeration, or a reference to an enumeration.  13.4.0.6 */
11785       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11786         {
11787           if (IDENTIFIER_TYPENAME_P (name)
11788               || name == ansi_opname[(int) CALL_EXPR]
11789               || name == ansi_opname[(int) MODIFY_EXPR]
11790               || name == ansi_opname[(int) COMPONENT_REF]
11791               || name == ansi_opname[(int) ARRAY_REF])
11792             cp_error ("`%D' must be a nonstatic member function", decl);
11793           else
11794             {
11795               tree p = argtypes;
11796
11797               if (DECL_STATIC_FUNCTION_P (decl))
11798                 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
11799
11800               if (p)
11801                 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
11802                   {
11803                     tree arg = TREE_VALUE (p);
11804                     if (TREE_CODE (arg) == REFERENCE_TYPE)
11805                       arg = TREE_TYPE (arg);
11806
11807                     /* This lets bad template code slip through.  */
11808                     if (IS_AGGR_TYPE (arg)
11809                         || TREE_CODE (arg) == ENUMERAL_TYPE
11810                         || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
11811                         || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11812                       goto foundaggr;
11813                   }
11814               cp_error
11815                 ("`%D' must have an argument of class or enumerated type",
11816                  decl);
11817             foundaggr:
11818               ;
11819             }
11820         }
11821       
11822       if (name == ansi_opname[(int) CALL_EXPR])
11823         return;                 /* No restrictions on args. */
11824
11825       if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
11826         {
11827           tree t = TREE_TYPE (name);
11828           if (TREE_CODE (t) == VOID_TYPE)
11829             pedwarn ("void is not a valid type conversion operator");
11830           else if (! friendp)
11831             {
11832               int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11833               const char *what = 0;
11834               if (ref)
11835                 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11836
11837               if (t == current_class_type)
11838                 what = "the same type";
11839               /* Don't force t to be complete here.  */
11840               else if (IS_AGGR_TYPE (t)
11841                        && TYPE_SIZE (t)
11842                        && DERIVED_FROM_P (t, current_class_type))
11843                 what = "a base class";
11844
11845               if (what)
11846                 warning ("conversion to %s%s will never use a type conversion operator",
11847                          ref ? "a reference to " : "", what);
11848             }
11849         }
11850
11851       if (name == ansi_opname[(int) MODIFY_EXPR])
11852         {
11853           tree parmtype;
11854
11855           if (list_length (argtypes) != 3 && methodp)
11856             {
11857               cp_error ("`%D' must take exactly one argument", decl);
11858               return;
11859             }
11860           parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
11861
11862           if (copy_assignment_arg_p (parmtype, virtualp)
11863               && ! friendp)
11864             {
11865               TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
11866               if (TREE_CODE (parmtype) != REFERENCE_TYPE
11867                   || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11868                 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
11869             }
11870         }
11871       else if (name == ansi_opname[(int) COND_EXPR])
11872         {
11873           /* 13.4.0.3 */
11874           cp_error ("ANSI C++ prohibits overloading operator ?:");
11875         }         
11876       else if (ambi_op_p (name))
11877         {
11878           if (list_length (argtypes) == 2)
11879             /* prefix */;
11880           else if (list_length (argtypes) == 3)
11881             {
11882               if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
11883                    || name == ansi_opname[(int) POSTDECREMENT_EXPR])
11884                   && ! processing_template_decl
11885                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11886                 {
11887                   if (methodp)
11888                     cp_error ("postfix `%D' must take `int' as its argument",
11889                               decl);
11890                   else
11891                     cp_error
11892                       ("postfix `%D' must take `int' as its second argument",
11893                        decl);
11894                 }
11895             }
11896           else
11897             {
11898               if (methodp)
11899                 cp_error ("`%D' must take either zero or one argument", decl);
11900               else
11901                 cp_error ("`%D' must take either one or two arguments", decl);
11902             }
11903
11904           /* More Effective C++ rule 6.  */
11905           if (warn_ecpp
11906               && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
11907                   || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
11908             {
11909               tree arg = TREE_VALUE (argtypes);
11910               tree ret = TREE_TYPE (TREE_TYPE (decl));
11911               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11912                 arg = TREE_TYPE (arg);
11913               arg = TYPE_MAIN_VARIANT (arg);
11914               if (list_length (argtypes) == 2)
11915                 {
11916                   if (TREE_CODE (ret) != REFERENCE_TYPE
11917                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11918                                        arg))
11919                     cp_warning ("prefix `%D' should return `%T'", decl,
11920                                 build_reference_type (arg));
11921                 }
11922               else
11923                 {
11924                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
11925                     cp_warning ("postfix `%D' should return `%T'", decl, arg);
11926                 }
11927             }
11928         }
11929       else if (unary_op_p (name))
11930         {
11931           if (list_length (argtypes) != 2)
11932             {
11933               if (methodp)
11934                 cp_error ("`%D' must take `void'", decl);
11935               else
11936                 cp_error ("`%D' must take exactly one argument", decl);
11937             }
11938         }
11939       else /* if (binary_op_p (name)) */
11940         {
11941           if (list_length (argtypes) != 3)
11942             {
11943               if (methodp)
11944                 cp_error ("`%D' must take exactly one argument", decl);
11945               else
11946                 cp_error ("`%D' must take exactly two arguments", decl);
11947             }
11948
11949           /* More Effective C++ rule 7.  */
11950           if (warn_ecpp
11951               && (name == ansi_opname [TRUTH_ANDIF_EXPR]
11952                   || name == ansi_opname [TRUTH_ORIF_EXPR]
11953                   || name == ansi_opname [COMPOUND_EXPR]))
11954             cp_warning ("user-defined `%D' always evaluates both arguments",
11955                         decl);
11956         }
11957
11958       /* Effective C++ rule 23.  */
11959       if (warn_ecpp
11960           && list_length (argtypes) == 3
11961           && (name == ansi_opname [PLUS_EXPR]
11962               || name == ansi_opname [MINUS_EXPR]
11963               || name == ansi_opname [TRUNC_DIV_EXPR]
11964               || name == ansi_opname [MULT_EXPR])
11965           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
11966         cp_warning ("`%D' should return by value", decl);
11967
11968       /* 13.4.0.8 */
11969       if (argtypes)
11970         for (; argtypes != void_list_node ; argtypes = TREE_CHAIN (argtypes))
11971           if (TREE_PURPOSE (argtypes))
11972             {
11973               TREE_PURPOSE (argtypes) = NULL_TREE;
11974               if (name == ansi_opname[(int) POSTINCREMENT_EXPR]
11975                   || name == ansi_opname[(int) POSTDECREMENT_EXPR])
11976                 {
11977                   if (pedantic)
11978                     cp_pedwarn ("`%D' cannot have default arguments", decl);
11979                 }
11980               else
11981                 cp_error ("`%D' cannot have default arguments", decl);
11982             }
11983     }
11984 }
11985 \f
11986 static const char *
11987 tag_name (code)
11988      enum tag_types code;
11989 {
11990   switch (code)
11991     {
11992     case record_type:
11993       return "struct";
11994     case class_type:
11995       return "class";
11996     case union_type:
11997       return "union ";
11998     case enum_type:
11999       return "enum";
12000     default:
12001       my_friendly_abort (981122);
12002     }
12003 }
12004
12005 /* Get the struct, enum or union (CODE says which) with tag NAME.
12006    Define the tag as a forward-reference if it is not defined.
12007
12008    C++: If a class derivation is given, process it here, and report
12009    an error if multiple derivation declarations are not identical.
12010
12011    If this is a definition, come in through xref_tag and only look in
12012    the current frame for the name (since C++ allows new names in any
12013    scope.)  */
12014
12015 tree
12016 xref_tag (code_type_node, name, globalize)
12017      tree code_type_node;
12018      tree name;
12019      int globalize;
12020 {
12021   enum tag_types tag_code;
12022   enum tree_code code;
12023   int temp = 0;
12024   register tree ref, t;
12025   struct binding_level *b = current_binding_level;
12026   int got_type = 0;
12027   tree attributes = NULL_TREE;
12028   tree context = NULL_TREE;
12029
12030   /* If we are called from the parser, code_type_node will sometimes be a
12031      TREE_LIST.  This indicates that the user wrote
12032      "class __attribute__ ((foo)) bar".  Extract the attributes so we can
12033      use them later.  */
12034   if (TREE_CODE (code_type_node) == TREE_LIST)
12035     {
12036       attributes = TREE_PURPOSE (code_type_node);
12037       code_type_node = TREE_VALUE (code_type_node);
12038     }
12039
12040   tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12041   switch (tag_code)
12042     {
12043     case record_type:
12044     case class_type:
12045       code = RECORD_TYPE;
12046       break;
12047     case union_type:
12048       code = UNION_TYPE;
12049       break;
12050     case enum_type:
12051       code = ENUMERAL_TYPE;
12052       break;
12053     default:
12054       my_friendly_abort (18);
12055     }
12056
12057   /* If a cross reference is requested, look up the type
12058      already defined for this tag and return it.  */
12059   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
12060     {
12061       t = name;
12062       name = TYPE_IDENTIFIER (t);
12063       got_type = 1;
12064     }
12065   else
12066     t = IDENTIFIER_TYPE_VALUE (name);
12067
12068   if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
12069       && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
12070     t = NULL_TREE;
12071
12072   if (! globalize)
12073     {
12074       /* If we know we are defining this tag, only look it up in
12075          this scope and don't try to find it as a type.  */
12076       ref = lookup_tag (code, name, b, 1);
12077     }
12078   else
12079     {
12080       if (t)
12081         {
12082           /* [dcl.type.elab] If the identifier resolves to a
12083              typedef-name or a template type-parameter, the
12084              elaborated-type-specifier is ill-formed.  */
12085           if (t != TYPE_MAIN_VARIANT (t)
12086               || (CLASS_TYPE_P (t) && TYPE_WAS_ANONYMOUS (t)))
12087             cp_pedwarn ("using typedef-name `%D' after `%s'",
12088                         TYPE_NAME (t), tag_name (tag_code));
12089           else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
12090             cp_error ("using template type parameter `%T' after `%s'",
12091                       t, tag_name (tag_code));
12092
12093           ref = t;
12094         }
12095       else
12096         ref = lookup_tag (code, name, b, 0);
12097           
12098       if (! ref)
12099         {
12100           /* Try finding it as a type declaration.  If that wins,
12101              use it.  */ 
12102           ref = lookup_name (name, 1);
12103
12104           if (ref != NULL_TREE
12105               && processing_template_decl
12106               && DECL_CLASS_TEMPLATE_P (ref)
12107               && template_class_depth (current_class_type) == 0)
12108             /* Since GLOBALIZE is true, we're declaring a global
12109                template, so we want this type.  */
12110             ref = DECL_RESULT (ref);
12111
12112           if (ref && TREE_CODE (ref) == TYPE_DECL
12113               && TREE_CODE (TREE_TYPE (ref)) == code)
12114             ref = TREE_TYPE (ref);
12115           else
12116             ref = NULL_TREE;
12117         }
12118
12119       if (ref && current_class_type 
12120           && template_class_depth (current_class_type) 
12121           && PROCESSING_REAL_TEMPLATE_DECL_P ()) 
12122         {
12123           /* Since GLOBALIZE is non-zero, we are not looking at a
12124              definition of this tag.  Since, in addition, we are currently
12125              processing a (member) template declaration of a template
12126              class, we must be very careful; consider:
12127
12128                template <class X>
12129                struct S1
12130
12131                template <class U>
12132                struct S2
12133                { template <class V>
12134                friend struct S1; };
12135
12136              Here, the S2::S1 declaration should not be confused with the
12137              outer declaration.  In particular, the inner version should
12138              have a template parameter of level 2, not level 1.  This
12139              would be particularly important if the member declaration
12140              were instead:
12141
12142                template <class V = U> friend struct S1;
12143
12144              say, when we should tsubst into `U' when instantiating
12145              S2.  On the other hand, when presented with:
12146
12147                  template <class T>
12148                  struct S1 {
12149                    template <class U>
12150                    struct S2 {};
12151                    template <class U>
12152                    friend struct S2;
12153                  };
12154
12155               we must find the inner binding eventually.  We
12156               accomplish this by making sure that the new type we
12157               create to represent this declaration has the right
12158               TYPE_CONTEXT.  */
12159           context = TYPE_CONTEXT (ref);
12160           ref = NULL_TREE;
12161         }
12162     }
12163
12164   push_obstacks_nochange ();
12165
12166   if (! ref)
12167     {
12168       /* If no such tag is yet defined, create a forward-reference node
12169          and record it as the "definition".
12170          When a real declaration of this type is found,
12171          the forward-reference will be altered into a real type.  */
12172
12173       /* In C++, since these migrate into the global scope, we must
12174          build them on the permanent obstack.  */
12175
12176       temp = allocation_temporary_p ();
12177       if (temp)
12178         end_temporary_allocation ();
12179
12180       if (code == ENUMERAL_TYPE)
12181         {
12182           cp_error ("use of enum `%#D' without previous declaration", name);
12183
12184           ref = make_node (ENUMERAL_TYPE);
12185
12186           /* Give the type a default layout like unsigned int
12187              to avoid crashing if it does not get defined.  */
12188           TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12189           TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
12190           TREE_UNSIGNED (ref) = 1;
12191           TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12192           TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12193           TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12194
12195           /* Enable us to recognize when a type is created in class context.
12196              To do nested classes correctly, this should probably be cleared
12197              out when we leave this classes scope.  Currently this in only
12198              done in `start_enum'.  */
12199
12200           pushtag (name, ref, globalize);
12201         }
12202       else
12203         {
12204           struct binding_level *old_b = class_binding_level;
12205
12206           ref = make_lang_type (code);
12207           TYPE_CONTEXT (ref) = context;
12208
12209 #ifdef NONNESTED_CLASSES
12210           /* Class types don't nest the way enums do.  */
12211           class_binding_level = (struct binding_level *)0;
12212 #endif
12213           pushtag (name, ref, globalize);
12214           class_binding_level = old_b;
12215         }
12216     }
12217   else
12218     {
12219       /* If it no longer looks like a nested type, make sure it's
12220          in global scope.  
12221          If it is not an IDENTIFIER, this is not a declaration */
12222       if (b->namespace_p && !class_binding_level
12223           && TREE_CODE (name) == IDENTIFIER_NODE)
12224         {
12225           if (IDENTIFIER_NAMESPACE_VALUE (name) == NULL_TREE)
12226             SET_IDENTIFIER_NAMESPACE_VALUE (name, TYPE_NAME (ref));
12227         }
12228
12229       if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
12230         redeclare_class_template (ref, current_template_parms);
12231     }
12232
12233   /* Until the type is defined, tentatively accept whatever
12234      structure tag the user hands us.  */
12235   if (TYPE_SIZE (ref) == NULL_TREE
12236       && ref != current_class_type
12237       /* Have to check this, in case we have contradictory tag info.  */
12238       && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12239     {
12240       if (tag_code == class_type)
12241         CLASSTYPE_DECLARED_CLASS (ref) = 1;
12242       else if (tag_code == record_type)
12243         CLASSTYPE_DECLARED_CLASS (ref) = 0;
12244     }
12245
12246   pop_obstacks ();
12247
12248   TREE_TYPE (ref) = attributes;
12249
12250   return ref;
12251 }
12252
12253 tree
12254 xref_tag_from_type (old, id, globalize)
12255      tree old, id;
12256      int globalize;
12257 {
12258   tree code_type_node;
12259
12260   if (TREE_CODE (old) == RECORD_TYPE)
12261     code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12262                       ? class_type_node : record_type_node);
12263   else
12264     code_type_node = union_type_node;
12265
12266   if (id == NULL_TREE)
12267     id = TYPE_IDENTIFIER (old);
12268
12269   return xref_tag (code_type_node, id, globalize);
12270 }
12271
12272 /* REF is a type (named NAME), for which we have just seen some
12273    baseclasses.  BINFO is a list of those baseclasses; the
12274    TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
12275    the base-class.  CODE_TYPE_NODE indicates whether REF is a class,
12276    struct, or union.  */
12277
12278 void
12279 xref_basetypes (code_type_node, name, ref, binfo)
12280      tree code_type_node;
12281      tree name, ref;
12282      tree binfo;
12283 {
12284   /* In the declaration `A : X, Y, ... Z' we mark all the types
12285      (A, X, Y, ..., Z) so we can check for duplicates.  */
12286   tree binfos;
12287   tree base;
12288
12289   int i, len;
12290   enum tag_types tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12291
12292   if (tag_code == union_type)
12293     {
12294       cp_error ("derived union `%T' invalid", ref);
12295       return;
12296     }
12297
12298   len = list_length (binfo);
12299   push_obstacks (TYPE_OBSTACK (ref), TYPE_OBSTACK (ref));
12300
12301   /* First, make sure that any templates in base-classes are
12302      instantiated.  This ensures that if we call ourselves recursively
12303      we do not get confused about which classes are marked and which
12304      are not.  */
12305   for (base = binfo; base; base = TREE_CHAIN (base))
12306     complete_type (TREE_VALUE (base));
12307
12308   SET_CLASSTYPE_MARKED (ref);
12309   BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12310
12311   for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12312     {
12313       /* The base of a derived struct is public by default.  */
12314       int via_public
12315         = (TREE_PURPOSE (binfo) == access_public_node
12316            || TREE_PURPOSE (binfo) == access_public_virtual_node
12317            || (tag_code != class_type
12318                && (TREE_PURPOSE (binfo) == access_default_node
12319                    || TREE_PURPOSE (binfo) == access_default_virtual_node)));
12320       int via_protected
12321         = (TREE_PURPOSE (binfo) == access_protected_node
12322            || TREE_PURPOSE (binfo) == access_protected_virtual_node);
12323       int via_virtual
12324         = (TREE_PURPOSE (binfo) == access_private_virtual_node
12325            || TREE_PURPOSE (binfo) == access_protected_virtual_node
12326            || TREE_PURPOSE (binfo) == access_public_virtual_node
12327            || TREE_PURPOSE (binfo) == access_default_virtual_node);
12328       tree basetype = TREE_VALUE (binfo);
12329       tree base_binfo;
12330
12331       if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12332         basetype = TREE_TYPE (basetype);
12333       if (!basetype
12334           || (TREE_CODE (basetype) != RECORD_TYPE
12335               && TREE_CODE (basetype) != TYPENAME_TYPE
12336               && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
12337               && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
12338         {
12339           cp_error ("base type `%T' fails to be a struct or class type",
12340                     TREE_VALUE (binfo));
12341           continue;
12342         }
12343
12344       GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
12345
12346       /* This code replaces similar code in layout_basetypes.
12347          We put the complete_type first for implicit `typename'.  */
12348       if (TYPE_SIZE (basetype) == NULL_TREE
12349           && ! (current_template_parms && uses_template_parms (basetype)))
12350         {
12351           cp_error ("base class `%T' has incomplete type", basetype);
12352           continue;
12353         }
12354       else
12355         {
12356           if (CLASSTYPE_MARKED (basetype))
12357             {
12358               if (basetype == ref)
12359                 cp_error ("recursive type `%T' undefined", basetype);
12360               else
12361                 cp_error ("duplicate base type `%T' invalid", basetype);
12362               continue;
12363             }
12364
12365           if (TYPE_FOR_JAVA (basetype)
12366               && current_lang_stack == current_lang_base)
12367             TYPE_FOR_JAVA (ref) = 1;
12368
12369           /* Note that the BINFO records which describe individual
12370              inheritances are *not* shared in the lattice!  They
12371              cannot be shared because a given baseclass may be
12372              inherited with different `accessibility' by different
12373              derived classes.  (Each BINFO record describing an
12374              individual inheritance contains flags which say what
12375              the `accessibility' of that particular inheritance is.)  */
12376   
12377           base_binfo 
12378             = make_binfo (integer_zero_node, basetype,
12379                           CLASS_TYPE_P (basetype)
12380                           ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12381                           CLASS_TYPE_P (basetype)
12382                           ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
12383  
12384           TREE_VEC_ELT (binfos, i) = base_binfo;
12385           TREE_VIA_PUBLIC (base_binfo) = via_public;
12386           TREE_VIA_PROTECTED (base_binfo) = via_protected;
12387           TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12388           BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12389
12390           /* We need to unshare the binfos now so that lookups during class
12391              definition work.  */
12392           unshare_base_binfos (base_binfo);
12393
12394           SET_CLASSTYPE_MARKED (basetype);
12395
12396           /* We are free to modify these bits because they are meaningless
12397              at top level, and BASETYPE is a top-level type.  */
12398           if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
12399             {
12400               TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
12401               TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12402             }
12403
12404           if (CLASS_TYPE_P (basetype))
12405             {
12406               TYPE_GETS_NEW (ref) |= TYPE_GETS_NEW (basetype);
12407               TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12408             }
12409
12410           i += 1;
12411         }
12412     }
12413   if (i)
12414     TREE_VEC_LENGTH (binfos) = i;
12415   else
12416     BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
12417
12418   if (i > 1)
12419     TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
12420   else if (i == 1)
12421     {
12422       tree basetype = BINFO_TYPE (TREE_VEC_ELT (binfos, 0));
12423       
12424       if (CLASS_TYPE_P (basetype))
12425         TYPE_USES_MULTIPLE_INHERITANCE (ref)
12426           = TYPE_USES_MULTIPLE_INHERITANCE (basetype);
12427     }
12428
12429   if (TYPE_USES_MULTIPLE_INHERITANCE (ref))
12430     TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12431
12432   /* Unmark all the types.  */
12433   while (--i >= 0)
12434     CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
12435   CLEAR_CLASSTYPE_MARKED (ref);
12436
12437   /* Now that we know all the base-classes, set up the list of virtual
12438      bases.  */
12439   CLASSTYPE_VBASECLASSES (ref) = get_vbase_types (ref);
12440
12441   pop_obstacks ();
12442 }
12443   
12444 \f
12445 /* Begin compiling the definition of an enumeration type.
12446    NAME is its name (or null if anonymous).
12447    Returns the type object, as yet incomplete.
12448    Also records info about it so that build_enumerator
12449    may be used to declare the individual values as they are read.  */
12450
12451 tree
12452 start_enum (name)
12453      tree name;
12454 {
12455   register tree enumtype = NULL_TREE;
12456   struct binding_level *b = current_binding_level;
12457
12458   /* We are wasting space here and putting these on the permanent_obstack so
12459      that typeid(local enum) will work correctly. */
12460   push_obstacks (&permanent_obstack, &permanent_obstack);
12461
12462   /* If this is the real definition for a previous forward reference,
12463      fill in the contents in the same object that used to be the
12464      forward reference.  */
12465
12466   if (name != NULL_TREE)
12467     enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
12468
12469   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12470     {
12471       cp_error ("multiple definition of `%#T'", enumtype);
12472       cp_error_at ("previous definition here", enumtype);
12473     }
12474   else
12475     {
12476       enumtype = make_node (ENUMERAL_TYPE);
12477       pushtag (name, enumtype, 0);
12478     }
12479
12480   if (current_class_type)
12481     TREE_ADDRESSABLE (b->tags) = 1;
12482
12483   /* We don't copy this value because build_enumerator needs to do it.  */
12484   enum_next_value = integer_zero_node;
12485   enum_overflow = 0;
12486
12487   GNU_xref_decl (current_function_decl, enumtype);
12488   return enumtype;
12489 }
12490
12491 /* After processing and defining all the values of an enumeration type,
12492    install their decls in the enumeration type and finish it off.
12493    ENUMTYPE is the type object and VALUES a list of name-value pairs.
12494    Returns ENUMTYPE.  */
12495
12496 tree
12497 finish_enum (enumtype)
12498      tree enumtype;
12499 {
12500   register tree minnode = NULL_TREE, maxnode = NULL_TREE;
12501   /* Calculate the maximum value of any enumerator in this type.  */
12502
12503   tree values = TYPE_VALUES (enumtype);
12504   if (values)
12505     {
12506       tree pair;
12507
12508       for (pair = values; pair; pair = TREE_CHAIN (pair))
12509         {
12510           tree decl;
12511           tree value;
12512
12513           /* The TREE_VALUE is a CONST_DECL for this enumeration
12514              constant.  */
12515           decl = TREE_VALUE (pair);
12516
12517           /* The DECL_INITIAL will be NULL if we are processing a
12518              template declaration and this enumeration constant had no
12519              explicit initializer.  */
12520           value = DECL_INITIAL (decl);
12521           if (value && !processing_template_decl)
12522             {
12523               /* Set the TREE_TYPE for the VALUE as well.  That's so
12524                  that when we call decl_constant_value we get an
12525                  entity of the right type (but with the constant
12526                  value).  Since we shouldn't ever call
12527                  decl_constant_value on a template type, there's no
12528                  reason to do that when processing_template_decl.
12529                  And, if the expression is something like a
12530                  TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
12531                  wreak havoc on the intended type of the expression.  
12532
12533                  Of course, there's also no point in trying to compute
12534                  minimum or maximum values if we're in a template.  */
12535               TREE_TYPE (value) = enumtype;
12536
12537               if (!minnode)
12538                 minnode = maxnode = value;
12539               else if (tree_int_cst_lt (maxnode, value))
12540                 maxnode = value;
12541               else if (tree_int_cst_lt (value, minnode))
12542                 minnode = value;
12543             }
12544
12545           if (processing_template_decl) 
12546             /* If this is just a template, leave the CONST_DECL
12547                alone.  That way tsubst_copy will find CONST_DECLs for
12548                CONST_DECLs, and not INTEGER_CSTs.  */
12549             ;
12550           else
12551             /* In the list we're building up, we want the enumeration
12552                values, not the CONST_DECLs.  */
12553             TREE_VALUE (pair) = value;
12554         }
12555     }
12556   else
12557     maxnode = minnode = integer_zero_node;
12558
12559   TYPE_VALUES (enumtype) = nreverse (values);
12560
12561   if (processing_template_decl)
12562     {
12563       tree scope = current_scope ();
12564       if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12565         add_tree (build_min (TAG_DEFN, enumtype));
12566     }
12567   else
12568     {
12569       int unsignedp = tree_int_cst_sgn (minnode) >= 0;
12570       int lowprec = min_precision (minnode, unsignedp);
12571       int highprec = min_precision (maxnode, unsignedp);
12572       int precision = MAX (lowprec, highprec);
12573       tree tem;
12574
12575       TYPE_SIZE (enumtype) = NULL_TREE;
12576
12577       /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'.  */
12578
12579       TYPE_PRECISION (enumtype) = precision;
12580       if (unsignedp)
12581         fixup_unsigned_type (enumtype);
12582       else
12583         fixup_signed_type (enumtype);
12584
12585       if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
12586         /* Use the width of the narrowest normal C type which is wide
12587            enough.  */ 
12588         TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
12589                                                     (precision, 1));
12590       else
12591         TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
12592
12593       TYPE_SIZE (enumtype) = 0;
12594       layout_type (enumtype);
12595     
12596       /* Fix up all variant types of this enum type.  */
12597       for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
12598            tem = TYPE_NEXT_VARIANT (tem))
12599         {
12600           TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
12601           TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
12602           TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
12603           TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
12604           TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
12605           TYPE_MODE (tem) = TYPE_MODE (enumtype);
12606           TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
12607           TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
12608           TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
12609         }
12610
12611       /* Finish debugging output for this type.  */
12612       rest_of_type_compilation (enumtype, namespace_bindings_p ());
12613     }
12614
12615   /* In start_enum we pushed obstacks.  Here, we must pop them.  */
12616   pop_obstacks ();
12617
12618   return enumtype;
12619 }
12620
12621 /* Build and install a CONST_DECL for an enumeration constant of the
12622    enumeration type TYPE whose NAME and VALUE (if any) are provided.
12623    Assignment of sequential values by default is handled here.  */
12624
12625 tree
12626 build_enumerator (name, value, type)
12627      tree name;
12628      tree value;
12629      tree type;
12630 {
12631   tree decl, result;
12632   tree context;
12633
12634   /* Remove no-op casts from the value.  */
12635   if (value)
12636     STRIP_TYPE_NOPS (value);
12637
12638  if (! processing_template_decl)
12639    {
12640      /* Validate and default VALUE.  */
12641      if (value != NULL_TREE)
12642        {
12643          if (TREE_READONLY_DECL_P (value))
12644            value = decl_constant_value (value);
12645
12646          if (TREE_CODE (value) == INTEGER_CST)
12647            {
12648              value = default_conversion (value);
12649              constant_expression_warning (value);
12650            }
12651          else
12652            {
12653              cp_error ("enumerator value for `%D' not integer constant", name);
12654              value = NULL_TREE;
12655            }
12656        }
12657
12658      /* Default based on previous value.  */
12659      if (value == NULL_TREE && ! processing_template_decl)
12660        {
12661          value = enum_next_value;
12662          if (enum_overflow)
12663            cp_error ("overflow in enumeration values at `%D'", name);
12664        }
12665
12666      /* Remove no-op casts from the value.  */
12667      if (value)
12668        STRIP_TYPE_NOPS (value);
12669 #if 0
12670      /* To fix MAX_VAL enum consts. (bkoz)  */
12671      TREE_TYPE (value) = integer_type_node;
12672 #endif
12673    }
12674
12675  /* We always have to copy here; not all INTEGER_CSTs are unshared.
12676     Even in other cases, we will later (in finish_enum) be setting the
12677     type of VALUE.  */
12678  if (value != NULL_TREE)
12679    value = copy_node (value);
12680
12681   /* C++ associates enums with global, function, or class declarations.  */
12682  
12683  context = current_scope ();
12684  if (context && context == current_class_type)
12685    /* This enum declaration is local to the class.  */
12686    decl = build_lang_field_decl (CONST_DECL, name, type);
12687  else
12688    /* It's a global enum, or it's local to a function.  (Note local to
12689       a function could mean local to a class method.  */
12690    decl = build_decl (CONST_DECL, name, type);
12691
12692  DECL_CONTEXT (decl) = FROB_CONTEXT (context);
12693  DECL_INITIAL (decl) = value;
12694  TREE_READONLY (decl) = 1;
12695
12696  if (context && context == current_class_type)
12697    /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12698       on the TYPE_FIELDS list for `S'.  (That's so that you can say
12699       things like `S::i' later.)  */
12700    finish_member_declaration (decl);
12701  else
12702    {
12703      pushdecl (decl);
12704      GNU_xref_decl (current_function_decl, decl);
12705    }
12706
12707  if (! processing_template_decl)
12708    {
12709      /* Set basis for default for next value.  */
12710      enum_next_value = build_binary_op_nodefault (PLUS_EXPR, value,
12711                                                   integer_one_node, PLUS_EXPR);
12712      enum_overflow = tree_int_cst_lt (enum_next_value, value);
12713    }
12714
12715   result = saveable_tree_cons (name, decl, NULL_TREE);
12716   return result;
12717 }
12718
12719 \f
12720 static int function_depth;
12721
12722 /* Create the FUNCTION_DECL for a function definition.
12723    DECLSPECS and DECLARATOR are the parts of the declaration;
12724    they describe the function's name and the type it returns,
12725    but twisted together in a fashion that parallels the syntax of C.
12726
12727    If PRE_PARSED_P is non-zero then DECLARATOR is really the DECL for
12728    the function we are about to process; DECLSPECS are ignored.  For
12729    example, we set PRE_PARSED_P when processing the definition of
12730    inline function that was defined in-class; the definition is
12731    actually processed when the class is complete.  In this case,
12732    PRE_PARSED_P is 2.  We also set PRE_PARSED_P when instanting the
12733    body of a template function, and when constructing thunk functions
12734    and such; in these cases PRE_PARSED_P is 1.
12735    
12736    This function creates a binding context for the function body
12737    as well as setting up the FUNCTION_DECL in current_function_decl.
12738
12739    Returns 1 on success.  If the DECLARATOR is not suitable for a function
12740    (it defines a datum instead), we return 0, which tells
12741    yyparse to report a parse error.
12742
12743    For C++, we must first check whether that datum makes any sense.
12744    For example, "class A local_a(1,2);" means that variable local_a
12745    is an aggregate of type A, which should have a constructor
12746    applied to it with the argument list [1, 2].
12747
12748    @@ There is currently no way to retrieve the storage
12749    @@ allocated to FUNCTION (or all of its parms) if we return
12750    @@ something we had previously.  */
12751
12752 int
12753 start_function (declspecs, declarator, attrs, pre_parsed_p)
12754      tree declspecs, declarator, attrs;
12755      int pre_parsed_p;
12756 {
12757   tree decl1;
12758   tree ctype = NULL_TREE;
12759   tree fntype;
12760   tree restype;
12761   extern int have_extern_spec;
12762   extern int used_extern_spec;
12763   int doing_friend = 0;
12764
12765   /* Sanity check.  */
12766   my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
12767   my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
12768
12769   /* Assume, until we see it does.  */
12770   current_function_returns_value = 0;
12771   current_function_returns_null = 0;
12772   named_labels = 0;
12773   shadowed_labels = 0;
12774   current_function_assigns_this = 0;
12775   current_function_just_assigned_this = 0;
12776   current_function_parms_stored = 0;
12777   original_result_rtx = NULL_RTX;
12778   base_init_expr = NULL_TREE;
12779   current_base_init_list = NULL_TREE;
12780   current_member_init_list = NULL_TREE;
12781   ctor_label = dtor_label = NULL_TREE;
12782   static_labelno = 0;
12783   in_function_try_handler = 0;
12784
12785   clear_temp_name ();
12786
12787   /* This should only be done once on the top most decl.  */
12788   if (have_extern_spec && !used_extern_spec)
12789     {
12790       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
12791       used_extern_spec = 1;
12792     }
12793
12794   if (pre_parsed_p)
12795     {
12796       decl1 = declarator;
12797
12798 #if 0
12799       /* What was this testing for, exactly?  */
12800       if (! DECL_ARGUMENTS (decl1)
12801           && !DECL_STATIC_FUNCTION_P (decl1)
12802           && !DECL_ARTIFICIAL (decl1)
12803           && DECL_CLASS_SCOPE_P (decl1)
12804           && TYPE_IDENTIFIER (DECL_CONTEXT (decl1))
12805           && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (DECL_CONTEXT (decl1))))
12806         {
12807           tree binding = binding_for_name (DECL_NAME (decl1), 
12808                                            current_namespace);
12809           cp_error ("redeclaration of `%#D'", decl1);
12810           if (IDENTIFIER_CLASS_VALUE (DECL_NAME (decl1)))
12811             cp_error_at ("previous declaration here", IDENTIFIER_CLASS_VALUE (DECL_NAME (decl1)));
12812           else if (BINDING_VALUE (binding))
12813             cp_error_at ("previous declaration here", BINDING_VALUE (binding));
12814         }
12815 #endif
12816
12817       fntype = TREE_TYPE (decl1);
12818       if (TREE_CODE (fntype) == METHOD_TYPE)
12819         ctype = TYPE_METHOD_BASETYPE (fntype);
12820
12821       /* ANSI C++ June 5 1992 WP 11.4.5.  A friend function defined in a
12822          class is in the (lexical) scope of the class in which it is
12823          defined.  */
12824       if (!ctype && DECL_FRIEND_P (decl1))
12825         {
12826           ctype = DECL_CLASS_CONTEXT (decl1);
12827
12828           /* CTYPE could be null here if we're dealing with a template;
12829              for example, `inline friend float foo()' inside a template
12830              will have no CTYPE set.  */
12831           if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
12832             ctype = NULL_TREE;
12833           else
12834             doing_friend = 1;
12835         }
12836
12837       last_function_parms = DECL_ARGUMENTS (decl1);
12838       last_function_parm_tags = NULL_TREE;
12839     }
12840   else
12841     {
12842       decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
12843       /* If the declarator is not suitable for a function definition,
12844          cause a syntax error.  */
12845       if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
12846
12847       fntype = TREE_TYPE (decl1);
12848
12849       restype = TREE_TYPE (fntype);
12850       if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
12851         {
12852           cp_error ("semicolon missing after declaration of `%#T'", restype);
12853           shadow_tag (build_expr_list (NULL_TREE, restype));
12854           CLASSTYPE_GOT_SEMICOLON (restype) = 1;
12855           if (TREE_CODE (fntype) == FUNCTION_TYPE)
12856             fntype = build_function_type (integer_type_node,
12857                                           TYPE_ARG_TYPES (fntype));
12858           else
12859             fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
12860                                               integer_type_node,
12861                                               TYPE_ARG_TYPES (fntype));
12862           TREE_TYPE (decl1) = fntype;
12863         }
12864
12865       if (TREE_CODE (fntype) == METHOD_TYPE)
12866         ctype = TYPE_METHOD_BASETYPE (fntype);
12867       else if (DECL_MAIN_P (decl1))
12868         {
12869           /* If this doesn't return integer_type, complain.  */
12870           if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
12871             {
12872               if (pedantic || warn_return_type)
12873                 pedwarn ("return type for `main' changed to `int'");
12874               TREE_TYPE (decl1) = fntype = default_function_type;
12875             }
12876         }
12877     }
12878
12879   /* Warn if function was previously implicitly declared
12880      (but not if we warned then).  */
12881   if (! warn_implicit
12882       && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
12883     cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
12884
12885   if (!building_stmt_tree ())
12886     announce_function (decl1);
12887
12888   /* Set up current_class_type, and enter the scope of the class, if
12889      appropriate.  */
12890   if (ctype)
12891     push_nested_class (ctype, 1);
12892   else if (DECL_STATIC_FUNCTION_P (decl1))
12893     push_nested_class (DECL_CONTEXT (decl1), 2);
12894
12895   /* Now that we have entered the scope of the class, we must restore
12896      the bindings for any template parameters surrounding DECL1, if it
12897      is an inline member template.  (Order is important; consider the
12898      case where a template parameter has the same name as a field of
12899      the class.)  It is not until after this point that
12900      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
12901   if (pre_parsed_p == 2)
12902     maybe_begin_member_template_processing (decl1);
12903
12904   /* Effective C++ rule 15.  See also c_expand_return.  */
12905   if (warn_ecpp
12906       && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
12907       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
12908     cp_warning ("`operator=' should return a reference to `*this'");
12909
12910   /* Make the init_value nonzero so pushdecl knows this is not tentative.
12911      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
12912   DECL_INITIAL (decl1) = error_mark_node;
12913
12914 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
12915   SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
12916 #endif
12917   
12918   /* This function exists in static storage.
12919      (This does not mean `static' in the C sense!)  */
12920   TREE_STATIC (decl1) = 1;
12921
12922   /* We must call push_template_decl after current_class_type is set
12923      up.  (If we are processing inline definitions after exiting a
12924      class scope, current_class_type will be NULL_TREE until set above
12925      by push_nested_class.)  */
12926   if (processing_template_decl)
12927     decl1 = push_template_decl (decl1);
12928
12929   /* We are now in the scope of the function being defined.  */
12930   current_function_decl = decl1;
12931
12932   /* Save the parm names or decls from this function's declarator
12933      where store_parm_decls will find them.  */
12934   current_function_parms = last_function_parms;
12935   current_function_parm_tags = last_function_parm_tags;
12936
12937   if (! processing_template_decl)
12938     {
12939       /* In a function definition, arg types must be complete.  */
12940       require_complete_types_for_parms (current_function_parms);
12941
12942       if (TYPE_SIZE (complete_type (TREE_TYPE (fntype))) == NULL_TREE)
12943         {
12944           cp_error ("return-type `%#T' is an incomplete type",
12945                     TREE_TYPE (fntype));
12946
12947           /* Make it return void instead, but don't change the
12948              type of the DECL_RESULT, in case we have a named return value.  */
12949           if (ctype)
12950             TREE_TYPE (decl1)
12951               = build_cplus_method_type (build_type_variant (ctype,
12952                                                              TREE_READONLY (decl1),
12953                                                              TREE_SIDE_EFFECTS (decl1)),
12954                                          void_type_node,
12955                                          FUNCTION_ARG_CHAIN (decl1));
12956           else
12957             TREE_TYPE (decl1)
12958               = build_function_type (void_type_node,
12959                                      TYPE_ARG_TYPES (TREE_TYPE (decl1)));
12960           DECL_RESULT (decl1)
12961             = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (TREE_TYPE (fntype)));
12962           TREE_READONLY (DECL_RESULT (decl1))
12963             = CP_TYPE_CONST_P (TREE_TYPE (fntype));
12964           TREE_THIS_VOLATILE (DECL_RESULT (decl1))
12965             = CP_TYPE_VOLATILE_P (TREE_TYPE (fntype));
12966         }
12967
12968       abstract_virtuals_error (decl1, TREE_TYPE (fntype));
12969     }
12970
12971   /* Record the decl so that the function name is defined.
12972      If we already have a decl for this name, and it is a FUNCTION_DECL,
12973      use the old decl.  */
12974   if (!processing_template_decl && pre_parsed_p == 0)
12975     {
12976       /* A specialization is not used to guide overload resolution.  */
12977       if ((flag_guiding_decls 
12978            || !DECL_TEMPLATE_SPECIALIZATION (decl1))
12979           && ! DECL_FUNCTION_MEMBER_P (decl1))
12980         decl1 = pushdecl (decl1);
12981       else
12982         {
12983           /* We need to set the DECL_CONTEXT. */
12984           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
12985             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
12986           /* And make sure we have enough default args.  */
12987           check_default_args (decl1);
12988         }
12989       DECL_MAIN_VARIANT (decl1) = decl1;
12990       fntype = TREE_TYPE (decl1);
12991     }
12992
12993   current_function_decl = decl1;
12994
12995   if (DECL_INTERFACE_KNOWN (decl1))
12996     {
12997       tree ctx = hack_decl_function_context (decl1);
12998
12999       if (DECL_NOT_REALLY_EXTERN (decl1))
13000         DECL_EXTERNAL (decl1) = 0;
13001
13002       if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx) 
13003           && TREE_PUBLIC (ctx))
13004         /* This is a function in a local class in an extern inline
13005            function.  */
13006         comdat_linkage (decl1);
13007     }
13008   /* If this function belongs to an interface, it is public.
13009      If it belongs to someone else's interface, it is also external.
13010      This only affects inlines and template instantiations.  */
13011   else if (interface_unknown == 0
13012            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13013                || flag_alt_external_templates))
13014     {
13015       if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
13016           || processing_template_decl)
13017         {
13018           DECL_EXTERNAL (decl1)
13019             = (interface_only
13020                || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines
13021                    && !DECL_VINDEX (decl1)));
13022
13023           /* For WIN32 we also want to put these in linkonce sections.  */
13024           maybe_make_one_only (decl1);
13025         }
13026       else
13027         DECL_EXTERNAL (decl1) = 0;
13028       DECL_NOT_REALLY_EXTERN (decl1) = 0;
13029       DECL_INTERFACE_KNOWN (decl1) = 1;
13030     }
13031   else if (interface_unknown && interface_only
13032            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13033                || flag_alt_external_templates))
13034     {
13035       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13036          interface, we will have interface_only set but not
13037          interface_known.  In that case, we don't want to use the normal
13038          heuristics because someone will supply a #pragma implementation
13039          elsewhere, and deducing it here would produce a conflict.  */
13040       comdat_linkage (decl1);
13041       DECL_EXTERNAL (decl1) = 0;
13042       DECL_INTERFACE_KNOWN (decl1) = 1;
13043       DECL_DEFER_OUTPUT (decl1) = 1;
13044     }
13045   else
13046     {
13047       /* This is a definition, not a reference.
13048          So clear DECL_EXTERNAL.  */
13049       DECL_EXTERNAL (decl1) = 0;
13050
13051       if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
13052           && ! DECL_INTERFACE_KNOWN (decl1)
13053           /* Don't try to defer nested functions for now.  */
13054           && ! hack_decl_function_context (decl1))
13055         DECL_DEFER_OUTPUT (decl1) = 1;
13056       else
13057         DECL_INTERFACE_KNOWN (decl1) = 1;
13058     }
13059
13060   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1))
13061     {
13062       if (TREE_CODE (fntype) == METHOD_TYPE)
13063         TREE_TYPE (decl1) = fntype
13064           = build_function_type (TREE_TYPE (fntype),
13065                                  TREE_CHAIN (TYPE_ARG_TYPES (fntype)));
13066       current_function_parms = TREE_CHAIN (current_function_parms);
13067       DECL_ARGUMENTS (decl1) = current_function_parms;
13068       ctype = NULL_TREE;
13069     }
13070   restype = TREE_TYPE (fntype);
13071
13072   if (ctype)
13073     {
13074       /* If we're compiling a friend function, neither of the variables
13075          current_class_ptr nor current_class_type will have values.  */
13076       if (! doing_friend)
13077         {
13078           /* We know that this was set up by `grokclassfn'.
13079              We do not wait until `store_parm_decls', since evil
13080              parse errors may never get us to that point.  Here
13081              we keep the consistency between `current_class_type'
13082              and `current_class_ptr'.  */
13083           tree t = current_function_parms;
13084           int i;
13085               
13086           my_friendly_assert (t != NULL_TREE
13087                               && TREE_CODE (t) == PARM_DECL, 162);
13088           my_friendly_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE,
13089                               19990811);
13090           
13091           if (! hack_decl_function_context (decl1))
13092             temporary_allocation ();
13093           i = suspend_momentary ();
13094           
13095           /* Normally, build_indirect_ref returns current_class_ref
13096              whenever current_class_ptr is dereferenced.  This time,
13097              however, we want it to *create* current_class_ref, so we
13098              temporarily clear current_class_ptr to fool it.  */
13099           current_class_ptr = NULL_TREE;
13100           current_class_ref = build_indirect_ref (t, NULL_PTR);
13101           current_class_ptr = t;
13102           
13103           resume_momentary (i);
13104           if (! hack_decl_function_context (decl1))
13105             end_temporary_allocation ();
13106         }
13107     }
13108   else
13109     current_class_ptr = current_class_ref = NULL_TREE;
13110
13111   pushlevel (0);
13112   current_binding_level->parm_flag = 1;
13113
13114   if (attrs)
13115     cplus_decl_attributes (decl1, NULL_TREE, attrs);
13116   
13117   if (!building_stmt_tree ())
13118     {
13119       GNU_xref_function (decl1, current_function_parms);
13120       make_function_rtl (decl1);
13121     }
13122
13123   /* Promote the value to int before returning it.  */
13124   if (C_PROMOTING_INTEGER_TYPE_P (restype))
13125     restype = type_promotes_to (restype);
13126
13127   /* If this fcn was already referenced via a block-scope `extern' decl
13128      (or an implicit decl), propagate certain information about the usage.  */
13129   if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
13130     TREE_ADDRESSABLE (decl1) = 1;
13131
13132   if (DECL_RESULT (decl1) == NULL_TREE)
13133     {
13134       DECL_RESULT (decl1)
13135         = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13136       TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13137       TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
13138     }
13139
13140   /* Allocate further tree nodes temporarily during compilation
13141      of this function only.  Tiemann moved up here from bottom of fn.  */
13142   /* If this is a nested function, then we must continue to allocate RTL
13143      on the permanent obstack in case we need to inline it later.  */
13144   if (! hack_decl_function_context (decl1))
13145     temporary_allocation ();
13146
13147   if (building_stmt_tree ())
13148     begin_stmt_tree (decl1);
13149
13150   ++function_depth;
13151
13152   if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl1))
13153       && DECL_LANGUAGE (decl1) == lang_cplusplus)
13154     {
13155       dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13156       ctor_label = NULL_TREE;
13157     }
13158   else
13159     {
13160       dtor_label = NULL_TREE;
13161       if (DECL_CONSTRUCTOR_P (decl1))
13162         ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13163     }
13164
13165   return 1;
13166 }
13167 \f
13168 /* Called after store_parm_decls for a function-try-block.  We need to update
13169    last_parm_cleanup_insn so that the base initializers for a constructor
13170    are run within this block, not before it.  */
13171
13172 void
13173 expand_start_early_try_stmts ()
13174 {
13175   expand_start_try_stmts ();
13176   last_parm_cleanup_insn = get_last_insn ();
13177 }
13178
13179 /* Store the parameter declarations into the current function declaration.
13180    This is called after parsing the parameter declarations, before
13181    digesting the body of the function.
13182
13183    Also install to binding contour return value identifier, if any.  */
13184
13185 void
13186 store_parm_decls ()
13187 {
13188   register tree fndecl = current_function_decl;
13189   register tree parm;
13190   int parms_have_cleanups = 0;
13191   tree cleanups = NULL_TREE;
13192
13193   /* This is either a chain of PARM_DECLs (when a prototype is used).  */
13194   tree specparms = current_function_parms;
13195
13196   /* This is a list of types declared among parms in a prototype.  */
13197   tree parmtags = current_function_parm_tags;
13198
13199   /* This is a chain of any other decls that came in among the parm
13200      declarations.  If a parm is declared with  enum {foo, bar} x;
13201      then CONST_DECLs for foo and bar are put here.  */
13202   tree nonparms = NULL_TREE;
13203
13204   if (toplevel_bindings_p ())
13205     fatal ("parse errors have confused me too much");
13206
13207   /* Initialize RTL machinery.  */
13208   init_function_start (fndecl, input_filename, lineno);
13209
13210   /* Create a binding level for the parms.  */
13211   expand_start_bindings (0);
13212
13213   if (specparms != NULL_TREE)
13214     {
13215       /* This case is when the function was defined with an ANSI prototype.
13216          The parms already have decls, so we need not do anything here
13217          except record them as in effect
13218          and complain if any redundant old-style parm decls were written.  */
13219
13220       register tree next;
13221
13222       /* Must clear this because it might contain TYPE_DECLs declared
13223          at class level.  */
13224       storedecls (NULL_TREE);
13225
13226       for (parm = nreverse (specparms); parm; parm = next)
13227         {
13228           next = TREE_CHAIN (parm);
13229           if (TREE_CODE (parm) == PARM_DECL)
13230             {
13231               tree cleanup;
13232               if (DECL_NAME (parm) == NULL_TREE)
13233                 {
13234                   pushdecl (parm);
13235                 }
13236               else if (TREE_CODE (TREE_TYPE (parm)) == VOID_TYPE)
13237                 cp_error ("parameter `%D' declared void", parm);
13238               else
13239                 {
13240                   /* Now fill in DECL_REFERENCE_SLOT for any of the parm decls.
13241                      A parameter is assumed not to have any side effects.
13242                      If this should change for any reason, then this
13243                      will have to wrap the bashed reference type in a save_expr.
13244                      
13245                      Also, if the parameter type is declared to be an X
13246                      and there is an X(X&) constructor, we cannot lay it
13247                      into the stack (any more), so we make this parameter
13248                      look like it is really of reference type.  Functions
13249                      which pass parameters to this function will know to
13250                      create a temporary in their frame, and pass a reference
13251                      to that.  */
13252
13253                   if (TREE_CODE (TREE_TYPE (parm)) == REFERENCE_TYPE
13254                       && TYPE_SIZE (TREE_TYPE (TREE_TYPE (parm))))
13255                     SET_DECL_REFERENCE_SLOT (parm, convert_from_reference (parm));
13256
13257                   pushdecl (parm);
13258                 }
13259               if (! building_stmt_tree ()
13260                   && (cleanup = maybe_build_cleanup (parm), cleanup))
13261                 {
13262                   expand_decl (parm);
13263                   parms_have_cleanups = 1;
13264
13265                   /* Keep track of the cleanups.  */
13266                   cleanups = tree_cons (parm, cleanup, cleanups);
13267                 }
13268             }
13269           else
13270             {
13271               /* If we find an enum constant or a type tag,
13272                  put it aside for the moment.  */
13273               TREE_CHAIN (parm) = NULL_TREE;
13274               nonparms = chainon (nonparms, parm);
13275             }
13276         }
13277
13278       /* Get the decls in their original chain order
13279          and record in the function.  This is all and only the
13280          PARM_DECLs that were pushed into scope by the loop above.  */
13281       DECL_ARGUMENTS (fndecl) = getdecls ();
13282
13283       storetags (chainon (parmtags, gettags ()));
13284     }
13285   else
13286     DECL_ARGUMENTS (fndecl) = NULL_TREE;
13287
13288   /* Now store the final chain of decls for the arguments
13289      as the decl-chain of the current lexical scope.
13290      Put the enumerators in as well, at the front so that
13291      DECL_ARGUMENTS is not modified.  */
13292
13293   storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
13294
13295   /* Declare __FUNCTION__ and __PRETTY_FUNCTION__ for this function.  */
13296   declare_function_name ();
13297
13298   /* Initialize the RTL code for the function.  */
13299   DECL_SAVED_INSNS (fndecl) = 0;
13300   if (! building_stmt_tree ())
13301     expand_function_start (fndecl, parms_have_cleanups);
13302
13303   current_function_parms_stored = 1;
13304
13305   /* If this function is `main', emit a call to `__main'
13306      to run global initializers, etc.  */
13307   if (DECL_MAIN_P (fndecl) && !building_stmt_tree ())
13308     expand_main_function ();
13309
13310   /* Now that we have initialized the parms, we can start their
13311      cleanups.  We cannot do this before, since expand_decl_cleanup
13312      should not be called before the parm can be used.  */
13313   if (cleanups && !building_stmt_tree ())
13314     {
13315       for (cleanups = nreverse (cleanups); cleanups; cleanups = TREE_CHAIN (cleanups))
13316         {
13317           if (! expand_decl_cleanup (TREE_PURPOSE (cleanups), TREE_VALUE (cleanups)))
13318             cp_error ("parser lost in parsing declaration of `%D'",
13319                       TREE_PURPOSE (cleanups));
13320         }
13321     }
13322
13323   /* Create a binding contour which can be used to catch
13324      cleanup-generated temporaries.  Also, if the return value needs or
13325      has initialization, deal with that now.  */
13326   if (parms_have_cleanups)
13327     {
13328       pushlevel (0);
13329       if (!building_stmt_tree ())
13330         expand_start_bindings (0);
13331     }
13332
13333   if (! building_stmt_tree () && flag_exceptions)
13334     {
13335       /* Do the starting of the exception specifications, if we have any.  */
13336       if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13337         expand_start_eh_spec ();
13338     }
13339
13340   last_parm_cleanup_insn = get_last_insn ();
13341   last_dtor_insn = get_last_insn ();
13342 }
13343
13344 /* Bind a name and initialization to the return value of
13345    the current function.  */
13346
13347 void
13348 store_return_init (decl)
13349      tree decl;
13350 {
13351   /* If this named return value comes in a register, put it in a
13352      pseudo-register.  */
13353   if (DECL_REGISTER (decl))
13354     {
13355       original_result_rtx = DECL_RTL (decl);
13356       DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
13357     }
13358 }
13359
13360 \f
13361 /* Finish up a function declaration and compile that function
13362    all the way to assembler language output.  The free the storage
13363    for the function definition.
13364
13365    This is called after parsing the body of the function definition.
13366    LINENO is the current line number.
13367
13368    FLAGS is a bitwise or of the following values: 
13369      1 - CALL_POPLEVEL 
13370        An extra call to poplevel (and expand_end_bindings) must be
13371        made to take care of the binding contour for the base
13372        initializers.  This is only relevant for constructors.
13373      2 - INCLASS_INLINE
13374        We just finished processing the body of an in-class inline
13375        function definition.  (This processing will have taken place
13376        after the class definition is complete.)
13377
13378    NESTED is nonzero if we were in the middle of compiling another function
13379    when we started on this one.  */
13380
13381 void
13382 finish_function (lineno, flags, nested)
13383      int lineno;
13384      int flags;
13385      int nested;
13386 {
13387   register tree fndecl = current_function_decl;
13388   tree fntype, ctype = NULL_TREE;
13389   rtx fn_last_parm_insn, insns;
13390   /* Label to use if this function is supposed to return a value.  */
13391   tree no_return_label = NULL_TREE;
13392   tree decls = NULL_TREE;
13393   int call_poplevel = (flags & 1) != 0;
13394   int inclass_inline = (flags & 2) != 0;
13395   int expand_p;
13396
13397   /* When we get some parse errors, we can end up without a
13398      current_function_decl, so cope.  */
13399   if (fndecl == NULL_TREE)
13400     return;
13401
13402   if (function_depth > 1)
13403     nested = 1;
13404
13405   fntype = TREE_TYPE (fndecl);
13406
13407 /*  TREE_READONLY (fndecl) = 1;
13408     This caused &foo to be of type ptr-to-const-function
13409     which then got a warning when stored in a ptr-to-function variable.  */
13410
13411   /* This happens on strange parse errors.  */
13412   if (! current_function_parms_stored)
13413     {
13414       call_poplevel = 0;
13415       store_parm_decls ();
13416     }
13417
13418   if (building_stmt_tree ())
13419     {
13420       if (DECL_CONSTRUCTOR_P (fndecl) && call_poplevel)
13421         {
13422           decls = getdecls ();
13423           expand_end_bindings (decls, decls != NULL_TREE, 0);
13424           poplevel (decls != NULL_TREE, 0, 0);
13425         }
13426     }
13427   else
13428     {
13429       if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
13430         {
13431           tree ttype = target_type (fntype);
13432           tree parmdecl;
13433
13434           if (IS_AGGR_TYPE (ttype))
13435             /* Let debugger know it should output info for this type.  */
13436             note_debug_info_needed (ttype);
13437
13438           for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
13439             {
13440               ttype = target_type (TREE_TYPE (parmdecl));
13441               if (IS_AGGR_TYPE (ttype))
13442                 /* Let debugger know it should output info for this type.  */
13443                 note_debug_info_needed (ttype);
13444             }
13445         }
13446
13447       /* Clean house because we will need to reorder insns here.  */
13448       do_pending_stack_adjust ();
13449
13450       if (dtor_label)
13451         {
13452           tree binfo = TYPE_BINFO (current_class_type);
13453           tree cond = integer_one_node;
13454           tree exprstmt;
13455           tree in_charge_node = lookup_name (in_charge_identifier, 0);
13456           tree virtual_size;
13457           int ok_to_optimize_dtor = 0;
13458           int empty_dtor = get_last_insn () == last_dtor_insn;
13459
13460           if (current_function_assigns_this)
13461             cond = build (NE_EXPR, boolean_type_node,
13462                           current_class_ptr, integer_zero_node);
13463           else
13464             {
13465               int n_baseclasses = CLASSTYPE_N_BASECLASSES (current_class_type);
13466
13467               /* If this destructor is empty, then we don't need to check
13468                  whether `this' is NULL in some cases.  */
13469               if ((flag_this_is_variable & 1) == 0)
13470                 ok_to_optimize_dtor = 1;
13471               else if (empty_dtor)
13472                 ok_to_optimize_dtor
13473                   = (n_baseclasses == 0
13474                      || (n_baseclasses == 1
13475                          && TYPE_HAS_DESTRUCTOR (TYPE_BINFO_BASETYPE (current_class_type, 0))));
13476             }
13477
13478           /* These initializations might go inline.  Protect
13479              the binding level of the parms.  */
13480           pushlevel (0);
13481           expand_start_bindings (0);
13482
13483           if (current_function_assigns_this)
13484             {
13485               current_function_assigns_this = 0;
13486               current_function_just_assigned_this = 0;
13487             }
13488
13489           /* Generate the code to call destructor on base class.
13490              If this destructor belongs to a class with virtual
13491              functions, then set the virtual function table
13492              pointer to represent the type of our base class.  */
13493
13494           /* This side-effect makes call to `build_delete' generate the
13495              code we have to have at the end of this destructor.
13496              `build_delete' will set the flag again.  */
13497           TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
13498
13499           /* These are two cases where we cannot delegate deletion.  */
13500           if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)
13501               || TYPE_GETS_REG_DELETE (current_class_type))
13502             exprstmt = build_delete (current_class_type, current_class_ref, integer_zero_node,
13503                                      LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
13504           else
13505             exprstmt = build_delete (current_class_type, current_class_ref, in_charge_node,
13506                                      LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
13507
13508           /* If we did not assign to this, then `this' is non-zero at
13509              the end of a destructor.  As a special optimization, don't
13510              emit test if this is an empty destructor.  If it does nothing,
13511              it does nothing.  If it calls a base destructor, the base
13512              destructor will perform the test.  */
13513
13514           if (exprstmt != error_mark_node
13515               && (TREE_CODE (exprstmt) != NOP_EXPR
13516                   || TREE_OPERAND (exprstmt, 0) != integer_zero_node
13517                   || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
13518             {
13519               expand_label (dtor_label);
13520               if (cond != integer_one_node)
13521                 expand_start_cond (cond, 0);
13522               if (exprstmt != void_zero_node)
13523                 /* Don't call `expand_expr_stmt' if we're not going to do
13524                    anything, since -Wall will give a diagnostic.  */
13525                 expand_expr_stmt (exprstmt);
13526
13527               /* Run destructor on all virtual baseclasses.  */
13528               if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13529                 {
13530                   tree vbases = nreverse (copy_list (CLASSTYPE_VBASECLASSES (current_class_type)));
13531                   expand_start_cond (build (BIT_AND_EXPR, integer_type_node,
13532                                             in_charge_node, integer_two_node), 0);
13533                   while (vbases)
13534                     {
13535                       if (TYPE_NEEDS_DESTRUCTOR (BINFO_TYPE (vbases)))
13536                         {
13537                           tree vb = get_vbase
13538                             (BINFO_TYPE (vbases),
13539                              TYPE_BINFO (current_class_type));
13540                           expand_expr_stmt
13541                             (build_scoped_method_call
13542                              (current_class_ref, vb, dtor_identifier,
13543                               build_expr_list (NULL_TREE, integer_zero_node)));
13544                         }
13545                       vbases = TREE_CHAIN (vbases);
13546                     }
13547                   expand_end_cond ();
13548                 }
13549
13550               do_pending_stack_adjust ();
13551               if (cond != integer_one_node)
13552                 expand_end_cond ();
13553             }
13554
13555           virtual_size = c_sizeof (current_class_type);
13556
13557           /* At the end, call delete if that's what's requested.  */
13558
13559           /* FDIS sez: At the point of definition of a virtual destructor
13560                (including an implicit definition), non-placement operator
13561                delete shall be looked up in the scope of the destructor's
13562                class and if found shall be accessible and unambiguous.
13563
13564              This is somewhat unclear, but I take it to mean that if the
13565              class only defines placement deletes we don't do anything here.
13566              So we pass LOOKUP_SPECULATIVELY; delete_sanity will complain
13567              for us if they ever try to delete one of these.  */
13568
13569           if (TYPE_GETS_REG_DELETE (current_class_type)
13570               || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13571             exprstmt = build_op_delete_call
13572               (DELETE_EXPR, current_class_ptr, virtual_size,
13573                LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
13574           else
13575             exprstmt = NULL_TREE;
13576
13577           if (exprstmt)
13578             {
13579               cond = build (BIT_AND_EXPR, integer_type_node,
13580                             in_charge_node, integer_one_node);
13581               expand_start_cond (cond, 0);
13582               expand_expr_stmt (exprstmt);
13583               expand_end_cond ();
13584             }
13585
13586           /* End of destructor.  */
13587           expand_end_bindings (NULL_TREE, getdecls () != NULL_TREE, 0);
13588           poplevel (getdecls () != NULL_TREE, 0, 0);
13589
13590           /* Back to the top of destructor.  */
13591           /* Don't execute destructor code if `this' is NULL.  */
13592
13593           start_sequence ();
13594
13595           /* If the dtor is empty, and we know there is not possible way we
13596              could use any vtable entries, before they are possibly set by
13597              a base class dtor, we don't have to setup the vtables, as we
13598              know that any base class dtoring will set up any vtables it
13599              needs.  We avoid MI, because one base class dtor can do a
13600              virtual dispatch to an overridden function that would need to
13601              have a non-related vtable set up, we cannot avoid setting up
13602              vtables in that case.  We could change this to see if there is
13603              just one vtable.  */
13604           if (! empty_dtor || TYPE_USES_COMPLEX_INHERITANCE (current_class_type))
13605             {
13606               /* Make all virtual function table pointers in non-virtual base
13607                  classes point to CURRENT_CLASS_TYPE's virtual function
13608                  tables.  */
13609               expand_direct_vtbls_init (binfo, binfo, 1, 0, current_class_ptr);
13610
13611               if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13612                 expand_indirect_vtbls_init (binfo, current_class_ref, current_class_ptr);
13613             }
13614           
13615           if (! ok_to_optimize_dtor)
13616             {
13617               cond = build_binary_op (NE_EXPR,
13618                                       current_class_ptr, integer_zero_node);
13619               expand_start_cond (cond, 0);
13620             }
13621
13622           insns = get_insns ();
13623           end_sequence ();
13624
13625           fn_last_parm_insn = get_first_nonparm_insn ();
13626           if (fn_last_parm_insn == NULL_RTX)
13627             fn_last_parm_insn = get_last_insn ();
13628           else
13629             fn_last_parm_insn = previous_insn (fn_last_parm_insn);
13630
13631           emit_insns_after (insns, fn_last_parm_insn);
13632
13633           if (! ok_to_optimize_dtor)
13634             expand_end_cond ();
13635         }
13636       else if (current_function_assigns_this)
13637         {
13638           /* Does not need to call emit_base_init, because
13639              that is done (if needed) just after assignment to this
13640              is seen.  */
13641
13642           if (DECL_CONSTRUCTOR_P (current_function_decl))
13643             {
13644               end_protect_partials ();
13645               expand_label (ctor_label);
13646               ctor_label = NULL_TREE;
13647
13648               if (call_poplevel)
13649                 {
13650                   decls = getdecls ();
13651                   expand_end_bindings (decls, decls != NULL_TREE, 0);
13652                   poplevel (decls != NULL_TREE, 0, 0);
13653                 }
13654               /* c_expand_return knows to return 'this' from a constructor.  */
13655               c_expand_return (NULL_TREE);
13656             }
13657           else if (TREE_CODE (TREE_TYPE (DECL_RESULT (current_function_decl))) != VOID_TYPE
13658                    && return_label != NULL_RTX)
13659             no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13660
13661           current_function_assigns_this = 0;
13662           current_function_just_assigned_this = 0;
13663           base_init_expr = NULL_TREE;
13664         }
13665       else if (DECL_CONSTRUCTOR_P (fndecl))
13666         {
13667           tree cond = NULL_TREE, thenclause = NULL_TREE;
13668           /* Allow constructor for a type to get a new instance of the object
13669              using `build_new'.  */
13670           tree abstract_virtuals = CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type);
13671           CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = NULL_TREE;
13672
13673           if (flag_this_is_variable > 0)
13674             {
13675               cond = build_binary_op (EQ_EXPR,
13676                                       current_class_ptr, integer_zero_node);
13677               thenclause = build_modify_expr (current_class_ptr, NOP_EXPR,
13678                                               build_new (NULL_TREE, current_class_type, void_type_node, 0));
13679             }
13680
13681           CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = abstract_virtuals;
13682
13683           start_sequence ();
13684
13685           if (flag_this_is_variable > 0)
13686             {
13687               expand_start_cond (cond, 0);
13688               expand_expr_stmt (thenclause);
13689               expand_end_cond ();
13690             }
13691
13692           /* Emit insns from `emit_base_init' which sets up virtual
13693              function table pointer(s).  */
13694           if (base_init_expr)
13695             {
13696               expand_expr_stmt (base_init_expr);
13697               base_init_expr = NULL_TREE;
13698             }
13699
13700           insns = get_insns ();
13701           end_sequence ();
13702
13703           /* This is where the body of the constructor begins.  */
13704
13705           emit_insns_after (insns, last_parm_cleanup_insn);
13706
13707           end_protect_partials ();
13708
13709           /* This is where the body of the constructor ends.  */
13710           expand_label (ctor_label);
13711           ctor_label = NULL_TREE;
13712
13713           if (call_poplevel)
13714             {
13715               decls = getdecls ();
13716               expand_end_bindings (decls, decls != NULL_TREE, 0);
13717               poplevel (decls != NULL_TREE, 1, 0);
13718             }
13719
13720           /* c_expand_return knows to return 'this' from a constructor.  */
13721           c_expand_return (NULL_TREE);
13722
13723           current_function_assigns_this = 0;
13724           current_function_just_assigned_this = 0;
13725         }
13726       else if (DECL_MAIN_P (fndecl))
13727         {
13728           /* Make it so that `main' always returns 0 by default.  */
13729 #ifdef VMS
13730           c_expand_return (integer_one_node);
13731 #else
13732           c_expand_return (integer_zero_node);
13733 #endif
13734         }
13735       else if (return_label != NULL_RTX
13736                && current_function_return_value == NULL_TREE
13737                && ! DECL_NAME (DECL_RESULT (current_function_decl)))
13738         no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13739
13740       if (flag_exceptions)
13741         expand_exception_blocks ();
13742
13743       /* If this function is supposed to return a value, ensure that
13744          we do not fall into the cleanups by mistake.  The end of our
13745          function will look like this:
13746          
13747          user code (may have return stmt somewhere)
13748          goto no_return_label
13749          cleanup_label:
13750          cleanups
13751          goto return_label
13752          no_return_label:
13753          NOTE_INSN_FUNCTION_END
13754          return_label:
13755          things for return
13756          
13757          If the user omits a return stmt in the USER CODE section, we
13758          will have a control path which reaches NOTE_INSN_FUNCTION_END.
13759          Otherwise, we won't.  */
13760       if (no_return_label)
13761         {
13762           DECL_CONTEXT (no_return_label) = fndecl;
13763           DECL_INITIAL (no_return_label) = error_mark_node;
13764           DECL_SOURCE_FILE (no_return_label) = input_filename;
13765           DECL_SOURCE_LINE (no_return_label) = lineno;
13766           expand_goto (no_return_label);
13767         }
13768
13769       if (cleanup_label)
13770         {
13771           /* Remove the binding contour which is used
13772              to catch cleanup-generated temporaries.  */
13773           expand_end_bindings (0, 0, 0);
13774           poplevel (0, 0, 0);
13775
13776           /* Emit label at beginning of cleanup code for parameters.  */
13777           emit_label (cleanup_label);
13778         }
13779
13780       /* Get return value into register if that's where it's supposed to be.  */
13781       if (original_result_rtx)
13782         fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
13783
13784       /* Finish building code that will trigger warnings if users forget
13785          to make their functions return values.  */
13786       if (no_return_label || cleanup_label)
13787         emit_jump (return_label);
13788       if (no_return_label)
13789         {
13790           /* We don't need to call `expand_*_return' here because we
13791              don't need any cleanups here--this path of code is only
13792              for error checking purposes.  */
13793           expand_label (no_return_label);
13794         }
13795
13796       /* Generate rtl for function exit.  */
13797       expand_function_end (input_filename, lineno, 1);
13798     }
13799
13800   /* We have to save this value here in case
13801      maybe_end_member_template_processing decides to pop all the
13802      template parameters.  */
13803   expand_p = !building_stmt_tree ();
13804   
13805   /* If we're saving up tree structure, tie off the function now.  */
13806   if (!expand_p)
13807     finish_stmt_tree (fndecl);
13808
13809   /* This must come after expand_function_end because cleanups might
13810      have declarations (from inline functions) that need to go into
13811      this function's blocks.  */
13812   if (current_binding_level->parm_flag != 1)
13813     my_friendly_abort (122);
13814   poplevel (1, 0, 1);
13815
13816   /* If this is a in-class inline definition, we may have to pop the
13817      bindings for the template parameters that we added in
13818      maybe_begin_member_template_processing when start_function was
13819      called.  */
13820   if (inclass_inline)
13821     maybe_end_member_template_processing ();
13822
13823   /* Reset scope for C++: if we were in the scope of a class,
13824      then when we finish this function, we are not longer so.
13825      This cannot be done until we know for sure that no more
13826      class members will ever be referenced in this function
13827      (i.e., calls to destructors).  */
13828   if (current_class_name)
13829     {
13830       ctype = current_class_type;
13831       pop_nested_class ();
13832     }
13833
13834   /* Must mark the RESULT_DECL as being in this function.  */
13835   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
13836
13837   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
13838      to the FUNCTION_DECL node itself.  */
13839   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
13840
13841   if (expand_p)
13842     {
13843       int saved_flag_keep_inline_functions =
13844         flag_keep_inline_functions;
13845
13846       /* So we can tell if jump_optimize sets it to 1.  */
13847       can_reach_end = 0;
13848
13849       if (DECL_CONTEXT (fndecl) != NULL_TREE
13850           && hack_decl_function_context (fndecl))
13851         /* Trick rest_of_compilation into not deferring output of this
13852            function, even if it is inline, since the rtl_obstack for
13853            this function is the function_obstack of the enclosing
13854            function and will be deallocated when the enclosing
13855            function is gone.  See save_tree_status.  */
13856         flag_keep_inline_functions = 1;
13857
13858       /* Run the optimizers and output the assembler code for this
13859          function.  */
13860
13861       if (DECL_ARTIFICIAL (fndecl))
13862         {
13863           /* Do we really *want* to inline this synthesized method?  */
13864
13865           int save_fif = flag_inline_functions;
13866           flag_inline_functions = 1;
13867
13868           /* Turn off DECL_INLINE for the moment so function_cannot_inline_p
13869              will check our size.  */
13870           DECL_INLINE (fndecl) = 0;
13871
13872           rest_of_compilation (fndecl);
13873           flag_inline_functions = save_fif;
13874         }
13875       else
13876         rest_of_compilation (fndecl);
13877
13878       flag_keep_inline_functions = saved_flag_keep_inline_functions;
13879
13880       if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
13881         {
13882           /* Set DECL_EXTERNAL so that assemble_external will be called as
13883              necessary.  We'll clear it again in finish_file.  */
13884           if (! DECL_EXTERNAL (fndecl))
13885             DECL_NOT_REALLY_EXTERN (fndecl) = 1;
13886           DECL_EXTERNAL (fndecl) = 1;
13887           mark_inline_for_output (fndecl);
13888         }
13889
13890       if (ctype && TREE_ASM_WRITTEN (fndecl))
13891         note_debug_info_needed (ctype);
13892
13893       current_function_returns_null |= can_reach_end;
13894
13895       /* Since we don't normally go through c_expand_return for constructors,
13896          this normally gets the wrong value.
13897          Also, named return values have their return codes emitted after
13898          NOTE_INSN_FUNCTION_END, confusing jump.c.  */
13899       if (DECL_CONSTRUCTOR_P (fndecl)
13900           || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
13901         current_function_returns_null = 0;
13902
13903       if (TREE_THIS_VOLATILE (fndecl) && current_function_returns_null)
13904         cp_warning ("`noreturn' function `%D' does return", fndecl);
13905       else if ((warn_return_type || pedantic)
13906                && current_function_returns_null
13907                && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE)
13908         {
13909           /* If this function returns non-void and control can drop through,
13910              complain.  */
13911           cp_warning ("control reaches end of non-void function `%D'", fndecl);
13912         }
13913       /* With just -W, complain only if function returns both with
13914          and without a value.  */
13915       else if (extra_warnings
13916                && current_function_returns_value && current_function_returns_null)
13917         warning ("this function may return with or without a value");
13918     }
13919
13920   --function_depth;
13921
13922   /* Free all the tree nodes making up this function.  */
13923   /* Switch back to allocating nodes permanently
13924      until we start another function.  */
13925   if (! nested)
13926     permanent_allocation (1);
13927
13928   if (DECL_SAVED_INSNS (fndecl) == 0)
13929     {
13930       tree t;
13931
13932       /* Stop pointing to the local nodes about to be freed.  */
13933       /* But DECL_INITIAL must remain nonzero so we know this
13934          was an actual function definition.  */
13935       DECL_INITIAL (fndecl) = error_mark_node;
13936       for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
13937         DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
13938     }
13939
13940   if (DECL_STATIC_CONSTRUCTOR (fndecl))
13941     static_ctors = perm_tree_cons (NULL_TREE, fndecl, static_ctors);
13942   if (DECL_STATIC_DESTRUCTOR (fndecl))
13943     static_dtors = perm_tree_cons (NULL_TREE, fndecl, static_dtors);
13944
13945   if (! nested)
13946     {
13947       /* Let the error reporting routines know that we're outside a
13948          function.  For a nested function, this value is used in
13949          pop_cp_function_context and then reset via pop_function_context.  */
13950       current_function_decl = NULL_TREE;
13951     }
13952
13953   named_label_uses = NULL;
13954   current_class_ptr = NULL_TREE;
13955   current_class_ref = NULL_TREE;
13956 }
13957 \f
13958 /* Create the FUNCTION_DECL for a function definition.
13959    DECLSPECS and DECLARATOR are the parts of the declaration;
13960    they describe the return type and the name of the function,
13961    but twisted together in a fashion that parallels the syntax of C.
13962
13963    This function creates a binding context for the function body
13964    as well as setting up the FUNCTION_DECL in current_function_decl.
13965
13966    Returns a FUNCTION_DECL on success.
13967
13968    If the DECLARATOR is not suitable for a function (it defines a datum
13969    instead), we return 0, which tells yyparse to report a parse error.
13970
13971    May return void_type_node indicating that this method is actually
13972    a friend.  See grokfield for more details.
13973
13974    Came here with a `.pushlevel' .
13975
13976    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
13977    CHANGES TO CODE IN `grokfield'.  */
13978
13979 tree
13980 start_method (declspecs, declarator, attrlist)
13981      tree declarator, declspecs, attrlist;
13982 {
13983   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
13984                                 attrlist);
13985
13986   /* Something too ugly to handle.  */
13987   if (fndecl == NULL_TREE)
13988     return NULL_TREE;
13989
13990   /* Pass friends other than inline friend functions back.  */
13991   if (fndecl == void_type_node)
13992     return fndecl;
13993
13994   if (TREE_CODE (fndecl) != FUNCTION_DECL)
13995     /* Not a function, tell parser to report parse error.  */
13996     return NULL_TREE;
13997
13998   if (DECL_IN_AGGR_P (fndecl))
13999     {
14000       if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
14001         {
14002           if (DECL_CONTEXT (fndecl) 
14003               && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
14004             cp_error ("`%D' is already defined in class %s", fndecl,
14005                              TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
14006         }
14007       return void_type_node;
14008     }
14009
14010   check_template_shadow (fndecl);
14011
14012   DECL_THIS_INLINE (fndecl) = 1;
14013
14014   if (flag_default_inline)
14015     DECL_INLINE (fndecl) = 1;
14016
14017   /* We process method specializations in finish_struct_1.  */
14018   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
14019     fndecl = push_template_decl (fndecl);
14020
14021   /* We read in the parameters on the maybepermanent_obstack,
14022      but we won't be getting back to them until after we
14023      may have clobbered them.  So the call to preserve_data
14024      will keep them safe.  */
14025   preserve_data ();
14026
14027   if (! DECL_FRIEND_P (fndecl))
14028     {
14029       if (TREE_CHAIN (fndecl))
14030         {
14031           fndecl = copy_node (fndecl);
14032           TREE_CHAIN (fndecl) = NULL_TREE;
14033         }
14034
14035       if (DECL_CONSTRUCTOR_P (fndecl))
14036         {
14037           if (! grok_ctor_properties (current_class_type, fndecl))
14038             return void_type_node;
14039         }
14040       else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
14041         grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
14042     }
14043
14044   cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0, 0);
14045
14046   /* Make a place for the parms */
14047   pushlevel (0);
14048   current_binding_level->parm_flag = 1;
14049   
14050   DECL_IN_AGGR_P (fndecl) = 1;
14051   return fndecl;
14052 }
14053
14054 /* Go through the motions of finishing a function definition.
14055    We don't compile this method until after the whole class has
14056    been processed.
14057
14058    FINISH_METHOD must return something that looks as though it
14059    came from GROKFIELD (since we are defining a method, after all).
14060
14061    This is called after parsing the body of the function definition.
14062    STMTS is the chain of statements that makes up the function body.
14063
14064    DECL is the ..._DECL that `start_method' provided.  */
14065
14066 tree
14067 finish_method (decl)
14068      tree decl;
14069 {
14070   register tree fndecl = decl;
14071   tree old_initial;
14072
14073   register tree link;
14074
14075   if (decl == void_type_node)
14076     return decl;
14077
14078   old_initial = DECL_INITIAL (fndecl);
14079
14080   /* Undo the level for the parms (from start_method).
14081      This is like poplevel, but it causes nothing to be
14082      saved.  Saving information here confuses symbol-table
14083      output routines.  Besides, this information will
14084      be correctly output when this method is actually
14085      compiled.  */
14086
14087   /* Clear out the meanings of the local variables of this level;
14088      also record in each decl which block it belongs to.  */
14089
14090   for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
14091     {
14092       if (DECL_NAME (link) != NULL_TREE)
14093         pop_binding (DECL_NAME (link), link);
14094       my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
14095       DECL_CONTEXT (link) = NULL_TREE;
14096     }
14097
14098   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
14099                       (HOST_WIDE_INT) current_binding_level->level_chain,
14100                       current_binding_level->parm_flag,
14101                       current_binding_level->keep);
14102
14103   poplevel (0, 0, 0);
14104
14105   DECL_INITIAL (fndecl) = old_initial;
14106
14107   /* We used to check if the context of FNDECL was different from
14108      current_class_type as another way to get inside here.  This didn't work
14109      for String.cc in libg++.  */
14110   if (DECL_FRIEND_P (fndecl))
14111     {
14112       CLASSTYPE_INLINE_FRIENDS (current_class_type)
14113         = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
14114       decl = void_type_node;
14115     }
14116
14117   return decl;
14118 }
14119 \f
14120 /* Called when a new struct TYPE is defined.
14121    If this structure or union completes the type of any previous
14122    variable declaration, lay it out and output its rtl.  */
14123
14124 void
14125 hack_incomplete_structures (type)
14126      tree type;
14127 {
14128   tree *list;
14129
14130   if (current_binding_level->incomplete == NULL_TREE)
14131     return;
14132
14133   if (!type) /* Don't do this for class templates.  */
14134     return;
14135
14136   for (list = &current_binding_level->incomplete; *list; )
14137     {
14138       tree decl = TREE_VALUE (*list);
14139       if ((decl && TREE_TYPE (decl) == type)
14140           || (TREE_TYPE (decl)
14141               && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14142               && TREE_TYPE (TREE_TYPE (decl)) == type))
14143         {
14144           int toplevel = toplevel_bindings_p ();
14145           if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14146               && TREE_TYPE (TREE_TYPE (decl)) == type)
14147             layout_type (TREE_TYPE (decl));
14148           layout_decl (decl, 0);
14149           rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
14150           if (! toplevel)
14151             {
14152               tree cleanup;
14153               expand_decl (decl);
14154               cleanup = maybe_build_cleanup (decl);
14155               expand_decl_init (decl);
14156               if (! expand_decl_cleanup (decl, cleanup))
14157                 cp_error ("parser lost in parsing declaration of `%D'",
14158                           decl);
14159             }
14160           *list = TREE_CHAIN (*list);
14161         }
14162       else
14163         list = &TREE_CHAIN (*list);
14164     }
14165 }
14166
14167 /* If DECL is of a type which needs a cleanup, build that cleanup here.
14168    See build_delete for information about AUTO_DELETE.
14169
14170    Don't build these on the momentary obstack; they must live
14171    the life of the binding contour.  */
14172
14173 static tree
14174 maybe_build_cleanup_1 (decl, auto_delete)
14175      tree decl, auto_delete;
14176 {
14177   tree type = TREE_TYPE (decl);
14178   if (type != error_mark_node && TYPE_NEEDS_DESTRUCTOR (type))
14179     {
14180       int temp = 0, flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
14181       tree rval;
14182
14183       if (TREE_CODE (decl) != PARM_DECL)
14184         temp = suspend_momentary ();
14185
14186       if (TREE_CODE (type) == ARRAY_TYPE)
14187         rval = decl;
14188       else
14189         {
14190           mark_addressable (decl);
14191           rval = build_unary_op (ADDR_EXPR, decl, 0);
14192         }
14193
14194       /* Optimize for space over speed here.  */
14195       if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14196           || flag_expensive_optimizations)
14197         flags |= LOOKUP_NONVIRTUAL;
14198
14199       rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
14200
14201       if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14202           && ! TYPE_HAS_DESTRUCTOR (type))
14203         rval = build_compound_expr (expr_tree_cons (NULL_TREE, rval,
14204                                                build_expr_list (NULL_TREE, build_vbase_delete (type, decl))));
14205
14206       if (TREE_CODE (decl) != PARM_DECL)
14207         resume_momentary (temp);
14208
14209       return rval;
14210     }
14211   return 0;
14212 }
14213
14214 /* If DECL is of a type which needs a cleanup, build that cleanup
14215    here.  The cleanup does free the storage with a call to delete.  */
14216
14217 tree
14218 maybe_build_cleanup_and_delete (decl)
14219      tree decl;
14220 {
14221   return maybe_build_cleanup_1 (decl, integer_three_node);
14222 }
14223
14224 /* If DECL is of a type which needs a cleanup, build that cleanup
14225    here.  The cleanup does not free the storage with a call a delete.  */
14226
14227 tree
14228 maybe_build_cleanup (decl)
14229      tree decl;
14230 {
14231   return maybe_build_cleanup_1 (decl, integer_two_node);
14232 }
14233 \f
14234 /* Expand a C++ expression at the statement level.
14235    This is needed to ferret out nodes which have UNKNOWN_TYPE.
14236    The C++ type checker should get all of these out when
14237    expressions are combined with other, type-providing, expressions,
14238    leaving only orphan expressions, such as:
14239
14240    &class::bar;         / / takes its address, but does nothing with it.  */
14241
14242 void
14243 cplus_expand_expr_stmt (exp)
14244      tree exp;
14245 {
14246   /* Arrange for all temps to disappear.  */
14247   expand_start_target_temps ();
14248
14249   exp = require_complete_type_in_void (exp);
14250   
14251   if (TREE_CODE (exp) == FUNCTION_DECL)
14252     {
14253       cp_warning ("reference, not call, to function `%D'", exp);
14254       warning ("at this point in file");
14255     }
14256
14257 #if 0
14258   /* We should do this eventually, but right now this causes regex.o from
14259      libg++ to miscompile, and tString to core dump.  */
14260   exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
14261 #endif
14262
14263   /* Strip unused implicit INDIRECT_REFs of references.  */
14264   if (TREE_CODE (exp) == INDIRECT_REF
14265       && TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 0))) == REFERENCE_TYPE)
14266     exp = TREE_OPERAND (exp, 0);
14267
14268   /* If we don't do this, we end up down inside expand_expr
14269      trying to do TYPE_MODE on the ERROR_MARK, and really
14270      go outside the bounds of the type.  */
14271   if (exp != error_mark_node)
14272     expand_expr_stmt (break_out_cleanups (exp));
14273
14274   /* Clean up any pending cleanups.  This happens when a function call
14275      returns a cleanup-needing value that nobody uses.  */
14276   expand_end_target_temps ();
14277 }
14278
14279 /* When a stmt has been parsed, this function is called.  */
14280
14281 void
14282 finish_stmt ()
14283 {
14284   if (!current_function_assigns_this
14285       && current_function_just_assigned_this)
14286     {
14287       if (DECL_CONSTRUCTOR_P (current_function_decl))
14288         {
14289           /* Constructors must wait until we are out of control
14290              zones before calling base constructors.  */
14291           if (in_control_zone_p ())
14292             return;
14293           expand_expr_stmt (base_init_expr);
14294           check_base_init (current_class_type);
14295         }
14296       current_function_assigns_this = 1;
14297     }
14298
14299   /* Always assume this statement was not an expression statement.  If
14300      it actually was an expression statement, its our callers
14301      responsibility to fix this up.  */
14302   last_expr_type = NULL_TREE;
14303 }
14304
14305 /* Change a static member function definition into a FUNCTION_TYPE, instead
14306    of the METHOD_TYPE that we create when it's originally parsed.
14307
14308    WARNING: DO NOT pass &TREE_TYPE (decl) to FN or &TYPE_ARG_TYPES
14309    (TREE_TYPE (decl)) to ARGTYPES, as doing so will corrupt the types of
14310    other decls.  Either pass the addresses of local variables or NULL.  */
14311
14312 void
14313 revert_static_member_fn (decl, fn, argtypes)
14314      tree *decl, *fn, *argtypes;
14315 {
14316   tree tmp;
14317   tree function = fn ? *fn : TREE_TYPE (*decl);
14318   tree args = argtypes ? *argtypes : TYPE_ARG_TYPES (function);
14319
14320   if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args))) 
14321       != TYPE_UNQUALIFIED)
14322     cp_error ("static member function `%#D' declared with type qualifiers", 
14323               *decl);
14324
14325   args = TREE_CHAIN (args);
14326   tmp = build_function_type (TREE_TYPE (function), args);
14327   tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
14328   tmp = build_exception_variant (tmp,
14329                                  TYPE_RAISES_EXCEPTIONS (function));
14330   TREE_TYPE (*decl) = tmp;
14331   if (DECL_ARGUMENTS (*decl))
14332     DECL_ARGUMENTS (*decl) = TREE_CHAIN (DECL_ARGUMENTS (*decl));
14333   DECL_STATIC_FUNCTION_P (*decl) = 1;
14334   if (fn)
14335     *fn = tmp;
14336   if (argtypes)
14337     *argtypes = args;
14338 }
14339
14340 struct cp_function
14341 {
14342   int returns_value;
14343   int returns_null;
14344   int assigns_this;
14345   int just_assigned_this;
14346   int parms_stored;
14347   int temp_name_counter;
14348   tree named_labels;
14349   struct named_label_list *named_label_uses;
14350   tree shadowed_labels;
14351   tree ctor_label;
14352   tree dtor_label;
14353   rtx last_dtor_insn;
14354   rtx last_parm_cleanup_insn;
14355   tree base_init_list;
14356   tree member_init_list;
14357   tree base_init_expr;
14358   tree current_class_ptr;
14359   tree current_class_ref;
14360   rtx result_rtx;
14361   struct cp_function *next;
14362   struct binding_level *binding_level;
14363   int static_labelno;
14364   int in_function_try_handler;
14365   int expanding_p;
14366   tree last_tree;
14367   tree last_expr_type;
14368 };
14369
14370 static struct cp_function *cp_function_chain;
14371
14372 extern int temp_name_counter;
14373
14374 /* Save and reinitialize the variables
14375    used during compilation of a C++ function.  */
14376
14377 void
14378 push_cp_function_context (context)
14379      tree context;
14380 {
14381   struct cp_function *p
14382     = (struct cp_function *) xmalloc (sizeof (struct cp_function));
14383
14384   push_function_context_to (context);
14385
14386   p->next = cp_function_chain;
14387   cp_function_chain = p;
14388
14389   p->named_labels = named_labels;
14390   p->named_label_uses = named_label_uses;
14391   p->shadowed_labels = shadowed_labels;
14392   p->returns_value = current_function_returns_value;
14393   p->returns_null = current_function_returns_null;
14394   p->binding_level = current_binding_level;
14395   p->ctor_label = ctor_label;
14396   p->dtor_label = dtor_label;
14397   p->last_dtor_insn = last_dtor_insn;
14398   p->last_parm_cleanup_insn = last_parm_cleanup_insn;
14399   p->assigns_this = current_function_assigns_this;
14400   p->just_assigned_this = current_function_just_assigned_this;
14401   p->parms_stored = current_function_parms_stored;
14402   p->result_rtx = original_result_rtx;
14403   p->base_init_expr = base_init_expr;
14404   p->temp_name_counter = temp_name_counter;
14405   p->base_init_list = current_base_init_list;
14406   p->member_init_list = current_member_init_list;
14407   p->current_class_ptr = current_class_ptr;
14408   p->current_class_ref = current_class_ref;
14409   p->static_labelno = static_labelno;
14410   p->in_function_try_handler = in_function_try_handler;
14411   p->last_tree = last_tree;
14412   p->last_expr_type = last_expr_type;
14413   p->expanding_p = expanding_p;
14414   
14415   /* For now, we always assume we're expanding all the way to RTL
14416      unless we're explicitly doing otherwise.  */
14417   expanding_p = 1;
14418 }
14419
14420 /* Restore the variables used during compilation of a C++ function.  */
14421
14422 void
14423 pop_cp_function_context (context)
14424      tree context;
14425 {
14426   struct cp_function *p = cp_function_chain;
14427   tree link;
14428
14429   /* Bring back all the labels that were shadowed.  */
14430   for (link = shadowed_labels; link; link = TREE_CHAIN (link))
14431     if (DECL_NAME (TREE_VALUE (link)) != 0)
14432       SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link)),
14433                                   TREE_VALUE (link));
14434
14435   pop_function_context_from (context);
14436
14437   cp_function_chain = p->next;
14438
14439   named_labels = p->named_labels;
14440   named_label_uses = p->named_label_uses;
14441   shadowed_labels = p->shadowed_labels;
14442   current_function_returns_value = p->returns_value;
14443   current_function_returns_null = p->returns_null;
14444   current_binding_level = p->binding_level;
14445   ctor_label = p->ctor_label;
14446   dtor_label = p->dtor_label;
14447   last_dtor_insn = p->last_dtor_insn;
14448   last_parm_cleanup_insn = p->last_parm_cleanup_insn;
14449   current_function_assigns_this = p->assigns_this;
14450   current_function_just_assigned_this = p->just_assigned_this;
14451   current_function_parms_stored = p->parms_stored;
14452   original_result_rtx = p->result_rtx;
14453   base_init_expr = p->base_init_expr;
14454   temp_name_counter = p->temp_name_counter;
14455   current_base_init_list = p->base_init_list;
14456   current_member_init_list = p->member_init_list;
14457   current_class_ptr = p->current_class_ptr;
14458   current_class_ref = p->current_class_ref;
14459   static_labelno = p->static_labelno;
14460   in_function_try_handler = p->in_function_try_handler;
14461   last_tree = p->last_tree;
14462   last_expr_type = p->last_expr_type;
14463   expanding_p = p->expanding_p;
14464
14465   free (p);
14466 }
14467
14468 int
14469 in_function_p ()
14470 {
14471   return function_depth != 0;
14472 }