class.c (pushclass): Tweak handling of class-level bindings.
[platform/upstream/gcc.git] / gcc / cp / decl.c
1 /* Process declarations and variables for C compiler.
2    Copyright (C) 1988, 92-97, 1998 Free Software Foundation, Inc.
3    Contributed by Michael Tiemann (tiemann@cygnus.com)
4
5 This file is part of GNU CC.
6
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING.  If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA.  */
21
22
23 /* Process declarations and symbol lookup for C front end.
24    Also constructs types; the standard scalar types at initialization,
25    and structure, union, array and enum types when they are declared.  */
26
27 /* ??? not all decl nodes are given the most useful possible
28    line numbers.  For example, the CONST_DECLs for enum values.  */
29
30 #include "config.h"
31 #include "system.h"
32 #include "tree.h"
33 #include "rtl.h"
34 #include "flags.h"
35 #include "cp-tree.h"
36 #include "decl.h"
37 #include "lex.h"
38 #include <signal.h>
39 #include "obstack.h"
40 #include "defaults.h"
41 #include "output.h"
42 #include "except.h"
43 #include "toplev.h"
44 #include "../hash.h"
45
46 #define obstack_chunk_alloc xmalloc
47 #define obstack_chunk_free free
48
49 extern tree builtin_return_address_fndecl;
50
51 extern struct obstack permanent_obstack;
52 extern struct obstack* saveable_obstack;
53
54 extern int current_class_depth;
55
56 extern tree static_ctors, static_dtors;
57
58 extern int static_labelno;
59
60 extern tree current_namespace;
61 extern tree global_namespace;
62
63 extern void (*print_error_function) PROTO((char *));
64
65 /* Stack of places to restore the search obstack back to.  */
66    
67 /* Obstack used for remembering local class declarations (like
68    enums and static (const) members.  */
69 #include "stack.h"
70 struct obstack decl_obstack;
71 static struct stack_level *decl_stack;
72
73 #ifndef CHAR_TYPE_SIZE
74 #define CHAR_TYPE_SIZE BITS_PER_UNIT
75 #endif
76
77 #ifndef SHORT_TYPE_SIZE
78 #define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2))
79 #endif
80
81 #ifndef INT_TYPE_SIZE
82 #define INT_TYPE_SIZE BITS_PER_WORD
83 #endif
84
85 #ifndef LONG_TYPE_SIZE
86 #define LONG_TYPE_SIZE BITS_PER_WORD
87 #endif
88
89 #ifndef LONG_LONG_TYPE_SIZE
90 #define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
91 #endif
92
93 #ifndef WCHAR_UNSIGNED
94 #define WCHAR_UNSIGNED 0
95 #endif
96
97 #ifndef FLOAT_TYPE_SIZE
98 #define FLOAT_TYPE_SIZE BITS_PER_WORD
99 #endif
100
101 #ifndef DOUBLE_TYPE_SIZE
102 #define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
103 #endif
104
105 #ifndef LONG_DOUBLE_TYPE_SIZE
106 #define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
107 #endif
108
109 #ifndef BOOL_TYPE_SIZE
110 #ifdef SLOW_BYTE_ACCESS
111 #define BOOL_TYPE_SIZE ((SLOW_BYTE_ACCESS) ? (POINTER_SIZE) : (CHAR_TYPE_SIZE))
112 #else
113 #define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
114 #endif
115 #endif
116
117 /* We let tm.h override the types used here, to handle trivial differences
118    such as the choice of unsigned int or long unsigned int for size_t.
119    When machines start needing nontrivial differences in the size type,
120    it would be best to do something here to figure out automatically
121    from other information what type to use.  */
122
123 #ifndef SIZE_TYPE
124 #define SIZE_TYPE "long unsigned int"
125 #endif
126
127 #ifndef PTRDIFF_TYPE
128 #define PTRDIFF_TYPE "long int"
129 #endif
130
131 #ifndef WCHAR_TYPE
132 #define WCHAR_TYPE "int"
133 #endif
134
135 static tree grokparms                           PROTO((tree, int));
136 static tree lookup_nested_type                  PROTO((tree, tree));
137 static char *redeclaration_error_message        PROTO((tree, tree));
138 static tree push_overloaded_decl                PROTO((tree, int));
139
140 static struct stack_level *push_decl_level PROTO((struct stack_level *,
141                                                   struct obstack *));
142 static void push_binding_level PROTO((struct binding_level *, int,
143                                       int));
144 static void pop_binding_level PROTO((void));
145 static void suspend_binding_level PROTO((void));
146 static void resume_binding_level PROTO((struct binding_level *));
147 static struct binding_level *make_binding_level PROTO((void));
148 static int namespace_bindings_p PROTO((void));
149 static void declare_namespace_level PROTO((void));
150 static void signal_catch PROTO((int)) ATTRIBUTE_NORETURN;
151 static void storedecls PROTO((tree));
152 static void storetags PROTO((tree));
153 static void require_complete_types_for_parms PROTO((tree));
154 static void push_overloaded_decl_1 PROTO((tree));
155 static int ambi_op_p PROTO((tree));
156 static int unary_op_p PROTO((tree));
157 static tree store_bindings PROTO((tree, tree));
158 static tree lookup_tag_reverse PROTO((tree, tree));
159 static tree obscure_complex_init PROTO((tree, tree));
160 static tree maybe_build_cleanup_1 PROTO((tree, tree));
161 static tree lookup_name_real PROTO((tree, int, int, int));
162 static void warn_extern_redeclared_static PROTO((tree, tree));
163 static void grok_reference_init PROTO((tree, tree, tree));
164 static tree grokfndecl PROTO((tree, tree, tree, tree, int,
165                               enum overload_flags, tree,
166                               tree, tree, int, int, int, int, int, int, tree));
167 static tree grokvardecl PROTO((tree, tree, RID_BIT_TYPE *, int, int, tree));
168 static tree lookup_tag PROTO((enum tree_code, tree,
169                               struct binding_level *, int));
170 static void set_identifier_type_value_with_scope
171         PROTO((tree, tree, struct binding_level *));
172 static void record_builtin_type PROTO((enum rid, char *, tree));
173 static void record_unknown_type PROTO((tree, char *));
174 static int member_function_or_else PROTO((tree, tree, char *));
175 static void bad_specifiers PROTO((tree, char *, int, int, int, int,
176                                   int));
177 static void lang_print_error_function PROTO((char *));
178 static tree maybe_process_template_type_declaration PROTO((tree, int, struct binding_level*));
179 static void check_for_uninitialized_const_var PROTO((tree));
180 static unsigned long typename_hash PROTO((hash_table_key));
181 static boolean typename_compare PROTO((hash_table_key, hash_table_key));
182 static void push_binding PROTO((tree, tree, struct binding_level*));
183 static void add_binding PROTO((tree, tree));
184 static void pop_binding PROTO((tree, tree));
185
186 #if defined (DEBUG_CP_BINDING_LEVELS)
187 static void indent PROTO((void));
188 #endif
189
190 /* A node which has tree code ERROR_MARK, and whose type is itself.
191    All erroneous expressions are replaced with this node.  All functions
192    that accept nodes as arguments should avoid generating error messages
193    if this node is one of the arguments, since it is undesirable to get
194    multiple error messages from one error in the input.  */
195
196 tree error_mark_node;
197
198 /* Erroneous argument lists can use this *IFF* they do not modify it.  */
199 tree error_mark_list;
200
201 /* INTEGER_TYPE and REAL_TYPE nodes for the standard data types */
202
203 tree short_integer_type_node;
204 tree integer_type_node;
205 tree long_integer_type_node;
206 tree long_long_integer_type_node;
207
208 tree short_unsigned_type_node;
209 tree unsigned_type_node;
210 tree long_unsigned_type_node;
211 tree long_long_unsigned_type_node;
212
213 tree ptrdiff_type_node;
214
215 tree unsigned_char_type_node;
216 tree signed_char_type_node;
217 tree char_type_node;
218 tree wchar_type_node;
219 tree signed_wchar_type_node;
220 tree unsigned_wchar_type_node;
221
222 tree wchar_decl_node;
223
224 tree float_type_node;
225 tree double_type_node;
226 tree long_double_type_node;
227
228 tree complex_integer_type_node;
229 tree complex_float_type_node;
230 tree complex_double_type_node;
231 tree complex_long_double_type_node;
232
233 tree intQI_type_node;
234 tree intHI_type_node;
235 tree intSI_type_node;
236 tree intDI_type_node;
237 #if HOST_BITS_PER_WIDE_INT >= 64
238 tree intTI_type_node;
239 #endif
240
241 tree unsigned_intQI_type_node;
242 tree unsigned_intHI_type_node;
243 tree unsigned_intSI_type_node;
244 tree unsigned_intDI_type_node;
245 #if HOST_BITS_PER_WIDE_INT >= 64
246 tree unsigned_intTI_type_node;
247 #endif
248
249 tree java_byte_type_node;
250 tree java_short_type_node;
251 tree java_int_type_node;
252 tree java_long_type_node;
253 tree java_float_type_node;
254 tree java_double_type_node;
255 tree java_char_type_node;
256 tree java_boolean_type_node;
257
258 /* A VOID_TYPE node, and the same, packaged in a TREE_LIST.  */
259
260 tree void_type_node, void_list_node;
261 tree void_zero_node;
262
263 /* Nodes for types `void *' and `const void *'.  */
264
265 tree ptr_type_node;
266 tree const_ptr_type_node;
267
268 /* Nodes for types `char *' and `const char *'.  */
269
270 tree string_type_node, const_string_type_node;
271
272 /* Type `char[256]' or something like it.
273    Used when an array of char is needed and the size is irrelevant.  */
274
275 tree char_array_type_node;
276
277 /* Type `int[256]' or something like it.
278    Used when an array of int needed and the size is irrelevant.  */
279
280 tree int_array_type_node;
281
282 /* Type `wchar_t[256]' or something like it.
283    Used when a wide string literal is created.  */
284
285 tree wchar_array_type_node;
286
287 /* The bool data type, and constants */
288 tree boolean_type_node, boolean_true_node, boolean_false_node;
289
290 /* Type `int ()' -- used for implicit declaration of functions.  */
291
292 tree default_function_type;
293
294 /* Function types `double (double)' and `double (double, double)', etc.  */
295
296 static tree double_ftype_double, double_ftype_double_double;
297 static tree int_ftype_int, long_ftype_long;
298 static tree float_ftype_float;
299 static tree ldouble_ftype_ldouble;
300
301 /* Function type `int (const void *, const void *, size_t)' */
302 static tree int_ftype_cptr_cptr_sizet;
303
304 /* C++ extensions */
305 tree vtable_entry_type;
306 tree delta_type_node;
307 #if 0
308 /* Old rtti stuff.  */
309 tree __baselist_desc_type_node;
310 tree __i_desc_type_node, __m_desc_type_node;
311 tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
312 #endif
313 tree __t_desc_type_node;
314 #if 0
315 tree __tp_desc_type_node;
316 #endif
317 tree __access_mode_type_node;
318 tree __bltn_desc_type_node, __user_desc_type_node, __class_desc_type_node;
319 tree __ptr_desc_type_node, __attr_desc_type_node, __func_desc_type_node;
320 tree __ptmf_desc_type_node, __ptmd_desc_type_node;
321 #if 0
322 /* Not needed yet?  May be needed one day?  */
323 tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
324 tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
325 tree __ptmf_desc_array_type, __ptmd_desc_array_type;
326 #endif
327
328 /* Indicates that there is a type value in some namespace, although
329    that is not necessarily in scope at the moment. */
330
331 static tree global_type_node;
332
333 tree class_star_type_node;
334 tree class_type_node, record_type_node, union_type_node, enum_type_node;
335 tree unknown_type_node;
336 tree opaque_type_node, signature_type_node;
337 tree sigtable_entry_type;
338
339 /* Array type `vtable_entry_type[]' */
340 tree vtbl_type_node;
341 tree vtbl_ptr_type_node;
342
343 /* namespace std */
344 tree std_node;
345 int in_std = 0;
346
347 /* Expect only namespace names now. */
348 static int only_namespace_names;
349
350 /* In a destructor, the point at which all derived class destroying
351    has been done, just before any base class destroying will be done.  */
352
353 tree dtor_label;
354
355 /* In a destructor, the last insn emitted after the start of the
356    function and the parms.  */
357
358 static rtx last_dtor_insn;
359
360 /* In a constructor, the last insn emitted after the start of the
361    function and the parms, the exception specification and any
362    function-try-block.  The constructor initializers are emitted after
363    this insn.  */
364
365 static rtx last_parm_cleanup_insn;
366
367 /* In a constructor, the point at which we are ready to return
368    the pointer to the initialized object.  */
369
370 tree ctor_label;
371
372 /* A FUNCTION_DECL which can call `abort'.  Not necessarily the
373    one that the user will declare, but sufficient to be called
374    by routines that want to abort the program.  */
375
376 tree abort_fndecl;
377
378 /* A FUNCTION_DECL for the default `::operator delete'.  */
379
380 tree global_delete_fndecl;
381
382 extern rtx cleanup_label, return_label;
383
384 /* If original DECL_RESULT of current function was a register,
385    but due to being an addressable named return value, would up
386    on the stack, this variable holds the named return value's
387    original location.  */
388 static rtx original_result_rtx;
389
390 /* Sequence of insns which represents base initialization.  */
391 tree base_init_expr;
392
393 /* C++: Keep these around to reduce calls to `get_identifier'.
394    Identifiers for `this' in member functions and the auto-delete
395    parameter for destructors.  */
396 tree this_identifier, in_charge_identifier;
397 tree ctor_identifier, dtor_identifier;
398 /* Used in pointer to member functions, in vtables, and in sigtables.  */
399 tree pfn_identifier, index_identifier, delta_identifier, delta2_identifier;
400 tree pfn_or_delta2_identifier, tag_identifier;
401 tree vt_off_identifier;
402
403 struct named_label_list
404 {
405   struct binding_level *binding_level;
406   tree names_in_scope;
407   tree label_decl;
408   char *filename_o_goto;
409   int lineno_o_goto;
410   struct named_label_list *next;
411 };
412
413 /* A list (chain of TREE_LIST nodes) of named label uses.
414    The TREE_PURPOSE field is the list of variables defined
415    in the label's scope defined at the point of use.
416    The TREE_VALUE field is the LABEL_DECL used.
417    The TREE_TYPE field holds `current_binding_level' at the
418    point of the label's use.
419
420    BWAHAHAAHAHahhahahahaah.  No, no, no, said the little chicken.
421
422    Look at the pretty struct named_label_list. See the pretty struct
423    with the pretty named fields that describe what they do. See the
424    pretty lack of gratuitous casts. Notice the code got a lot cleaner.
425
426    Used only for jumps to as-yet undefined labels, since
427    jumps to defined labels can have their validity checked
428    by stmt.c.  */
429
430 static struct named_label_list *named_label_uses = NULL;
431
432 /* A list of objects which have constructors or destructors
433    which reside in the global scope.  The decl is stored in
434    the TREE_VALUE slot and the initializer is stored
435    in the TREE_PURPOSE slot.  */
436 tree static_aggregates;
437
438 /* -- end of C++ */
439
440 /* Two expressions that are constants with value zero.
441    The first is of type `int', the second of type `void *'.  */
442
443 tree integer_zero_node;
444 tree null_pointer_node;
445
446 /* The value for __null (NULL), namely, a zero of an integer type with
447    the same number of bits as a pointer.  */
448 tree null_node;
449
450 /* A node for the integer constants 1, 2, and 3.  */
451
452 tree integer_one_node, integer_two_node, integer_three_node;
453
454 /* While defining an enum type, this is 1 plus the last enumerator
455    constant value.  */
456
457 static tree enum_next_value;
458
459 /* Nonzero means that there was overflow computing enum_next_value.  */
460
461 static int enum_overflow;
462
463 /* Parsing a function declarator leaves a list of parameter names
464    or a chain or parameter decls here.  */
465
466 tree last_function_parms;
467
468 /* Parsing a function declarator leaves here a chain of structure
469    and enum types declared in the parmlist.  */
470
471 static tree last_function_parm_tags;
472
473 /* After parsing the declarator that starts a function definition,
474    `start_function' puts here the list of parameter names or chain of decls.
475    `store_parm_decls' finds it here.  */
476
477 static tree current_function_parms;
478
479 /* Similar, for last_function_parm_tags.  */
480 static tree current_function_parm_tags;
481
482 /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
483    that have names.  Here so we can clear out their names' definitions
484    at the end of the function.  */
485
486 static tree named_labels;
487
488 /* A list of LABEL_DECLs from outer contexts that are currently shadowed.  */
489
490 static tree shadowed_labels;
491
492 /* The FUNCTION_DECL for the function currently being compiled,
493    or 0 if between functions.  */
494 tree current_function_decl;
495
496 /* Set to 0 at beginning of a function definition, set to 1 if
497    a return statement that specifies a return value is seen.  */
498
499 int current_function_returns_value;
500
501 /* Set to 0 at beginning of a function definition, set to 1 if
502    a return statement with no argument is seen.  */
503
504 int current_function_returns_null;
505
506 /* Set to 0 at beginning of a function definition, and whenever
507    a label (case or named) is defined.  Set to value of expression
508    returned from function when that value can be transformed into
509    a named return value.  */
510
511 tree current_function_return_value;
512
513 /* Nonzero means give `double' the same size as `float'.  */
514
515 extern int flag_short_double;
516
517 /* Nonzero means don't recognize any builtin functions.  */
518
519 extern int flag_no_builtin;
520
521 /* Nonzero means don't recognize the non-ANSI builtin functions.
522    -ansi sets this.  */
523
524 extern int flag_no_nonansi_builtin;
525
526 /* Nonzero means enable obscure ANSI features and disable GNU extensions
527    that might cause ANSI-compliant code to be miscompiled.  */
528
529 extern int flag_ansi;
530
531 /* Nonzero if we want to support huge (> 2^(sizeof(short)*8-1) bytes)
532    objects.  */
533 extern int flag_huge_objects;
534
535 /* Nonzero if we want to conserve space in the .o files.  We do this
536    by putting uninitialized data and runtime initialized data into
537    .common instead of .data at the expense of not flagging multiple
538    definitions.  */
539 extern int flag_conserve_space;
540
541 /* Pointers to the base and current top of the language name stack.  */
542
543 extern tree *current_lang_base, *current_lang_stack;
544 \f
545 /* C and C++ flags are in decl2.c.  */
546
547 /* Set to 0 at beginning of a constructor, set to 1
548    if that function does an allocation before referencing its
549    instance variable.  */
550 static int current_function_assigns_this;
551 int current_function_just_assigned_this;
552
553 /* Set to 0 at beginning of a function.  Set non-zero when
554    store_parm_decls is called.  Don't call store_parm_decls
555    if this flag is non-zero!  */
556 int current_function_parms_stored;
557
558 /* Flag used when debugging spew.c */
559
560 extern int spew_debug;
561
562 /* This is a copy of the class_shadowed list of the previous class binding
563    contour when at global scope.  It's used to reset IDENTIFIER_CLASS_VALUEs
564    when entering another class scope (i.e. a cache miss).  */
565 extern tree previous_class_values;
566
567 /* A expression of value 0 with the same precision as a sizetype
568    node, but signed.  */
569 tree signed_size_zero_node;
570
571 /* The name of the anonymous namespace, throughout this translation
572    unit.  */
573 tree anonymous_namespace_name;
574
575 \f
576 /* Allocate a level of searching.  */
577
578 static
579 struct stack_level *
580 push_decl_level (stack, obstack)
581      struct stack_level *stack;
582      struct obstack *obstack;
583 {
584   struct stack_level tem;
585   tem.prev = stack;
586
587   return push_stack_level (obstack, (char *)&tem, sizeof (tem));
588 }
589 \f
590 /* For each binding contour we allocate a binding_level structure
591    which records the names defined in that contour.
592    Contours include:
593     0) the global one
594     1) one for each function definition,
595        where internal declarations of the parameters appear.
596     2) one for each compound statement,
597        to record its declarations.
598
599    The current meaning of a name can be found by searching the levels
600    from the current one out to the global one.
601
602    Off to the side, may be the class_binding_level.  This exists only
603    to catch class-local declarations.  It is otherwise nonexistent.
604
605    Also there may be binding levels that catch cleanups that must be
606    run when exceptions occur.  Thus, to see whether a name is bound in
607    the current scope, it is not enough to look in the
608    CURRENT_BINDING_LEVEL.  You should use lookup_name_current_level
609    instead.  */
610
611 /* Note that the information in the `names' component of the global contour
612    is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers.  */
613
614 struct binding_level
615   {
616     /* A chain of _DECL nodes for all variables, constants, functions,
617        and typedef types.  These are in the reverse of the order
618        supplied.  There may be OVERLOADs on this list, too, but they
619        are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD.  */
620     tree names;
621
622     /* A list of structure, union and enum definitions, for looking up
623        tag names.
624        It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
625        or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
626        or ENUMERAL_TYPE node.
627
628        C++: the TREE_VALUE nodes can be simple types for
629        component_bindings.  */
630     tree tags;
631
632     /* A list of USING_DECL nodes. */
633     tree usings;
634
635     /* A list of used namespaces. PURPOSE is the namespace,
636        VALUE the common ancestor with this binding_level's namespace. */
637     tree using_directives;
638
639     /* If this binding level is the binding level for a class, then
640        class_shadowed is a TREE_LIST.  The TREE_PURPOSE of each node
641        is the name of an entity bound in the class; the TREE_VALUE is
642        the IDENTIFIER_CLASS_VALUE before we entered the class.  Thus,
643        when leaving class scope, we can restore the
644        IDENTIFIER_CLASS_VALUE by walking this list.  The TREE_TYPE is
645        the DECL bound by this name in the class.  */
646     tree class_shadowed;
647
648     /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
649        is used for all binding levels.  */
650     tree type_shadowed;
651
652     /* For each level (except not the global one),
653        a chain of BLOCK nodes for all the levels
654        that were entered and exited one level down.  */
655     tree blocks;
656
657     /* The BLOCK node for this level, if one has been preallocated.
658        If 0, the BLOCK is allocated (if needed) when the level is popped.  */
659     tree this_block;
660
661     /* The binding level which this one is contained in (inherits from).  */
662     struct binding_level *level_chain;
663
664     /* List of decls in `names' that have incomplete
665        structure or union types.  */
666     tree incomplete;
667
668     /* List of VAR_DECLS saved from a previous for statement.
669        These would be dead in ANSI-conforming code, but might
670        be referenced in ARM-era code.  These are stored in a
671        TREE_LIST; the TREE_VALUE is the actual declaration.  */
672     tree dead_vars_from_for;
673
674     /* 1 for the level that holds the parameters of a function.
675        2 for the level that holds a class declaration.
676        3 for levels that hold parameter declarations.  */
677     unsigned parm_flag : 4;
678
679     /* 1 means make a BLOCK for this level regardless of all else.
680        2 for temporary binding contours created by the compiler.  */
681     unsigned keep : 3;
682
683     /* Nonzero if this level "doesn't exist" for tags.  */
684     unsigned tag_transparent : 1;
685
686     /* Nonzero if this level can safely have additional
687        cleanup-needing variables added to it.  */
688     unsigned more_cleanups_ok : 1;
689     unsigned have_cleanups : 1;
690
691     /* Nonzero if this level is for storing the decls for template
692        parameters and generic decls; these decls will be discarded and
693        replaced with a TEMPLATE_DECL.  */
694     unsigned pseudo_global : 1;
695
696     /* This is set for a namespace binding level.  */
697     unsigned namespace_p : 1;
698
699     /* True if this level is that of a for-statement where we need to
700        worry about ambiguous (ARM or ANSI) scope rules.  */
701     unsigned is_for_scope : 1;
702
703     /* Two bits left for this word.  */
704
705 #if defined(DEBUG_CP_BINDING_LEVELS)
706     /* Binding depth at which this level began.  */
707     unsigned binding_depth;
708 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
709   };
710
711 #define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
712   
713 /* The (non-class) binding level currently in effect.  */
714
715 static struct binding_level *current_binding_level;
716
717 /* The binding level of the current class, if any.  */
718
719 static struct binding_level *class_binding_level;
720
721 /* The current (class or non-class) binding level currently in effect.  */
722
723 #define inner_binding_level \
724   (class_binding_level ? class_binding_level : current_binding_level)
725
726 /* A chain of binding_level structures awaiting reuse.  */
727
728 static struct binding_level *free_binding_level;
729
730 /* The outermost binding level, for names of file scope.
731    This is created when the compiler is started and exists
732    through the entire run.  */
733
734 static struct binding_level *global_binding_level;
735
736 /* Binding level structures are initialized by copying this one.  */
737
738 static struct binding_level clear_binding_level;
739
740 /* Nonzero means unconditionally make a BLOCK for the next level pushed.  */
741
742 static int keep_next_level_flag;
743
744 #if defined(DEBUG_CP_BINDING_LEVELS)
745 static int binding_depth = 0;
746 static int is_class_level = 0;
747
748 static void
749 indent ()
750 {
751   register unsigned i;
752
753   for (i = 0; i < binding_depth*2; i++)
754     putc (' ', stderr);
755 }
756 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
757
758 static tree pushdecl_with_scope PROTO((tree, struct binding_level *));
759
760 static void
761 push_binding_level (newlevel, tag_transparent, keep)
762      struct binding_level *newlevel;
763      int tag_transparent, keep;
764 {
765   /* Add this level to the front of the chain (stack) of levels that
766      are active.  */
767   *newlevel = clear_binding_level;
768   if (class_binding_level)
769     {
770       newlevel->level_chain = class_binding_level;
771       class_binding_level = (struct binding_level *)0;
772     }
773   else
774     {
775       newlevel->level_chain = current_binding_level;
776     }
777   current_binding_level = newlevel;
778   newlevel->tag_transparent = tag_transparent;
779   newlevel->more_cleanups_ok = 1;
780   newlevel->keep = keep;
781 #if defined(DEBUG_CP_BINDING_LEVELS)
782   newlevel->binding_depth = binding_depth;
783   indent ();
784   fprintf (stderr, "push %s level 0x%08x line %d\n",
785            (is_class_level) ? "class" : "block", newlevel, lineno);
786   is_class_level = 0;
787   binding_depth++;
788 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
789 }
790
791 static void
792 pop_binding_level ()
793 {
794   if (class_binding_level)
795     current_binding_level = class_binding_level;
796
797   if (global_binding_level)
798     {
799       /* Cannot pop a level, if there are none left to pop.  */
800       if (current_binding_level == global_binding_level)
801         my_friendly_abort (123);
802     }
803   /* Pop the current level, and free the structure for reuse.  */
804 #if defined(DEBUG_CP_BINDING_LEVELS)
805   binding_depth--;
806   indent ();
807   fprintf (stderr, "pop  %s level 0x%08x line %d\n",
808           (is_class_level) ? "class" : "block",
809           current_binding_level, lineno);
810   if (is_class_level != (current_binding_level == class_binding_level))
811     {
812       indent ();
813       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
814     }
815   is_class_level = 0;
816 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
817   {
818     register struct binding_level *level = current_binding_level;
819     current_binding_level = current_binding_level->level_chain;
820     level->level_chain = free_binding_level;
821 #if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
822     if (level->binding_depth != binding_depth)
823       abort ();
824 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
825       free_binding_level = level;
826
827     class_binding_level = current_binding_level;
828     if (class_binding_level->parm_flag != 2)
829       class_binding_level = 0;
830     while (current_binding_level->parm_flag == 2)
831       current_binding_level = current_binding_level->level_chain;
832   }
833 }
834
835 static void
836 suspend_binding_level ()
837 {
838   if (class_binding_level)
839     current_binding_level = class_binding_level;
840
841   if (global_binding_level)
842     {
843       /* Cannot suspend a level, if there are none left to suspend.  */
844       if (current_binding_level == global_binding_level)
845         my_friendly_abort (123);
846     }
847   /* Suspend the current level.  */
848 #if defined(DEBUG_CP_BINDING_LEVELS)
849   binding_depth--;
850   indent ();
851   fprintf (stderr, "suspend  %s level 0x%08x line %d\n",
852           (is_class_level) ? "class" : "block",
853           current_binding_level, lineno);
854   if (is_class_level != (current_binding_level == class_binding_level))
855     {
856       indent ();
857       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
858     }
859   is_class_level = 0;
860 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
861   {
862     current_binding_level = current_binding_level->level_chain;
863     class_binding_level = current_binding_level;
864     if (class_binding_level->parm_flag != 2)
865       class_binding_level = 0;
866     while (current_binding_level->parm_flag == 2)
867       current_binding_level = current_binding_level->level_chain;
868   }
869 }
870
871 static void
872 resume_binding_level (b)
873      struct binding_level *b;
874 {
875   /* Resuming binding levels is meant only for namespaces,
876      and those cannot nest into classes. */
877   my_friendly_assert(!class_binding_level, 386);
878   /* Also, resuming a non-directly nested namespace is a no-no.  */
879   my_friendly_assert(b->level_chain == current_binding_level, 386);
880   current_binding_level = b;
881 #if defined(DEBUG_CP_BINDING_LEVELS)
882   b->binding_depth = binding_depth;
883   indent ();
884   fprintf (stderr, "resume %s level 0x%08x line %d\n",
885            (is_class_level) ? "class" : "block", b, lineno);
886   is_class_level = 0;
887   binding_depth++;
888 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
889 }
890 \f
891 /* Create a new `struct binding_level'.  */
892
893 static
894 struct binding_level *
895 make_binding_level ()
896 {
897   /* NOSTRICT */
898   return (struct binding_level *) xmalloc (sizeof (struct binding_level));
899 }
900
901 /* Nonzero if we are currently in the global binding level.  */
902
903 int
904 global_bindings_p ()
905 {
906   return current_binding_level == global_binding_level;
907 }
908
909 /* Nonzero if we are currently in a toplevel binding level.  This
910    means either the global binding level or a namespace in a toplevel
911    binding level.
912    Since there are no non-toplevel namespace levels, this really
913    means any namespace or pseudo-global level.  */
914
915 int
916 toplevel_bindings_p ()
917 {
918   return current_binding_level->namespace_p 
919     || current_binding_level->pseudo_global;
920 }
921
922 /* Nonzero if this is a namespace scope.  */
923
924 static int
925 namespace_bindings_p ()
926 {
927   return current_binding_level->namespace_p;
928 }
929
930 void
931 keep_next_level ()
932 {
933   keep_next_level_flag = 1;
934 }
935
936 /* Nonzero if the current level needs to have a BLOCK made.  */
937
938 int
939 kept_level_p ()
940 {
941   return (current_binding_level->blocks != NULL_TREE
942           || current_binding_level->keep
943           || current_binding_level->names != NULL_TREE
944           || (current_binding_level->tags != NULL_TREE
945               && !current_binding_level->tag_transparent));
946 }
947
948 /* Identify this binding level as a level of parameters.  */
949
950 void
951 declare_parm_level ()
952 {
953   current_binding_level->parm_flag = 1;
954 }
955
956 void
957 declare_pseudo_global_level ()
958 {
959   current_binding_level->pseudo_global = 1;
960 }
961
962 static void
963 declare_namespace_level ()
964 {
965   current_binding_level->namespace_p = 1;
966 }
967
968 int
969 pseudo_global_level_p ()
970 {
971   return current_binding_level->pseudo_global;
972 }
973
974 void
975 set_class_shadows (shadows)
976      tree shadows;
977 {
978   class_binding_level->class_shadowed = shadows;
979 }
980
981 /* Enter a new binding level.
982    If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
983    not for that of tags.  */
984
985 void
986 pushlevel (tag_transparent)
987      int tag_transparent;
988 {
989   register struct binding_level *newlevel = NULL_BINDING_LEVEL;
990
991   /* If this is the top level of a function,
992      just make sure that NAMED_LABELS is 0.
993      They should have been set to 0 at the end of the previous function.  */
994
995   if (current_binding_level == global_binding_level)
996     my_friendly_assert (named_labels == NULL_TREE, 134);
997
998   /* Reuse or create a struct for this binding level.  */
999
1000 #if defined(DEBUG_CP_BINDING_LEVELS)
1001   if (0)
1002 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1003   if (free_binding_level)
1004 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1005     {
1006       newlevel = free_binding_level;
1007       free_binding_level = free_binding_level->level_chain;
1008     }
1009   else
1010     {
1011       newlevel = make_binding_level ();
1012     }
1013
1014   push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
1015   GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
1016   keep_next_level_flag = 0;
1017 }
1018
1019 void
1020 note_level_for_for ()
1021 {
1022   current_binding_level->is_for_scope = 1;
1023 }
1024
1025 void
1026 pushlevel_temporary (tag_transparent)
1027      int tag_transparent;
1028 {
1029   pushlevel (tag_transparent);
1030   current_binding_level->keep = 2;
1031   clear_last_expr ();
1032
1033   /* Note we don't call push_momentary() here.  Otherwise, it would cause
1034      cleanups to be allocated on the momentary obstack, and they will be
1035      overwritten by the next statement.  */
1036
1037   expand_start_bindings (0);
1038 }
1039
1040 /* For a binding between a name and an entity at a block scope,
1041    this is the `struct binding_level' for the block.  */
1042 #define BINDING_LEVEL(NODE) \
1043    ((struct binding_level*) ((struct tree_binding*)NODE)->scope)
1044
1045 /* These are currently unused, but permanent, CPLUS_BINDING nodes.
1046    They are kept here because they are allocated from the permanent
1047    obstack and cannot be easily freed.  */
1048 static tree free_binding_nodes;
1049
1050 /* Make DECL the innermost binding for ID.  The LEVEL is the binding
1051    level at which this declaration is being bound.  */
1052
1053 static void
1054 push_binding (id, decl, level)
1055      tree id;
1056      tree decl;
1057      struct binding_level* level;
1058 {
1059   tree binding;
1060
1061   if (!free_binding_nodes)
1062     {
1063       /* There are no free nodes, so we must build one here.  */
1064       push_obstacks_nochange ();
1065       end_temporary_allocation ();
1066       binding = make_node (CPLUS_BINDING);
1067       pop_obstacks ();
1068     }
1069   else
1070     {
1071       /* There are nodes on the free list.  Grab the first one.  */
1072       binding = free_binding_nodes;
1073       
1074       /* And update the free list.  */
1075       free_binding_nodes = TREE_CHAIN (free_binding_nodes);
1076     }
1077
1078   /* Now, fill in the binding information.  */
1079   BINDING_VALUE (binding) = decl;
1080   BINDING_TYPE (binding) = NULL_TREE;
1081   BINDING_LEVEL (binding) = level;
1082   LOCAL_BINDING_P (binding) = (level != class_binding_level);
1083
1084   /* And put it on the front of the ilst of bindings for ID.  */
1085   TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
1086   IDENTIFIER_BINDING (id) = binding;
1087 }
1088
1089 /* ID is already bound in the current scope.  But, DECL is an
1090    additional binding for ID in the same scope.  This is the `struct
1091    stat' hack whereby a non-typedef class-name or enum-name can be
1092    bound at the same level as some other kind of entity.  It's the
1093    responsibility of the caller to check that inserting this name is
1094    legal here.  */
1095 static void
1096 add_binding (id, decl)
1097      tree id;
1098      tree decl;
1099 {
1100   tree binding = IDENTIFIER_BINDING (id);
1101
1102   if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
1103     /* The new name is the type name.  */
1104     BINDING_TYPE (binding) = decl;
1105   else 
1106     {
1107       /* The old name must be the type name.  It was placed in
1108          IDENTIFIER_VALUE because it was thought, at the point it
1109          was declared, to be the only entity with such a name.  */
1110       my_friendly_assert (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
1111                           && DECL_ARTIFICIAL (BINDING_VALUE (binding)),
1112                           0);
1113
1114       /* Move the type name into the type slot; it is now hidden by
1115          the new binding.  */
1116       BINDING_TYPE (binding) = BINDING_VALUE (binding);
1117       BINDING_VALUE (binding) = decl;
1118     }
1119 }
1120
1121 /* Bind DECL to ID in the current_binding_level.  */
1122
1123 void
1124 push_local_binding (id, decl)
1125      tree id;
1126      tree decl;
1127 {
1128   tree d = decl;
1129
1130   if (TREE_CODE (decl) == OVERLOAD)
1131     /* We must put the OVERLOAD into a TREE_LIST since the
1132        TREE_CHAIN of an OVERLOAD is already used.  */
1133     decl = build_tree_list (NULL_TREE, decl);
1134
1135   if (lookup_name_current_level (id))
1136     /* Supplement the existing binding.  */
1137     add_binding (id, decl);
1138   else
1139     /* Create a new binding.  */
1140     push_binding (id, d, current_binding_level);
1141
1142   /* And put DECL on the list of things declared by the current
1143      binding level.  */
1144   TREE_CHAIN (decl) = current_binding_level->names;
1145   current_binding_level->names = decl;
1146 }
1147
1148 /* Bind DECL to ID in the class_binding_level.  */
1149
1150 void
1151 push_class_binding (id, decl)
1152      tree id;
1153      tree decl;
1154 {
1155   if (IDENTIFIER_BINDING (id)
1156       && BINDING_LEVEL (IDENTIFIER_BINDING (id)) == class_binding_level)
1157     /* Supplement the existing binding.  */
1158     add_binding (id, decl);
1159   else
1160     /* Create a new binding.  */
1161     push_binding (id, decl, class_binding_level);
1162
1163   /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
1164      class-level declaration.  Note that we do not use DECL here
1165      because of the possibility of the `struct stat' hack; if DECL is
1166      a class-name or enum-name we might prefer a field-name, or some
1167      such.  */
1168   IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
1169 }
1170
1171 /* Remove the binding for DECL which should be the innermost binding
1172    for ID.  */
1173
1174 static void 
1175 pop_binding (id, decl) 
1176      tree id;
1177      tree decl;
1178 {
1179   tree binding;
1180     
1181   if (id == NULL_TREE)
1182     /* It's easiest to write the loops that call this function without
1183        checking whether or not the entities involved have names.  We
1184        get here for such an entity.  */
1185     return;
1186
1187   /* Get the innermost binding for ID.  */
1188   binding = IDENTIFIER_BINDING (id);
1189
1190   /* The name should be bound.  */
1191   my_friendly_assert (binding != NULL_TREE, 0);
1192
1193   /* The DECL will be either the ordinary binding or the type
1194      binding for this identifier.  Remove that binding.  */
1195   if (BINDING_VALUE (binding) == decl)
1196     BINDING_VALUE (binding) = NULL_TREE;
1197   else if (BINDING_TYPE (binding) == decl)
1198     BINDING_TYPE (binding) = NULL_TREE;
1199   else
1200     my_friendly_abort (0);
1201
1202   if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
1203     {
1204       /* We're completely done with the innermost binding for this
1205          identifier.  Unhook it from the list of bindings.  */
1206       IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
1207
1208       /* And place it on the free list.  */
1209       TREE_CHAIN (binding) = free_binding_nodes;
1210       free_binding_nodes = binding;
1211     }
1212 }
1213
1214 /* Exit a binding level.
1215    Pop the level off, and restore the state of the identifier-decl mappings
1216    that were in effect when this level was entered.
1217
1218    If KEEP == 1, this level had explicit declarations, so
1219    and create a "block" (a BLOCK node) for the level
1220    to record its declarations and subblocks for symbol table output.
1221
1222    If FUNCTIONBODY is nonzero, this level is the body of a function,
1223    so create a block as if KEEP were set and also clear out all
1224    label names.
1225
1226    If REVERSE is nonzero, reverse the order of decls before putting
1227    them into the BLOCK.  */
1228
1229 tree
1230 poplevel (keep, reverse, functionbody)
1231      int keep;
1232      int reverse;
1233      int functionbody;
1234 {
1235   register tree link;
1236   /* The chain of decls was accumulated in reverse order.
1237      Put it into forward order, just for cleanliness.  */
1238   tree decls;
1239   int tmp = functionbody;
1240   int real_functionbody = current_binding_level->keep == 2
1241     ? ((functionbody = 0), tmp) : functionbody;
1242   tree tags = functionbody >= 0 ? current_binding_level->tags : 0;
1243   tree subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1244   tree block = NULL_TREE;
1245   tree decl;
1246   int block_previously_created;
1247   int leaving_for_scope;
1248
1249   if (current_binding_level->parm_flag == 2
1250       || current_binding_level->class_shadowed)
1251     /* We should not be using poplevel to pop a class binding level.
1252        Use poplevel_class instead.  */
1253     my_friendly_abort (0);
1254
1255   /* We used to use KEEP == 2 to indicate that the new block should go
1256      at the beginning of the list of blocks at this binding level,
1257      rather than the end.  This hack is no longer used.  */
1258   my_friendly_assert (keep == 0 || keep == 1, 0);
1259
1260   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1261                       (HOST_WIDE_INT) current_binding_level->level_chain,
1262                       current_binding_level->parm_flag,
1263                       current_binding_level->keep);
1264
1265   if (current_binding_level->keep == 1)
1266     keep = 1;
1267
1268   /* Get the decls in the order they were written.
1269      Usually current_binding_level->names is in reverse order.
1270      But parameter decls were previously put in forward order.  */
1271
1272   if (reverse)
1273     current_binding_level->names
1274       = decls = nreverse (current_binding_level->names);
1275   else
1276     decls = current_binding_level->names;
1277
1278   /* Output any nested inline functions within this block
1279      if they weren't already output.  */
1280
1281   for (decl = decls; decl; decl = TREE_CHAIN (decl))
1282     if (TREE_CODE (decl) == FUNCTION_DECL
1283         && ! TREE_ASM_WRITTEN (decl)
1284         && DECL_INITIAL (decl) != NULL_TREE
1285         && TREE_ADDRESSABLE (decl)
1286         && decl_function_context (decl) == current_function_decl)
1287       {
1288         /* If this decl was copied from a file-scope decl
1289            on account of a block-scope extern decl,
1290            propagate TREE_ADDRESSABLE to the file-scope decl.  */
1291         if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1292           TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1293         else
1294           {
1295             push_function_context ();
1296             output_inline_function (decl);
1297             pop_function_context ();
1298           }
1299       }
1300
1301   /* If there were any declarations or structure tags in that level,
1302      or if this level is a function body,
1303      create a BLOCK to record them for the life of this function.  */
1304
1305   block = NULL_TREE;
1306   block_previously_created = (current_binding_level->this_block != NULL_TREE);
1307   if (block_previously_created)
1308     block = current_binding_level->this_block;
1309   else if (keep == 1 || functionbody)
1310     block = make_node (BLOCK);
1311   if (block != NULL_TREE)
1312     {
1313       if (block_previously_created)
1314         {
1315           if (decls || tags || subblocks)
1316             {
1317               if (BLOCK_VARS (block) || BLOCK_TYPE_TAGS (block))
1318                 warning ("internal compiler error: debugging info corrupted");
1319
1320               BLOCK_VARS (block) = decls;
1321               BLOCK_TYPE_TAGS (block) = tags;
1322
1323               /* We can have previous subblocks and new subblocks when
1324                  doing fixup_gotos with complex cleanups.  We chain the new
1325                  subblocks onto the end of any pre-existing subblocks.  */
1326               BLOCK_SUBBLOCKS (block) = chainon (BLOCK_SUBBLOCKS (block),
1327                                                  subblocks);
1328             }
1329           /* If we created the block earlier on, and we are just
1330              diddling it now, then it already should have a proper
1331              BLOCK_END_NOTE value associated with it.  */
1332         }
1333       else
1334         {
1335           BLOCK_VARS (block) = decls;
1336           BLOCK_TYPE_TAGS (block) = tags;
1337           BLOCK_SUBBLOCKS (block) = subblocks;
1338           /* Otherwise, for a new block, install a new BLOCK_END_NOTE
1339              value.  */ 
1340           remember_end_note (block);
1341         }
1342     }
1343
1344   /* In each subblock, record that this is its superior.  */
1345
1346   if (keep >= 0)
1347     for (link = subblocks; link; link = TREE_CHAIN (link))
1348       BLOCK_SUPERCONTEXT (link) = block;
1349
1350   /* We still support the old for-scope rules, whereby the variables
1351      in a for-init statement were in scope after the for-statement
1352      ended.  We only use the new rules in flag_new_for_scope is
1353      nonzero.  */
1354   leaving_for_scope 
1355     = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1356
1357   /* Remove declarations for all the DECLs in this level.  */
1358   for (link = decls; link; link = TREE_CHAIN (link))
1359     {
1360       if (leaving_for_scope && TREE_CODE (link) == VAR_DECL)
1361         {
1362           tree outer_binding 
1363             = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1364           tree ns_binding;
1365
1366           if (!outer_binding)
1367             ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
1368                                                    
1369           if (outer_binding 
1370               && (BINDING_LEVEL (outer_binding) 
1371                   == current_binding_level->level_chain))
1372             /* We have something like:
1373                
1374                  int i;
1375                  for (int i; ;);
1376                  
1377                and we are leaving the `for' scope.  There's no reason to
1378                keep the binding of the inner `i' in this case.  */
1379             pop_binding (DECL_NAME (link), link);
1380           else if ((outer_binding 
1381                     && (TREE_CODE (BINDING_VALUE (outer_binding)) 
1382                         == TYPE_DECL))
1383                    || (ns_binding 
1384                        && TREE_CODE (ns_binding) == TYPE_DECL))
1385             /* Here, we have something like:
1386
1387                  typedef int I;
1388
1389                  void f () {
1390                    for (int I; ;);
1391                  }
1392
1393                We must pop the for-scope binding so we know what's a
1394                type and what isn't.  */
1395             pop_binding (DECL_NAME (link), link);
1396           else
1397             {
1398               /* Mark this VAR_DECL as dead so that we can tell we left it
1399                  there only for backward compatibility.  */
1400               DECL_DEAD_FOR_LOCAL (link) = 1;
1401               
1402               /* Keep track of what should of have happenned when we
1403                  popped the binding.  */
1404               if (outer_binding && BINDING_VALUE (outer_binding))
1405                 DECL_SHADOWED_FOR_VAR (link) 
1406                   = BINDING_VALUE (outer_binding);
1407
1408               /* Add it to the list of dead variables in the next
1409                  outermost binding to that we can remove these when we
1410                  leave that binding.  */
1411               current_binding_level->level_chain->dead_vars_from_for
1412                 = tree_cons (NULL_TREE, link,
1413                              current_binding_level->level_chain->
1414                              dead_vars_from_for);
1415
1416               /* Although we don't pop the CPLUS_BINDING, we do clear
1417                  its BINDING_LEVEL since the level is going away now.  */
1418               BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1419                 = 0;
1420             }
1421         }
1422       else 
1423         {
1424           /* Remove the binding.  */
1425           if (TREE_CODE_CLASS (TREE_CODE (link)) == 'd')
1426             pop_binding (DECL_NAME (link), link);
1427           else if (TREE_CODE (link) == TREE_LIST)
1428             pop_binding (DECL_NAME (OVL_FUNCTION (TREE_VALUE (link))), 
1429                          TREE_VALUE (link));
1430           else 
1431             my_friendly_abort (0);
1432         }
1433     }
1434
1435   /* Remove declarations for any `for' variables from inner scopes
1436      that we kept around.  */
1437   for (link = current_binding_level->dead_vars_from_for;
1438        link; link = TREE_CHAIN (link))
1439     pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
1440
1441   /* Restore the IDENTIFIER_TYPE_VALUEs.  */
1442   for (link = current_binding_level->type_shadowed;
1443        link; link = TREE_CHAIN (link))
1444     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
1445   
1446   /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1447      list if a `using' declaration put them there.  The debugging
1448      back-ends won't understand OVERLOAD, so we remove them here.
1449      Because the BLOCK_VARS are (temporarily) shared with
1450      CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1451      popped all the bindings.  */
1452   if (block)
1453     {
1454       tree* d;
1455
1456       for (d = &BLOCK_VARS (block); 
1457            *d; 
1458            d = *d ? &TREE_CHAIN (*d) : d)
1459         if (TREE_CODE (*d) == TREE_LIST)
1460           *d = TREE_CHAIN (*d);
1461     }
1462
1463   /* If the level being exited is the top level of a function,
1464      check over all the labels.  */
1465
1466   if (functionbody)
1467     {
1468       /* If this is the top level block of a function,
1469          the vars are the function's parameters.
1470          Don't leave them in the BLOCK because they are
1471          found in the FUNCTION_DECL instead.  */
1472
1473       BLOCK_VARS (block) = 0;
1474
1475       /* Clear out the definitions of all label names,
1476          since their scopes end here.  */
1477
1478       for (link = named_labels; link; link = TREE_CHAIN (link))
1479         {
1480           register tree label = TREE_VALUE (link);
1481
1482           if (DECL_INITIAL (label) == NULL_TREE)
1483             {
1484               cp_error_at ("label `%D' used but not defined", label);
1485               /* Avoid crashing later.  */
1486               define_label (input_filename, 1, DECL_NAME (label));
1487             }
1488           else if (warn_unused && !TREE_USED (label))
1489             cp_warning_at ("label `%D' defined but not used", label);
1490           SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), NULL_TREE);
1491
1492           /* Put the labels into the "variables" of the
1493              top-level block, so debugger can see them.  */
1494           TREE_CHAIN (label) = BLOCK_VARS (block);
1495           BLOCK_VARS (block) = label;
1496         }
1497
1498       named_labels = NULL_TREE;
1499     }
1500
1501   /* Any uses of undefined labels now operate under constraints
1502      of next binding contour.  */
1503   {
1504     struct binding_level *level_chain;
1505     level_chain = current_binding_level->level_chain;
1506     if (level_chain)
1507       {
1508         struct named_label_list *labels;
1509         for (labels = named_label_uses; labels; labels = labels->next)
1510           if (labels->binding_level == current_binding_level)
1511             {
1512               labels->binding_level = level_chain;
1513               labels->names_in_scope = level_chain->names;
1514             }
1515       }
1516   }
1517
1518   tmp = current_binding_level->keep;
1519
1520   pop_binding_level ();
1521   if (functionbody)
1522     DECL_INITIAL (current_function_decl) = block;
1523   else if (block)
1524     {
1525       if (!block_previously_created)
1526         current_binding_level->blocks
1527           = chainon (current_binding_level->blocks, block);
1528     }
1529   /* If we did not make a block for the level just exited,
1530      any blocks made for inner levels
1531      (since they cannot be recorded as subblocks in that level)
1532      must be carried forward so they will later become subblocks
1533      of something else.  */
1534   else if (subblocks)
1535     current_binding_level->blocks
1536       = chainon (current_binding_level->blocks, subblocks);
1537
1538   /* Take care of compiler's internal binding structures.  */
1539   if (tmp == 2)
1540     {
1541       expand_end_bindings (getdecls (), keep, 1);
1542       /* Each and every BLOCK node created here in `poplevel' is important
1543          (e.g. for proper debugging information) so if we created one
1544          earlier, mark it as "used".  */
1545       if (block)
1546         TREE_USED (block) = 1;
1547       block = poplevel (keep, reverse, real_functionbody);
1548     }
1549
1550   /* Each and every BLOCK node created here in `poplevel' is important
1551      (e.g. for proper debugging information) so if we created one
1552      earlier, mark it as "used".  */
1553   if (block)
1554     TREE_USED (block) = 1;
1555   return block;
1556 }
1557
1558 /* Delete the node BLOCK from the current binding level.
1559    This is used for the block inside a stmt expr ({...})
1560    so that the block can be reinserted where appropriate.  */
1561
1562 void
1563 delete_block (block)
1564      tree block;
1565 {
1566   tree t;
1567   if (current_binding_level->blocks == block)
1568     current_binding_level->blocks = TREE_CHAIN (block);
1569   for (t = current_binding_level->blocks; t;)
1570     {
1571       if (TREE_CHAIN (t) == block)
1572         TREE_CHAIN (t) = TREE_CHAIN (block);
1573       else
1574         t = TREE_CHAIN (t);
1575     }
1576   TREE_CHAIN (block) = NULL_TREE;
1577   /* Clear TREE_USED which is always set by poplevel.
1578      The flag is set again if insert_block is called.  */
1579   TREE_USED (block) = 0;
1580 }
1581
1582 /* Insert BLOCK at the end of the list of subblocks of the
1583    current binding level.  This is used when a BIND_EXPR is expanded,
1584    to handle the BLOCK node inside the BIND_EXPR.  */
1585
1586 void
1587 insert_block (block)
1588      tree block;
1589 {
1590   TREE_USED (block) = 1;
1591   current_binding_level->blocks
1592     = chainon (current_binding_level->blocks, block);
1593 }
1594
1595 /* Set the BLOCK node for the innermost scope
1596    (the one we are currently in).  */
1597
1598 void
1599 set_block (block)
1600     register tree block;
1601 {
1602   current_binding_level->this_block = block;
1603 }
1604
1605 /* Do a pushlevel for class declarations.  */
1606
1607 void
1608 pushlevel_class ()
1609 {
1610   register struct binding_level *newlevel;
1611
1612   /* Reuse or create a struct for this binding level.  */
1613 #if defined(DEBUG_CP_BINDING_LEVELS)
1614   if (0)
1615 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1616   if (free_binding_level)
1617 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1618     {
1619       newlevel = free_binding_level;
1620       free_binding_level = free_binding_level->level_chain;
1621     }
1622   else
1623     newlevel = make_binding_level ();
1624
1625 #if defined(DEBUG_CP_BINDING_LEVELS)
1626   is_class_level = 1;
1627 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1628
1629   push_binding_level (newlevel, 0, 0);
1630
1631   decl_stack = push_decl_level (decl_stack, &decl_obstack);
1632   class_binding_level = current_binding_level;
1633   class_binding_level->parm_flag = 2;
1634   /* We have just pushed into a new binding level.  Now, fake out the rest
1635      of the compiler.  Set the `current_binding_level' back to point to
1636      the most closely containing non-class binding level.  */
1637   do
1638     {
1639       current_binding_level = current_binding_level->level_chain;
1640     }
1641   while (current_binding_level->parm_flag == 2);
1642 }
1643
1644 /* ...and a poplevel for class declarations.  FORCE is used to force
1645    clearing out of CLASS_VALUEs after a class definition.  */
1646
1647 tree
1648 poplevel_class (force)
1649      int force;
1650 {
1651   register struct binding_level *level = class_binding_level;
1652   tree block = NULL_TREE;
1653   tree shadowed;
1654
1655   my_friendly_assert (level != 0, 354);
1656   
1657   decl_stack = pop_stack_level (decl_stack);
1658   /* If we're leaving a toplevel class, don't bother to do the setting
1659      of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
1660      shouldn't even be used when current_class_type isn't set, and second,
1661      if we don't touch it here, we're able to use the cache effect if the
1662      next time we're entering a class scope, it is the same class.  */
1663   if (current_class_depth != 1 || force)
1664     for (shadowed = level->class_shadowed;
1665          shadowed;
1666          shadowed = TREE_CHAIN (shadowed))
1667       IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = TREE_VALUE (shadowed);
1668   else
1669     /* Remember to save what IDENTIFIER's were bound in this scope so we
1670        can recover from cache misses.  */
1671     {
1672       previous_class_type = current_class_type;
1673       previous_class_values = class_binding_level->class_shadowed;
1674     }
1675   for (shadowed = level->type_shadowed;
1676        shadowed;
1677        shadowed = TREE_CHAIN (shadowed))
1678     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
1679
1680   /* Remove the bindings for all of the class-level declarations.  */
1681   for (shadowed = level->class_shadowed; 
1682        shadowed; 
1683        shadowed = TREE_CHAIN (shadowed))
1684     pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
1685
1686   GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1687                       (HOST_WIDE_INT) class_binding_level->level_chain,
1688                       class_binding_level->parm_flag,
1689                       class_binding_level->keep);
1690
1691   if (class_binding_level->parm_flag != 2)
1692     class_binding_level = (struct binding_level *)0;
1693
1694   /* Now, pop out of the binding level which we created up in the
1695      `pushlevel_class' routine.  */
1696 #if defined(DEBUG_CP_BINDING_LEVELS)
1697   is_class_level = 1;
1698 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1699
1700   pop_binding_level ();
1701
1702   return block;
1703 }
1704 \f
1705 /* For debugging.  */
1706 static int no_print_functions = 0;
1707 static int no_print_builtins = 0;
1708
1709 void
1710 print_binding_level (lvl)
1711      struct binding_level *lvl;
1712 {
1713   tree t;
1714   int i = 0, len;
1715   fprintf (stderr, " blocks=");
1716   fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
1717   fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
1718            list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
1719   if (lvl->tag_transparent)
1720     fprintf (stderr, " tag-transparent");
1721   if (lvl->more_cleanups_ok)
1722     fprintf (stderr, " more-cleanups-ok");
1723   if (lvl->have_cleanups)
1724     fprintf (stderr, " have-cleanups");
1725   fprintf (stderr, "\n");
1726   if (lvl->names)
1727     {
1728       fprintf (stderr, " names:\t");
1729       /* We can probably fit 3 names to a line?  */
1730       for (t = lvl->names; t; t = TREE_CHAIN (t))
1731         {
1732           if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL)) 
1733             continue;
1734           if (no_print_builtins
1735               && (TREE_CODE (t) == TYPE_DECL)
1736               && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
1737             continue;
1738
1739           /* Function decls tend to have longer names.  */
1740           if (TREE_CODE (t) == FUNCTION_DECL)
1741             len = 3;
1742           else
1743             len = 2;
1744           i += len;
1745           if (i > 6)
1746             {
1747               fprintf (stderr, "\n\t");
1748               i = len;
1749             }
1750           print_node_brief (stderr, "", t, 0);
1751           if (t == error_mark_node)
1752             break;
1753         }
1754       if (i)
1755         fprintf (stderr, "\n");
1756     }
1757   if (lvl->tags)
1758     {
1759       fprintf (stderr, " tags:\t");
1760       i = 0;
1761       for (t = lvl->tags; t; t = TREE_CHAIN (t))
1762         {
1763           if (TREE_PURPOSE (t) == NULL_TREE)
1764             len = 3;
1765           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1766             len = 2;
1767           else
1768             len = 4;
1769           i += len;
1770           if (i > 5)
1771             {
1772               fprintf (stderr, "\n\t");
1773               i = len;
1774             }
1775           if (TREE_PURPOSE (t) == NULL_TREE)
1776             {
1777               print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
1778               fprintf (stderr, ">");
1779             }
1780           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1781             print_node_brief (stderr, "", TREE_VALUE (t), 0);
1782           else
1783             {
1784               print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
1785               print_node_brief (stderr, "", TREE_VALUE (t), 0);
1786               fprintf (stderr, ">");
1787             }
1788         }
1789       if (i)
1790         fprintf (stderr, "\n");
1791     }
1792   if (lvl->class_shadowed)
1793     {
1794       fprintf (stderr, " class-shadowed:");
1795       for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
1796         {
1797           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1798         }
1799       fprintf (stderr, "\n");
1800     }
1801   if (lvl->type_shadowed)
1802     {
1803       fprintf (stderr, " type-shadowed:");
1804       for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
1805         {
1806           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1807         }
1808       fprintf (stderr, "\n");
1809     }
1810 }
1811
1812 void
1813 print_other_binding_stack (stack)
1814      struct binding_level *stack;
1815 {
1816   struct binding_level *level;
1817   for (level = stack; level != global_binding_level; level = level->level_chain)
1818     {
1819       fprintf (stderr, "binding level ");
1820       fprintf (stderr, HOST_PTR_PRINTF, level);
1821       fprintf (stderr, "\n");
1822       print_binding_level (level);
1823     }
1824 }
1825
1826 void
1827 print_binding_stack ()
1828 {
1829   struct binding_level *b;
1830   fprintf (stderr, "current_binding_level=");
1831   fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
1832   fprintf (stderr, "\nclass_binding_level=");
1833   fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
1834   fprintf (stderr, "\nglobal_binding_level=");
1835   fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
1836   fprintf (stderr, "\n");
1837   if (class_binding_level)
1838     {
1839       for (b = class_binding_level; b; b = b->level_chain)
1840         if (b == current_binding_level)
1841           break;
1842       if (b)
1843         b = class_binding_level;
1844       else
1845         b = current_binding_level;
1846     }
1847   else
1848     b = current_binding_level;
1849   print_other_binding_stack (b);
1850   fprintf (stderr, "global:\n");
1851   print_binding_level (global_binding_level);
1852 }
1853
1854 /* Namespace binding access routines: The namespace_bindings field of
1855    the identifier is polymorphic, with three possible values:
1856    NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
1857    indicating the BINDING_VALUE of global_namespace. */
1858
1859 /* Check whether the a binding for the name to scope is known.
1860    Assumes that the bindings of the name are already a list
1861    of bindings. Returns the binding found, or NULL_TREE. */
1862
1863 static tree
1864 find_binding (name, scope)
1865      tree name;
1866      tree scope;
1867 {
1868   tree iter, prev = NULL_TREE;
1869
1870   scope = ORIGINAL_NAMESPACE (scope);
1871   
1872   for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
1873        iter = TREE_CHAIN (iter))
1874     {
1875       my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
1876       if (BINDING_SCOPE (iter) == scope)
1877         {
1878           /* Move binding found to the fron of the list, so
1879              subsequent lookups will find it faster. */
1880           if (prev)
1881             {
1882               TREE_CHAIN (prev) = TREE_CHAIN (iter);
1883               TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
1884               IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
1885             }
1886           return iter;
1887         }
1888       prev = iter;
1889     }
1890   return NULL_TREE;
1891 }
1892
1893 /* Always returns a binding for name in scope. If the
1894    namespace_bindings is not a list, convert it to one first.
1895    If no binding is found, make a new one. */
1896
1897 tree
1898 binding_for_name (name, scope)
1899      tree name;
1900      tree scope;
1901 {
1902   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
1903   tree result;
1904
1905   scope = ORIGINAL_NAMESPACE (scope);
1906   
1907   if (b && TREE_CODE (b) != CPLUS_BINDING)
1908     {
1909       /* Get rid of optimization for global scope. */
1910       IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
1911       BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
1912       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
1913     }
1914   if (b && (result = find_binding (name, scope)))
1915     return result;
1916   /* Not found, make a new permanent one. */
1917   push_obstacks (&permanent_obstack, &permanent_obstack);
1918   result = make_node (CPLUS_BINDING);
1919   TREE_CHAIN (result) = b;
1920   IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
1921   BINDING_SCOPE (result) = scope;
1922   BINDING_TYPE (result) = NULL_TREE;
1923   BINDING_VALUE (result) = NULL_TREE;
1924   pop_obstacks ();
1925   return result;
1926 }
1927
1928 /* Return the binding value for name in scope, considering that
1929    namespace_binding may or may not be a list of CPLUS_BINDINGS. */
1930
1931 tree
1932 namespace_binding (name, scope)
1933      tree name;
1934      tree scope;
1935 {
1936   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
1937   if (b == NULL_TREE)
1938     return NULL_TREE;
1939   if (scope == NULL_TREE)
1940     scope = global_namespace;
1941   if (TREE_CODE (b) != CPLUS_BINDING)
1942     return (scope == global_namespace) ? b : NULL_TREE;
1943   name = find_binding (name,scope);
1944   if (name == NULL_TREE)
1945     return name;
1946   return BINDING_VALUE (name);
1947 }
1948
1949 /* Set the binding value for name in scope. If modifying the binding
1950    of global_namespace is attempted, try to optimize it. */
1951
1952 void
1953 set_namespace_binding (name, scope, val)
1954      tree name;
1955      tree scope;
1956      tree val;
1957 {
1958   tree b;
1959
1960   if (scope == NULL_TREE)
1961     scope = global_namespace;
1962   
1963   if (scope == global_namespace)
1964     {
1965       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
1966       if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
1967         {
1968           IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
1969           return;
1970         }
1971     }
1972   b = binding_for_name (name, scope);
1973   BINDING_VALUE (b) = val;
1974 }
1975
1976 /* Push into the scope of the NAME namespace.  If NAME is NULL_TREE, then we
1977    select a name that is unique to this compilation unit.  */
1978
1979 void
1980 push_namespace (name)
1981      tree name;
1982 {
1983   tree d = NULL_TREE;
1984   int need_new = 1;
1985   int implicit_use = 0;
1986   int global = 0;
1987   if (!global_namespace)
1988     {
1989       /* This must be ::. */
1990       my_friendly_assert (name == get_identifier ("::"), 377);
1991       global = 1;
1992     }
1993   else if (!name)
1994     {
1995       /* The name of anonymous namespace is unique for the translation
1996          unit.  */
1997       if (!anonymous_namespace_name)
1998         anonymous_namespace_name = get_file_function_name ('N');
1999       name = anonymous_namespace_name;
2000       d = IDENTIFIER_NAMESPACE_VALUE (name);
2001       if (d)
2002         /* Reopening anonymous namespace.  */
2003         need_new = 0;
2004       implicit_use = 1;
2005     }
2006   else if (current_namespace == global_namespace
2007            && name == DECL_NAME (std_node))
2008     {
2009       in_std++;
2010       return;
2011     }
2012   else
2013     {
2014       /* Check whether this is an extended namespace definition. */
2015       d = IDENTIFIER_NAMESPACE_VALUE (name);
2016       if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
2017         {
2018           need_new = 0;
2019           if (DECL_NAMESPACE_ALIAS (d))
2020             {
2021               cp_error ("namespace alias `%D' not allowed here, assuming `%D'",
2022                         d, DECL_NAMESPACE_ALIAS (d));
2023               d = DECL_NAMESPACE_ALIAS (d);
2024             }
2025         }
2026     }
2027   
2028   if (need_new)
2029     {
2030       /* Make a new namespace, binding the name to it. */
2031       d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2032       /* The global namespace is not pushed, and the global binding
2033          level is set elsewhere.  */
2034       if (!global)
2035         {
2036           d = pushdecl (d);
2037           pushlevel (0);
2038           declare_namespace_level ();
2039           NAMESPACE_LEVEL (d) = current_binding_level;
2040         }
2041     }
2042   else
2043     resume_binding_level (NAMESPACE_LEVEL (d));
2044
2045   if (implicit_use)
2046     do_using_directive (d);
2047   /* Enter the name space. */
2048   current_namespace = d;
2049 }
2050
2051 /* Pop from the scope of the current namespace.  */
2052
2053 void
2054 pop_namespace ()
2055 {
2056   if (current_namespace == global_namespace)
2057     {
2058       my_friendly_assert (in_std>0, 980421);
2059       in_std--;
2060       return;
2061     }
2062   current_namespace = CP_DECL_CONTEXT (current_namespace);
2063   /* The binding level is not popped, as it might be re-opened later.  */
2064   suspend_binding_level ();
2065 }
2066
2067 /* Concatenate the binding levels of all namespaces. */
2068
2069 void
2070 cat_namespace_levels()
2071 {
2072   tree current;
2073   tree last;
2074   struct binding_level *b;
2075
2076   last = NAMESPACE_LEVEL (global_namespace) -> names;
2077   /* The nested namespaces appear in the names list of their ancestors. */
2078   for (current = last; current; current = TREE_CHAIN (current))
2079     {
2080       if (TREE_CODE (current) != NAMESPACE_DECL
2081           || DECL_NAMESPACE_ALIAS (current))
2082         continue;
2083       if (!DECL_LANG_SPECIFIC (current))
2084         {
2085           /* Hmm. std. */
2086           my_friendly_assert (current == std_node, 393);
2087           continue;
2088         }
2089       b = NAMESPACE_LEVEL (current);
2090       while (TREE_CHAIN (last))
2091         last = TREE_CHAIN (last);
2092       TREE_CHAIN (last) = NAMESPACE_LEVEL (current) -> names;
2093     }
2094 }
2095 \f
2096 /* Subroutines for reverting temporarily to top-level for instantiation
2097    of templates and such.  We actually need to clear out the class- and
2098    local-value slots of all identifiers, so that only the global values
2099    are at all visible.  Simply setting current_binding_level to the global
2100    scope isn't enough, because more binding levels may be pushed.  */
2101 struct saved_scope {
2102   struct binding_level *old_binding_level;
2103   tree old_bindings;
2104   tree old_namespace;
2105   struct saved_scope *prev;
2106   tree class_name, class_type;
2107   tree access_specifier;
2108   tree function_decl;
2109   struct binding_level *class_bindings;
2110   tree *lang_base, *lang_stack, lang_name;
2111   int lang_stacksize;
2112   int minimal_parse_mode;
2113   tree last_function_parms;
2114   tree template_parms;
2115   HOST_WIDE_INT processing_template_decl;
2116   tree previous_class_type, previous_class_values;
2117   int processing_specialization;
2118   int processing_explicit_instantiation;
2119 };
2120 static struct saved_scope *current_saved_scope;
2121
2122 /* A chain of the binding vecs created by store_bindings.  We create a
2123    whole bunch of these during compilation, on permanent_obstack, so we
2124    can't just throw them away.  */
2125 static tree free_binding_vecs;
2126
2127 static tree
2128 store_bindings (names, old_bindings)
2129      tree names, old_bindings;
2130 {
2131   tree t;
2132   for (t = names; t; t = TREE_CHAIN (t))
2133     {
2134       tree binding, t1, id;
2135
2136       if (TREE_CODE (t) == TREE_LIST)
2137         id = TREE_PURPOSE (t);
2138       else
2139         id = DECL_NAME (t);
2140
2141       if (!id 
2142           /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2143              we have no IDENTIFIER_BINDING if we have left the class
2144              scope, but cached the class-level declarations.  */
2145           || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
2146         continue;
2147
2148       for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
2149         if (TREE_VEC_ELT (t1, 0) == id)
2150           goto skip_it;
2151
2152       if (free_binding_vecs)
2153         {
2154           binding = free_binding_vecs;
2155           free_binding_vecs = TREE_CHAIN (free_binding_vecs);
2156         }
2157       else
2158         binding = make_tree_vec (4);
2159
2160       if (id)
2161         {
2162           my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
2163           TREE_VEC_ELT (binding, 0) = id;
2164           TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
2165           TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
2166           TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
2167           IDENTIFIER_BINDING (id) = NULL_TREE;
2168           IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
2169         }
2170       TREE_CHAIN (binding) = old_bindings;
2171       old_bindings = binding;
2172     skip_it:
2173       ;
2174     }
2175   return old_bindings;
2176 }
2177
2178 void
2179 maybe_push_to_top_level (pseudo)
2180      int pseudo;
2181 {
2182   extern int current_lang_stacksize;
2183   struct saved_scope *s
2184     = (struct saved_scope *) xmalloc (sizeof (struct saved_scope));
2185   struct binding_level *b = inner_binding_level;
2186   tree old_bindings = NULL_TREE;
2187
2188   if (current_function_decl)
2189     push_cp_function_context (NULL_TREE);
2190
2191   if (previous_class_type)
2192     old_bindings = store_bindings (previous_class_values, old_bindings);
2193
2194   /* Have to include global_binding_level, because class-level decls
2195      aren't listed anywhere useful.  */
2196   for (; b; b = b->level_chain)
2197     {
2198       tree t;
2199
2200       /* Template IDs are inserted into the global level. If they were
2201          inserted into namespace level, finish_file wouldn't find them
2202          when doing pending instantiations. Therefore, don't stop at
2203          namespace level, but continue until :: .  */
2204       if (b == global_binding_level || (pseudo && b->pseudo_global))
2205         break;
2206
2207       old_bindings = store_bindings (b->names, old_bindings);
2208       /* We also need to check class_shadowed to save class-level type
2209          bindings, since pushclass doesn't fill in b->names.  */
2210       if (b->parm_flag == 2)
2211         old_bindings = store_bindings (b->class_shadowed, old_bindings);
2212
2213       /* Unwind type-value slots back to top level.  */
2214       for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2215         SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2216     }
2217
2218   s->old_binding_level = current_binding_level;
2219   current_binding_level = b;
2220
2221   s->old_namespace = current_namespace;
2222   s->class_name = current_class_name;
2223   s->class_type = current_class_type;
2224   s->access_specifier = current_access_specifier;
2225   s->function_decl = current_function_decl;
2226   s->class_bindings = class_binding_level;
2227   s->lang_stack = current_lang_stack;
2228   s->lang_base = current_lang_base;
2229   s->lang_stacksize = current_lang_stacksize;
2230   s->lang_name = current_lang_name;
2231   s->minimal_parse_mode = minimal_parse_mode;
2232   s->last_function_parms = last_function_parms;
2233   s->template_parms = current_template_parms;
2234   s->processing_template_decl = processing_template_decl;
2235   s->previous_class_type = previous_class_type;
2236   s->previous_class_values = previous_class_values;
2237   s->processing_specialization = processing_specialization;
2238   s->processing_explicit_instantiation = processing_explicit_instantiation;
2239
2240   current_class_name = current_class_type = NULL_TREE;
2241   current_function_decl = NULL_TREE;
2242   class_binding_level = (struct binding_level *)0;
2243   current_lang_stacksize = 10;
2244   current_lang_stack = current_lang_base
2245     = (tree *) xmalloc (current_lang_stacksize * sizeof (tree));
2246   current_lang_name = lang_name_cplusplus;
2247   strict_prototype = strict_prototypes_lang_cplusplus;
2248   named_labels = NULL_TREE;
2249   shadowed_labels = NULL_TREE;
2250   minimal_parse_mode = 0;
2251   previous_class_type = previous_class_values = NULL_TREE;
2252   processing_specialization = 0;
2253   processing_explicit_instantiation = 0;
2254   current_template_parms = NULL_TREE;
2255   processing_template_decl = 0;
2256   current_namespace = global_namespace;
2257
2258   s->prev = current_saved_scope;
2259   s->old_bindings = old_bindings;
2260   current_saved_scope = s;
2261
2262   push_obstacks (&permanent_obstack, &permanent_obstack);
2263 }
2264
2265 void
2266 push_to_top_level ()
2267 {
2268   maybe_push_to_top_level (0);
2269 }
2270
2271 void
2272 pop_from_top_level ()
2273 {
2274   extern int current_lang_stacksize;
2275   struct saved_scope *s = current_saved_scope;
2276   tree t;
2277
2278   /* Clear out class-level bindings cache.  */
2279   if (previous_class_type)
2280     {
2281       popclass (-1);
2282       previous_class_type = NULL_TREE;
2283     }
2284
2285   pop_obstacks ();
2286
2287   current_binding_level = s->old_binding_level;
2288   current_saved_scope = s->prev;
2289   for (t = s->old_bindings; t; )
2290     {
2291       tree save = t;
2292       tree id = TREE_VEC_ELT (t, 0);
2293       if (id)
2294         {
2295           SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
2296           IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
2297           IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
2298         }
2299       t = TREE_CHAIN (t);
2300       TREE_CHAIN (save) = free_binding_vecs;
2301       free_binding_vecs = save;
2302     }
2303   current_namespace = s->old_namespace;
2304   current_class_name = s->class_name;
2305   current_class_type = s->class_type;
2306   current_access_specifier = s->access_specifier;
2307   current_function_decl = s->function_decl;
2308   class_binding_level = s->class_bindings;
2309   free (current_lang_base);
2310   current_lang_base = s->lang_base;
2311   current_lang_stack = s->lang_stack;
2312   current_lang_name = s->lang_name;
2313   current_lang_stacksize = s->lang_stacksize;
2314   if (current_lang_name == lang_name_cplusplus)
2315     strict_prototype = strict_prototypes_lang_cplusplus;
2316   else if (current_lang_name == lang_name_c)
2317     strict_prototype = strict_prototypes_lang_c;
2318   minimal_parse_mode = s->minimal_parse_mode;
2319   last_function_parms = s->last_function_parms;
2320   current_template_parms = s->template_parms;
2321   processing_template_decl = s->processing_template_decl;
2322   previous_class_type = s->previous_class_type;
2323   previous_class_values = s->previous_class_values;
2324   processing_specialization = s->processing_specialization;
2325   processing_explicit_instantiation = s->processing_explicit_instantiation;
2326
2327   free (s);
2328
2329   if (current_function_decl)
2330     pop_cp_function_context (NULL_TREE);
2331 }
2332 \f
2333 /* Push a definition of struct, union or enum tag "name".
2334    into binding_level "b".   "type" should be the type node, 
2335    We assume that the tag "name" is not already defined.
2336
2337    Note that the definition may really be just a forward reference.
2338    In that case, the TYPE_SIZE will be a NULL_TREE.
2339
2340    C++ gratuitously puts all these tags in the name space.  */
2341
2342 /* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2343    record the shadowed value for this binding contour.  TYPE is
2344    the type that ID maps to.  */
2345
2346 static void
2347 set_identifier_type_value_with_scope (id, type, b)
2348      tree id;
2349      tree type;
2350      struct binding_level *b;
2351 {
2352   if (!b->namespace_p)
2353     {
2354       /* Shadow the marker, not the real thing, so that the marker
2355          gets restored later. */
2356       tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
2357       b->type_shadowed
2358         = tree_cons (id, old_type_value, b->type_shadowed);
2359     }
2360   else
2361     {
2362       tree binding = binding_for_name (id, current_namespace);
2363       BINDING_TYPE (binding) = type;
2364       /* Store marker instead of real type. */
2365       type = global_type_node;
2366     }
2367   SET_IDENTIFIER_TYPE_VALUE (id, type);
2368 }
2369
2370 /* As set_identifier_type_value_with_scope, but using inner_binding_level.  */
2371
2372 void
2373 set_identifier_type_value (id, type)
2374      tree id;
2375      tree type;
2376 {
2377   set_identifier_type_value_with_scope (id, type, inner_binding_level);
2378 }
2379
2380 /* Return the type associated with id. */
2381
2382 tree
2383 identifier_type_value (id)
2384      tree id;
2385 {
2386   /* There is no type with that name, anywhere. */
2387   if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2388     return NULL_TREE;
2389   /* This is not the type marker, but the real thing. */
2390   if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2391     return REAL_IDENTIFIER_TYPE_VALUE (id);
2392   /* Have to search for it. It must be on the global level, now.
2393      Ask lookup_name not to return non-types. */
2394   id = lookup_name_real (id, 2, 1, 0);
2395   if (id)
2396     return TREE_TYPE (id);
2397   return NULL_TREE;
2398 }
2399
2400 /* Pop off extraneous binding levels left over due to syntax errors.
2401
2402    We don't pop past namespaces, as they might be valid.  */
2403
2404 void
2405 pop_everything ()
2406 {
2407 #ifdef DEBUG_CP_BINDING_LEVELS
2408   fprintf (stderr, "XXX entering pop_everything ()\n");
2409 #endif
2410   while (! toplevel_bindings_p () && ! pseudo_global_level_p ())
2411     {
2412       if (class_binding_level)
2413         pop_nested_class (1);
2414       else
2415         poplevel (0, 0, 0);
2416     }
2417 #ifdef DEBUG_CP_BINDING_LEVELS
2418   fprintf (stderr, "XXX leaving pop_everything ()\n");
2419 #endif
2420 }
2421
2422 /* The type TYPE is being declared.  If it is a class template, or a
2423    specialization of a class template, do any processing required and
2424    perform error-checking.  If IS_FRIEND is non-zero, this TYPE is
2425    being declared a friend.  B is the binding level at which this TYPE
2426    should be bound.
2427
2428    Returns the TYPE_DECL for TYPE, which may have been altered by this
2429    processing.  */
2430
2431 static tree 
2432 maybe_process_template_type_declaration (type, globalize, b)
2433      tree type;
2434      int globalize;
2435      struct binding_level* b;
2436 {
2437   tree decl = TYPE_NAME (type);
2438  
2439   if (processing_template_parmlist)
2440     /* You can't declare a new template type in a template parameter
2441        list.  But, you can declare a non-template type:
2442        
2443          template <class A*> struct S;
2444        
2445        is a forward-declaration of `A'.  */
2446     ;
2447   else 
2448     {
2449       maybe_check_template_type (type);
2450
2451       my_friendly_assert (IS_AGGR_TYPE (type) 
2452                           || TREE_CODE (type) == ENUMERAL_TYPE, 0);
2453                           
2454                           
2455       if (/* If !GLOBALIZE then we are looking at a definition.
2456              It may not be a primary template.  (For example, in:
2457                   
2458                template <class T>
2459                struct S1 { class S2 {}; }
2460                   
2461              we have to push_template_decl for S2.)  */
2462           (processing_template_decl && !globalize)
2463           /* If we are declaring a friend template class, we will
2464              have GLOBALIZE set, since something like:
2465
2466                template <class T>
2467                struct S1 {
2468                  template <class U>
2469                  friend class S2; 
2470                };
2471
2472              declares S2 to be at global scope.  */
2473           || PROCESSING_REAL_TEMPLATE_DECL_P ())
2474         {
2475           /* This may change after the call to
2476              push_template_decl_real, but we want the original value.  */
2477           tree name = DECL_NAME (decl);
2478
2479           decl = push_template_decl_real (decl, globalize);
2480           /* If the current binding level is the binding level for the
2481              template parameters (see the comment in
2482              begin_template_parm_list) and the enclosing level is a class
2483              scope, and we're not looking at a friend, push the
2484              declaration of the member class into the class scope.  In the
2485              friend case, push_template_decl will already have put the
2486              friend into global scope, if appropriate.  */
2487           if (TREE_CODE (type) != ENUMERAL_TYPE
2488               && !globalize && b->pseudo_global
2489               && b->level_chain->parm_flag == 2)
2490             {
2491               pushdecl_with_scope (CLASSTYPE_TI_TEMPLATE (type),
2492                                    b->level_chain);
2493               finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
2494               /* Put this tag on the list of tags for the class, since
2495                  that won't happen below because B is not the class
2496                  binding level, but is instead the pseudo-global level.  */
2497               b->level_chain->tags = 
2498                 saveable_tree_cons (name, type, b->level_chain->tags);
2499               TREE_NONLOCAL_FLAG (type) = 1;
2500               if (TYPE_SIZE (current_class_type) == NULL_TREE)
2501                 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2502             }
2503         }
2504     }
2505
2506   return decl;
2507 }
2508
2509 /* Push a tag name NAME for struct/class/union/enum type TYPE.
2510    Normally put it into the inner-most non-tag-transparent scope,
2511    but if GLOBALIZE is true, put it in the inner-most non-class scope.
2512    The latter is needed for implicit declarations.  */
2513
2514 void
2515 pushtag (name, type, globalize)
2516      tree name, type;
2517      int globalize;
2518 {
2519   register struct binding_level *b;
2520   tree context = 0;
2521   tree c_decl = 0;
2522
2523   b = inner_binding_level;
2524   while (b->tag_transparent
2525          || (globalize && b->parm_flag == 2))
2526     b = b->level_chain;
2527
2528   if (toplevel_bindings_p ())
2529     b->tags = perm_tree_cons (name, type, b->tags);
2530   else
2531     b->tags = saveable_tree_cons (name, type, b->tags);
2532
2533   if (name)
2534     {
2535       context = type ? TYPE_CONTEXT (type) : NULL_TREE;
2536       if (! context)
2537         {
2538           tree cs = current_scope ();
2539
2540           if (! globalize)
2541             context = cs;
2542           else if (cs != NULL_TREE 
2543                    && TREE_CODE_CLASS (TREE_CODE (cs)) == 't')
2544             /* When declaring a friend class of a local class, we want
2545                to inject the newly named class into the scope
2546                containing the local class, not the namespace scope.  */
2547             context = hack_decl_function_context (get_type_decl (cs));
2548         }
2549       if (context)
2550         c_decl = TREE_CODE (context) == FUNCTION_DECL
2551           ? context : TYPE_MAIN_DECL (context);
2552
2553       if (!context)
2554         context = current_namespace;
2555
2556       /* Do C++ gratuitous typedefing.  */
2557       if (IDENTIFIER_TYPE_VALUE (name) != type)
2558         {
2559           register tree d = NULL_TREE;
2560           int newdecl = 0, in_class = 0;
2561
2562           if ((b->pseudo_global && b->level_chain->parm_flag == 2)
2563               || b->parm_flag == 2)
2564             in_class = 1;
2565           else
2566             d = lookup_nested_type (type, c_decl);
2567
2568           if (d == NULL_TREE)
2569             {
2570               newdecl = 1;
2571               d = build_decl (TYPE_DECL, name, type);
2572               if (current_lang_name == lang_name_java)
2573                 TYPE_FOR_JAVA (type) = 1;
2574               SET_DECL_ARTIFICIAL (d);
2575               if (! in_class)
2576                 set_identifier_type_value_with_scope (name, type, b);
2577             }
2578           else
2579             d = TYPE_MAIN_DECL (d);
2580
2581           TYPE_NAME (type) = d;
2582           DECL_CONTEXT (d) = FROB_CONTEXT (context);
2583
2584           d = maybe_process_template_type_declaration (type,
2585                                                        globalize, b);
2586
2587           if (b->parm_flag == 2)
2588             {
2589               pushdecl_class_level (d);
2590               if (newdecl && !PROCESSING_REAL_TEMPLATE_DECL_P ())
2591                 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2592                    class.  But if it's a member template class, we
2593                    want the TEMPLATE_DECL, not the TYPE_DECL, so this
2594                    is done later.  */
2595                 finish_member_declaration (d);
2596             }
2597           else
2598             d = pushdecl_with_scope (d, b);
2599
2600           if (newdecl)
2601             {
2602               if (ANON_AGGRNAME_P (name))
2603                 DECL_IGNORED_P (d) = 1;
2604
2605               TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2606               DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
2607               if (!uses_template_parms (type))
2608                 DECL_ASSEMBLER_NAME (d)
2609                   = get_identifier (build_overload_name (type, 1, 1));
2610             }
2611         }
2612       if (b->parm_flag == 2)
2613         {
2614           TREE_NONLOCAL_FLAG (type) = 1;
2615           if (TYPE_SIZE (current_class_type) == NULL_TREE)
2616             CLASSTYPE_TAGS (current_class_type) = b->tags;
2617         }
2618     }
2619
2620   if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2621     /* Use the canonical TYPE_DECL for this node.  */
2622     TYPE_STUB_DECL (type) = TYPE_NAME (type);
2623   else
2624     {
2625       /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2626          will be the tagged type we just added to the current
2627          binding level.  This fake NULL-named TYPE_DECL node helps
2628          dwarfout.c to know when it needs to output a
2629          representation of a tagged type, and it also gives us a
2630          convenient place to record the "scope start" address for
2631          the tagged type.  */
2632
2633       tree d = build_decl (TYPE_DECL, NULL_TREE, type);
2634       TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2635     }
2636 }
2637
2638 /* Counter used to create anonymous type names.  */
2639
2640 static int anon_cnt = 0;
2641
2642 /* Return an IDENTIFIER which can be used as a name for
2643    anonymous structs and unions.  */
2644
2645 tree
2646 make_anon_name ()
2647 {
2648   char buf[32];
2649
2650   sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2651   return get_identifier (buf);
2652 }
2653
2654 /* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2655    This keeps dbxout from getting confused.  */
2656
2657 void
2658 clear_anon_tags ()
2659 {
2660   register struct binding_level *b;
2661   register tree tags;
2662   static int last_cnt = 0;
2663
2664   /* Fast out if no new anon names were declared.  */
2665   if (last_cnt == anon_cnt)
2666     return;
2667
2668   b = current_binding_level;
2669   while (b->tag_transparent)
2670     b = b->level_chain;
2671   tags = b->tags;
2672   while (tags)
2673     {
2674       /* A NULL purpose means we have already processed all tags
2675          from here to the end of the list.  */
2676       if (TREE_PURPOSE (tags) == NULL_TREE)
2677         break;
2678       if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2679         TREE_PURPOSE (tags) = NULL_TREE;
2680       tags = TREE_CHAIN (tags);
2681     }
2682   last_cnt = anon_cnt;
2683 }
2684 \f
2685 /* Subroutine of duplicate_decls: return truthvalue of whether
2686    or not types of these decls match.
2687
2688    For C++, we must compare the parameter list so that `int' can match
2689    `int&' in a parameter position, but `int&' is not confused with
2690    `const int&'.  */
2691
2692 int
2693 decls_match (newdecl, olddecl)
2694      tree newdecl, olddecl;
2695 {
2696   int types_match;
2697
2698   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
2699     /* If the two DECLs are not even the same kind of thing, we're not
2700        interested in their types.  */
2701     return 0;
2702
2703   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2704     {
2705       tree f1 = TREE_TYPE (newdecl);
2706       tree f2 = TREE_TYPE (olddecl);
2707       tree p1 = TYPE_ARG_TYPES (f1);
2708       tree p2 = TYPE_ARG_TYPES (f2);
2709
2710       if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl)
2711           && ! (DECL_LANGUAGE (newdecl) == lang_c
2712                 && DECL_LANGUAGE (olddecl) == lang_c))
2713         return 0;
2714
2715       /* When we parse a static member function definition,
2716          we put together a FUNCTION_DECL which thinks its type
2717          is METHOD_TYPE.  Change that to FUNCTION_TYPE, and
2718          proceed.  */
2719       if (TREE_CODE (f1) == METHOD_TYPE && DECL_STATIC_FUNCTION_P (olddecl))
2720         revert_static_member_fn (&newdecl, &f1, &p1);
2721       else if (TREE_CODE (f2) == METHOD_TYPE
2722                && DECL_STATIC_FUNCTION_P (newdecl))
2723         revert_static_member_fn (&olddecl, &f2, &p2);
2724
2725       /* Here we must take care of the case where new default
2726          parameters are specified.  Also, warn if an old
2727          declaration becomes ambiguous because default
2728          parameters may cause the two to be ambiguous.  */
2729       if (TREE_CODE (f1) != TREE_CODE (f2))
2730         {
2731           if (TREE_CODE (f1) == OFFSET_TYPE)
2732             cp_compiler_error ("`%D' redeclared as member function", newdecl);
2733           else
2734             cp_compiler_error ("`%D' redeclared as non-member function", newdecl);
2735           return 0;
2736         }
2737
2738       if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
2739         {
2740           if (! strict_prototypes_lang_c && DECL_LANGUAGE (olddecl) == lang_c
2741               && p2 == NULL_TREE)
2742             {
2743               types_match = self_promoting_args_p (p1);
2744               if (p1 == void_list_node)
2745                 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2746             }
2747           else if (!strict_prototypes_lang_c && DECL_LANGUAGE (olddecl)==lang_c
2748                    && DECL_LANGUAGE (newdecl) == lang_c && p1 == NULL_TREE)
2749             {
2750               types_match = self_promoting_args_p (p2);
2751               TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2752             }
2753           else
2754             types_match = compparms (p1, p2);
2755         }
2756       else
2757         types_match = 0;
2758     }
2759   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2760     {
2761       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
2762                                 DECL_TEMPLATE_PARMS (olddecl)))
2763         return 0;
2764       
2765       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2766         types_match = 1;
2767       else
2768         types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
2769                                    DECL_TEMPLATE_RESULT (newdecl));
2770     }
2771   else
2772     {
2773       if (TREE_TYPE (newdecl) == error_mark_node)
2774         types_match = TREE_TYPE (olddecl) == error_mark_node;
2775       else if (TREE_TYPE (olddecl) == NULL_TREE)
2776         types_match = TREE_TYPE (newdecl) == NULL_TREE;
2777       else if (TREE_TYPE (newdecl) == NULL_TREE)
2778         types_match = 0;
2779       else
2780         types_match = comptypes (TREE_TYPE (newdecl),
2781                                  TREE_TYPE (olddecl),
2782                                  COMPARE_REDECLARATION);
2783     }
2784
2785   return types_match;
2786 }
2787
2788 /* If NEWDECL is `static' and an `extern' was seen previously,
2789    warn about it.  (OLDDECL may be NULL_TREE; NAME contains
2790    information about previous usage as an `extern'.)
2791
2792    Note that this does not apply to the C++ case of declaring
2793    a variable `extern const' and then later `const'.
2794
2795    Don't complain about built-in functions, since they are beyond
2796    the user's control.  */
2797
2798 static void
2799 warn_extern_redeclared_static (newdecl, olddecl)
2800      tree newdecl, olddecl;
2801 {
2802   tree name;
2803
2804   static char *explicit_extern_static_warning
2805     = "`%D' was declared `extern' and later `static'";
2806   static char *implicit_extern_static_warning
2807     = "`%D' was declared implicitly `extern' and later `static'";
2808
2809   if (TREE_CODE (newdecl) == TYPE_DECL)
2810     return;
2811
2812   name = DECL_ASSEMBLER_NAME (newdecl);
2813   if (TREE_PUBLIC (name) && DECL_THIS_STATIC (newdecl))
2814     {
2815       /* It's okay to redeclare an ANSI built-in function as static,
2816          or to declare a non-ANSI built-in function as anything.  */
2817       if (! (TREE_CODE (newdecl) == FUNCTION_DECL
2818              && olddecl != NULL_TREE
2819              && TREE_CODE (olddecl) == FUNCTION_DECL
2820              && (DECL_BUILT_IN (olddecl)
2821                  || DECL_BUILT_IN_NONANSI (olddecl))))
2822         {
2823           cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
2824                       ? implicit_extern_static_warning
2825                       : explicit_extern_static_warning, newdecl);
2826           if (olddecl != NULL_TREE)
2827             cp_pedwarn_at ("previous declaration of `%D'", olddecl);
2828         }
2829     }
2830 }
2831
2832 /* Handle when a new declaration NEWDECL has the same name as an old
2833    one OLDDECL in the same binding contour.  Prints an error message
2834    if appropriate.
2835
2836    If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
2837    Otherwise, return 0.  */
2838
2839 int
2840 duplicate_decls (newdecl, olddecl)
2841      tree newdecl, olddecl;
2842 {
2843   extern struct obstack permanent_obstack;
2844   unsigned olddecl_uid = DECL_UID (olddecl);
2845   int olddecl_friend = 0, types_match = 0;
2846   int new_defines_function = 0;
2847
2848   if (newdecl == olddecl)
2849     return 1;
2850
2851   types_match = decls_match (newdecl, olddecl);
2852
2853   /* If either the type of the new decl or the type of the old decl is an
2854      error_mark_node, then that implies that we have already issued an
2855      error (earlier) for some bogus type specification, and in that case,
2856      it is rather pointless to harass the user with yet more error message
2857      about the same declaration, so just pretend the types match here.  */
2858   if (TREE_TYPE (newdecl) == error_mark_node
2859       || TREE_TYPE (olddecl) == error_mark_node)
2860     types_match = 1;
2861  
2862   /* Check for redeclaration and other discrepancies. */
2863   if (TREE_CODE (olddecl) == FUNCTION_DECL
2864       && DECL_ARTIFICIAL (olddecl)
2865       && (DECL_BUILT_IN (olddecl) || DECL_BUILT_IN_NONANSI (olddecl)))
2866     {
2867       /* If you declare a built-in or predefined function name as static,
2868          the old definition is overridden, but optionally warn this was a
2869          bad choice of name.  Ditto for overloads.  */
2870       if (! TREE_PUBLIC (newdecl)
2871           || (TREE_CODE (newdecl) == FUNCTION_DECL
2872               && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl)))
2873         {
2874           if (warn_shadow)
2875             cp_warning ("shadowing %s function `%#D'",
2876                         DECL_BUILT_IN (olddecl) ? "built-in" : "library",
2877                         olddecl);
2878           /* Discard the old built-in function.  */
2879           return 0;
2880         }
2881       else if (! types_match)
2882         {
2883           if (TREE_CODE (newdecl) != FUNCTION_DECL)
2884             {
2885               /* If the built-in is not ansi, then programs can override
2886                  it even globally without an error.  */
2887               if (! DECL_BUILT_IN (olddecl))
2888                 cp_warning ("library function `%#D' redeclared as non-function `%#D'",
2889                             olddecl, newdecl);
2890               else
2891                 {
2892                   cp_error ("declaration of `%#D'", newdecl);
2893                   cp_error ("conflicts with built-in declaration `%#D'",
2894                             olddecl);
2895                 }
2896               return 0;
2897             }
2898
2899           cp_warning ("declaration of `%#D'", newdecl);
2900           cp_warning ("conflicts with built-in declaration `%#D'",
2901                       olddecl);
2902         }
2903     }
2904   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
2905     {
2906       if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
2907            && TREE_CODE (newdecl) != TYPE_DECL
2908            && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
2909                  && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
2910           || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
2911               && TREE_CODE (olddecl) != TYPE_DECL
2912               && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
2913                     && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2914                         == TYPE_DECL))))
2915         {
2916           /* We do nothing special here, because C++ does such nasty
2917              things with TYPE_DECLs.  Instead, just let the TYPE_DECL
2918              get shadowed, and know that if we need to find a TYPE_DECL
2919              for a given name, we can look in the IDENTIFIER_TYPE_VALUE
2920              slot of the identifier.  */
2921           return 0;
2922         }
2923
2924       if ((TREE_CODE (newdecl) == FUNCTION_DECL
2925            && DECL_FUNCTION_TEMPLATE_P (olddecl))
2926           || (TREE_CODE (olddecl) == FUNCTION_DECL
2927               && DECL_FUNCTION_TEMPLATE_P (newdecl)))
2928         return 0;
2929
2930       cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
2931       if (TREE_CODE (olddecl) == TREE_LIST)
2932         olddecl = TREE_VALUE (olddecl);
2933       cp_error_at ("previous declaration of `%#D'", olddecl);
2934
2935       /* New decl is completely inconsistent with the old one =>
2936          tell caller to replace the old one.  */
2937
2938       return 0;
2939     }
2940   else if (!types_match)
2941     {
2942       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2943         {
2944           /* The name of a class template may not be declared to refer to
2945              any other template, class, function, object, namespace, value,
2946              or type in the same scope.  */
2947           if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
2948               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2949             {
2950               cp_error ("declaration of template `%#D'", newdecl);
2951               cp_error_at ("conflicts with previous declaration `%#D'",
2952                            olddecl);
2953             }
2954           else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
2955                    && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
2956                    && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
2957                                  TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
2958                    && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
2959                                            DECL_TEMPLATE_PARMS (olddecl)))
2960             {
2961               cp_error ("new declaration `%#D'", newdecl);
2962               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
2963             }
2964           return 0;
2965         }
2966       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2967         {
2968           if (DECL_LANGUAGE (newdecl) == lang_c
2969               && DECL_LANGUAGE (olddecl) == lang_c)
2970             {
2971               cp_error ("declaration of C function `%#D' conflicts with",
2972                         newdecl);
2973               cp_error_at ("previous declaration `%#D' here", olddecl);
2974             }
2975           else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
2976                               TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
2977             {
2978               cp_error ("new declaration `%#D'", newdecl);
2979               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
2980             }
2981           else
2982             return 0;
2983         }
2984
2985       /* Already complained about this, so don't do so again.  */
2986       else if (current_class_type == NULL_TREE
2987           || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
2988         {
2989           cp_error ("conflicting types for `%#D'", newdecl);
2990           cp_error_at ("previous declaration as `%#D'", olddecl);
2991         }
2992     }
2993   else if (TREE_CODE (newdecl) == FUNCTION_DECL 
2994             && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
2995                  && (!DECL_TEMPLATE_INFO (newdecl)
2996                      || (DECL_TI_TEMPLATE (newdecl) 
2997                          != DECL_TI_TEMPLATE (olddecl))))
2998                 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
2999                     && (!DECL_TEMPLATE_INFO (olddecl)
3000                         || (DECL_TI_TEMPLATE (olddecl) 
3001                             != DECL_TI_TEMPLATE (newdecl))))))
3002     /* It's OK to have a template specialization and a non-template
3003        with the same type, or to have specializations of two
3004        different templates with the same type.  Note that if one is a
3005        specialization, and the other is an instantiation of the same
3006        template, that we do not exit at this point.  That situation
3007        can occur if we instantiate a template class, and then
3008        specialize one of its methods.  This situation is legal, but
3009        the declarations must be merged in the usual way.  */
3010     return 0;
3011   else if (TREE_CODE (newdecl) == FUNCTION_DECL 
3012            && ((DECL_TEMPLATE_INSTANTIATION (olddecl) 
3013                 && !DECL_USE_TEMPLATE (newdecl))
3014                || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3015                    && !DECL_USE_TEMPLATE (olddecl))))
3016     /* One of the declarations is a template instantiation, and the
3017        other is not a template at all.  That's OK.  */
3018     return 0;
3019   else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3020            && DECL_NAMESPACE_ALIAS (newdecl)
3021            && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3022     /* Redeclaration of namespace alias, ignore it. */
3023     return 1;
3024   else
3025     {
3026       char *errmsg = redeclaration_error_message (newdecl, olddecl);
3027       if (errmsg)
3028         {
3029           cp_error (errmsg, newdecl);
3030           if (DECL_NAME (olddecl) != NULL_TREE)
3031             cp_error_at ((DECL_INITIAL (olddecl)
3032                           && namespace_bindings_p ())
3033                          ? "`%#D' previously defined here"
3034                          : "`%#D' previously declared here", olddecl);
3035         }
3036       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3037                && DECL_INITIAL (olddecl) != NULL_TREE
3038                && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3039                && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3040         {
3041           /* Prototype decl follows defn w/o prototype.  */
3042           cp_warning_at ("prototype for `%#D'", newdecl);
3043           cp_warning_at ("follows non-prototype definition here", olddecl);
3044         }
3045       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3046                && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
3047         {
3048           /* extern "C" int foo ();
3049              int foo () { bar (); }
3050              is OK.  */
3051           if (current_lang_stack == current_lang_base)
3052             DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3053           else
3054             {
3055               cp_error_at ("previous declaration of `%#D' with %L linkage",
3056                            olddecl, DECL_LANGUAGE (olddecl));
3057               cp_error ("conflicts with new declaration with %L linkage",
3058                         DECL_LANGUAGE (newdecl));
3059             }
3060         }
3061
3062       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
3063         ;
3064       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
3065         {
3066           tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3067           tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3068           int i = 1;
3069
3070           if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3071             t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
3072         
3073           for (; t1 && t1 != void_list_node;
3074                t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3075             if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3076               {
3077                 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3078                                            TREE_PURPOSE (t2)))
3079                   {
3080                     if (pedantic)
3081                       {
3082                         cp_pedwarn ("default argument given for parameter %d of `%#D'",
3083                                     i, newdecl);
3084                         cp_pedwarn_at ("after previous specification in `%#D'",
3085                                        olddecl);
3086                       }
3087                   }
3088                 else
3089                   {
3090                     cp_error ("default argument given for parameter %d of `%#D'",
3091                               i, newdecl);
3092                     cp_error_at ("after previous specification in `%#D'",
3093                                  olddecl);
3094                   }
3095               }
3096
3097           if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
3098               && TREE_ADDRESSABLE (olddecl) && warn_inline)
3099             {
3100               cp_warning ("`%#D' was used before it was declared inline",
3101                           newdecl);
3102               cp_warning_at ("previous non-inline declaration here",
3103                              olddecl);
3104             }
3105         }
3106     }
3107
3108   /* If new decl is `static' and an `extern' was seen previously,
3109      warn about it.  */
3110   warn_extern_redeclared_static (newdecl, olddecl);
3111
3112   /* We have committed to returning 1 at this point.  */
3113   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3114     {
3115       /* Now that functions must hold information normally held
3116          by field decls, there is extra work to do so that
3117          declaration information does not get destroyed during
3118          definition.  */
3119       if (DECL_VINDEX (olddecl))
3120         DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
3121       if (DECL_CONTEXT (olddecl))
3122         DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
3123       if (DECL_CLASS_CONTEXT (olddecl))
3124         DECL_CLASS_CONTEXT (newdecl) = DECL_CLASS_CONTEXT (olddecl);
3125       if (DECL_PENDING_INLINE_INFO (newdecl) == (struct pending_inline *)0)
3126         DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
3127       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3128       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
3129       DECL_ABSTRACT_VIRTUAL_P (newdecl) |= DECL_ABSTRACT_VIRTUAL_P (olddecl);
3130       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
3131       DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
3132       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
3133       
3134       /* Optionally warn about more than one declaration for the same
3135          name, but don't warn about a function declaration followed by a
3136          definition.  */
3137       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3138           && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3139           /* Don't warn about extern decl followed by definition. */
3140           && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3141           /* Don't warn about friends, let add_friend take care of it. */
3142           && ! DECL_FRIEND_P (newdecl))
3143         {
3144           cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3145           cp_warning_at ("previous declaration of `%D'", olddecl);
3146         }
3147     }
3148
3149   /* Deal with C++: must preserve virtual function table size.  */
3150   if (TREE_CODE (olddecl) == TYPE_DECL)
3151     {
3152       register tree newtype = TREE_TYPE (newdecl);
3153       register tree oldtype = TREE_TYPE (olddecl);
3154
3155       if (newtype != error_mark_node && oldtype != error_mark_node
3156           && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3157         {
3158           CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3159           CLASSTYPE_FRIEND_CLASSES (newtype)
3160             = CLASSTYPE_FRIEND_CLASSES (oldtype);
3161         }
3162     }
3163
3164   /* Copy all the DECL_... slots specified in the new decl
3165      except for any that we copy here from the old type.  */
3166   DECL_MACHINE_ATTRIBUTES (newdecl) 
3167     = merge_machine_decl_attributes (olddecl, newdecl);
3168
3169   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3170     {
3171       if (! duplicate_decls (DECL_TEMPLATE_RESULT (newdecl),
3172                              DECL_TEMPLATE_RESULT (olddecl)))
3173         cp_error ("invalid redeclaration of %D", newdecl);
3174       TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
3175       DECL_TEMPLATE_SPECIALIZATIONS (olddecl) 
3176         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3177                    DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
3178  
3179       return 1;
3180     }
3181     
3182   if (types_match)
3183     {
3184       /* Automatically handles default parameters.  */
3185       tree oldtype = TREE_TYPE (olddecl);
3186       tree newtype;
3187
3188       /* Make sure we put the new type in the same obstack as the old one.  */
3189       if (oldtype)
3190         push_obstacks (TYPE_OBSTACK (oldtype), TYPE_OBSTACK (oldtype));
3191       else
3192         {
3193           push_obstacks_nochange ();
3194           end_temporary_allocation ();
3195         }
3196
3197       /* Merge the data types specified in the two decls.  */
3198       newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3199
3200       if (TREE_CODE (newdecl) == VAR_DECL)
3201         DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3202       /* Do this after calling `common_type' so that default
3203          parameters don't confuse us.  */
3204       else if (TREE_CODE (newdecl) == FUNCTION_DECL
3205           && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3206               != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3207         {
3208           TREE_TYPE (newdecl) = build_exception_variant (newtype,
3209                                                          TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
3210           TREE_TYPE (olddecl) = build_exception_variant (newtype,
3211                                                          TYPE_RAISES_EXCEPTIONS (oldtype));
3212
3213           if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3214               && DECL_SOURCE_LINE (olddecl) != 0
3215               && flag_exceptions
3216               && ! compexcepttypes (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
3217             {
3218               cp_pedwarn ("declaration of `%D' throws different exceptions",
3219                         newdecl);
3220               cp_pedwarn_at ("previous declaration here", olddecl);
3221             }
3222         }
3223       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3224
3225       /* Lay the type out, unless already done.  */
3226       if (newtype != canonical_type_variant (oldtype)
3227           && TREE_TYPE (newdecl) != error_mark_node
3228           && !(processing_template_decl && uses_template_parms (newdecl)))
3229         layout_type (TREE_TYPE (newdecl));
3230
3231       if ((TREE_CODE (newdecl) == VAR_DECL
3232            || TREE_CODE (newdecl) == PARM_DECL
3233            || TREE_CODE (newdecl) == RESULT_DECL
3234            || TREE_CODE (newdecl) == FIELD_DECL
3235            || TREE_CODE (newdecl) == TYPE_DECL)
3236           && !(processing_template_decl && uses_template_parms (newdecl)))
3237         layout_decl (newdecl, 0);
3238
3239       /* Merge the type qualifiers.  */
3240       if (TREE_READONLY (newdecl))
3241         TREE_READONLY (olddecl) = 1;
3242       if (TREE_THIS_VOLATILE (newdecl))
3243         TREE_THIS_VOLATILE (olddecl) = 1;
3244
3245       /* Merge the initialization information.  */
3246       if (DECL_INITIAL (newdecl) == NULL_TREE
3247           && DECL_INITIAL (olddecl) != NULL_TREE)
3248         {
3249           DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3250           DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3251           DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
3252           if (DECL_LANG_SPECIFIC (newdecl)
3253               && DECL_LANG_SPECIFIC (olddecl))
3254             DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
3255         }
3256
3257       /* Merge the section attribute.
3258          We want to issue an error if the sections conflict but that must be
3259          done later in decl_attributes since we are called before attributes
3260          are assigned.  */
3261       if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3262         DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3263
3264       /* Keep the old rtl since we can safely use it, unless it's the
3265          call to abort() used for abstract virtuals.  */
3266       if ((DECL_LANG_SPECIFIC (olddecl)
3267            && !DECL_ABSTRACT_VIRTUAL_P (olddecl))
3268           || DECL_RTL (olddecl) != DECL_RTL (abort_fndecl))
3269         DECL_RTL (newdecl) = DECL_RTL (olddecl);
3270
3271       pop_obstacks ();
3272     }
3273   /* If cannot merge, then use the new type and qualifiers,
3274      and don't preserve the old rtl.  */
3275   else
3276     {
3277       /* Clean out any memory we had of the old declaration.  */
3278       tree oldstatic = value_member (olddecl, static_aggregates);
3279       if (oldstatic)
3280         TREE_VALUE (oldstatic) = error_mark_node;
3281
3282       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3283       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3284       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3285       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3286     }
3287
3288   /* Merge the storage class information.  */
3289   DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
3290   DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
3291   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3292   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3293   if (! DECL_EXTERNAL (olddecl))
3294     DECL_EXTERNAL (newdecl) = 0;
3295   
3296   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
3297     {
3298       DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3299       DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
3300       DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
3301       /* Don't really know how much of the language-specific
3302          values we should copy from old to new.  */
3303       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3304       DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3305       DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
3306       DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3307       olddecl_friend = DECL_FRIEND_P (olddecl);
3308     }
3309
3310   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3311     {
3312       if (DECL_TEMPLATE_INSTANTIATION (olddecl) 
3313           && !DECL_TEMPLATE_INSTANTIATION (newdecl)) 
3314         {
3315           /* If newdecl is not a specialization, then it is not a
3316              template-related function at all.  And that means that we
3317              shoud have exited above, returning 0.  */
3318           my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3319                               0);
3320
3321           if (TREE_USED (olddecl)) 
3322             /* From [temp.expl.spec]:
3323                
3324                If a template, a member template or the member of a class
3325                template is explicitly specialized then that
3326                specialization shall be declared before the first use of
3327                that specialization that would cause an implicit
3328                instantiation to take place, in every translation unit in
3329                which such a use occurs.  */
3330             cp_error ("explicit specialization of %D after first use", 
3331                       olddecl);
3332
3333           SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3334         }
3335       DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3336
3337       /* If either decl says `inline', this fn is inline, unless its
3338          definition was passed already.  */
3339       if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3340         DECL_INLINE (olddecl) = 1;
3341       DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3342
3343       if (! types_match)
3344         {
3345           DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3346           DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3347           DECL_RTL (olddecl) = DECL_RTL (newdecl);
3348         }
3349       if (! types_match || new_defines_function)
3350         {
3351           /* These need to be copied so that the names are available.  */
3352           DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3353           DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
3354         }
3355       if (new_defines_function)
3356         /* If defining a function declared with other language
3357            linkage, use the previously declared language linkage.  */
3358         DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3359       else
3360         {
3361           /* If redeclaring a builtin function, and not a definition,
3362              it stays built in.  */
3363           if (DECL_BUILT_IN (olddecl))
3364             {
3365               DECL_BUILT_IN (newdecl) = 1;
3366               DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
3367               /* If we're keeping the built-in definition, keep the rtl,
3368                  regardless of declaration matches.  */
3369               DECL_RTL (newdecl) = DECL_RTL (olddecl);
3370             }
3371           else
3372             DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
3373
3374           DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
3375           if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
3376             /* Previously saved insns go together with
3377                the function's previous definition.  */
3378             DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3379           /* Don't clear out the arguments if we're redefining a function.  */
3380           if (DECL_ARGUMENTS (olddecl))
3381             DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3382         }
3383       if (DECL_LANG_SPECIFIC (olddecl))
3384         DECL_MAIN_VARIANT (newdecl) = DECL_MAIN_VARIANT (olddecl);
3385     }
3386
3387   if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3388     {
3389       NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3390     }
3391
3392   /* Now preserve various other info from the definition.  */
3393   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3394   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3395   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
3396   DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
3397
3398   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3399     {
3400       int function_size;
3401       struct lang_decl *ol = DECL_LANG_SPECIFIC (olddecl);
3402       struct lang_decl *nl = DECL_LANG_SPECIFIC (newdecl);
3403
3404       function_size = sizeof (struct tree_decl);
3405
3406       bcopy ((char *) newdecl + sizeof (struct tree_common),
3407              (char *) olddecl + sizeof (struct tree_common),
3408              function_size - sizeof (struct tree_common));
3409
3410       /* Can we safely free the storage used by newdecl?  */
3411
3412 #define ROUND(x) ((x + obstack_alignment_mask (&permanent_obstack)) \
3413                   & ~ obstack_alignment_mask (&permanent_obstack))
3414
3415       if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3416         {
3417           /* If newdecl is a template instantiation, it is possible that
3418              the following sequence of events has occurred:
3419
3420              o A friend function was declared in a class template.  The
3421              class template was instantiated.  
3422
3423              o The instantiation of the friend declaration was 
3424              recorded on the instantiation list, and is newdecl.  
3425
3426              o Later, however, instantiate_class_template called pushdecl
3427              on the newdecl to perform name injection.  But, pushdecl in
3428              turn called duplicate_decls when it discovered that another
3429              declaration of a global function with the same name already
3430              existed. 
3431
3432              o Here, in duplicate_decls, we decided to clobber newdecl.
3433
3434              If we're going to do that, we'd better make sure that
3435              olddecl, and not newdecl, is on the list of
3436              instantiations so that if we try to do the instantiation
3437              again we won't get the clobbered declaration.  */
3438
3439           tree tmpl = DECL_TI_TEMPLATE (newdecl); 
3440           tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); 
3441
3442           for (; decls; decls = TREE_CHAIN (decls))
3443             if (TREE_VALUE (decls) == newdecl)
3444               TREE_VALUE (decls) = olddecl;
3445         }
3446
3447       if (((char *)newdecl + ROUND (function_size) == (char *)nl
3448            && ((char *)newdecl + ROUND (function_size)
3449                + ROUND (sizeof (struct lang_decl))
3450                == obstack_next_free (&permanent_obstack)))
3451           || ((char *)newdecl + ROUND (function_size)
3452               == obstack_next_free (&permanent_obstack)))
3453         {
3454           DECL_MAIN_VARIANT (newdecl) = olddecl;
3455           DECL_LANG_SPECIFIC (olddecl) = ol;
3456           bcopy ((char *)nl, (char *)ol, sizeof (struct lang_decl));
3457
3458           obstack_free (&permanent_obstack, newdecl);
3459         }
3460       else if (LANG_DECL_PERMANENT (ol) && ol != nl)
3461         {
3462           if (DECL_MAIN_VARIANT (olddecl) == olddecl)
3463             {
3464               /* Save these lang_decls that would otherwise be lost.  */
3465               extern tree free_lang_decl_chain;
3466               tree free_lang_decl = (tree) ol;
3467
3468               if (DECL_LANG_SPECIFIC (olddecl) == ol)
3469                 abort ();
3470
3471               TREE_CHAIN (free_lang_decl) = free_lang_decl_chain;
3472               free_lang_decl_chain = free_lang_decl;
3473             }
3474           else
3475             {
3476               /* Storage leak.  */;
3477             }
3478         }
3479     }
3480   else
3481     {
3482       bcopy ((char *) newdecl + sizeof (struct tree_common),
3483              (char *) olddecl + sizeof (struct tree_common),
3484              sizeof (struct tree_decl) - sizeof (struct tree_common)
3485              + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3486     }
3487
3488   DECL_UID (olddecl) = olddecl_uid;
3489   if (olddecl_friend)
3490     DECL_FRIEND_P (olddecl) = 1;
3491
3492   /* NEWDECL contains the merged attribute lists.
3493      Update OLDDECL to be the same.  */
3494   DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3495
3496   return 1;
3497 }
3498
3499 /* Record a decl-node X as belonging to the current lexical scope.
3500    Check for errors (such as an incompatible declaration for the same
3501    name already seen in the same scope).
3502
3503    Returns either X or an old decl for the same name.
3504    If an old decl is returned, it may have been smashed
3505    to agree with what X says.  */
3506
3507 tree
3508 pushdecl (x)
3509      tree x;
3510 {
3511   register tree t;
3512   register tree name = DECL_ASSEMBLER_NAME (x);
3513   int need_new_binding = 1;
3514
3515   if (current_function_decl && x != current_function_decl
3516       /* A local declaration for a function doesn't constitute nesting.  */
3517       && (TREE_CODE (x) != FUNCTION_DECL || DECL_INITIAL (x))
3518       /* Don't change DECL_CONTEXT of virtual methods.  */
3519       && (TREE_CODE (x) != FUNCTION_DECL || !DECL_VIRTUAL_P (x))
3520       && !DECL_CONTEXT (x))
3521     DECL_CONTEXT (x) = current_function_decl;
3522   if (!DECL_CONTEXT (x))
3523     DECL_CONTEXT (x) = FROB_CONTEXT (current_namespace);
3524
3525   /* Type are looked up using the DECL_NAME, as that is what the rest of the
3526      compiler wants to use.  */
3527   if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
3528       || TREE_CODE (x) == NAMESPACE_DECL || TREE_CODE (x) == TEMPLATE_TYPE_PARM
3529       || TREE_CODE (x) == TEMPLATE_TEMPLATE_PARM)
3530     name = DECL_NAME (x);
3531
3532   if (name)
3533     {
3534 #if 0
3535       /* Not needed...see below.  */
3536       char *file;
3537       int line;
3538 #endif
3539       if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3540         name = TREE_OPERAND (name, 0);
3541       
3542       /* Namespace-scoped variables are not found in the current level. */
3543       if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x))
3544         t = namespace_binding (name, DECL_CONTEXT (x));
3545       else
3546         t = lookup_name_current_level (name);
3547       if (t == error_mark_node)
3548         {
3549           /* error_mark_node is 0 for a while during initialization!  */
3550           t = NULL_TREE;
3551           cp_error_at ("`%#D' used prior to declaration", x);
3552         }
3553
3554       else if (t != NULL_TREE)
3555         {
3556 #if 0
3557           /* This is turned off until I have time to do it right (bpk).  */
3558           /* With the code below that uses it...  */
3559           file = DECL_SOURCE_FILE (t);
3560           line = DECL_SOURCE_LINE (t);
3561 #endif
3562           if (TREE_CODE (t) == PARM_DECL)
3563             {
3564               if (DECL_CONTEXT (t) == NULL_TREE)
3565                 fatal ("parse errors have confused me too much");
3566
3567               /* Check for duplicate params.  */
3568               if (duplicate_decls (x, t))
3569                 return t;
3570             }
3571           else if (((TREE_CODE (x) == FUNCTION_DECL && DECL_LANGUAGE (x) == lang_c)
3572                     || DECL_FUNCTION_TEMPLATE_P (x))
3573                    && is_overloaded_fn (t))
3574             /* Don't do anything just yet. */;
3575           else if (t == wchar_decl_node)
3576             {
3577               if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
3578                 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
3579
3580               /* Throw away the redeclaration.  */
3581               return t;
3582             }
3583           else if (TREE_CODE (t) != TREE_CODE (x))
3584             {
3585               if (duplicate_decls (x, t))
3586                 return t;
3587             }
3588           else if (duplicate_decls (x, t))
3589             {
3590 #if 0
3591               /* This is turned off until I have time to do it right (bpk).  */
3592
3593               /* Also warn if they did a prototype with `static' on it, but
3594                  then later left the `static' off.  */
3595               if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
3596                 {
3597                   if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3598                     return t;
3599
3600                   if (extra_warnings)
3601                     {
3602                       cp_warning ("`static' missing from declaration of `%D'",
3603                                   t);
3604                       warning_with_file_and_line (file, line,
3605                                                   "previous declaration of `%s'",
3606                                                   decl_as_string (t, 0));
3607                     }
3608
3609                   /* Now fix things so it'll do what they expect.  */
3610                   if (current_function_decl)
3611                     TREE_PUBLIC (current_function_decl) = 0;
3612                 }
3613               /* Due to interference in memory reclamation (X may be
3614                  obstack-deallocated at this point), we must guard against
3615                  one really special case.  [jason: This should be handled
3616                  by start_function]  */
3617               if (current_function_decl == x)
3618                 current_function_decl = t;
3619 #endif
3620               if (TREE_CODE (t) == TYPE_DECL)
3621                 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
3622               else if (TREE_CODE (t) == FUNCTION_DECL)
3623                 check_default_args (t);
3624
3625               return t;
3626             }
3627           else if (DECL_MAIN_P (x))
3628             {
3629               /* A redeclaration of main, but not a duplicate of the
3630                  previous one. 
3631
3632                  [basic.start.main]
3633
3634                  This function shall not be overloaded.  */
3635               cp_error_at ("invalid redeclaration of `%D'", t);
3636               cp_error ("as `%D'", x);
3637               /* We don't try to push this declaration since that
3638                  causes a crash.  */
3639               return x;
3640             }
3641         }
3642
3643       check_template_shadow (x);
3644
3645       if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_FUNCTION_MEMBER_P (x))
3646         {
3647           t = push_overloaded_decl (x, 1);
3648           if (t != x || DECL_LANGUAGE (x) == lang_c)
3649             return t;
3650           if (!namespace_bindings_p ())
3651             /* We do not need to create a binding for this name;
3652                push_overloaded_decl will have already done so if
3653                necessary.  */
3654             need_new_binding = 0;
3655         }
3656       else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
3657         return push_overloaded_decl (x, 0);
3658
3659       /* If declaring a type as a typedef, copy the type (unless we're
3660          at line 0), and install this TYPE_DECL as the new type's typedef
3661          name.  See the extensive comment in ../c-decl.c (pushdecl). */
3662       if (TREE_CODE (x) == TYPE_DECL)
3663         {
3664           tree type = TREE_TYPE (x);
3665           if (DECL_SOURCE_LINE (x) == 0)
3666             {
3667               if (TYPE_NAME (type) == 0)
3668                 TYPE_NAME (type) = x;
3669             }
3670           else if (type != error_mark_node && TYPE_NAME (type) != x
3671                    /* We don't want to copy the type when all we're
3672                       doing is making a TYPE_DECL for the purposes of
3673                       inlining.  */
3674                    && (!TYPE_NAME (type) 
3675                        || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
3676             {
3677               push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
3678
3679               DECL_ORIGINAL_TYPE (x) = type;
3680               type = build_type_copy (type);
3681               TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
3682               TYPE_NAME (type) = x;
3683               TREE_TYPE (x) = type;
3684
3685               pop_obstacks ();
3686             }
3687
3688           if (type != error_mark_node
3689               && TYPE_NAME (type)
3690               && TYPE_IDENTIFIER (type))
3691             set_identifier_type_value_with_scope (DECL_NAME (x), type, 
3692                                                   current_binding_level);
3693
3694         }
3695
3696       /* Multiple external decls of the same identifier ought to match.
3697
3698          We get warnings about inline functions where they are defined.
3699          We get warnings about other functions from push_overloaded_decl.
3700          
3701          Avoid duplicate warnings where they are used.  */
3702       if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
3703         {
3704           tree decl;
3705
3706           if (IDENTIFIER_NAMESPACE_VALUE (name) != NULL_TREE
3707               && (DECL_EXTERNAL (IDENTIFIER_NAMESPACE_VALUE (name))
3708                   || TREE_PUBLIC (IDENTIFIER_NAMESPACE_VALUE (name))))
3709             decl = IDENTIFIER_NAMESPACE_VALUE (name);
3710           else
3711             decl = NULL_TREE;
3712
3713           if (decl
3714               /* If different sort of thing, we already gave an error.  */
3715               && TREE_CODE (decl) == TREE_CODE (x)
3716               && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
3717             {
3718               cp_pedwarn ("type mismatch with previous external decl", x);
3719               cp_pedwarn_at ("previous external decl of `%#D'", decl);
3720             }
3721         }
3722
3723       /* This name is new in its binding level.
3724          Install the new declaration and return it.  */
3725       if (namespace_bindings_p ())
3726         {
3727           /* Install a global value.  */
3728
3729           /* If the first global decl has external linkage,
3730              warn if we later see static one.  */
3731           if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
3732             TREE_PUBLIC (name) = 1;
3733
3734           if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
3735                 && t != NULL_TREE))
3736             {
3737               if (TREE_CODE (x) == FUNCTION_DECL)
3738                 my_friendly_assert 
3739                   ((IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
3740                   || (IDENTIFIER_GLOBAL_VALUE (name) == x), 378);
3741               SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
3742             }
3743
3744           /* Don't forget if the function was used via an implicit decl.  */
3745           if (IDENTIFIER_IMPLICIT_DECL (name)
3746               && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
3747             TREE_USED (x) = 1;
3748
3749           /* Don't forget if its address was taken in that way.  */
3750           if (IDENTIFIER_IMPLICIT_DECL (name)
3751               && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
3752             TREE_ADDRESSABLE (x) = 1;
3753
3754           /* Warn about mismatches against previous implicit decl.  */
3755           if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
3756               /* If this real decl matches the implicit, don't complain.  */
3757               && ! (TREE_CODE (x) == FUNCTION_DECL
3758                     && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
3759             cp_warning
3760               ("`%D' was previously implicitly declared to return `int'", x);
3761
3762           /* If new decl is `static' and an `extern' was seen previously,
3763              warn about it.  */
3764           if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
3765             warn_extern_redeclared_static (x, t);
3766         }
3767       else
3768         {
3769           /* Here to install a non-global value.  */
3770           tree oldlocal = IDENTIFIER_VALUE (name);
3771           tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
3772
3773           if (need_new_binding)
3774             {
3775               push_local_binding (name, x);
3776               /* Because push_local_binding will hook X on to the
3777                  current_binding_level's name list, we don't want to
3778                  do that again below.  */
3779               need_new_binding = 0;
3780             }
3781
3782           /* If this is a TYPE_DECL, push it into the type value slot.  */
3783           if (TREE_CODE (x) == TYPE_DECL)
3784             set_identifier_type_value_with_scope (name, TREE_TYPE (x), 
3785                                                   current_binding_level);
3786
3787           /* Clear out any TYPE_DECL shadowed by a namespace so that
3788              we won't think this is a type.  The C struct hack doesn't
3789              go through namespaces.  */
3790           if (TREE_CODE (x) == NAMESPACE_DECL)
3791             set_identifier_type_value_with_scope (name, NULL_TREE, 
3792                                                   current_binding_level);
3793
3794           /* If this is an extern function declaration, see if we
3795              have a global definition or declaration for the function.  */
3796           if (oldlocal == NULL_TREE
3797               && DECL_EXTERNAL (x)
3798               && oldglobal != NULL_TREE
3799               && TREE_CODE (x) == FUNCTION_DECL
3800               && TREE_CODE (oldglobal) == FUNCTION_DECL)
3801             {
3802               /* We have one.  Their types must agree.  */
3803               if (decls_match (x, oldglobal))
3804                 /* OK */;
3805               else
3806                 {
3807                   cp_warning ("extern declaration of `%#D' doesn't match", x);
3808                   cp_warning_at ("global declaration `%#D'", oldglobal);
3809                 }
3810             }
3811           /* If we have a local external declaration,
3812              and no file-scope declaration has yet been seen,
3813              then if we later have a file-scope decl it must not be static.  */
3814           if (oldlocal == NULL_TREE
3815               && oldglobal == NULL_TREE
3816               && DECL_EXTERNAL (x)
3817               && TREE_PUBLIC (x))
3818             TREE_PUBLIC (name) = 1;
3819
3820           if (DECL_FROM_INLINE (x))
3821             /* Inline decls shadow nothing.  */;
3822
3823           /* Warn if shadowing an argument at the top level of the body.  */
3824           else if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
3825               && TREE_CODE (oldlocal) == PARM_DECL
3826               && TREE_CODE (x) != PARM_DECL)
3827             {
3828               /* Go to where the parms should be and see if we
3829                  find them there.  */
3830               struct binding_level *b = current_binding_level->level_chain;
3831
3832               if (cleanup_label)
3833                 b = b->level_chain;
3834
3835               /* ARM $8.3 */
3836               if (b->parm_flag == 1)
3837                 cp_error ("declaration of `%#D' shadows a parameter", name);
3838             }
3839           else if (warn_shadow && oldlocal != NULL_TREE
3840                    && current_binding_level->is_for_scope
3841                    && !DECL_DEAD_FOR_LOCAL (oldlocal))
3842             {
3843               warning ("variable `%s' shadows local",
3844                        IDENTIFIER_POINTER (name));
3845               cp_warning_at ("  this is the shadowed declaration", oldlocal);
3846             }              
3847           /* Maybe warn if shadowing something else.  */
3848           else if (warn_shadow && !DECL_EXTERNAL (x)
3849                    /* No shadow warnings for internally generated vars.  */
3850                    && ! DECL_ARTIFICIAL (x)
3851                    /* No shadow warnings for vars made for inlining.  */
3852                    && ! DECL_FROM_INLINE (x))
3853             {
3854               char *warnstring = NULL;
3855
3856               if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
3857                 warnstring = "declaration of `%s' shadows a parameter";
3858               else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
3859                        && current_class_ptr
3860                        && !TREE_STATIC (name))
3861                 warnstring = "declaration of `%s' shadows a member of `this'";
3862               else if (oldlocal != NULL_TREE)
3863                 warnstring = "declaration of `%s' shadows previous local";
3864               else if (oldglobal != NULL_TREE)
3865                 /* XXX shadow warnings in outer-more namespaces */
3866                 warnstring = "declaration of `%s' shadows global declaration";
3867
3868               if (warnstring)
3869                 warning (warnstring, IDENTIFIER_POINTER (name));
3870             }
3871         }
3872
3873       if (TREE_CODE (x) == FUNCTION_DECL)
3874         check_default_args (x);
3875
3876       /* Keep count of variables in this level with incomplete type.  */
3877       if (TREE_CODE (x) == VAR_DECL
3878           && TREE_TYPE (x) != error_mark_node
3879           && ((TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
3880                && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
3881               /* RTTI TD entries are created while defining the type_info.  */
3882               || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
3883                   && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
3884         current_binding_level->incomplete 
3885           = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
3886     }
3887
3888   if (need_new_binding)
3889     {
3890       /* Put decls on list in reverse order.
3891          We will reverse them later if necessary.  */
3892       TREE_CHAIN (x) = current_binding_level->names;
3893       current_binding_level->names = x;
3894       if (! (current_binding_level != global_binding_level 
3895              || TREE_PERMANENT (x)))
3896         my_friendly_abort (124);
3897     }
3898
3899   return x;
3900 }
3901
3902 /* Same as pushdecl, but define X in binding-level LEVEL.  We rely on the
3903    caller to set DECL_CONTEXT properly.  */
3904
3905 static tree
3906 pushdecl_with_scope (x, level)
3907      tree x;
3908      struct binding_level *level;
3909 {
3910   register struct binding_level *b;
3911   tree function_decl = current_function_decl;
3912
3913   current_function_decl = NULL_TREE;
3914   if (level->parm_flag == 2)
3915     {
3916       b = class_binding_level;
3917       class_binding_level = level;
3918       pushdecl_class_level (x);
3919       class_binding_level = b;
3920     }
3921   else
3922     {
3923       b = current_binding_level;
3924       current_binding_level = level;
3925       x = pushdecl (x);
3926       current_binding_level = b;
3927     }
3928   current_function_decl = function_decl;
3929   return x;
3930 }
3931
3932 /* Like pushdecl, only it places X in the current namespace,
3933    if appropriate.  */
3934
3935 tree
3936 pushdecl_namespace_level (x)
3937      tree x;
3938 {
3939   register struct binding_level *b = inner_binding_level;
3940   register tree t;
3941
3942   t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
3943
3944   /* Now, the type_shadowed stack may screw us.  Munge it so it does
3945      what we want.  */
3946   if (TREE_CODE (x) == TYPE_DECL)
3947     {
3948       tree name = DECL_NAME (x);
3949       tree newval;
3950       tree *ptr = (tree *)0;
3951       for (; b != global_binding_level; b = b->level_chain)
3952         {
3953           tree shadowed = b->type_shadowed;
3954           for (; shadowed; shadowed = TREE_CHAIN (shadowed))
3955             if (TREE_PURPOSE (shadowed) == name)
3956               {
3957                 ptr = &TREE_VALUE (shadowed);
3958                 /* Can't break out of the loop here because sometimes
3959                    a binding level will have duplicate bindings for
3960                    PT names.  It's gross, but I haven't time to fix it.  */
3961               }
3962         }
3963       newval = TREE_TYPE (x);
3964       if (ptr == (tree *)0)
3965         {
3966           /* @@ This shouldn't be needed.  My test case "zstring.cc" trips
3967              up here if this is changed to an assertion.  --KR  */
3968           SET_IDENTIFIER_TYPE_VALUE (name, newval);
3969         }
3970       else
3971         {
3972           *ptr = newval;
3973         }
3974     }
3975   return t;
3976 }
3977
3978 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
3979    if appropriate.  */
3980
3981 tree
3982 pushdecl_top_level (x)
3983      tree x;
3984 {
3985   tree cur_namespace = current_namespace;
3986   current_namespace = global_namespace;
3987   x = pushdecl_namespace_level (x);
3988   current_namespace = cur_namespace;
3989   return x;
3990 }
3991
3992 /* Make the declaration of X appear in CLASS scope.  */
3993
3994 void
3995 pushdecl_class_level (x)
3996      tree x;
3997 {
3998   /* Don't use DECL_ASSEMBLER_NAME here!  Everything that looks in class
3999      scope looks for the pre-mangled name.  */
4000   register tree name = DECL_NAME (x);
4001
4002   if (name)
4003     {
4004       if (TYPE_BEING_DEFINED (current_class_type))
4005         {
4006           /* A name N used in a class S shall refer to the same declaration
4007              in its context and when re-evaluated in the completed scope of S.
4008              Types, enums, and static vars are checked here; other
4009              members are checked in finish_struct.  */
4010           tree icv = IDENTIFIER_CLASS_VALUE (name);
4011
4012           /* This should match check_member_decl_is_same_in_complete_scope.  */
4013           if (icv && icv != x
4014               && flag_optional_diags
4015               /* Don't complain about inherited names.  */
4016               && id_in_current_class (name)
4017               /* Or shadowed tags.  */
4018               && !(DECL_DECLARES_TYPE_P (icv)
4019                    && DECL_CONTEXT (icv) == current_class_type))
4020             {
4021               cp_pedwarn ("declaration of identifier `%D' as `%#D'", name, x);
4022               cp_pedwarn_at ("conflicts with previous use in class as `%#D'",
4023                              icv);
4024             }
4025
4026           check_template_shadow (x);
4027         }
4028
4029       push_class_level_binding (name, x);
4030       if (TREE_CODE (x) == TYPE_DECL)
4031         set_identifier_type_value (name, TREE_TYPE (x));
4032     }
4033 }
4034
4035 #if 0
4036 /* This function is used to push the mangled decls for nested types into
4037    the appropriate scope.  Previously pushdecl_top_level was used, but that
4038    is incorrect for members of local classes.  */
4039
4040 void
4041 pushdecl_nonclass_level (x)
4042      tree x;
4043 {
4044   struct binding_level *b = current_binding_level;
4045
4046   my_friendly_assert (b->parm_flag != 2, 180);
4047
4048 #if 0
4049   /* Get out of template binding levels */
4050   while (b->pseudo_global)
4051     b = b->level_chain;
4052 #endif
4053
4054   pushdecl_with_scope (x, b);
4055 }
4056 #endif
4057
4058 /* Make the declaration(s) of X appear in CLASS scope
4059    under the name NAME.  */
4060
4061 void
4062 push_class_level_binding (name, x)
4063      tree name;
4064      tree x;
4065 {
4066   /* The class_binding_level will be NULL if x is a template 
4067      parameter name in a member template.  */
4068   if (!class_binding_level)
4069     return;
4070
4071   /* If this declaration shadows a declaration from an enclosing
4072      class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4073      we leave this class.  Record the shadowed declaration here.  */
4074   maybe_push_cache_obstack ();
4075   class_binding_level->class_shadowed
4076     = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
4077                  class_binding_level->class_shadowed);
4078   TREE_TYPE (class_binding_level->class_shadowed)
4079     = x;
4080   pop_obstacks ();
4081
4082   /* Put the binding on the stack of bindings for the identifier, and
4083      update IDENTIFIER_CLASS_VALUE.  */
4084   push_class_binding (name, x);
4085
4086   obstack_ptr_grow (&decl_obstack, x);
4087 }
4088
4089 /* Insert another USING_DECL into the current binding level,
4090    returning this declaration. If this is a redeclaration,
4091    do nothing and return NULL_TREE.  */
4092
4093 tree
4094 push_using_decl (scope, name)
4095      tree scope;
4096      tree name;
4097 {
4098   tree decl;
4099   
4100   my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4101   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4102   for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4103     if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4104       break;
4105   if (decl)
4106     return NULL_TREE;
4107   decl = build_lang_decl (USING_DECL, name, void_type_node);
4108   DECL_INITIAL (decl) = scope;
4109   TREE_CHAIN (decl) = current_binding_level->usings;
4110   current_binding_level->usings = decl;
4111   return decl;
4112 }
4113
4114 /* Add namespace to using_directives. Return NULL_TREE if nothing was
4115    changed (i.e. there was already a directive), or the fresh
4116    TREE_LIST otherwise.  */
4117
4118 tree
4119 push_using_directive (used)
4120      tree used;
4121 {
4122   tree ud = current_binding_level->using_directives;
4123   tree iter, ancestor;
4124   
4125   /* Check if we already have this. */
4126   if (purpose_member (used, ud) != NULL_TREE)
4127     return NULL_TREE;
4128
4129   /* Recursively add all namespaces used. */
4130   for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4131     push_using_directive (TREE_PURPOSE (iter));
4132
4133   ancestor = namespace_ancestor (current_decl_namespace (), used);
4134   ud = current_binding_level->using_directives;
4135   ud = perm_tree_cons (used, ancestor, ud);
4136   current_binding_level->using_directives = ud;
4137   return ud;
4138 }
4139
4140 /* DECL is a FUNCTION_DECL for a non-member function, which may have
4141    other definitions already in place.  We get around this by making
4142    the value of the identifier point to a list of all the things that
4143    want to be referenced by that name.  It is then up to the users of
4144    that name to decide what to do with that list.
4145
4146    DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its DECL_RESULT
4147    slot.  It is dealt with the same way.
4148
4149    The value returned may be a previous declaration if we guessed wrong
4150    about what language DECL should belong to (C or C++).  Otherwise,
4151    it's always DECL (and never something that's not a _DECL).  */
4152
4153 static tree
4154 push_overloaded_decl (decl, forgettable)
4155      tree decl;
4156      int forgettable;
4157 {
4158   tree name = DECL_NAME (decl);
4159   tree old;
4160   tree new_binding;
4161   int doing_global = (namespace_bindings_p () || ! forgettable);
4162
4163   if (doing_global)
4164     {
4165       old = namespace_binding (name, DECL_CONTEXT (decl));
4166       if (old && TREE_CODE (old) == FUNCTION_DECL
4167           && DECL_ARTIFICIAL (old)
4168           && (DECL_BUILT_IN (old) || DECL_BUILT_IN_NONANSI (old)))
4169         {
4170           if (duplicate_decls (decl, old))
4171             return old;
4172           old = NULL_TREE;
4173         }
4174     }
4175   else
4176     old = lookup_name_current_level (name);
4177
4178   if (old)
4179     {
4180       if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
4181         {
4182           tree t = TREE_TYPE (old);
4183           if (IS_AGGR_TYPE (t) && warn_shadow
4184               && (! DECL_IN_SYSTEM_HEADER (decl)
4185                   || ! DECL_IN_SYSTEM_HEADER (old)))
4186             cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
4187           old = NULL_TREE;
4188         }
4189       else if (is_overloaded_fn (old))
4190         {
4191           tree tmp;
4192           
4193           for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
4194             if (decl == OVL_CURRENT (tmp) 
4195                 || duplicate_decls (decl, OVL_CURRENT (tmp)))
4196               return OVL_CURRENT (tmp);
4197         }
4198       else
4199         {
4200           cp_error_at ("previous non-function declaration `%#D'", old);
4201           cp_error ("conflicts with function declaration `%#D'", decl);
4202           return decl;
4203         }
4204     }
4205
4206   if (old || TREE_CODE (decl) == TEMPLATE_DECL)
4207     {
4208       if (old && TREE_CODE (old) != OVERLOAD)
4209         new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4210       else
4211         new_binding = ovl_cons (decl, old);
4212     }
4213   else
4214     /* NAME is not ambiguous.  */
4215     new_binding = decl;
4216
4217   if (doing_global)
4218     set_namespace_binding (name, current_namespace, new_binding);
4219   else
4220     {
4221       /* We only create an OVERLOAD if there was a previous binding at
4222          this level.  In that case, we need to remove the old binding
4223          and replace it with the new binding.  We must also run
4224          through the NAMES on the binding level where the name was
4225          bound to update the chain.  */
4226       if (TREE_CODE (new_binding) == OVERLOAD)
4227         {
4228           tree *d;
4229           
4230           for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4231                *d;
4232                d = &TREE_CHAIN (*d))
4233             if (*d == old
4234                 || (TREE_CODE (*d) == TREE_LIST
4235                     && TREE_VALUE (*d) == old))
4236               {
4237                 if (TREE_CODE (*d) == TREE_LIST)
4238                   /* Just replace the old binding with the new.  */
4239                   TREE_VALUE (*d) = new_binding;
4240                 else
4241                   /* Build a TREE_LIST to wrap the OVERLOAD.  */
4242                   *d = build_tree_list (NULL_TREE, new_binding);
4243
4244                 /* And update the CPLUS_BINDING node.  */
4245                 BINDING_VALUE (IDENTIFIER_BINDING (name))
4246                   = new_binding;
4247                 return decl;
4248               }
4249
4250           /* We should always find a previous binding in this case.  */
4251           my_friendly_abort (0);
4252         }
4253
4254       /* Install the new binding.  */
4255       push_local_binding (name, new_binding);
4256     }
4257
4258   return decl;
4259 }
4260 \f
4261 /* Generate an implicit declaration for identifier FUNCTIONID
4262    as a function of type int ().  Print a warning if appropriate.  */
4263
4264 tree
4265 implicitly_declare (functionid)
4266      tree functionid;
4267 {
4268   register tree decl;
4269   int temp = allocation_temporary_p ();
4270
4271   push_obstacks_nochange ();
4272
4273   /* Save the decl permanently so we can warn if definition follows.
4274      In ANSI C, warn_implicit is usually false, so the saves little space.
4275      But in C++, it's usually true, hence the extra code.  */
4276   if (temp && (! warn_implicit || toplevel_bindings_p ()))
4277     end_temporary_allocation ();
4278
4279   /* We used to reuse an old implicit decl here,
4280      but this loses with inline functions because it can clobber
4281      the saved decl chains.  */
4282   decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4283
4284   DECL_EXTERNAL (decl) = 1;
4285   TREE_PUBLIC (decl) = 1;
4286
4287   /* ANSI standard says implicit declarations are in the innermost block.
4288      So we record the decl in the standard fashion.  */
4289   pushdecl (decl);
4290   rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4291
4292   if (warn_implicit
4293       /* Only one warning per identifier.  */
4294       && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4295     {
4296       cp_pedwarn ("implicit declaration of function `%#D'", decl);
4297     }
4298
4299   SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4300
4301   pop_obstacks ();
4302
4303   return decl;
4304 }
4305
4306 /* Return zero if the declaration NEWDECL is valid
4307    when the declaration OLDDECL (assumed to be for the same name)
4308    has already been seen.
4309    Otherwise return an error message format string with a %s
4310    where the identifier should go.  */
4311
4312 static char *
4313 redeclaration_error_message (newdecl, olddecl)
4314      tree newdecl, olddecl;
4315 {
4316   if (TREE_CODE (newdecl) == TYPE_DECL)
4317     {
4318       /* Because C++ can put things into name space for free,
4319          constructs like "typedef struct foo { ... } foo"
4320          would look like an erroneous redeclaration.  */
4321       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
4322         return 0;
4323       else
4324         return "redefinition of `%#D'";
4325     }
4326   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4327     {
4328       /* If this is a pure function, its olddecl will actually be
4329          the original initialization to `0' (which we force to call
4330          abort()).  Don't complain about redefinition in this case.  */
4331       if (DECL_LANG_SPECIFIC (olddecl) && DECL_ABSTRACT_VIRTUAL_P (olddecl))
4332         return 0;
4333
4334       /* If both functions come from different namespaces, this is not
4335          a redeclaration - this is a conflict with a used function. */
4336       if (DECL_NAMESPACE_SCOPE_P (olddecl)
4337           && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
4338         return "`%D' conflicts with used function";
4339
4340       /* We'll complain about linkage mismatches in
4341          warn_extern_redeclared_static.  */
4342
4343       /* Defining the same name twice is no good.  */
4344       if (DECL_INITIAL (olddecl) != NULL_TREE
4345           && DECL_INITIAL (newdecl) != NULL_TREE)
4346         {
4347           if (DECL_NAME (olddecl) == NULL_TREE)
4348             return "`%#D' not declared in class";
4349           else
4350             return "redefinition of `%#D'";
4351         }
4352       return 0;
4353     }
4354   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4355     {
4356       if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
4357            && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4358            && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4359           || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
4360               && TYPE_SIZE (TREE_TYPE (newdecl))
4361               && TYPE_SIZE (TREE_TYPE (olddecl))))
4362         return "redefinition of `%#D'";
4363       return 0;
4364     }
4365   else if (toplevel_bindings_p ())
4366     {
4367       /* Objects declared at top level:  */
4368       /* If at least one is a reference, it's ok.  */
4369       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
4370         return 0;
4371       /* Reject two definitions.  */
4372       return "redefinition of `%#D'";
4373     }
4374   else
4375     {
4376       /* Objects declared with block scope:  */
4377       /* Reject two definitions, and reject a definition
4378          together with an external reference.  */
4379       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
4380         return "redeclaration of `%#D'";
4381       return 0;
4382     }
4383 }
4384 \f
4385 /* Get the LABEL_DECL corresponding to identifier ID as a label.
4386    Create one if none exists so far for the current function.
4387    This function is called for both label definitions and label references.  */
4388
4389 tree
4390 lookup_label (id)
4391      tree id;
4392 {
4393   register tree decl = IDENTIFIER_LABEL_VALUE (id);
4394
4395   if (current_function_decl == NULL_TREE)
4396     {
4397       error ("label `%s' referenced outside of any function",
4398              IDENTIFIER_POINTER (id));
4399       return NULL_TREE;
4400     }
4401
4402   if ((decl == NULL_TREE
4403       || DECL_SOURCE_LINE (decl) == 0)
4404       && (named_label_uses == NULL
4405           || named_label_uses->names_in_scope != current_binding_level->names
4406           || named_label_uses->label_decl != decl))
4407     {
4408       struct named_label_list *new_ent;
4409       new_ent
4410         = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
4411       new_ent->label_decl = decl;
4412       new_ent->names_in_scope = current_binding_level->names;
4413       new_ent->binding_level = current_binding_level;
4414       new_ent->lineno_o_goto = lineno;
4415       new_ent->filename_o_goto = input_filename;
4416       new_ent->next = named_label_uses;
4417       named_label_uses = new_ent;
4418     }
4419
4420   /* Use a label already defined or ref'd with this name.  */
4421   if (decl != NULL_TREE)
4422     {
4423       /* But not if it is inherited and wasn't declared to be inheritable.  */
4424       if (DECL_CONTEXT (decl) != current_function_decl
4425           && ! C_DECLARED_LABEL_FLAG (decl))
4426         return shadow_label (id);
4427       return decl;
4428     }
4429
4430   decl = build_decl (LABEL_DECL, id, void_type_node);
4431
4432   /* Make sure every label has an rtx.  */
4433   label_rtx (decl);
4434
4435   /* A label not explicitly declared must be local to where it's ref'd.  */
4436   DECL_CONTEXT (decl) = current_function_decl;
4437
4438   DECL_MODE (decl) = VOIDmode;
4439
4440   /* Say where one reference is to the label,
4441      for the sake of the error if it is not defined.  */
4442   DECL_SOURCE_LINE (decl) = lineno;
4443   DECL_SOURCE_FILE (decl) = input_filename;
4444
4445   SET_IDENTIFIER_LABEL_VALUE (id, decl);
4446
4447   named_labels = tree_cons (NULL_TREE, decl, named_labels);
4448   named_label_uses->label_decl = decl;
4449
4450   return decl;
4451 }
4452
4453 /* Make a label named NAME in the current function,
4454    shadowing silently any that may be inherited from containing functions
4455    or containing scopes.
4456
4457    Note that valid use, if the label being shadowed
4458    comes from another scope in the same function,
4459    requires calling declare_nonlocal_label right away.  */
4460
4461 tree
4462 shadow_label (name)
4463      tree name;
4464 {
4465   register tree decl = IDENTIFIER_LABEL_VALUE (name);
4466
4467   if (decl != NULL_TREE)
4468     {
4469       shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
4470       SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE);
4471     }
4472
4473   return lookup_label (name);
4474 }
4475
4476 /* Define a label, specifying the location in the source file.
4477    Return the LABEL_DECL node for the label, if the definition is valid.
4478    Otherwise return 0.  */
4479
4480 tree
4481 define_label (filename, line, name)
4482      char *filename;
4483      int line;
4484      tree name;
4485 {
4486   tree decl;
4487
4488   if (minimal_parse_mode)
4489     {
4490       push_obstacks (&permanent_obstack, &permanent_obstack);
4491       decl = build_decl (LABEL_DECL, name, void_type_node);
4492       pop_obstacks ();
4493       DECL_SOURCE_LINE (decl) = line;
4494       DECL_SOURCE_FILE (decl) = filename;
4495       add_tree (decl);
4496       return decl;
4497     }
4498
4499   decl = lookup_label (name);
4500
4501   /* After labels, make any new cleanups go into their
4502      own new (temporary) binding contour.  */
4503   current_binding_level->more_cleanups_ok = 0;
4504
4505   /* If label with this name is known from an outer context, shadow it.  */
4506   if (decl != NULL_TREE && DECL_CONTEXT (decl) != current_function_decl)
4507     {
4508       shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
4509       SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE);
4510       decl = lookup_label (name);
4511     }
4512
4513   if (name == get_identifier ("wchar_t"))
4514     cp_pedwarn ("label named wchar_t");
4515
4516   if (DECL_INITIAL (decl) != NULL_TREE)
4517     {
4518       cp_error ("duplicate label `%D'", decl);
4519       return 0;
4520     }
4521   else
4522     {
4523       struct named_label_list *uses, *prev;
4524       int identified = 0;
4525
4526       /* Mark label as having been defined.  */
4527       DECL_INITIAL (decl) = error_mark_node;
4528       /* Say where in the source.  */
4529       DECL_SOURCE_FILE (decl) = filename;
4530       DECL_SOURCE_LINE (decl) = line;
4531
4532       prev = NULL;
4533       uses = named_label_uses;
4534       while (uses != NULL)
4535         if (uses->label_decl == decl)
4536           {
4537             struct binding_level *b = current_binding_level;
4538             while (b)
4539               {
4540                 tree new_decls = b->names;
4541                 tree old_decls = (b == uses->binding_level)
4542                                   ? uses->names_in_scope : NULL_TREE;
4543                 while (new_decls != old_decls)
4544                   {
4545                     if (TREE_CODE (new_decls) == VAR_DECL
4546                         /* Don't complain about crossing initialization
4547                            of internal entities.  They can't be accessed,
4548                            and they should be cleaned up
4549                            by the time we get to the label.  */
4550                         && ! DECL_ARTIFICIAL (new_decls)
4551                         && !(DECL_INITIAL (new_decls) == NULL_TREE
4552                              && pod_type_p (TREE_TYPE (new_decls))))
4553                       {
4554                         if (! identified) 
4555                           {
4556                             cp_error ("jump to label `%D'", decl);
4557                             error_with_file_and_line (uses->filename_o_goto,
4558                                                       uses->lineno_o_goto,
4559                                                       "  from here");
4560                             identified = 1;
4561                         }
4562                         if (DECL_INITIAL (new_decls)
4563                             || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls)))
4564                           cp_error_at ("  crosses initialization of `%#D'",
4565                                        new_decls);
4566                         else
4567                           cp_error_at ("  enters scope of non-POD `%#D'",
4568                                          new_decls);
4569                       }
4570                     new_decls = TREE_CHAIN (new_decls);
4571                   }
4572                 if (b == uses->binding_level)
4573                   break;
4574                 b = b->level_chain;
4575               }
4576
4577             if (prev != NULL)
4578               prev->next = uses->next;
4579             else
4580               named_label_uses = uses->next;
4581
4582             uses = uses->next;
4583           }
4584         else
4585           {
4586             prev = uses;
4587             uses = uses->next;
4588           }
4589       current_function_return_value = NULL_TREE;
4590       return decl;
4591     }
4592 }
4593
4594 struct cp_switch
4595 {
4596   struct binding_level *level;
4597   struct cp_switch *next;
4598 };
4599
4600 static struct cp_switch *switch_stack;
4601
4602 void
4603 push_switch ()
4604 {
4605   struct cp_switch *p
4606     = (struct cp_switch *) oballoc (sizeof (struct cp_switch));
4607   p->level = current_binding_level;
4608   p->next = switch_stack;
4609   switch_stack = p;
4610 }
4611
4612 void
4613 pop_switch ()
4614 {
4615   switch_stack = switch_stack->next;
4616 }
4617
4618 /* Same, but for CASE labels.  If DECL is NULL_TREE, it's the default.  */
4619 /* XXX Note decl is never actually used. (bpk) */
4620
4621 void
4622 define_case_label ()
4623 {
4624   tree cleanup = last_cleanup_this_contour ();
4625   struct binding_level *b = current_binding_level;
4626   int identified = 0;
4627
4628   if (cleanup)
4629     {
4630       static int explained = 0;
4631       cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
4632       warning ("where case label appears here");
4633       if (!explained)
4634         {
4635           warning ("(enclose actions of previous case statements requiring");
4636           warning ("destructors in their own binding contours.)");
4637           explained = 1;
4638         }
4639     }
4640
4641   for (; b && b != switch_stack->level; b = b->level_chain)
4642     {
4643       tree new_decls = b->names;
4644       for (; new_decls; new_decls = TREE_CHAIN (new_decls))
4645         {
4646           if (TREE_CODE (new_decls) == VAR_DECL
4647               /* Don't complain about crossing initialization
4648                  of internal entities.  They can't be accessed,
4649                  and they should be cleaned up
4650                  by the time we get to the label.  */
4651               && ! DECL_ARTIFICIAL (new_decls)
4652               && ((DECL_INITIAL (new_decls) != NULL_TREE
4653                    && DECL_INITIAL (new_decls) != error_mark_node)
4654                   || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
4655             {
4656               if (! identified)
4657                 error ("jump to case label");
4658               identified = 1;
4659               cp_error_at ("  crosses initialization of `%#D'",
4660                            new_decls);
4661             }
4662         }
4663     }
4664
4665   /* After labels, make any new cleanups go into their
4666      own new (temporary) binding contour.  */
4667
4668   current_binding_level->more_cleanups_ok = 0;
4669   current_function_return_value = NULL_TREE;
4670 }
4671 \f
4672 /* Return the list of declarations of the current level.
4673    Note that this list is in reverse order unless/until
4674    you nreverse it; and when you do nreverse it, you must
4675    store the result back using `storedecls' or you will lose.  */
4676
4677 tree
4678 getdecls ()
4679 {
4680   return current_binding_level->names;
4681 }
4682
4683 /* Return the list of type-tags (for structs, etc) of the current level.  */
4684
4685 tree
4686 gettags ()
4687 {
4688   return current_binding_level->tags;
4689 }
4690
4691 /* Store the list of declarations of the current level.
4692    This is done for the parameter declarations of a function being defined,
4693    after they are modified in the light of any missing parameters.  */
4694
4695 static void
4696 storedecls (decls)
4697      tree decls;
4698 {
4699   current_binding_level->names = decls;
4700 }
4701
4702 /* Similarly, store the list of tags of the current level.  */
4703
4704 static void
4705 storetags (tags)
4706      tree tags;
4707 {
4708   current_binding_level->tags = tags;
4709 }
4710 \f
4711 /* Given NAME, an IDENTIFIER_NODE,
4712    return the structure (or union or enum) definition for that name.
4713    Searches binding levels from BINDING_LEVEL up to the global level.
4714    If THISLEVEL_ONLY is nonzero, searches only the specified context
4715    (but skips any tag-transparent contexts to find one that is
4716    meaningful for tags).
4717    FORM says which kind of type the caller wants;
4718    it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
4719    If the wrong kind of type is found, and it's not a template, an error is
4720    reported.  */
4721
4722 static tree
4723 lookup_tag (form, name, binding_level, thislevel_only)
4724      enum tree_code form;
4725      tree name;
4726      struct binding_level *binding_level;
4727      int thislevel_only;
4728 {
4729   register struct binding_level *level;
4730   /* Non-zero if, we should look past a pseudo-global level, even if
4731      THISLEVEL_ONLY.  */
4732   int allow_pseudo_global = 1;
4733
4734   for (level = binding_level; level; level = level->level_chain)
4735     {
4736       register tree tail;
4737       if (ANON_AGGRNAME_P (name))
4738         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4739           {
4740             /* There's no need for error checking here, because
4741                anon names are unique throughout the compilation.  */
4742             if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
4743               return TREE_VALUE (tail);
4744           }
4745       else if (level->namespace_p)
4746         /* Do namespace lookup. */
4747         for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
4748           {
4749             tree old = binding_for_name (name, tail);
4750
4751             /* If we just skipped past a pseudo global level, even
4752                though THISLEVEL_ONLY, and we find a template class
4753                declaration, then we use the _TYPE node for the
4754                template.  See the example below.  */
4755             if (thislevel_only && !allow_pseudo_global
4756                 && old && BINDING_VALUE (old) 
4757                 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
4758               old = TREE_TYPE (BINDING_VALUE (old));
4759             else 
4760               old = BINDING_TYPE (old);
4761
4762             /* If it has an original type, it is a typedef, and we
4763                should not return it.  */
4764             if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
4765               old = NULL_TREE;
4766             if (old && TREE_CODE (old) != form
4767                 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
4768               {
4769                 cp_error ("`%#D' redeclared as %C", old, form);
4770                 return NULL_TREE;
4771               }
4772             if (old)
4773               return old;
4774             if (thislevel_only || tail == global_namespace)
4775               return NULL_TREE;
4776           }
4777       else
4778         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4779           {
4780             if (TREE_PURPOSE (tail) == name)
4781               {
4782                 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
4783                 /* Should tighten this up; it'll probably permit
4784                    UNION_TYPE and a struct template, for example.  */
4785                 if (code != form
4786                     && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
4787                   {
4788                     /* Definition isn't the kind we were looking for.  */
4789                     cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
4790                               form);
4791                     return NULL_TREE;
4792                   }
4793                 return TREE_VALUE (tail);
4794               }
4795           }
4796       if (thislevel_only && ! level->tag_transparent)
4797         {
4798           if (level->pseudo_global && allow_pseudo_global)
4799             {
4800               /* We must deal with cases like this:
4801                  
4802                    template <class T> struct S;
4803                    template <class T> struct S {};
4804                    
4805                  When looking up `S', for the second declaration, we
4806                  would like to find the first declaration.  But, we
4807                  are in the pseudo-global level created for the
4808                  template parameters, rather than the (surrounding)
4809                  namespace level.  Thus, we keep going one more level,
4810                  even though THISLEVEL_ONLY is non-zero.  */
4811               allow_pseudo_global = 0;
4812               continue;
4813             }
4814           else
4815             return NULL_TREE;
4816         }
4817       if (current_class_type && level->level_chain->namespace_p)
4818         {
4819           /* Try looking in this class's tags before heading into
4820              global binding level.  */
4821           tree context = current_class_type;
4822           while (context)
4823             {
4824               switch (TREE_CODE_CLASS (TREE_CODE (context)))
4825                 {
4826                 tree these_tags;
4827                 case 't':
4828                     these_tags = CLASSTYPE_TAGS (context);
4829                     if (ANON_AGGRNAME_P (name))
4830                       while (these_tags)
4831                         {
4832                           if (TYPE_IDENTIFIER (TREE_VALUE (these_tags))
4833                               == name)
4834                             return TREE_VALUE (tail);
4835                           these_tags = TREE_CHAIN (these_tags);
4836                         }
4837                     else
4838                       while (these_tags)
4839                         {
4840                           if (TREE_PURPOSE (these_tags) == name)
4841                             {
4842                               if (TREE_CODE (TREE_VALUE (these_tags)) != form)
4843                                 {
4844                                   cp_error ("`%#D' redeclared as %C in class scope",
4845                                             TREE_VALUE (tail), form);
4846                                   return NULL_TREE;
4847                                 }
4848                               return TREE_VALUE (tail);
4849                             }
4850                           these_tags = TREE_CHAIN (these_tags);
4851                         }
4852                     /* If this type is not yet complete, then don't
4853                        look at its context.  */
4854                     if (TYPE_SIZE (context) == NULL_TREE)
4855                       goto no_context;
4856                     /* Go to next enclosing type, if any.  */
4857                     context = DECL_CONTEXT (TYPE_MAIN_DECL (context));
4858                     break;
4859                 case 'd':
4860                     context = DECL_CONTEXT (context);
4861                     break;
4862                 default:
4863                     my_friendly_abort (10);
4864                 }
4865               continue;
4866               no_context:
4867               break;
4868             }
4869         }
4870     }
4871   return NULL_TREE;
4872 }
4873
4874 #if 0
4875 void
4876 set_current_level_tags_transparency (tags_transparent)
4877      int tags_transparent;
4878 {
4879   current_binding_level->tag_transparent = tags_transparent;
4880 }
4881 #endif
4882
4883 /* Given a type, find the tag that was defined for it and return the tag name.
4884    Otherwise return 0.  However, the value can never be 0
4885    in the cases in which this is used.
4886
4887    C++: If NAME is non-zero, this is the new name to install.  This is
4888    done when replacing anonymous tags with real tag names.  */
4889
4890 static tree
4891 lookup_tag_reverse (type, name)
4892      tree type;
4893      tree name;
4894 {
4895   register struct binding_level *level;
4896
4897   for (level = current_binding_level; level; level = level->level_chain)
4898     {
4899       register tree tail;
4900       for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4901         {
4902           if (TREE_VALUE (tail) == type)
4903             {
4904               if (name)
4905                 TREE_PURPOSE (tail) = name;
4906               return TREE_PURPOSE (tail);
4907             }
4908         }
4909     }
4910   return NULL_TREE;
4911 }
4912 \f
4913 /* Lookup TYPE in CONTEXT (a chain of nested types or a FUNCTION_DECL).
4914    Return the type value, or NULL_TREE if not found.  */
4915
4916 static tree
4917 lookup_nested_type (type, context)
4918      tree type;
4919      tree context;
4920 {
4921   if (context == NULL_TREE)
4922     return NULL_TREE;
4923   while (context)
4924     {
4925       switch (TREE_CODE (context))
4926         {
4927         case TYPE_DECL:
4928           {
4929             tree ctype = TREE_TYPE (context);
4930             tree match = value_member (type, CLASSTYPE_TAGS (ctype));
4931             if (match)
4932               return TREE_VALUE (match);
4933             context = DECL_CONTEXT (context);
4934
4935             /* When we have a nested class whose member functions have
4936                local types (e.g., a set of enums), we'll arrive here
4937                with the DECL_CONTEXT as the actual RECORD_TYPE node for
4938                the enclosing class.  Instead, we want to make sure we
4939                come back in here with the TYPE_DECL, not the RECORD_TYPE.  */
4940             if (context && TREE_CODE (context) == RECORD_TYPE)
4941               context = TREE_CHAIN (context);
4942           }
4943           break;
4944         case FUNCTION_DECL:
4945           if (TYPE_NAME (type) && TYPE_IDENTIFIER (type))
4946             return lookup_name (TYPE_IDENTIFIER (type), 1);
4947           return NULL_TREE;
4948         default:
4949           my_friendly_abort (12);
4950         }
4951     }
4952   return NULL_TREE;
4953 }
4954
4955 /* Look up NAME in the NAMESPACE.  */
4956
4957 tree
4958 lookup_namespace_name (namespace, name)
4959      tree namespace, name;
4960 {
4961   struct tree_binding _b;
4962   tree val;
4963
4964   my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
4965
4966   if (TREE_CODE (name) == NAMESPACE_DECL)
4967     /* This happens for A::B<int> when B is a namespace. */
4968     return name;
4969   else if (TREE_CODE (name) == TEMPLATE_DECL)
4970     {
4971       /* This happens for A::B where B is a template, and there are no
4972          template arguments.  */
4973       cp_error ("invalid use of `%D'", name);
4974       return error_mark_node;
4975     }
4976
4977   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
4978   
4979   val = binding_init (&_b);
4980   if (!qualified_lookup_using_namespace (name, namespace, val, 0))
4981     return error_mark_node;
4982
4983   if (BINDING_VALUE (val))
4984     {
4985       val = BINDING_VALUE (val);
4986
4987       /* If we have a single function from a using decl, pull it out.  */
4988       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
4989         val = OVL_FUNCTION (val);
4990       return val;
4991     }
4992
4993   cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
4994   return error_mark_node;
4995 }
4996
4997 /* Hash a TYPENAME_TYPE.  K is really of type `tree'.  */
4998
4999 static unsigned long
5000 typename_hash (k)
5001      hash_table_key k;
5002 {
5003   unsigned long hash;
5004   tree t;
5005
5006   t = (tree) k;
5007   hash = (((unsigned long) TYPE_CONTEXT (t))
5008           ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5009
5010   return hash;
5011 }
5012
5013 /* Compare two TYPENAME_TYPEs.  K1 and K2 are really of type `tree'.  */
5014
5015 static boolean
5016 typename_compare (k1, k2)
5017      hash_table_key k1;
5018      hash_table_key k2;
5019 {
5020   tree t1;
5021   tree t2;
5022   tree d1;
5023   tree d2;
5024
5025   t1 = (tree) k1;
5026   t2 = (tree) k2;
5027   d1 = TYPE_NAME (t1);
5028   d2 = TYPE_NAME (t2);
5029   
5030   return (DECL_NAME (d1) == DECL_NAME (d2)
5031           && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
5032           && ((TREE_TYPE (t1) != NULL_TREE) 
5033               == (TREE_TYPE (t2) != NULL_TREE))
5034           && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5035           && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5036 }
5037
5038 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
5039    the type of `T', NAME is the IDENTIFIER_NODE for `t'.  If BASE_TYPE
5040    is non-NULL, this type is being created by the implicit typename
5041    extension, and BASE_TYPE is a type named `t' in some base class of
5042    `T' which depends on template parameters.  
5043
5044    Returns the new TYPENAME_TYPE.  */
5045
5046 tree
5047 build_typename_type (context, name, fullname, base_type)
5048      tree context;
5049      tree name;
5050      tree fullname;
5051      tree base_type;
5052 {
5053   tree t;
5054   tree d;
5055   struct hash_entry* e;
5056
5057   static struct hash_table ht;
5058
5059   push_obstacks (&permanent_obstack, &permanent_obstack);
5060
5061   if (!ht.table
5062       && !hash_table_init (&ht, &hash_newfunc, &typename_hash, 
5063                            &typename_compare))
5064     fatal ("virtual memory exhausted");
5065
5066   /* Build the TYPENAME_TYPE.  */
5067   t = make_lang_type (TYPENAME_TYPE);
5068   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5069   TYPENAME_TYPE_FULLNAME (t) = fullname;
5070   TREE_TYPE (t) = base_type;
5071
5072   /* Build the corresponding TYPE_DECL.  */
5073   d = build_decl (TYPE_DECL, name, t);
5074   TYPE_NAME (TREE_TYPE (d)) = d;
5075   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5076   DECL_CONTEXT (d) = FROB_CONTEXT (context);
5077   DECL_ARTIFICIAL (d) = 1;
5078
5079   /* See if we already have this type.  */
5080   e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5081   if (e)
5082     {
5083       /* This will free not only TREE_TYPE, but the lang-specific data
5084          and the TYPE_DECL as well.  */
5085       obstack_free (&permanent_obstack, t);
5086       t = (tree) e->key;
5087     }
5088   else
5089     /* Insert the type into the table.  */
5090     hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5091
5092   pop_obstacks ();
5093
5094   return t;
5095 }
5096
5097 tree
5098 make_typename_type (context, name)
5099      tree context, name;
5100 {
5101   tree t;
5102   tree fullname;
5103
5104   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
5105     name = TYPE_IDENTIFIER (name);
5106   else if (TREE_CODE (name) == TYPE_DECL)
5107     name = DECL_NAME (name);
5108
5109   fullname = name;
5110
5111   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5112     {
5113       name = TREE_OPERAND (name, 0);
5114       if (TREE_CODE (name) == TEMPLATE_DECL)
5115         name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5116     }
5117   if (TREE_CODE (name) != IDENTIFIER_NODE)
5118     my_friendly_abort (2000);
5119
5120   if (TREE_CODE (context) == NAMESPACE_DECL)
5121     {
5122       /* We can get here from typename_sub0 in the explicit_template_type
5123          expansion.  Just fail.  */
5124       cp_error ("no class template named `%#T' in `%#T'",
5125                 name, context);
5126       return error_mark_node;
5127     }
5128
5129   if (! uses_template_parms (context)
5130       || currently_open_class (context))
5131     {
5132       if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5133         {
5134           if (IS_AGGR_TYPE (context))
5135             t = lookup_field (context, name, 0, 0);
5136           else
5137             t = NULL_TREE;
5138
5139           if (t == NULL_TREE || TREE_CODE (t) != TEMPLATE_DECL
5140               || TREE_CODE (DECL_RESULT (t)) != TYPE_DECL)
5141             {
5142               cp_error ("no class template named `%#T' in `%#T'",
5143                         name, context);
5144               return error_mark_node;
5145             }
5146
5147           return lookup_template_class (t, TREE_OPERAND (fullname, 1),
5148                                         NULL_TREE, context, 
5149                                         /*entering_scope=*/0);
5150         }
5151       else
5152         {
5153           if (IS_AGGR_TYPE (context))
5154             t = lookup_field (context, name, 0, 1);
5155           else
5156             t = NULL_TREE;
5157
5158           if (t == NULL_TREE)
5159             {
5160               cp_error ("no type named `%#T' in `%#T'", name, context);
5161               return error_mark_node;
5162             }
5163
5164           return TREE_TYPE (t);
5165         }
5166     }
5167   
5168   return build_typename_type (context, name, fullname,  NULL_TREE);
5169 }
5170
5171 /* Select the right _DECL from multiple choices. */
5172
5173 static tree
5174 select_decl (binding, flags)
5175      tree binding;
5176      int flags;
5177 {
5178   tree val;
5179   val = BINDING_VALUE (binding);
5180   if (LOOKUP_NAMESPACES_ONLY (flags))
5181     {
5182       /* We are not interested in types. */
5183       if (val && TREE_CODE (val) == NAMESPACE_DECL)
5184         return val;
5185       return NULL_TREE;
5186     }
5187   
5188   /* If we could have a type and
5189      we have nothing or we need a type and have none.  */
5190   if (BINDING_TYPE (binding)
5191       && (!val || ((flags & LOOKUP_PREFER_TYPES)
5192                    && TREE_CODE (val) != TYPE_DECL)))
5193     val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5194   /* Don't return non-types if we really prefer types. */
5195   else if (val && LOOKUP_TYPES_ONLY (flags)  && TREE_CODE (val) != TYPE_DECL
5196            && (!looking_for_template || TREE_CODE (val) != TEMPLATE_DECL))
5197     val = NULL_TREE;
5198
5199   return val;
5200 }
5201
5202 /* Unscoped lookup of a global, iterate over namespaces, considering
5203    using namespace statements. */
5204
5205 static tree
5206 unqualified_namespace_lookup (name, flags)
5207      tree name;
5208      int flags;
5209 {
5210   struct tree_binding _binding;
5211   tree b = binding_init (&_binding);
5212   tree initial = current_decl_namespace();
5213   tree scope = initial;
5214   tree siter;
5215   struct binding_level *level;
5216   tree val = NULL_TREE;
5217
5218   while (!val)
5219     {
5220       val = binding_for_name (name, scope);
5221
5222       /* Initialize binding for this context. */
5223       BINDING_VALUE (b) = BINDING_VALUE (val);
5224       BINDING_TYPE (b) = BINDING_TYPE (val);
5225
5226       /* Add all _DECLs seen through local using-directives. */
5227       for (level = current_binding_level; 
5228            !level->namespace_p;
5229            level = level->level_chain)
5230         if (!lookup_using_namespace (name, b, level->using_directives,
5231                                      scope, flags))
5232           /* Give up because of error. */
5233           return NULL_TREE;
5234
5235       /* Add all _DECLs seen through global using-directives. */
5236       /* XXX local and global using lists should work equally. */
5237       siter = initial;
5238       while (1)
5239         {
5240           if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter), 
5241                                        scope, flags))
5242             /* Give up because of error. */
5243             return NULL_TREE;
5244           if (siter == scope) break;
5245           siter = CP_DECL_CONTEXT (siter);
5246         }
5247
5248       val = select_decl (b, flags);
5249       if (scope == global_namespace)
5250         break;
5251       scope = CP_DECL_CONTEXT (scope);
5252     }
5253   return val;
5254 }
5255
5256 /* Combine prefer_type and namespaces_only into flags.  */
5257
5258 static int
5259 lookup_flags (prefer_type, namespaces_only)
5260   int prefer_type, namespaces_only;
5261 {
5262   if (namespaces_only)
5263     return LOOKUP_PREFER_NAMESPACES;
5264   if (prefer_type > 1)
5265     return LOOKUP_PREFER_TYPES;
5266   if (prefer_type > 0)
5267     return LOOKUP_PREFER_BOTH;
5268   return 0;
5269 }
5270
5271 /* Given a lookup that returned VAL, use FLAGS to decide if we want to
5272    ignore it or not.  Subroutine of lookup_name_real.  */
5273
5274 static tree
5275 qualify_lookup (val, flags)
5276      tree val;
5277      int flags;
5278 {
5279   if (val == NULL_TREE)
5280     return val;
5281   if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5282     return val;
5283   if ((flags & LOOKUP_PREFER_TYPES)
5284       && (TREE_CODE (val) == TYPE_DECL
5285           || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5286               && DECL_CLASS_TEMPLATE_P (val))))
5287     return val;
5288   if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
5289     return NULL_TREE;
5290   return val;
5291 }
5292
5293 /* Look up NAME in the current binding level and its superiors in the
5294    namespace of variables, functions and typedefs.  Return a ..._DECL
5295    node of some kind representing its definition if there is only one
5296    such declaration, or return a TREE_LIST with all the overloaded
5297    definitions if there are many, or return 0 if it is undefined.
5298
5299    If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5300    If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
5301    If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
5302    Otherwise we prefer non-TYPE_DECLs.  
5303
5304    If NONCLASS is non-zero, we don't look for the NAME in class scope,
5305    using IDENTIFIER_CLASS_VALUE.  */
5306
5307 static tree
5308 lookup_name_real (name, prefer_type, nonclass, namespaces_only)
5309      tree name;
5310      int prefer_type, nonclass, namespaces_only;
5311 {
5312   register tree val;
5313   int yylex = 0;
5314   tree from_obj = NULL_TREE;
5315   int flags;
5316
5317   /* Hack: copy flag set by parser, if set. */
5318   if (only_namespace_names)
5319     namespaces_only = 1;
5320
5321   if (prefer_type == -2)
5322     {
5323       extern int looking_for_typename;
5324       tree type = NULL_TREE;
5325
5326       yylex = 1;
5327       prefer_type = looking_for_typename;
5328
5329       flags = lookup_flags (prefer_type, namespaces_only);
5330       /* During parsing, we need to complain. */
5331       flags |= LOOKUP_COMPLAIN;
5332       /* If the next thing is '<', class templates are types. */
5333       if (looking_for_template)
5334         flags |= LOOKUP_TEMPLATES_EXPECTED;
5335
5336       /* std:: becomes :: for now.  */
5337       if (got_scope == std_node)
5338         got_scope = void_type_node;
5339
5340       if (got_scope)
5341         type = got_scope;
5342       else if (got_object != error_mark_node)
5343         type = got_object;
5344       
5345       if (type)
5346         {
5347           if (type == error_mark_node)
5348             return error_mark_node;
5349           if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5350             type = TREE_TYPE (type);
5351
5352           if (TYPE_P (type))
5353             type = complete_type (type);
5354
5355           if (TREE_CODE (type) == VOID_TYPE)
5356             type = global_namespace;
5357           if (TREE_CODE (type) == NAMESPACE_DECL)
5358             {
5359               struct tree_binding b;
5360               val = binding_init (&b);
5361               if (!qualified_lookup_using_namespace (name, type, val, flags))
5362                 return NULL_TREE;
5363               val = select_decl (val, flags);
5364             }
5365           else if (! IS_AGGR_TYPE (type)
5366                    || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5367                    || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
5368                    || TREE_CODE (type) == TYPENAME_TYPE)
5369             /* Someone else will give an error about this if needed.  */
5370             val = NULL_TREE;
5371           else if (TYPE_BEING_DEFINED (type))
5372             {
5373               val = IDENTIFIER_CLASS_VALUE (name);
5374               if (val && DECL_CONTEXT (val) != type)
5375                 {
5376                   struct binding_level *b = class_binding_level;
5377                   for (val = NULL_TREE; b; b = b->level_chain)
5378                     {
5379                       tree t = purpose_member (name, b->class_shadowed);
5380                       if (t && TREE_VALUE (t)
5381                           && DECL_CONTEXT (TREE_VALUE (t)) == type)
5382                         {
5383                           val = TREE_VALUE (t);
5384                           break;
5385                         }
5386                     }
5387                 }
5388               if (val == NULL_TREE)
5389                 val = lookup_field (type, name, 0, 1);
5390             }
5391           else if (type == current_class_type)
5392             val = IDENTIFIER_CLASS_VALUE (name);
5393           else
5394             val = lookup_member (type, name, 0, prefer_type);
5395         }
5396       else
5397         val = NULL_TREE;
5398
5399       if (got_scope)
5400         goto done;
5401       else if (got_object && val)
5402         from_obj = val;
5403     }
5404   else
5405     flags = lookup_flags (prefer_type, namespaces_only);
5406
5407   /* First, look in non-namespace scopes.  */
5408   val = IDENTIFIER_BINDING (name); 
5409   for (val = IDENTIFIER_BINDING (name); val; val = TREE_CHAIN (val))
5410     {
5411       if (!LOCAL_BINDING_P (val) && nonclass)
5412         /* We're not looking for class-scoped bindings, so keep going.  */
5413         continue;
5414       
5415       /* If this is the kind of thing we're looking for, we're done.  */
5416       if (qualify_lookup (BINDING_VALUE (val), flags))
5417         {
5418           val = BINDING_VALUE (val);
5419           break;
5420         }
5421       else if ((flags & LOOKUP_PREFER_TYPES) 
5422                && qualify_lookup (BINDING_TYPE (val), flags))
5423         {
5424           val = BINDING_TYPE (val);
5425           break;
5426         }
5427     }
5428
5429   /* If VAL is a type from a dependent base, we're not really supposed
5430      to be able to see it; the fact that we can is the "implicit
5431      typename" extension.  We call lookup_field here to turn VAL into
5432      a TYPE_DECL for a TYPENAME_TYPE.  */
5433   if (processing_template_decl && val
5434       && val == IDENTIFIER_CLASS_VALUE (name)
5435       && TREE_CODE (val) == TYPE_DECL
5436       && !currently_open_class (DECL_CONTEXT (val))
5437       && uses_template_parms (current_class_type))
5438     val = lookup_field (current_class_type, name, 0, 1);
5439
5440   /* We don't put names from baseclasses onto the IDENTIFIER_BINDING
5441      list when we're defining a type.  It would probably be simpler to
5442      do this, but we don't.  So, we must lookup names from base
5443      classes explicitly.  */
5444   if (!val && !nonclass 
5445       && current_class_type && TYPE_BEING_DEFINED (current_class_type))
5446     {
5447       val = qualify_lookup (lookup_field (current_class_type, name, 0, 0),
5448                             flags);
5449       if (!val)
5450         val = qualify_lookup (lookup_nested_field (name, !yylex),
5451                               flags);
5452     }
5453   
5454   /* If we found a type from a dependent base class (using the
5455      implicit typename extension) make sure that there's not some
5456      global name which should be chosen instead.  */
5457   if (val && TREE_CODE (val) == TYPE_DECL
5458       && IMPLICIT_TYPENAME_P (TREE_TYPE (val)))
5459     {
5460       tree global_val;
5461
5462       /* Any other name takes precedence over an implicit typename.  Warn the
5463          user about this potentially confusing lookup.  */
5464       global_val = unqualified_namespace_lookup (name, flags);
5465
5466       if (global_val)
5467         {
5468           tree subtype;
5469
5470           /* Only warn when not lexing; we don't want to warn if they
5471              use this name as a declarator.  */
5472           subtype = TREE_TYPE (TREE_TYPE (val));
5473           if (! yylex
5474               && ! (TREE_CODE (global_val) == TEMPLATE_DECL
5475                     && CLASSTYPE_TEMPLATE_INFO (subtype)
5476                     && CLASSTYPE_TI_TEMPLATE (subtype) == global_val)
5477               && ! (TREE_CODE (global_val) == TYPE_DECL
5478                     && same_type_p (TREE_TYPE (global_val), subtype)))
5479             {
5480               cp_warning ("lookup of `%D' finds `%#D'", name, global_val);
5481               cp_warning ("  instead of `%D' from dependent base class",
5482                           val);
5483               cp_warning ("  (use `typename %T::%D' if that's what you meant)",
5484                           constructor_name (current_class_type), name);
5485             }
5486
5487           /* Use the global value instead of the implicit typename.  */
5488           val = global_val;
5489         }
5490     }
5491   else if (!val)
5492     /* No local, or class-scoped binding.  Look for a namespace-scope
5493        declaration.  */
5494     val = unqualified_namespace_lookup (name, flags);
5495
5496  done:
5497   if (val)
5498     {
5499       /* This should only warn about types used in qualified-ids.  */
5500       if (from_obj && from_obj != val)
5501         {
5502           if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
5503               && TREE_CODE (val) == TYPE_DECL
5504               && TREE_TYPE (from_obj) != TREE_TYPE (val))
5505             {
5506               cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
5507                           name, got_object, TREE_TYPE (from_obj));
5508               cp_pedwarn ("  does not match lookup in the current scope (`%#T')",
5509                           TREE_TYPE (val));
5510             }
5511
5512           /* We don't change val to from_obj if got_object depends on
5513              template parms because that breaks implicit typename for
5514              destructor calls.  */
5515           if (! uses_template_parms (got_object))
5516             val = from_obj;
5517         }
5518
5519       /* If we have a single function from a using decl, pull it out.  */
5520       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5521         val = OVL_FUNCTION (val);
5522     }
5523   else if (from_obj)
5524     val = from_obj;
5525
5526   return val;
5527 }
5528
5529 tree
5530 lookup_name_nonclass (name)
5531      tree name;
5532 {
5533   return lookup_name_real (name, 0, 1, 0);
5534 }
5535
5536 tree
5537 lookup_function_nonclass (name, args)
5538      tree name;
5539      tree args;
5540 {
5541   return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
5542 }
5543
5544 tree
5545 lookup_name_namespace_only (name)
5546      tree name;
5547 {
5548   /* type-or-namespace, nonclass, namespace_only */
5549   return lookup_name_real (name, 1, 1, 1);
5550 }
5551
5552 tree
5553 lookup_name (name, prefer_type)
5554      tree name;
5555      int prefer_type;
5556 {
5557   return lookup_name_real (name, prefer_type, 0, 0);
5558 }
5559
5560 /* Similar to `lookup_name' but look only at current binding level.  */
5561
5562 tree
5563 lookup_name_current_level (name)
5564      tree name;
5565 {
5566   register tree t = NULL_TREE;
5567
5568   if (current_binding_level->namespace_p)
5569     {
5570       t =  IDENTIFIER_NAMESPACE_VALUE (name);
5571
5572       /* extern "C" function() */
5573       if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
5574         t = TREE_VALUE (t);
5575     }
5576   else if (IDENTIFIER_BINDING (name) 
5577            && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
5578     {
5579       struct binding_level *b = current_binding_level;
5580
5581       while (1)
5582         {
5583           if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
5584             return IDENTIFIER_VALUE (name);
5585           
5586           if (b->keep == 2)
5587             b = b->level_chain;
5588           else
5589             break;
5590         }
5591     }
5592
5593   return t;
5594 }
5595
5596 /* Like lookup_name_current_level, but for types.  */
5597
5598 tree
5599 lookup_type_current_level (name)
5600      tree name;
5601 {
5602   register tree t = NULL_TREE;
5603
5604   my_friendly_assert (! current_binding_level->namespace_p, 980716);
5605
5606   if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
5607       && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
5608     {
5609       struct binding_level *b = current_binding_level;
5610       while (1)
5611         {
5612           if (purpose_member (name, b->type_shadowed))
5613             return REAL_IDENTIFIER_TYPE_VALUE (name);
5614           if (b->keep == 2)
5615             b = b->level_chain;
5616           else
5617             break;
5618         }
5619     }
5620
5621   return t;
5622 }
5623
5624 void
5625 begin_only_namespace_names ()
5626 {
5627   only_namespace_names = 1;
5628 }
5629
5630 void
5631 end_only_namespace_names ()
5632 {
5633   only_namespace_names = 0;
5634 }
5635 \f
5636 /* Arrange for the user to get a source line number, even when the
5637    compiler is going down in flames, so that she at least has a
5638    chance of working around problems in the compiler.  We used to
5639    call error(), but that let the segmentation fault continue
5640    through; now, it's much more passive by asking them to send the
5641    maintainers mail about the problem.  */
5642
5643 static void
5644 signal_catch (sig)
5645      int sig ATTRIBUTE_UNUSED;
5646 {
5647   signal (SIGSEGV, SIG_DFL);
5648 #ifdef SIGIOT
5649   signal (SIGIOT, SIG_DFL);
5650 #endif
5651 #ifdef SIGILL
5652   signal (SIGILL, SIG_DFL);
5653 #endif
5654 #ifdef SIGABRT
5655   signal (SIGABRT, SIG_DFL);
5656 #endif
5657 #ifdef SIGBUS
5658   signal (SIGBUS, SIG_DFL);
5659 #endif
5660   my_friendly_abort (0);
5661 }
5662
5663 #if 0
5664 /* Unused -- brendan 970107 */
5665 /* Array for holding types considered "built-in".  These types
5666    are output in the module in which `main' is defined.  */
5667 static tree *builtin_type_tdescs_arr;
5668 static int builtin_type_tdescs_len, builtin_type_tdescs_max;
5669 #endif
5670
5671 /* Push the declarations of builtin types into the namespace.
5672    RID_INDEX, if < RID_MAX is the index of the builtin type
5673    in the array RID_POINTERS.  NAME is the name used when looking
5674    up the builtin type.  TYPE is the _TYPE node for the builtin type.  */
5675
5676 static void
5677 record_builtin_type (rid_index, name, type)
5678      enum rid rid_index;
5679      char *name;
5680      tree type;
5681 {
5682   tree rname = NULL_TREE, tname = NULL_TREE;
5683   tree tdecl = NULL_TREE;
5684
5685   if ((int) rid_index < (int) RID_MAX)
5686     rname = ridpointers[(int) rid_index];
5687   if (name)
5688     tname = get_identifier (name);
5689
5690   TYPE_BUILT_IN (type) = 1;
5691   
5692   if (tname)
5693     {
5694       tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
5695       set_identifier_type_value (tname, NULL_TREE);
5696       if ((int) rid_index < (int) RID_MAX)
5697         /* Built-in types live in the global namespace. */
5698         SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
5699     }
5700   if (rname != NULL_TREE)
5701     {
5702       if (tname != NULL_TREE)
5703         {
5704           set_identifier_type_value (rname, NULL_TREE);
5705           SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
5706         }
5707       else
5708         {
5709           tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
5710           set_identifier_type_value (rname, NULL_TREE);
5711         }
5712     }
5713 }
5714
5715 /* Record one of the standard Java types.
5716  * Declare it as having the given NAME.
5717  * If SIZE > 0, it is the size of one of the integral types;
5718  * otherwise it is the negative of the size of one of the other types.  */
5719
5720 static tree
5721 record_builtin_java_type (name, size)
5722      char *name;
5723      int size;
5724 {
5725   tree type, decl;
5726   if (size > 0)
5727     type = make_signed_type (size);
5728   else if (size > -32)
5729     { /* "__java_char" or ""__java_boolean". */
5730       type = make_unsigned_type (-size);
5731       /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
5732     }
5733   else
5734     { /* "__java_float" or ""__java_double". */
5735       type = make_node (REAL_TYPE);
5736       TYPE_PRECISION (type) = - size;
5737       layout_type (type);
5738     }
5739   record_builtin_type (RID_MAX, name, type);
5740   decl = TYPE_NAME (type);
5741   DECL_IGNORED_P (decl) = 1;
5742   TYPE_FOR_JAVA (type) = 1;
5743   return type;
5744 }
5745
5746 /* Push a type into the namespace so that the back-ends ignore it. */
5747
5748 static void
5749 record_unknown_type (type, name)
5750      tree type;
5751      char *name;
5752 {
5753   tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
5754   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
5755   DECL_IGNORED_P (decl) = 1;
5756   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5757   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
5758   TYPE_ALIGN (type) = 1;
5759   TYPE_MODE (type) = TYPE_MODE (void_type_node);
5760
5761
5762 /* Push overloaded decl, in global scope, with one argument so it
5763    can be used as a callback from define_function.  */
5764
5765 static void
5766 push_overloaded_decl_1 (x)
5767      tree x;
5768 {
5769   push_overloaded_decl (x, 0);
5770 }
5771
5772 #ifdef __GNUC__
5773 __inline
5774 #endif
5775 tree
5776 auto_function (name, type, code)
5777      tree name, type;
5778      enum built_in_function code;
5779 {
5780   return define_function
5781     (IDENTIFIER_POINTER (name), type, code, push_overloaded_decl_1,
5782      IDENTIFIER_POINTER (build_decl_overload (name, TYPE_ARG_TYPES (type),
5783                                               0)));
5784 }
5785
5786 /* Create the predefined scalar types of C,
5787    and some nodes representing standard constants (0, 1, (void *)0).
5788    Initialize the global binding level.
5789    Make definitions for built-in primitive functions.  */
5790
5791 void
5792 init_decl_processing ()
5793 {
5794   register tree endlink, int_endlink, double_endlink, unsigned_endlink;
5795   tree fields[20];
5796   /* Data type of memcpy.  */
5797   tree memcpy_ftype, strlen_ftype;
5798   int wchar_type_size;
5799   tree temp;
5800   tree array_domain_type;
5801   tree vb_off_identifier = NULL_TREE;
5802   /* Function type `char *(char *, char *)' and similar ones */
5803   tree string_ftype_ptr_ptr, int_ftype_string_string;
5804   tree sizetype_endlink;
5805   tree ptr_ftype, ptr_ftype_unsigned, ptr_ftype_sizetype;
5806   tree void_ftype, void_ftype_int, void_ftype_ptr;
5807
5808   /* Have to make these distinct before we try using them.  */
5809   lang_name_cplusplus = get_identifier ("C++");
5810   lang_name_c = get_identifier ("C");
5811   lang_name_java = get_identifier ("Java");
5812
5813   /* Enter the global namespace. */
5814   my_friendly_assert (global_namespace == NULL_TREE, 375);
5815   my_friendly_assert (current_lang_name == NULL_TREE, 375);
5816   current_lang_name = lang_name_cplusplus;
5817   push_namespace (get_identifier ("::"));
5818   global_namespace = current_namespace;
5819   current_lang_name = NULL_TREE;
5820
5821   if (flag_strict_prototype == 2)
5822     flag_strict_prototype = pedantic;
5823   if (! flag_permissive && ! pedantic)
5824     flag_pedantic_errors = 1;
5825
5826   strict_prototypes_lang_c = flag_strict_prototype;
5827
5828   /* Initially, C.  */
5829   current_lang_name = lang_name_c;
5830
5831   current_function_decl = NULL_TREE;
5832   named_labels = NULL_TREE;
5833   named_label_uses = NULL;
5834   current_binding_level = NULL_BINDING_LEVEL;
5835   free_binding_level = NULL_BINDING_LEVEL;
5836
5837   /* Because most segmentation signals can be traced back into user
5838      code, catch them and at least give the user a chance of working
5839      around compiler bugs.  */
5840   signal (SIGSEGV, signal_catch);
5841
5842   /* We will also catch aborts in the back-end through signal_catch and
5843      give the user a chance to see where the error might be, and to defeat
5844      aborts in the back-end when there have been errors previously in their
5845      code.  */
5846 #ifdef SIGIOT
5847   signal (SIGIOT, signal_catch);
5848 #endif
5849 #ifdef SIGILL
5850   signal (SIGILL, signal_catch);
5851 #endif
5852 #ifdef SIGABRT
5853   signal (SIGABRT, signal_catch);
5854 #endif
5855 #ifdef SIGBUS
5856   signal (SIGBUS, signal_catch);
5857 #endif
5858
5859   gcc_obstack_init (&decl_obstack);
5860
5861   /* Must lay these out before anything else gets laid out.  */
5862   error_mark_node = make_node (ERROR_MARK);
5863   TREE_PERMANENT (error_mark_node) = 1;
5864   TREE_TYPE (error_mark_node) = error_mark_node;
5865   error_mark_list = build_tree_list (error_mark_node, error_mark_node);
5866   TREE_TYPE (error_mark_list) = error_mark_node;
5867
5868   /* Make the binding_level structure for global names.  */
5869   pushlevel (0);
5870   global_binding_level = current_binding_level;
5871   /* The global level is the namespace level of ::.  */
5872   NAMESPACE_LEVEL (global_namespace) = global_binding_level;
5873   declare_namespace_level ();
5874
5875   this_identifier = get_identifier (THIS_NAME);
5876   in_charge_identifier = get_identifier (IN_CHARGE_NAME);
5877   ctor_identifier = get_identifier (CTOR_NAME);
5878   dtor_identifier = get_identifier (DTOR_NAME);
5879   pfn_identifier = get_identifier (VTABLE_PFN_NAME);
5880   index_identifier = get_identifier (VTABLE_INDEX_NAME);
5881   delta_identifier = get_identifier (VTABLE_DELTA_NAME);
5882   delta2_identifier = get_identifier (VTABLE_DELTA2_NAME);
5883   pfn_or_delta2_identifier = get_identifier ("__pfn_or_delta2");
5884   if (flag_handle_signatures)
5885     {
5886       tag_identifier = get_identifier (SIGTABLE_TAG_NAME);
5887       vb_off_identifier = get_identifier (SIGTABLE_VB_OFF_NAME);
5888       vt_off_identifier = get_identifier (SIGTABLE_VT_OFF_NAME);
5889     }
5890
5891   /* Define `int' and `char' first so that dbx will output them first.  */
5892
5893   integer_type_node = make_signed_type (INT_TYPE_SIZE);
5894   record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
5895
5896   /* Define `char', which is like either `signed char' or `unsigned char'
5897      but not the same as either.  */
5898
5899   char_type_node
5900     = (flag_signed_char
5901        ? make_signed_type (CHAR_TYPE_SIZE)
5902        : make_unsigned_type (CHAR_TYPE_SIZE));
5903   record_builtin_type (RID_CHAR, "char", char_type_node);
5904
5905   long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
5906   record_builtin_type (RID_LONG, "long int", long_integer_type_node);
5907
5908   unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
5909   record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
5910
5911   long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
5912   record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
5913   record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
5914
5915   long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
5916   record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
5917
5918   long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
5919   record_builtin_type (RID_MAX, "long long unsigned int",
5920                        long_long_unsigned_type_node);
5921   record_builtin_type (RID_MAX, "long long unsigned",
5922                        long_long_unsigned_type_node);
5923
5924   short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
5925   record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
5926   short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
5927   record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
5928   record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
5929
5930   /* `unsigned long' is the standard type for sizeof.
5931      Note that stddef.h uses `unsigned long',
5932      and this must agree, even if long and int are the same size.  */
5933   set_sizetype
5934     (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
5935
5936   ptrdiff_type_node
5937     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
5938
5939   /* Define both `signed char' and `unsigned char'.  */
5940   signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
5941   record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
5942   unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
5943   record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
5944
5945   /* These are types that type_for_size and type_for_mode use.  */
5946   intQI_type_node = make_signed_type (GET_MODE_BITSIZE (QImode));
5947   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
5948   intHI_type_node = make_signed_type (GET_MODE_BITSIZE (HImode));
5949   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
5950   intSI_type_node = make_signed_type (GET_MODE_BITSIZE (SImode));
5951   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
5952   intDI_type_node = make_signed_type (GET_MODE_BITSIZE (DImode));
5953   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
5954 #if HOST_BITS_PER_WIDE_INT >= 64
5955   intTI_type_node = make_signed_type (GET_MODE_BITSIZE (TImode));
5956   pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
5957 #endif
5958   unsigned_intQI_type_node = make_unsigned_type (GET_MODE_BITSIZE (QImode));
5959   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
5960   unsigned_intHI_type_node = make_unsigned_type (GET_MODE_BITSIZE (HImode));
5961   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
5962   unsigned_intSI_type_node = make_unsigned_type (GET_MODE_BITSIZE (SImode));
5963   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
5964   unsigned_intDI_type_node = make_unsigned_type (GET_MODE_BITSIZE (DImode));
5965   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
5966 #if HOST_BITS_PER_WIDE_INT >= 64
5967   unsigned_intTI_type_node = make_unsigned_type (GET_MODE_BITSIZE (TImode));
5968   pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
5969 #endif
5970
5971   float_type_node = make_node (REAL_TYPE);
5972   TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
5973   record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
5974   layout_type (float_type_node);
5975
5976   double_type_node = make_node (REAL_TYPE);
5977   if (flag_short_double)
5978     TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
5979   else
5980     TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
5981   record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
5982   layout_type (double_type_node);
5983
5984   long_double_type_node = make_node (REAL_TYPE);
5985   TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
5986   record_builtin_type (RID_MAX, "long double", long_double_type_node);
5987   layout_type (long_double_type_node);
5988
5989   complex_integer_type_node = make_node (COMPLEX_TYPE);
5990   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
5991                         complex_integer_type_node));
5992   TREE_TYPE (complex_integer_type_node) = integer_type_node;
5993   layout_type (complex_integer_type_node);
5994
5995   complex_float_type_node = make_node (COMPLEX_TYPE);
5996   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
5997                         complex_float_type_node));
5998   TREE_TYPE (complex_float_type_node) = float_type_node;
5999   layout_type (complex_float_type_node);
6000
6001   complex_double_type_node = make_node (COMPLEX_TYPE);
6002   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
6003                         complex_double_type_node));
6004   TREE_TYPE (complex_double_type_node) = double_type_node;
6005   layout_type (complex_double_type_node);
6006
6007   complex_long_double_type_node = make_node (COMPLEX_TYPE);
6008   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
6009                         complex_long_double_type_node));
6010   TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
6011   layout_type (complex_long_double_type_node);
6012
6013   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6014   java_short_type_node = record_builtin_java_type ("__java_short", 16);
6015   java_int_type_node = record_builtin_java_type ("__java_int", 32);
6016   java_long_type_node = record_builtin_java_type ("__java_long", 64);
6017   java_float_type_node = record_builtin_java_type ("__java_float", -32);
6018   java_double_type_node = record_builtin_java_type ("__java_double", -64);
6019   java_char_type_node = record_builtin_java_type ("__java_char", -16);
6020   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
6021
6022   integer_zero_node = build_int_2 (0, 0);
6023   TREE_TYPE (integer_zero_node) = integer_type_node;
6024   integer_one_node = build_int_2 (1, 0);
6025   TREE_TYPE (integer_one_node) = integer_type_node;
6026   integer_two_node = build_int_2 (2, 0);
6027   TREE_TYPE (integer_two_node) = integer_type_node;
6028   integer_three_node = build_int_2 (3, 0);
6029   TREE_TYPE (integer_three_node) = integer_type_node;
6030
6031   boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6032   TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
6033   TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6034   TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6035   TYPE_PRECISION (boolean_type_node) = 1;
6036   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6037   boolean_false_node = build_int_2 (0, 0);
6038   TREE_TYPE (boolean_false_node) = boolean_type_node;
6039   boolean_true_node = build_int_2 (1, 0);
6040   TREE_TYPE (boolean_true_node) = boolean_type_node;
6041
6042   /* These are needed by stor-layout.c.  */
6043   size_zero_node = size_int (0);
6044   size_one_node = size_int (1);
6045
6046   signed_size_zero_node = build_int_2 (0, 0);
6047   TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6048
6049   void_type_node = make_node (VOID_TYPE);
6050   record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
6051   layout_type (void_type_node); /* Uses integer_zero_node.  */
6052   void_list_node = build_tree_list (NULL_TREE, void_type_node);
6053   TREE_PARMLIST (void_list_node) = 1;
6054
6055   null_pointer_node = build_int_2 (0, 0);
6056   TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
6057   layout_type (TREE_TYPE (null_pointer_node));
6058      
6059   /* Used for expressions that do nothing, but are not errors.  */
6060   void_zero_node = build_int_2 (0, 0);
6061   TREE_TYPE (void_zero_node) = void_type_node;
6062
6063   string_type_node = build_pointer_type (char_type_node);
6064   const_string_type_node
6065     = build_pointer_type (build_qualified_type (char_type_node, 
6066                                                 TYPE_QUAL_CONST));
6067 #if 0
6068   record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6069 #endif
6070
6071   /* Make a type to be the domain of a few array types
6072      whose domains don't really matter.
6073      200 is small enough that it always fits in size_t
6074      and large enough that it can hold most function names for the
6075      initializations of __FUNCTION__ and __PRETTY_FUNCTION__.  */
6076   array_domain_type = build_index_type (build_int_2 (200, 0));
6077
6078   /* Make a type for arrays of characters.
6079      With luck nothing will ever really depend on the length of this
6080      array type.  */
6081   char_array_type_node
6082     = build_array_type (char_type_node, array_domain_type);
6083   /* Likewise for arrays of ints.  */
6084   int_array_type_node
6085     = build_array_type (integer_type_node, array_domain_type);
6086
6087   /* This is just some anonymous class type.  Nobody should ever
6088      need to look inside this envelope.  */
6089   class_star_type_node = build_pointer_type (make_lang_type (RECORD_TYPE));
6090
6091   default_function_type
6092     = build_function_type (integer_type_node, NULL_TREE);
6093
6094   ptr_type_node = build_pointer_type (void_type_node);
6095   const_ptr_type_node
6096     = build_pointer_type (build_qualified_type (void_type_node,
6097                                                 TYPE_QUAL_CONST)); 
6098 #if 0
6099   record_builtin_type (RID_MAX, NULL_PTR, ptr_type_node);
6100 #endif
6101   endlink = void_list_node;
6102   int_endlink = tree_cons (NULL_TREE, integer_type_node, endlink);
6103   double_endlink = tree_cons (NULL_TREE, double_type_node, endlink);
6104   unsigned_endlink = tree_cons (NULL_TREE, unsigned_type_node, endlink);
6105
6106   ptr_ftype = build_function_type (ptr_type_node, NULL_TREE);
6107   ptr_ftype_unsigned = build_function_type (ptr_type_node, unsigned_endlink);
6108   sizetype_endlink = tree_cons (NULL_TREE, sizetype, endlink);
6109   /* We realloc here because sizetype could be int or unsigned.  S'ok.  */
6110   ptr_ftype_sizetype = build_function_type (ptr_type_node, sizetype_endlink);
6111
6112   void_ftype = build_function_type (void_type_node, endlink);
6113   void_ftype_int = build_function_type (void_type_node, int_endlink);
6114   void_ftype_ptr
6115     = build_function_type (void_type_node,
6116                            tree_cons (NULL_TREE, ptr_type_node, endlink));
6117   void_ftype_ptr
6118     = build_exception_variant (void_ftype_ptr,
6119                                tree_cons (NULL_TREE, NULL_TREE, NULL_TREE));
6120
6121   float_ftype_float
6122     = build_function_type (float_type_node,
6123                            tree_cons (NULL_TREE, float_type_node, endlink));
6124
6125   double_ftype_double
6126     = build_function_type (double_type_node, double_endlink);
6127
6128   ldouble_ftype_ldouble
6129     = build_function_type (long_double_type_node,
6130                            tree_cons (NULL_TREE, long_double_type_node,
6131                                       endlink));
6132
6133   double_ftype_double_double
6134     = build_function_type (double_type_node,
6135                            tree_cons (NULL_TREE, double_type_node,
6136                                       double_endlink));
6137
6138   int_ftype_int
6139     = build_function_type (integer_type_node, int_endlink);
6140
6141   long_ftype_long
6142     = build_function_type (long_integer_type_node,
6143                            tree_cons (NULL_TREE, long_integer_type_node,
6144                                       endlink));
6145
6146   int_ftype_cptr_cptr_sizet
6147     = build_function_type (integer_type_node,
6148                            tree_cons (NULL_TREE, const_ptr_type_node,
6149                                       tree_cons (NULL_TREE, const_ptr_type_node,
6150                                                  tree_cons (NULL_TREE,
6151                                                             sizetype,
6152                                                             endlink))));
6153
6154   string_ftype_ptr_ptr          /* strcpy prototype */
6155     = build_function_type (string_type_node,
6156                            tree_cons (NULL_TREE, string_type_node,
6157                                       tree_cons (NULL_TREE,
6158                                                  const_string_type_node,
6159                                                  endlink)));
6160
6161   int_ftype_string_string       /* strcmp prototype */
6162     = build_function_type (integer_type_node,
6163                            tree_cons (NULL_TREE, const_string_type_node,
6164                                       tree_cons (NULL_TREE,
6165                                                  const_string_type_node,
6166                                                  endlink)));
6167
6168   strlen_ftype          /* strlen prototype */
6169     = build_function_type (sizetype,
6170                            tree_cons (NULL_TREE, const_string_type_node,
6171                                       endlink));
6172
6173   memcpy_ftype  /* memcpy prototype */
6174     = build_function_type (ptr_type_node,
6175                            tree_cons (NULL_TREE, ptr_type_node,
6176                                       tree_cons (NULL_TREE, const_ptr_type_node,
6177                                                  sizetype_endlink)));
6178
6179   if (flag_huge_objects)
6180     delta_type_node = long_integer_type_node;
6181   else
6182     delta_type_node = short_integer_type_node;
6183
6184   builtin_function ("__builtin_constant_p", default_function_type,
6185                     BUILT_IN_CONSTANT_P, NULL_PTR);
6186
6187   builtin_return_address_fndecl
6188     = builtin_function ("__builtin_return_address", ptr_ftype_unsigned,
6189                         BUILT_IN_RETURN_ADDRESS, NULL_PTR);
6190
6191   builtin_function ("__builtin_frame_address", ptr_ftype_unsigned,
6192                     BUILT_IN_FRAME_ADDRESS, NULL_PTR);
6193
6194   builtin_function ("__builtin_alloca", ptr_ftype_sizetype,
6195                     BUILT_IN_ALLOCA, "alloca");
6196   builtin_function ("__builtin_ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
6197   /* Define alloca, ffs as builtins.
6198      Declare _exit just to mark it as volatile.  */
6199   if (! flag_no_builtin && !flag_no_nonansi_builtin)
6200     {
6201       temp = builtin_function ("alloca", ptr_ftype_sizetype,
6202                                BUILT_IN_ALLOCA, NULL_PTR);
6203       /* Suppress error if redefined as a non-function.  */
6204       DECL_BUILT_IN_NONANSI (temp) = 1;
6205       temp = builtin_function ("ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
6206       /* Suppress error if redefined as a non-function.  */
6207       DECL_BUILT_IN_NONANSI (temp) = 1;
6208       temp = builtin_function ("_exit", void_ftype_int,
6209                                NOT_BUILT_IN, NULL_PTR);
6210       TREE_THIS_VOLATILE (temp) = 1;
6211       TREE_SIDE_EFFECTS (temp) = 1;
6212       /* Suppress error if redefined as a non-function.  */
6213       DECL_BUILT_IN_NONANSI (temp) = 1;
6214     }
6215
6216   builtin_function ("__builtin_abs", int_ftype_int, BUILT_IN_ABS, NULL_PTR);
6217   builtin_function ("__builtin_fabsf", float_ftype_float, BUILT_IN_FABS,
6218                     NULL_PTR);
6219   builtin_function ("__builtin_fabs", double_ftype_double, BUILT_IN_FABS,
6220                     NULL_PTR);
6221   builtin_function ("__builtin_fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
6222                     NULL_PTR);
6223   builtin_function ("__builtin_labs", long_ftype_long,
6224                     BUILT_IN_LABS, NULL_PTR);
6225   builtin_function ("__builtin_saveregs", ptr_ftype,
6226                     BUILT_IN_SAVEREGS, NULL_PTR);
6227   builtin_function ("__builtin_classify_type", default_function_type,
6228                     BUILT_IN_CLASSIFY_TYPE, NULL_PTR);
6229   builtin_function ("__builtin_next_arg", ptr_ftype,
6230                     BUILT_IN_NEXT_ARG, NULL_PTR);
6231   builtin_function ("__builtin_args_info", int_ftype_int,
6232                     BUILT_IN_ARGS_INFO, NULL_PTR);
6233   builtin_function ("__builtin_setjmp",
6234                     build_function_type (integer_type_node,
6235                                          tree_cons (NULL_TREE, ptr_type_node,
6236                                                     endlink)),
6237                     BUILT_IN_SETJMP, NULL_PTR);
6238   builtin_function ("__builtin_longjmp",
6239                     build_function_type (integer_type_node,
6240                                          tree_cons (NULL_TREE, ptr_type_node,
6241                                                     tree_cons (NULL_TREE,
6242                                                                integer_type_node,
6243                                                                endlink))),
6244                     BUILT_IN_LONGJMP, NULL_PTR);
6245
6246   /* Untyped call and return.  */
6247   builtin_function ("__builtin_apply_args", ptr_ftype,
6248                     BUILT_IN_APPLY_ARGS, NULL_PTR);
6249
6250   temp = tree_cons (NULL_TREE,
6251                     build_pointer_type (build_function_type (void_type_node,
6252                                                              NULL_TREE)),
6253                     tree_cons (NULL_TREE, ptr_ftype_sizetype, NULL_TREE));
6254   builtin_function ("__builtin_apply",
6255                     build_function_type (ptr_type_node, temp),
6256                     BUILT_IN_APPLY, NULL_PTR);
6257   builtin_function ("__builtin_return", void_ftype_ptr,
6258                     BUILT_IN_RETURN, NULL_PTR);
6259
6260   /* Currently under experimentation.  */
6261   builtin_function ("__builtin_memcpy", memcpy_ftype,
6262                     BUILT_IN_MEMCPY, "memcpy");
6263   builtin_function ("__builtin_memcmp", int_ftype_cptr_cptr_sizet,
6264                     BUILT_IN_MEMCMP, "memcmp");
6265   builtin_function ("__builtin_strcmp", int_ftype_string_string,
6266                     BUILT_IN_STRCMP, "strcmp");
6267   builtin_function ("__builtin_strcpy", string_ftype_ptr_ptr,
6268                     BUILT_IN_STRCPY, "strcpy");
6269   builtin_function ("__builtin_strlen", strlen_ftype,
6270                     BUILT_IN_STRLEN, "strlen");
6271   builtin_function ("__builtin_sqrtf", float_ftype_float, 
6272                     BUILT_IN_FSQRT, "sqrtf");
6273   builtin_function ("__builtin_fsqrt", double_ftype_double,
6274                     BUILT_IN_FSQRT, NULL_PTR);
6275   builtin_function ("__builtin_sqrtl", ldouble_ftype_ldouble, 
6276                     BUILT_IN_FSQRT, "sqrtl");
6277   builtin_function ("__builtin_sinf", float_ftype_float, 
6278                     BUILT_IN_SIN, "sinf");
6279   builtin_function ("__builtin_sin", double_ftype_double, 
6280                     BUILT_IN_SIN, "sin");
6281   builtin_function ("__builtin_sinl", ldouble_ftype_ldouble, 
6282                     BUILT_IN_SIN, "sinl");
6283   builtin_function ("__builtin_cosf", float_ftype_float, 
6284                     BUILT_IN_COS, "cosf");
6285   builtin_function ("__builtin_cos", double_ftype_double, 
6286                     BUILT_IN_COS, "cos");
6287   builtin_function ("__builtin_cosl", ldouble_ftype_ldouble, 
6288                     BUILT_IN_COS, "cosl");
6289
6290   if (!flag_no_builtin)
6291     {
6292       builtin_function ("abs", int_ftype_int, BUILT_IN_ABS, NULL_PTR);
6293       builtin_function ("fabs", double_ftype_double, BUILT_IN_FABS, NULL_PTR);
6294       builtin_function ("labs", long_ftype_long, BUILT_IN_LABS, NULL_PTR);
6295       builtin_function ("fabsf", float_ftype_float, BUILT_IN_FABS, NULL_PTR);
6296       builtin_function ("fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
6297                         NULL_PTR);
6298       builtin_function ("memcpy", memcpy_ftype, BUILT_IN_MEMCPY, NULL_PTR);
6299       builtin_function ("memcmp", int_ftype_cptr_cptr_sizet, BUILT_IN_MEMCMP,
6300                         NULL_PTR);
6301       builtin_function ("strcmp", int_ftype_string_string, BUILT_IN_STRCMP,
6302                         NULL_PTR);
6303       builtin_function ("strcpy", string_ftype_ptr_ptr, BUILT_IN_STRCPY,
6304                         NULL_PTR);
6305       builtin_function ("strlen", strlen_ftype, BUILT_IN_STRLEN, NULL_PTR);
6306       builtin_function ("sqrtf", float_ftype_float, BUILT_IN_FSQRT, NULL_PTR);
6307       builtin_function ("sqrt", double_ftype_double, BUILT_IN_FSQRT, NULL_PTR);
6308       builtin_function ("sqrtl", ldouble_ftype_ldouble, BUILT_IN_FSQRT,
6309                         NULL_PTR);
6310       builtin_function ("sinf", float_ftype_float, BUILT_IN_SIN, NULL_PTR);
6311       builtin_function ("sin", double_ftype_double, BUILT_IN_SIN, NULL_PTR);
6312       builtin_function ("sinl", ldouble_ftype_ldouble, BUILT_IN_SIN, NULL_PTR);
6313       builtin_function ("cosf", float_ftype_float, BUILT_IN_COS, NULL_PTR);
6314       builtin_function ("cos", double_ftype_double, BUILT_IN_COS, NULL_PTR);
6315       builtin_function ("cosl", ldouble_ftype_ldouble, BUILT_IN_COS, NULL_PTR);
6316
6317       /* Declare these functions volatile
6318          to avoid spurious "control drops through" warnings.  */
6319       temp = builtin_function ("abort", void_ftype,
6320                                NOT_BUILT_IN, NULL_PTR);
6321       TREE_THIS_VOLATILE (temp) = 1;
6322       TREE_SIDE_EFFECTS (temp) = 1;
6323       /* Well, these are actually ANSI, but we can't set DECL_BUILT_IN on
6324          them...  */
6325       DECL_BUILT_IN_NONANSI (temp) = 1;
6326       temp = builtin_function ("exit", void_ftype_int,
6327                                NOT_BUILT_IN, NULL_PTR);
6328       TREE_THIS_VOLATILE (temp) = 1;
6329       TREE_SIDE_EFFECTS (temp) = 1;
6330       DECL_BUILT_IN_NONANSI (temp) = 1;
6331     }
6332
6333 #if 0
6334   /* Support for these has not been written in either expand_builtin
6335      or build_function_call.  */
6336   builtin_function ("__builtin_div", default_ftype, BUILT_IN_DIV, NULL_PTR);
6337   builtin_function ("__builtin_ldiv", default_ftype, BUILT_IN_LDIV, NULL_PTR);
6338   builtin_function ("__builtin_ffloor", double_ftype_double, BUILT_IN_FFLOOR,
6339                     NULL_PTR);
6340   builtin_function ("__builtin_fceil", double_ftype_double, BUILT_IN_FCEIL,
6341                     NULL_PTR);
6342   builtin_function ("__builtin_fmod", double_ftype_double_double,
6343                     BUILT_IN_FMOD, NULL_PTR);
6344   builtin_function ("__builtin_frem", double_ftype_double_double,
6345                     BUILT_IN_FREM, NULL_PTR);
6346   builtin_function ("__builtin_memset", ptr_ftype_ptr_int_int,
6347                     BUILT_IN_MEMSET, NULL_PTR);
6348   builtin_function ("__builtin_getexp", double_ftype_double, BUILT_IN_GETEXP,
6349                     NULL_PTR);
6350   builtin_function ("__builtin_getman", double_ftype_double, BUILT_IN_GETMAN,
6351                     NULL_PTR);
6352 #endif
6353
6354   /* C++ extensions */
6355
6356   unknown_type_node = make_node (UNKNOWN_TYPE);
6357   record_unknown_type (unknown_type_node, "unknown type");
6358
6359   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
6360   TREE_TYPE (unknown_type_node) = unknown_type_node;
6361
6362   TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
6363
6364   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6365      result.  */
6366   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6367   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6368
6369   /* This is for handling opaque types in signatures.  */
6370   opaque_type_node = copy_node (ptr_type_node);
6371   TYPE_MAIN_VARIANT (opaque_type_node) = opaque_type_node;
6372   record_builtin_type (RID_MAX, 0, opaque_type_node);
6373
6374   /* This is special for C++ so functions can be overloaded.  */
6375   wchar_type_node
6376     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (WCHAR_TYPE)));
6377   wchar_type_size = TYPE_PRECISION (wchar_type_node);
6378   signed_wchar_type_node = make_signed_type (wchar_type_size);
6379   unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
6380   wchar_type_node
6381     = TREE_UNSIGNED (wchar_type_node)
6382       ? unsigned_wchar_type_node
6383       : signed_wchar_type_node;
6384   record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
6385
6386   /* Artificial declaration of wchar_t -- can be bashed */
6387   wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
6388                                 wchar_type_node);
6389   pushdecl (wchar_decl_node);
6390
6391   /* This is for wide string constants.  */
6392   wchar_array_type_node
6393     = build_array_type (wchar_type_node, array_domain_type);
6394
6395   if (flag_vtable_thunks)
6396     {
6397       /* Make sure we get a unique function type, so we can give
6398          its pointer type a name.  (This wins for gdb.) */
6399       tree vfunc_type = make_node (FUNCTION_TYPE);
6400       TREE_TYPE (vfunc_type) = integer_type_node;
6401       TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6402       layout_type (vfunc_type);
6403
6404       vtable_entry_type = build_pointer_type (vfunc_type);
6405     }
6406   else
6407     {
6408       vtable_entry_type = make_lang_type (RECORD_TYPE);
6409       fields[0] = build_lang_field_decl (FIELD_DECL, delta_identifier,
6410                                          delta_type_node);
6411       fields[1] = build_lang_field_decl (FIELD_DECL, index_identifier,
6412                                          delta_type_node);
6413       fields[2] = build_lang_field_decl (FIELD_DECL, pfn_identifier,
6414                                          ptr_type_node);
6415       finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6416                            double_type_node);
6417
6418       /* Make this part of an invisible union.  */
6419       fields[3] = copy_node (fields[2]);
6420       TREE_TYPE (fields[3]) = delta_type_node;
6421       DECL_NAME (fields[3]) = delta2_identifier;
6422       DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6423       DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
6424       TREE_UNSIGNED (fields[3]) = 0;
6425       TREE_CHAIN (fields[2]) = fields[3];
6426       vtable_entry_type = build_qualified_type (vtable_entry_type,
6427                                                 TYPE_QUAL_CONST);
6428     }
6429   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
6430
6431   vtbl_type_node
6432     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
6433   layout_type (vtbl_type_node);
6434   vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
6435   record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
6436   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6437   layout_type (vtbl_ptr_type_node);
6438   record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
6439
6440   /* Simplify life by making a "sigtable_entry_type".  Give its
6441      fields names so that the debugger can use them.  */
6442
6443   if (flag_handle_signatures)
6444     {
6445       sigtable_entry_type = make_lang_type (RECORD_TYPE);
6446       fields[0] = build_lang_field_decl (FIELD_DECL, tag_identifier,
6447                                          delta_type_node);
6448       fields[1] = build_lang_field_decl (FIELD_DECL, vb_off_identifier,
6449                                          delta_type_node);
6450       fields[2] = build_lang_field_decl (FIELD_DECL, delta_identifier,
6451                                          delta_type_node);
6452       fields[3] = build_lang_field_decl (FIELD_DECL, index_identifier,
6453                                          delta_type_node);
6454       fields[4] = build_lang_field_decl (FIELD_DECL, pfn_identifier,
6455                                          ptr_type_node);
6456
6457       /* Set the alignment to the max of the alignment of ptr_type_node and
6458          delta_type_node.  Double alignment wastes a word on the Sparc.  */
6459       finish_builtin_type (sigtable_entry_type, SIGTABLE_PTR_TYPE, fields, 4,
6460                            (TYPE_ALIGN (ptr_type_node) > TYPE_ALIGN (delta_type_node))
6461                            ? ptr_type_node
6462                            : delta_type_node);
6463
6464       /* Make this part of an invisible union.  */
6465       fields[5] = copy_node (fields[4]);
6466       TREE_TYPE (fields[5]) = delta_type_node;
6467       DECL_NAME (fields[5]) = vt_off_identifier;
6468       DECL_MODE (fields[5]) = TYPE_MODE (delta_type_node);
6469       DECL_SIZE (fields[5]) = TYPE_SIZE (delta_type_node);
6470       TREE_UNSIGNED (fields[5]) = 0;
6471       TREE_CHAIN (fields[4]) = fields[5];
6472
6473       sigtable_entry_type = build_qualified_type (sigtable_entry_type, 
6474                                                   TYPE_QUAL_CONST);
6475       record_builtin_type (RID_MAX, SIGTABLE_PTR_TYPE, sigtable_entry_type);
6476     }
6477
6478   std_node = build_decl (NAMESPACE_DECL, 
6479                          get_identifier (flag_honor_std ? "fake std":"std"),
6480                          void_type_node);
6481   pushdecl (std_node);
6482
6483   global_type_node = make_node (LANG_TYPE);
6484   record_unknown_type (global_type_node, "global type");
6485
6486   /* Now, C++.  */
6487   current_lang_name = lang_name_cplusplus;
6488
6489   {
6490     tree bad_alloc_type_node, newtype, deltype;
6491     if (flag_honor_std)
6492       push_namespace (get_identifier ("std"));
6493     bad_alloc_type_node = xref_tag
6494       (class_type_node, get_identifier ("bad_alloc"), 1);
6495     if (flag_honor_std)
6496       pop_namespace ();
6497     newtype = build_exception_variant
6498       (ptr_ftype_sizetype, build_tree_list (NULL_TREE, bad_alloc_type_node));
6499     deltype = build_exception_variant
6500       (void_ftype_ptr, build_tree_list (NULL_TREE, NULL_TREE));
6501     auto_function (ansi_opname[(int) NEW_EXPR], newtype, NOT_BUILT_IN);
6502     auto_function (ansi_opname[(int) VEC_NEW_EXPR], newtype, NOT_BUILT_IN);
6503     global_delete_fndecl
6504       = auto_function (ansi_opname[(int) DELETE_EXPR], deltype, NOT_BUILT_IN);
6505     auto_function (ansi_opname[(int) VEC_DELETE_EXPR], deltype, NOT_BUILT_IN);
6506   }
6507
6508   abort_fndecl
6509     = define_function ("__pure_virtual", void_ftype,
6510                        NOT_BUILT_IN, 0, 0);
6511
6512   /* Perform other language dependent initializations.  */
6513   init_class_processing ();
6514   init_init_processing ();
6515   init_search_processing ();
6516   if (flag_rtti)
6517     init_rtti_processing ();
6518
6519   if (flag_exceptions)
6520     init_exception_processing ();
6521   if (flag_no_inline)
6522     {
6523       flag_inline_functions = 0;
6524     }
6525
6526   if (! supports_one_only ())
6527     flag_weak = 0;
6528
6529   /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__.  */
6530   declare_function_name ();
6531
6532   /* Prepare to check format strings against argument lists.  */
6533   init_function_format_info ();
6534
6535   /* Show we use EH for cleanups.  */
6536   using_eh_for_cleanups ();
6537
6538   print_error_function = lang_print_error_function;
6539   lang_get_alias_set = &c_get_alias_set;
6540
6541   /* Maintain consistency.  Perhaps we should just complain if they
6542      say -fwritable-strings?  */
6543   if (flag_writable_strings)
6544     flag_const_strings = 0;
6545 }
6546
6547 /* Function to print any language-specific context for an error message.  */
6548
6549 static void
6550 lang_print_error_function (file)
6551      char *file;
6552 {
6553   default_print_error_function (file);
6554   maybe_print_template_context ();
6555 }
6556
6557 /* Make a definition for a builtin function named NAME and whose data type
6558    is TYPE.  TYPE should be a function type with argument types.
6559    FUNCTION_CODE tells later passes how to compile calls to this function.
6560    See tree.h for its possible values.
6561
6562    If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6563    the name to be called if we can't opencode the function.  */
6564
6565 tree
6566 define_function (name, type, function_code, pfn, library_name)
6567      char *name;
6568      tree type;
6569      enum built_in_function function_code;
6570      void (*pfn) PROTO((tree));
6571      char *library_name;
6572 {
6573   tree decl = build_lang_decl (FUNCTION_DECL, get_identifier (name), type);
6574   DECL_EXTERNAL (decl) = 1;
6575   TREE_PUBLIC (decl) = 1;
6576   DECL_ARTIFICIAL (decl) = 1;
6577
6578   my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
6579   DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
6580
6581   /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6582      we cannot change DECL_ASSEMBLER_NAME until we have installed this
6583      function in the namespace.  */
6584   if (pfn) (*pfn) (decl);
6585   if (library_name)
6586     DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
6587   make_function_rtl (decl);
6588   if (function_code != NOT_BUILT_IN)
6589     {
6590       DECL_BUILT_IN (decl) = 1;
6591       DECL_FUNCTION_CODE (decl) = function_code;
6592     }
6593   return decl;
6594 }
6595 \f
6596 /* When we call finish_struct for an anonymous union, we create
6597    default copy constructors and such.  But, an anonymous union
6598    shouldn't have such things; this function undoes the damage to the
6599    anonymous union type T.
6600
6601    (The reason that we create the synthesized methods is that we don't
6602    distinguish `union { int i; }' from `typedef union { int i; } U'.
6603    The first is an anonymous union; the second is just an ordinary
6604    union type.)  */
6605
6606 void
6607 fixup_anonymous_union (t)
6608      tree t;
6609 {
6610   tree *q;
6611
6612   /* Wipe out memory of synthesized methods */
6613   TYPE_HAS_CONSTRUCTOR (t) = 0;
6614   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6615   TYPE_HAS_INIT_REF (t) = 0;
6616   TYPE_HAS_CONST_INIT_REF (t) = 0;
6617   TYPE_HAS_ASSIGN_REF (t) = 0;
6618   TYPE_HAS_ASSIGNMENT (t) = 0;
6619   TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6620
6621   /* Splice the implicitly generated functions out of the TYPE_METHODS
6622      list.  */
6623   q = &TYPE_METHODS (t);
6624   while (*q)
6625     {
6626       if (DECL_ARTIFICIAL (*q))
6627         *q = TREE_CHAIN (*q);
6628       else
6629         q = &TREE_CHAIN (*q);
6630     }
6631
6632   /* ANSI C++ June 5 1992 WP 9.5.3.  Anonymous unions may not have
6633      function members.  */
6634   if (TYPE_METHODS (t))
6635     error ("an anonymous union cannot have function members");
6636 }
6637
6638 /* Make sure that a declaration with no declarator is well-formed, i.e.
6639    just defines a tagged type or anonymous union.
6640
6641    Returns the type defined, if any.  */
6642
6643 tree
6644 check_tag_decl (declspecs)
6645      tree declspecs;
6646 {
6647   int found_type = 0;
6648   tree ob_modifier = NULL_TREE;
6649   register tree link;
6650   register tree t = NULL_TREE;
6651
6652   for (link = declspecs; link; link = TREE_CHAIN (link))
6653     {
6654       register tree value = TREE_VALUE (link);
6655
6656       if (TYPE_P (value))
6657         {
6658           ++found_type;
6659
6660           if (IS_AGGR_TYPE (value) || TREE_CODE (value) == ENUMERAL_TYPE)
6661             {
6662               my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
6663               t = value;
6664             }
6665         }
6666       else if (value == ridpointers[(int) RID_FRIEND])
6667         {
6668           if (current_class_type == NULL_TREE
6669               || current_scope () != current_class_type)
6670             ob_modifier = value;
6671         }
6672       else if (value == ridpointers[(int) RID_STATIC]
6673                || value == ridpointers[(int) RID_EXTERN]
6674                || value == ridpointers[(int) RID_AUTO]
6675                || value == ridpointers[(int) RID_REGISTER]
6676                || value == ridpointers[(int) RID_INLINE]
6677                || value == ridpointers[(int) RID_VIRTUAL]
6678                || value == ridpointers[(int) RID_CONST]
6679                || value == ridpointers[(int) RID_VOLATILE]
6680                || value == ridpointers[(int) RID_EXPLICIT])
6681         ob_modifier = value;
6682     }
6683
6684   if (found_type > 1)
6685     error ("multiple types in one declaration");
6686
6687   /* Inside a class, we might be in a friend or access declaration.
6688      Until we have a good way of detecting the latter, don't warn.  */
6689   if (t == NULL_TREE && ! current_class_type)
6690     pedwarn ("declaration does not declare anything");
6691   else if (t && ANON_UNION_TYPE_P (t))
6692     /* Anonymous unions are objects, so they can have specifiers.  */;
6693   else if (ob_modifier)
6694     {
6695       if (ob_modifier == ridpointers[(int) RID_INLINE]
6696           || ob_modifier == ridpointers[(int) RID_VIRTUAL])
6697         cp_error ("`%D' can only be specified for functions", ob_modifier);
6698       else if (ob_modifier == ridpointers[(int) RID_FRIEND])
6699         cp_error ("`%D' can only be specified inside a class", ob_modifier);
6700       else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
6701         cp_error ("`%D' can only be specified for constructors",
6702                   ob_modifier);
6703       else
6704         cp_error ("`%D' can only be specified for objects and functions",
6705                   ob_modifier);
6706     }
6707
6708   return t;
6709 }
6710
6711 /* Called when a declaration is seen that contains no names to declare.
6712    If its type is a reference to a structure, union or enum inherited
6713    from a containing scope, shadow that tag name for the current scope
6714    with a forward reference.
6715    If its type defines a new named structure or union
6716    or defines an enum, it is valid but we need not do anything here.
6717    Otherwise, it is an error.
6718
6719    C++: may have to grok the declspecs to learn about static,
6720    complain for anonymous unions.  */
6721
6722 void
6723 shadow_tag (declspecs)
6724      tree declspecs;
6725 {
6726   tree t = check_tag_decl (declspecs);
6727
6728   if (t)
6729     maybe_process_partial_specialization (t);
6730
6731   /* This is where the variables in an anonymous union are
6732      declared.  An anonymous union declaration looks like:
6733      union { ... } ;
6734      because there is no declarator after the union, the parser
6735      sends that declaration here.  */
6736   if (t && ANON_UNION_TYPE_P (t))
6737     {
6738       fixup_anonymous_union (t);
6739
6740       if (TYPE_FIELDS (t))
6741         {
6742           tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
6743                                       NULL_TREE);
6744           finish_anon_union (decl);
6745         }
6746     }
6747 }
6748 \f
6749 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
6750
6751 tree
6752 groktypename (typename)
6753      tree typename;
6754 {
6755   if (TREE_CODE (typename) != TREE_LIST)
6756     return typename;
6757   return grokdeclarator (TREE_VALUE (typename),
6758                          TREE_PURPOSE (typename),
6759                          TYPENAME, 0, NULL_TREE);
6760 }
6761
6762 /* Decode a declarator in an ordinary declaration or data definition.
6763    This is called as soon as the type information and variable name
6764    have been parsed, before parsing the initializer if any.
6765    Here we create the ..._DECL node, fill in its type,
6766    and put it on the list of decls for the current context.
6767    The ..._DECL node is returned as the value.
6768
6769    Exception: for arrays where the length is not specified,
6770    the type is left null, to be filled in by `cp_finish_decl'.
6771
6772    Function definitions do not come here; they go to start_function
6773    instead.  However, external and forward declarations of functions
6774    do go through here.  Structure field declarations are done by
6775    grokfield and not through here.  */
6776
6777 /* Set this to zero to debug not using the temporary obstack
6778    to parse initializers.  */
6779 int debug_temp_inits = 1;
6780
6781 tree
6782 start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
6783      tree declarator, declspecs;
6784      int initialized;
6785      tree attributes, prefix_attributes;
6786 {
6787   register tree decl;
6788   register tree type, tem;
6789   tree context;
6790   extern int have_extern_spec;
6791   extern int used_extern_spec;
6792
6793 #if 0
6794   /* See code below that used this.  */
6795   int init_written = initialized;
6796 #endif
6797
6798   /* This should only be done once on the top most decl.  */
6799   if (have_extern_spec && !used_extern_spec)
6800     {
6801       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
6802                                   declspecs);
6803       used_extern_spec = 1;
6804     }
6805
6806   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
6807                          NULL_TREE);
6808   if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
6809     return NULL_TREE;
6810
6811   type = TREE_TYPE (decl);
6812
6813   /* Don't lose if destructors must be executed at file-level.  */
6814   if (! processing_template_decl && TREE_STATIC (decl)
6815       && TYPE_NEEDS_DESTRUCTOR (complete_type (type))
6816       && !TREE_PERMANENT (decl))
6817     {
6818       push_obstacks (&permanent_obstack, &permanent_obstack);
6819       decl = copy_node (decl);
6820       if (TREE_CODE (type) == ARRAY_TYPE)
6821         {
6822           tree itype = TYPE_DOMAIN (type);
6823           if (itype && ! TREE_PERMANENT (itype))
6824             {
6825               itype = build_index_type (copy_to_permanent (TYPE_MAX_VALUE (itype)));
6826               type = build_cplus_array_type (TREE_TYPE (type), itype);
6827               TREE_TYPE (decl) = type;
6828             }
6829         }
6830       pop_obstacks ();
6831     }
6832
6833   context
6834     = (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
6835       ? DECL_CLASS_CONTEXT (decl)
6836       : DECL_CONTEXT (decl);
6837
6838   if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
6839       && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
6840     {
6841       /* When parsing the initializer, lookup should use the object's
6842          namespace. */
6843       push_decl_namespace (context);
6844     }
6845
6846   /* We are only interested in class contexts, later. */
6847   if (context && TREE_CODE (context) == NAMESPACE_DECL)
6848     context = NULL_TREE;
6849
6850   if (initialized)
6851     /* Is it valid for this decl to have an initializer at all?
6852        If not, set INITIALIZED to zero, which will indirectly
6853        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
6854     switch (TREE_CODE (decl))
6855       {
6856       case TYPE_DECL:
6857         /* typedef foo = bar  means give foo the same type as bar.
6858            We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
6859            Any other case of an initialization in a TYPE_DECL is an error.  */
6860         if (pedantic || list_length (declspecs) > 1)
6861           {
6862             cp_error ("typedef `%D' is initialized", decl);
6863             initialized = 0;
6864           }
6865         break;
6866
6867       case FUNCTION_DECL:
6868         cp_error ("function `%#D' is initialized like a variable", decl);
6869         initialized = 0;
6870         break;
6871
6872       default:
6873         if (! processing_template_decl)
6874           {
6875             if (type != error_mark_node)
6876               {
6877                 if (TYPE_SIZE (type) != NULL_TREE
6878                     && ! TREE_CONSTANT (TYPE_SIZE (type)))
6879                   {
6880                     cp_error
6881                       ("variable-sized object `%D' may not be initialized",
6882                        decl);
6883                     initialized = 0;
6884                   }
6885
6886                 if (TREE_CODE (type) == ARRAY_TYPE
6887                     && TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
6888                   {
6889                     cp_error
6890                       ("elements of array `%#D' have incomplete type", decl);
6891                     initialized = 0;
6892                   }
6893               }
6894           }
6895       }
6896
6897   if (initialized)
6898     {
6899       if (! toplevel_bindings_p ()
6900           && DECL_EXTERNAL (decl))
6901         cp_warning ("declaration of `%#D' has `extern' and is initialized",
6902                     decl);
6903       DECL_EXTERNAL (decl) = 0;
6904       if (toplevel_bindings_p ())
6905         TREE_STATIC (decl) = 1;
6906
6907       /* Tell `pushdecl' this is an initialized decl
6908          even though we don't yet have the initializer expression.
6909          Also tell `cp_finish_decl' it may store the real initializer.  */
6910       DECL_INITIAL (decl) = error_mark_node;
6911     }
6912
6913   if (context && TYPE_SIZE (complete_type (context)) != NULL_TREE)
6914     {
6915       pushclass (context, 2);
6916
6917       if (TREE_CODE (decl) == VAR_DECL)
6918         {
6919           tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
6920           if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
6921             cp_error ("`%#D' is not a static member of `%#T'", decl, context);
6922           else
6923             {
6924               if (DECL_CONTEXT (field) != context)
6925                 {
6926                   cp_pedwarn ("ANSI C++ does not permit `%T::%D' to be defined as `%T::%D'",
6927                               DECL_CONTEXT (field), DECL_NAME (decl),
6928                               context, DECL_NAME (decl));
6929                   DECL_CONTEXT (decl) = DECL_CONTEXT (field);
6930                 }
6931               /* Static data member are tricky; an in-class initialization
6932                  still doesn't provide a definition, so the in-class
6933                  declaration will have DECL_EXTERNAL set, but will have an
6934                  initialization.  Thus, duplicate_decls won't warn
6935                  about this situation, and so we check here.  */
6936               if (DECL_INITIAL (decl) && DECL_INITIAL (field))
6937                 cp_error ("duplicate initialization of %D", decl);
6938               if (duplicate_decls (decl, field))
6939                 decl = field;
6940             }
6941         }
6942       else
6943         {
6944           tree field = check_classfn (context, decl);
6945           if (field && duplicate_decls (decl, field))
6946             decl = field;
6947         }
6948
6949       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
6950       DECL_IN_AGGR_P (decl) = 0;
6951       if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl)) 
6952           || CLASSTYPE_USE_TEMPLATE (context))
6953         {
6954           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
6955           /* [temp.expl.spec] An explicit specialization of a static data
6956              member of a template is a definition if the declaration
6957              includes an initializer; otherwise, it is a declaration.
6958
6959              We check for processing_specialization so this only applies
6960              to the new specialization syntax.  */
6961           if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
6962             DECL_EXTERNAL (decl) = 1;
6963         }
6964
6965       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
6966         cp_pedwarn ("declaration of `%#D' outside of class is not definition",
6967                     decl);
6968     }
6969
6970 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
6971   SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
6972 #endif
6973   
6974   /* Set attributes here so if duplicate decl, will have proper attributes.  */
6975   cplus_decl_attributes (decl, attributes, prefix_attributes);
6976
6977   /* Add this decl to the current binding level, but not if it
6978      comes from another scope, e.g. a static member variable.
6979      TEM may equal DECL or it may be a previous decl of the same name.  */
6980   
6981   if ((TREE_CODE (decl) != PARM_DECL && DECL_CONTEXT (decl) != NULL_TREE 
6982        /* Definitions of namespace members outside their namespace are
6983           possible. */
6984        && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
6985       || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
6986       || TREE_CODE (type) == LANG_TYPE
6987       /* The declaration of template specializations does not affect
6988          the functions available for overload resolution, so we do not
6989          call pushdecl.  */
6990       || (TREE_CODE (decl) == FUNCTION_DECL
6991           && DECL_TEMPLATE_SPECIALIZATION (decl)))
6992     tem = decl;
6993   else
6994     tem = pushdecl (decl);
6995
6996   if (processing_template_decl)
6997     {
6998       if (! current_function_decl)
6999         tem = push_template_decl (tem);
7000       else if (minimal_parse_mode)
7001         DECL_VINDEX (tem)
7002             = build_min_nt (DECL_STMT, copy_to_permanent (declarator),
7003                             copy_to_permanent (declspecs),
7004                             NULL_TREE);
7005     }
7006
7007
7008 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7009   /* Tell the back-end to use or not use .common as appropriate.  If we say
7010      -fconserve-space, we want this to save .data space, at the expense of
7011      wrong semantics.  If we say -fno-conserve-space, we want this to
7012      produce errors about redefs; to do this we force variables into the
7013      data segment.  */
7014   DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
7015 #endif
7016   
7017   if (! processing_template_decl)
7018     start_decl_1 (tem);
7019
7020   /* Corresponding pop_obstacks is done in `cp_finish_decl'.  */
7021   push_obstacks_nochange ();
7022
7023 #if 0
7024   /* We have no way of knowing whether the initializer will need to be
7025      evaluated at run-time or not until we've parsed it, so let's just put
7026      it in the permanent obstack.  (jason) */
7027   if (init_written
7028       && ! (TREE_CODE (tem) == PARM_DECL
7029             || (TREE_READONLY (tem)
7030                 && (TREE_CODE (tem) == VAR_DECL
7031                     || TREE_CODE (tem) == FIELD_DECL))))
7032     {
7033       /* When parsing and digesting the initializer,
7034          use temporary storage.  Do this even if we will ignore the value.  */
7035       if (toplevel_bindings_p () && debug_temp_inits)
7036         {
7037           if (processing_template_decl
7038               || TYPE_NEEDS_CONSTRUCTING (type)
7039               || TREE_CODE (type) == REFERENCE_TYPE)
7040             /* In this case, the initializer must lay down in permanent
7041                storage, since it will be saved until `finish_file' is run.   */
7042             ;
7043           else
7044             temporary_allocation ();
7045         }
7046     }
7047 #endif
7048
7049   return tem;
7050 }
7051
7052 void
7053 start_decl_1 (decl)
7054      tree decl;
7055 {
7056   tree type = TREE_TYPE (decl);
7057   int initialized = (DECL_INITIAL (decl) != NULL_TREE);
7058
7059   /* If this type of object needs a cleanup, and control may
7060      jump past it, make a new binding level so that it is cleaned
7061      up only when it is initialized first.  */
7062   if (TYPE_NEEDS_DESTRUCTOR (type)
7063       && current_binding_level->more_cleanups_ok == 0)
7064     pushlevel_temporary (1);
7065
7066   if (initialized)
7067     /* Is it valid for this decl to have an initializer at all?
7068        If not, set INITIALIZED to zero, which will indirectly
7069        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
7070     {
7071       /* Don't allow initializations for incomplete types except for
7072          arrays which might be completed by the initialization.  */
7073       if (type == error_mark_node)
7074         ;                       /* Don't complain again.  */
7075       else if (TYPE_SIZE (complete_type (type)) != NULL_TREE)
7076         ;                       /* A complete type is ok.  */
7077       else if (TREE_CODE (type) != ARRAY_TYPE)
7078         {
7079           cp_error ("variable `%#D' has initializer but incomplete type",
7080                     decl);
7081           initialized = 0;
7082           type = TREE_TYPE (decl) = error_mark_node;
7083         }
7084       else if (TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
7085         {
7086           if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
7087             cp_error ("elements of array `%#D' have incomplete type", decl);
7088           /* else we already gave an error in start_decl.  */
7089           initialized = 0;
7090         }
7091     }
7092
7093   if (!initialized
7094       && TREE_CODE (decl) != TYPE_DECL
7095       && TREE_CODE (decl) != TEMPLATE_DECL
7096       && IS_AGGR_TYPE (type) && ! DECL_EXTERNAL (decl))
7097     {
7098       if ((! processing_template_decl || ! uses_template_parms (type))
7099           && TYPE_SIZE (complete_type (type)) == NULL_TREE)
7100         {
7101           cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
7102                  decl);
7103           /* Change the type so that assemble_variable will give
7104              DECL an rtl we can live with: (mem (const_int 0)).  */
7105           type = TREE_TYPE (decl) = error_mark_node;
7106         }
7107       else
7108         {
7109           /* If any base type in the hierarchy of TYPE needs a constructor,
7110              then we set initialized to 1.  This way any nodes which are
7111              created for the purposes of initializing this aggregate
7112              will live as long as it does.  This is necessary for global
7113              aggregates which do not have their initializers processed until
7114              the end of the file.  */
7115           initialized = TYPE_NEEDS_CONSTRUCTING (type);
7116         }
7117     }
7118
7119 #if 0
7120   /* We don't do this yet for GNU C++.  */
7121   /* For a local variable, define the RTL now.  */
7122   if (! toplevel_bindings_p ()
7123       /* But not if this is a duplicate decl
7124          and we preserved the rtl from the previous one
7125          (which may or may not happen).  */
7126       && DECL_RTL (tem) == NULL_RTX)
7127     {
7128       if (TYPE_SIZE (TREE_TYPE (tem)) != NULL_TREE)
7129         expand_decl (tem);
7130       else if (TREE_CODE (TREE_TYPE (tem)) == ARRAY_TYPE
7131                && DECL_INITIAL (tem) != NULL_TREE)
7132         expand_decl (tem);
7133     }
7134 #endif
7135
7136   if (! initialized)
7137     DECL_INITIAL (decl) = NULL_TREE;
7138 }
7139
7140 /* Handle initialization of references.
7141    These three arguments are from `cp_finish_decl', and have the
7142    same meaning here that they do there.
7143
7144    Quotes on semantics can be found in ARM 8.4.3.  */
7145
7146 static void
7147 grok_reference_init (decl, type, init)
7148      tree decl, type, init;
7149 {
7150   tree tmp;
7151
7152   if (init == NULL_TREE)
7153     {
7154       if ((DECL_LANG_SPECIFIC (decl) == 0
7155            || DECL_IN_AGGR_P (decl) == 0)
7156           && ! DECL_THIS_EXTERN (decl))
7157         {
7158           cp_error ("`%D' declared as reference but not initialized", decl);
7159           if (TREE_CODE (decl) == VAR_DECL)
7160             SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
7161         }
7162       return;
7163     }
7164
7165   if (init == error_mark_node)
7166     return;
7167
7168   if (TREE_CODE (type) == REFERENCE_TYPE
7169       && TREE_CODE (init) == CONSTRUCTOR)
7170     {
7171       cp_error ("ANSI C++ forbids use of initializer list to initialize reference `%D'", decl);
7172       return;
7173     }
7174
7175   if (TREE_CODE (init) == TREE_LIST)
7176     init = build_compound_expr (init);
7177
7178   if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
7179     init = convert_from_reference (init);
7180
7181   if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
7182       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
7183     {
7184       /* Note: default conversion is only called in very special cases.  */
7185       init = default_conversion (init);
7186     }
7187
7188   tmp = convert_to_reference
7189     (type, init, CONV_IMPLICIT,
7190      LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
7191
7192   if (tmp == error_mark_node)
7193     goto fail;
7194   else if (tmp != NULL_TREE)
7195     {
7196       init = tmp;
7197       DECL_INITIAL (decl) = save_expr (init);
7198     }
7199   else
7200     {
7201       cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
7202       goto fail;
7203     }
7204
7205   /* ?? Can this be optimized in some cases to
7206      hand back the DECL_INITIAL slot??  */
7207   if (TYPE_SIZE (TREE_TYPE (type)))
7208     {
7209       init = convert_from_reference (decl);
7210       if (TREE_PERMANENT (decl))
7211         init = copy_to_permanent (init);
7212       SET_DECL_REFERENCE_SLOT (decl, init);
7213     }
7214
7215   if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
7216     {
7217       expand_static_init (decl, DECL_INITIAL (decl));
7218       DECL_INITIAL (decl) = NULL_TREE;
7219     }
7220   return;
7221
7222  fail:
7223   if (TREE_CODE (decl) == VAR_DECL)
7224     SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
7225   return;
7226 }
7227
7228 /* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7229    mucking with forces it does not comprehend (i.e. initialization with a
7230    constructor).  If we are at global scope and won't go into COMMON, fill
7231    it in with a dummy CONSTRUCTOR to force the variable into .data;
7232    otherwise we can use error_mark_node.  */
7233
7234 static tree
7235 obscure_complex_init (decl, init)
7236      tree decl, init;
7237 {
7238   if (! flag_no_inline && TREE_STATIC (decl))
7239     {
7240       if (extract_init (decl, init))
7241         return NULL_TREE;
7242     }
7243
7244 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7245   if (toplevel_bindings_p () && ! DECL_COMMON (decl))
7246     DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7247                                  NULL_TREE);
7248   else
7249 #endif
7250     DECL_INITIAL (decl) = error_mark_node;
7251
7252   return init;
7253 }
7254
7255 /* Issue an error message if DECL is an uninitialized const variable.  */
7256
7257 static void
7258 check_for_uninitialized_const_var (decl)
7259      tree decl;
7260 {
7261   tree type = TREE_TYPE (decl);
7262
7263   /* ``Unless explicitly declared extern, a const object does not have
7264      external linkage and must be initialized. ($8.4; $12.1)'' ARM
7265      7.1.6 */
7266   if (TREE_CODE (decl) == VAR_DECL
7267       && TREE_CODE (type) != REFERENCE_TYPE
7268       && CP_TYPE_CONST_P (type)
7269       && !TYPE_NEEDS_CONSTRUCTING (type)
7270       && !DECL_INITIAL (decl))
7271     cp_error ("uninitialized const `%D'", decl);
7272 }
7273
7274 /* Finish processing of a declaration;
7275    install its line number and initial value.
7276    If the length of an array type is not known before,
7277    it must be determined now, from the initial value, or it is an error.
7278
7279    Call `pop_obstacks' iff NEED_POP is nonzero.
7280
7281    For C++, `cp_finish_decl' must be fairly evasive:  it must keep initializers
7282    for aggregates that have constructors alive on the permanent obstack,
7283    so that the global initializing functions can be written at the end.
7284
7285    INIT0 holds the value of an initializer that should be allowed to escape
7286    the normal rules.
7287
7288    FLAGS is LOOKUP_ONLYCONVERTING is the = init syntax was used, else 0
7289    if the (init) syntax was used.
7290
7291    For functions that take default parameters, DECL points to its
7292    "maximal" instantiation.  `cp_finish_decl' must then also declared its
7293    subsequently lower and lower forms of instantiation, checking for
7294    ambiguity as it goes.  This can be sped up later.  */
7295
7296 void
7297 cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
7298      tree decl, init;
7299      tree asmspec_tree;
7300      int need_pop;
7301      int flags;
7302 {
7303   register tree type;
7304   tree cleanup = NULL_TREE, ttype = NULL_TREE;
7305   int was_incomplete;
7306   int temporary = allocation_temporary_p ();
7307   char *asmspec = NULL;
7308   int was_readonly = 0;
7309   int already_used = 0;
7310
7311   /* If this is 0, then we did not change obstacks.  */
7312   if (! decl)
7313     {
7314       if (init)
7315         error ("assignment (not initialization) in declaration");
7316       return;
7317     }
7318
7319   /* If a name was specified, get the string.  */
7320   if (asmspec_tree)
7321       asmspec = TREE_STRING_POINTER (asmspec_tree);
7322
7323   if (init && TREE_CODE (init) == NAMESPACE_DECL)
7324     {
7325       cp_error ("Cannot initialize `%D' to namespace `%D'",
7326                 decl, init);
7327       init = NULL_TREE;
7328     }
7329
7330   if (current_class_type
7331       && DECL_REAL_CONTEXT (decl) == current_class_type
7332       && TYPE_BEING_DEFINED (current_class_type)
7333       && (DECL_INITIAL (decl) || init))
7334     DECL_DEFINED_IN_CLASS_P (decl) = 1;
7335
7336   if (TREE_CODE (decl) == VAR_DECL 
7337       && DECL_CONTEXT (decl)
7338       && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
7339       && DECL_CONTEXT (decl) != current_namespace
7340       && init)
7341     {
7342       /* Leave the namespace of the object. */
7343       pop_decl_namespace ();
7344     }
7345
7346   /* If the type of the thing we are declaring either has
7347      a constructor, or has a virtual function table pointer,
7348      AND its initialization was accepted by `start_decl',
7349      then we stayed on the permanent obstack through the
7350      declaration, otherwise, changed obstacks as GCC would.  */
7351
7352   type = TREE_TYPE (decl);
7353
7354   if (type == error_mark_node)
7355     {
7356       if (toplevel_bindings_p () && temporary)
7357         end_temporary_allocation ();
7358
7359       return;
7360     }
7361
7362   if (processing_template_decl)
7363     {
7364       if (init && DECL_INITIAL (decl))
7365         DECL_INITIAL (decl) = init;
7366       if (minimal_parse_mode && ! DECL_ARTIFICIAL (decl))
7367         {
7368           tree stmt = DECL_VINDEX (decl);
7369           /* If the decl is declaring a member of a local class (in a
7370              template function), the DECL_VINDEX will either be NULL,
7371              or it will be an actual virtual function index, not a
7372              DECL_STMT.  */
7373           if (stmt != NULL_TREE && TREE_CODE (stmt) == DECL_STMT)
7374             {
7375               DECL_VINDEX (decl) = NULL_TREE;
7376               TREE_OPERAND (stmt, 2) = copy_to_permanent (init);
7377               add_tree (stmt);
7378             }
7379         }
7380
7381       goto finish_end0;
7382     }
7383   /* Take care of TYPE_DECLs up front.  */
7384   if (TREE_CODE (decl) == TYPE_DECL)
7385     {
7386       if (init && DECL_INITIAL (decl))
7387         {
7388           /* typedef foo = bar; store the type of bar as the type of foo.  */
7389           TREE_TYPE (decl) = type = TREE_TYPE (init);
7390           DECL_INITIAL (decl) = init = NULL_TREE;
7391         }
7392       if (type != error_mark_node
7393           && IS_AGGR_TYPE (type) && DECL_NAME (decl))
7394         {
7395           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7396             cp_warning ("shadowing previous type declaration of `%#D'", decl);
7397           set_identifier_type_value (DECL_NAME (decl), type);
7398           CLASSTYPE_GOT_SEMICOLON (type) = 1;
7399         }
7400       GNU_xref_decl (current_function_decl, decl);
7401
7402       /* If we have installed this as the canonical typedef for this
7403          type, and that type has not been defined yet, delay emitting
7404          the debug information for it, as we will emit it later.  */
7405       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7406           && TYPE_SIZE (TREE_TYPE (decl)) == NULL_TREE)
7407         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7408
7409       rest_of_decl_compilation (decl, NULL_PTR,
7410                                 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
7411       goto finish_end;
7412     }
7413   if (TREE_CODE (decl) != FUNCTION_DECL)
7414     {
7415       ttype = target_type (type);
7416     }
7417
7418   if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
7419       && TYPE_NEEDS_CONSTRUCTING (type))
7420     {
7421
7422       /* Currently, GNU C++ puts constants in text space, making them
7423          impossible to initialize.  In the future, one would hope for
7424          an operating system which understood the difference between
7425          initialization and the running of a program.  */
7426       was_readonly = 1;
7427       TREE_READONLY (decl) = 0;
7428     }
7429
7430   if (TREE_CODE (decl) == FIELD_DECL)
7431     {
7432       if (init && init != error_mark_node)
7433         my_friendly_assert (TREE_PERMANENT (init), 147);
7434
7435       if (asmspec)
7436         {
7437           /* This must override the asm specifier which was placed
7438              by grokclassfn.  Lay this out fresh.  */
7439           DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
7440           DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7441           make_decl_rtl (decl, asmspec, 0);
7442         }
7443     }
7444   /* If `start_decl' didn't like having an initialization, ignore it now.  */
7445   else if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7446     init = NULL_TREE;
7447   else if (DECL_EXTERNAL (decl))
7448     ;
7449   else if (TREE_CODE (type) == REFERENCE_TYPE
7450            || (TYPE_LANG_SPECIFIC (type) && IS_SIGNATURE_REFERENCE (type)))
7451     {
7452       if (TREE_STATIC (decl))
7453         make_decl_rtl (decl, NULL_PTR,
7454                        toplevel_bindings_p ()
7455                        || pseudo_global_level_p ());
7456       grok_reference_init (decl, type, init);
7457       init = NULL_TREE;
7458     }
7459
7460   GNU_xref_decl (current_function_decl, decl);
7461
7462   if (TREE_CODE (decl) == FIELD_DECL)
7463     ;
7464   else if (TREE_CODE (decl) == CONST_DECL)
7465     {
7466       my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7467
7468       DECL_INITIAL (decl) = init;
7469
7470       /* This will keep us from needing to worry about our obstacks.  */
7471       my_friendly_assert (init != NULL_TREE, 149);
7472       init = NULL_TREE;
7473     }
7474   else if (init)
7475     {
7476       if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7477         {
7478           if (TREE_CODE (type) == ARRAY_TYPE)
7479             init = digest_init (type, init, (tree *) 0);
7480           else if (TREE_CODE (init) == CONSTRUCTOR
7481                    && TREE_HAS_CONSTRUCTOR (init))
7482             {
7483               if (TYPE_NON_AGGREGATE_CLASS (type))
7484                 {
7485                   cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7486                             decl);
7487                   init = error_mark_node;
7488                 }
7489               else
7490                 goto dont_use_constructor;
7491             }
7492         }
7493       else
7494         {
7495         dont_use_constructor:
7496           if (TREE_CODE (init) != TREE_VEC)
7497             init = store_init_value (decl, init);
7498         }
7499
7500       if (init)
7501         /* We must hide the initializer so that expand_decl
7502            won't try to do something it does not understand.  */
7503         init = obscure_complex_init (decl, init);
7504     }
7505   else if (DECL_EXTERNAL (decl))
7506     ;
7507   else if (TREE_CODE_CLASS (TREE_CODE (type)) == 't'
7508            && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7509     {
7510       tree ctype = type;
7511       while (TREE_CODE (ctype) == ARRAY_TYPE)
7512         ctype = TREE_TYPE (ctype);
7513       if (! TYPE_NEEDS_CONSTRUCTING (ctype))
7514         {
7515           if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (ctype))
7516             cp_error ("structure `%D' with uninitialized const members", decl);
7517           if (CLASSTYPE_REF_FIELDS_NEED_INIT (ctype))
7518             cp_error ("structure `%D' with uninitialized reference members",
7519                       decl);
7520         }
7521
7522       check_for_uninitialized_const_var (decl);
7523
7524       if (TYPE_SIZE (type) != NULL_TREE
7525           && TYPE_NEEDS_CONSTRUCTING (type))
7526         init = obscure_complex_init (decl, NULL_TREE);
7527
7528     }
7529   else
7530     check_for_uninitialized_const_var (decl);
7531   
7532   /* For top-level declaration, the initial value was read in
7533      the temporary obstack.  MAXINDEX, rtl, etc. to be made below
7534      must go in the permanent obstack; but don't discard the
7535      temporary data yet.  */
7536
7537   if (toplevel_bindings_p () && temporary)
7538     end_temporary_allocation ();
7539
7540   /* Deduce size of array from initialization, if not already known.  */
7541
7542   if (TREE_CODE (type) == ARRAY_TYPE
7543       && TYPE_DOMAIN (type) == NULL_TREE
7544       && TREE_CODE (decl) != TYPE_DECL)
7545     {
7546       int do_default
7547         = (TREE_STATIC (decl)
7548            /* Even if pedantic, an external linkage array
7549               may have incomplete type at first.  */
7550            ? pedantic && ! DECL_EXTERNAL (decl)
7551            : !DECL_EXTERNAL (decl));
7552       tree initializer = init ? init : DECL_INITIAL (decl);
7553       int failure = complete_array_type (type, initializer, do_default);
7554
7555       if (failure == 1)
7556         cp_error ("initializer fails to determine size of `%D'", decl);
7557
7558       if (failure == 2)
7559         {
7560           if (do_default)
7561             cp_error ("array size missing in `%D'", decl);
7562           /* If a `static' var's size isn't known, make it extern as
7563              well as static, so it does not get allocated.  If it's not
7564              `static', then don't mark it extern; finish_incomplete_decl
7565              will give it a default size and it will get allocated.  */
7566           else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7567             DECL_EXTERNAL (decl) = 1;
7568         }
7569
7570       if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7571           && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7572                               integer_zero_node))
7573         cp_error ("zero-size array `%D'", decl);
7574
7575       layout_decl (decl, 0);
7576     }
7577
7578   if (TREE_CODE (decl) == VAR_DECL)
7579     {
7580       if (DECL_SIZE (decl) == NULL_TREE
7581           && TYPE_SIZE (complete_type (TREE_TYPE (decl))) != NULL_TREE)
7582         layout_decl (decl, 0);
7583
7584       if (TREE_STATIC (decl) && DECL_SIZE (decl) == NULL_TREE)
7585         {
7586           /* A static variable with an incomplete type:
7587              that is an error if it is initialized.
7588              Otherwise, let it through, but if it is not `extern'
7589              then it may cause an error message later.  */
7590           if (DECL_INITIAL (decl) != NULL_TREE)
7591             cp_error ("storage size of `%D' isn't known", decl);
7592           init = NULL_TREE;
7593         }
7594       else if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
7595         {
7596           /* An automatic variable with an incomplete type: that is an error.
7597              Don't talk about array types here, since we took care of that
7598              message in grokdeclarator.  */
7599           cp_error ("storage size of `%D' isn't known", decl);
7600           TREE_TYPE (decl) = error_mark_node;
7601         }
7602       else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7603         /* Let debugger know it should output info for this type.  */
7604         note_debug_info_needed (ttype);
7605
7606       if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7607         note_debug_info_needed (DECL_CONTEXT (decl));
7608
7609       if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7610           && DECL_SIZE (decl) != NULL_TREE
7611           && ! TREE_CONSTANT (DECL_SIZE (decl)))
7612         {
7613           if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7614             constant_expression_warning (DECL_SIZE (decl));
7615           else
7616             cp_error ("storage size of `%D' isn't constant", decl);
7617         }
7618
7619       if (! DECL_EXTERNAL (decl) && TYPE_NEEDS_DESTRUCTOR (type)
7620           /* Cleanups for static variables are handled by `finish_file'.  */
7621           && ! TREE_STATIC (decl))
7622         {
7623           int yes = suspend_momentary ();
7624           cleanup = maybe_build_cleanup (decl);
7625           resume_momentary (yes);
7626         }
7627     }
7628   /* PARM_DECLs get cleanups, too.  */
7629   else if (TREE_CODE (decl) == PARM_DECL && TYPE_NEEDS_DESTRUCTOR (type))
7630     {
7631       if (temporary)
7632         end_temporary_allocation ();
7633       cleanup = maybe_build_cleanup (decl);
7634       if (temporary)
7635         resume_temporary_allocation ();
7636     }
7637
7638   /* Output the assembler code and/or RTL code for variables and functions,
7639      unless the type is an undefined structure or union.
7640      If not, it will get done when the type is completed.  */
7641
7642   was_incomplete = (DECL_SIZE (decl) == NULL_TREE);
7643
7644   if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
7645       || TREE_CODE (decl) == RESULT_DECL)
7646     {
7647       /* ??? FIXME: What about nested classes?  */
7648       int toplev = toplevel_bindings_p () || pseudo_global_level_p ();
7649       int was_temp
7650         = (TREE_STATIC (decl) && TYPE_NEEDS_DESTRUCTOR (type)
7651            && allocation_temporary_p ());
7652
7653       if (was_temp)
7654         end_temporary_allocation ();
7655
7656       /* Static data in a function with comdat linkage also has comdat
7657          linkage.  */
7658       if (TREE_CODE (decl) == VAR_DECL
7659           && TREE_STATIC (decl)
7660           /* Don't mess with __FUNCTION__.  */
7661           && ! TREE_ASM_WRITTEN (decl)
7662           && current_function_decl
7663           && DECL_CONTEXT (decl) == current_function_decl
7664           && (DECL_THIS_INLINE (current_function_decl)
7665               || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7666           && TREE_PUBLIC (current_function_decl))
7667         {
7668           /* Rather than try to get this right with inlining, we suppress
7669              inlining of such functions.  */
7670           current_function_cannot_inline
7671             = "function with static variable cannot be inline";
7672
7673           /* If flag_weak, we don't need to mess with this, as we can just
7674              make the function weak, and let it refer to its unique local
7675              copy.  This works because we don't allow the function to be
7676              inlined.  */
7677           if (! flag_weak)
7678             {
7679               if (DECL_INTERFACE_KNOWN (current_function_decl))
7680                 {
7681                   TREE_PUBLIC (decl) = 1;
7682                   DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7683                 }
7684               else if (DECL_INITIAL (decl) == NULL_TREE
7685                        || DECL_INITIAL (decl) == error_mark_node)
7686                 {
7687                   TREE_PUBLIC (decl) = 1;
7688                   DECL_COMMON (decl) = 1;
7689                 }
7690               /* else we lose. We can only do this if we can use common,
7691                  which we can't if it has been initialized.  */
7692
7693               if (TREE_PUBLIC (decl))
7694                 DECL_ASSEMBLER_NAME (decl)
7695                   = build_static_name (current_function_decl, DECL_NAME (decl));
7696               else if (! DECL_ARTIFICIAL (decl))
7697                 {
7698                   cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7699                   cp_warning_at ("  you can work around this by removing the initializer"), decl;
7700                 }
7701             }
7702         }
7703
7704       else if (TREE_CODE (decl) == VAR_DECL
7705                && DECL_LANG_SPECIFIC (decl)
7706                && DECL_COMDAT (decl))
7707         {
7708           /* Dynamically initialized vars go into common.  */
7709           if (DECL_INITIAL (decl) == NULL_TREE
7710               || DECL_INITIAL (decl) == error_mark_node)
7711             DECL_COMMON (decl) = 1;
7712           else if (EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
7713             {
7714               DECL_COMMON (decl) = 1;
7715               DECL_INITIAL (decl) = error_mark_node;
7716             }
7717           else
7718             {
7719               /* Statically initialized vars are weak or comdat, if
7720                  supported.  */
7721               if (flag_weak)
7722                 make_decl_one_only (decl);
7723               else
7724                 {
7725                   /* We can't do anything useful; leave vars for explicit
7726                      instantiation.  */
7727                   DECL_EXTERNAL (decl) = 1;
7728                   DECL_NOT_REALLY_EXTERN (decl) = 0;
7729                 }
7730             }
7731         }
7732
7733       if (TREE_CODE (decl) == VAR_DECL && DECL_VIRTUAL_P (decl))
7734         make_decl_rtl (decl, NULL_PTR, toplev);
7735       else if (TREE_CODE (decl) == VAR_DECL
7736                && TREE_READONLY (decl)
7737                && DECL_INITIAL (decl) != NULL_TREE
7738                && DECL_INITIAL (decl) != error_mark_node
7739                && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
7740         {
7741           DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
7742
7743           if (asmspec)
7744             DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7745
7746           if (! toplev
7747               && TREE_STATIC (decl)
7748               && ! TREE_SIDE_EFFECTS (decl)
7749               && ! TREE_PUBLIC (decl)
7750               && ! DECL_EXTERNAL (decl)
7751               && ! TYPE_NEEDS_DESTRUCTOR (type)
7752               && DECL_MODE (decl) != BLKmode)
7753             {
7754               /* If this variable is really a constant, then fill its DECL_RTL
7755                  slot with something which won't take up storage.
7756                  If something later should take its address, we can always give
7757                  it legitimate RTL at that time.  */
7758               DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
7759               store_expr (DECL_INITIAL (decl), DECL_RTL (decl), 0);
7760               TREE_ASM_WRITTEN (decl) = 1;
7761             }
7762           else if (toplev && ! TREE_PUBLIC (decl))
7763             {
7764               /* If this is a static const, change its apparent linkage
7765                  if it belongs to a #pragma interface.  */
7766               if (!interface_unknown)
7767                 {
7768                   TREE_PUBLIC (decl) = 1;
7769                   DECL_EXTERNAL (decl) = interface_only;
7770                 }
7771               make_decl_rtl (decl, asmspec, toplev);
7772             }
7773           else
7774             rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7775         }
7776       else if (TREE_CODE (decl) == VAR_DECL
7777                && DECL_LANG_SPECIFIC (decl)
7778                && DECL_IN_AGGR_P (decl))
7779         {
7780           if (TREE_STATIC (decl))
7781             {
7782               if (init == NULL_TREE
7783 #ifdef DEFAULT_STATIC_DEFS
7784                   /* If this code is dead, then users must
7785                      explicitly declare static member variables
7786                      outside the class def'n as well.  */
7787                   && TYPE_NEEDS_CONSTRUCTING (type)
7788 #endif
7789                   )
7790                 {
7791                   DECL_EXTERNAL (decl) = 1;
7792                   make_decl_rtl (decl, asmspec, 1);
7793                 }
7794               else
7795                 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7796             }
7797           else
7798             /* Just a constant field.  Should not need any rtl.  */
7799             goto finish_end0;
7800         }
7801       else
7802         rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7803
7804       if (was_temp)
7805         resume_temporary_allocation ();
7806
7807       if (type != error_mark_node
7808           && TYPE_LANG_SPECIFIC (type)
7809           && CLASSTYPE_ABSTRACT_VIRTUALS (type))
7810         abstract_virtuals_error (decl, type);
7811       else if ((TREE_CODE (type) == FUNCTION_TYPE
7812                 || TREE_CODE (type) == METHOD_TYPE)
7813                && TYPE_LANG_SPECIFIC (TREE_TYPE (type))
7814                && CLASSTYPE_ABSTRACT_VIRTUALS (TREE_TYPE (type)))
7815         abstract_virtuals_error (decl, TREE_TYPE (type));
7816
7817       if (TYPE_LANG_SPECIFIC (type) && IS_SIGNATURE (type))
7818         signature_error (decl, type);
7819       else if ((TREE_CODE (type) == FUNCTION_TYPE
7820                 || TREE_CODE (type) == METHOD_TYPE)
7821                && TYPE_LANG_SPECIFIC (TREE_TYPE (type))
7822                && IS_SIGNATURE (TREE_TYPE (type)))
7823         signature_error (decl, TREE_TYPE (type));
7824
7825       if (TREE_CODE (decl) == FUNCTION_DECL)
7826         ;
7827       else if (DECL_EXTERNAL (decl)
7828                && ! (DECL_LANG_SPECIFIC (decl)
7829                      && DECL_NOT_REALLY_EXTERN (decl)))
7830         {
7831           if (init)
7832             DECL_INITIAL (decl) = init;
7833         }
7834       else if (TREE_STATIC (decl) && type != error_mark_node)
7835         {
7836           /* Cleanups for static variables are handled by `finish_file'.  */
7837           if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
7838               || TYPE_NEEDS_DESTRUCTOR (type))
7839             expand_static_init (decl, init);
7840         }
7841       else if (! toplev)
7842         {
7843           /* This is a declared decl which must live until the
7844              end of the binding contour.  It may need a cleanup.  */
7845
7846           /* Recompute the RTL of a local array now
7847              if it used to be an incomplete type.  */
7848           if (was_incomplete && ! TREE_STATIC (decl))
7849             {
7850               /* If we used it already as memory, it must stay in memory.  */
7851               TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7852               /* If it's still incomplete now, no init will save it.  */
7853               if (DECL_SIZE (decl) == NULL_TREE)
7854                 DECL_INITIAL (decl) = NULL_TREE;
7855               expand_decl (decl);
7856             }
7857           else if (! TREE_ASM_WRITTEN (decl)
7858                    && (TYPE_SIZE (type) != NULL_TREE
7859                        || TREE_CODE (type) == ARRAY_TYPE))
7860             {
7861               /* Do this here, because we did not expand this decl's
7862                  rtl in start_decl.  */
7863               if (DECL_RTL (decl) == NULL_RTX)
7864                 expand_decl (decl);
7865               else if (cleanup)
7866                 {
7867                   /* XXX: Why don't we use decl here?  */
7868                   /* Ans: Because it was already expanded? */
7869                   if (! expand_decl_cleanup (NULL_TREE, cleanup))
7870                     cp_error ("parser lost in parsing declaration of `%D'",
7871                               decl);
7872                   /* Cleanup used up here.  */
7873                   cleanup = NULL_TREE;
7874                 }
7875             }
7876
7877           if (current_binding_level->is_for_scope)
7878             {
7879               struct binding_level *outer 
7880                 = current_binding_level->level_chain;
7881
7882               /* Check to see if the same name is already bound at
7883                  the outer level, either because it was directly declared,
7884                  or because a dead for-decl got preserved.  In either case,
7885                  the code would not have been valid under the ARM
7886                  scope rules, so clear is_for_scope for the
7887                  current_binding_level.
7888
7889                  Otherwise, we need to preserve the temp slot for decl
7890                  to last into the outer binding level.  */
7891
7892               tree outer_binding 
7893                 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
7894               
7895               if (outer_binding && BINDING_LEVEL (outer_binding) == outer
7896                   && (TREE_CODE (BINDING_VALUE (outer_binding)) 
7897                       == VAR_DECL)
7898                   && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
7899                 {
7900                   BINDING_VALUE (outer_binding)
7901                     = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
7902                   current_binding_level->is_for_scope = 0;
7903                 }
7904               else if (DECL_IN_MEMORY_P (decl))
7905                 preserve_temp_slots (DECL_RTL (decl));
7906             }
7907
7908           expand_start_target_temps ();
7909
7910           if (DECL_SIZE (decl) && type != error_mark_node)
7911             {
7912               /* Compute and store the initial value.  */
7913               expand_decl_init (decl);
7914               already_used = TREE_USED (decl) || TREE_USED (type);
7915
7916               if (init || TYPE_NEEDS_CONSTRUCTING (type))
7917                 {
7918                   emit_line_note (DECL_SOURCE_FILE (decl),
7919                                   DECL_SOURCE_LINE (decl));
7920                   expand_aggr_init (decl, init, flags);
7921                 }
7922
7923               /* Set this to 0 so we can tell whether an aggregate which
7924                  was initialized was ever used.  Don't do this if it has a
7925                  destructor, so we don't complain about the 'resource
7926                  allocation is initialization' idiom.  */
7927               /* Now set attribute((unused)) on types so decls of
7928                  that type will be marked used. (see TREE_USED, above.) 
7929                  This avoids the warning problems this particular code
7930                  tried to work around. */
7931
7932               if (TYPE_NEEDS_CONSTRUCTING (type)
7933                   && ! already_used
7934                   && cleanup == NULL_TREE
7935                   && DECL_NAME (decl))
7936                 TREE_USED (decl) = 0;
7937
7938               if (already_used)
7939                 TREE_USED (decl) = 1;
7940             }
7941
7942           /* Cleanup any temporaries needed for the initial value.  */
7943           expand_end_target_temps ();
7944
7945           if (DECL_SIZE (decl) && type != error_mark_node)
7946             {
7947               /* Store the cleanup, if there was one.  */
7948               if (cleanup)
7949                 {
7950                   if (! expand_decl_cleanup (decl, cleanup))
7951                     cp_error ("parser lost in parsing declaration of `%D'",
7952                               decl);
7953                 }
7954             }
7955         }
7956     finish_end0:
7957
7958       /* Undo call to `pushclass' that was done in `start_decl'
7959          due to initialization of qualified member variable.
7960          I.e., Foo::x = 10;  */
7961       {
7962         tree context = DECL_REAL_CONTEXT (decl);
7963         if (context
7964             && TREE_CODE_CLASS (TREE_CODE (context)) == 't'
7965             && (TREE_CODE (decl) == VAR_DECL
7966                 /* We also have a pushclass done that we need to undo here
7967                    if we're at top level and declare a method.  */
7968                 || TREE_CODE (decl) == FUNCTION_DECL)
7969             /* If size hasn't been set, we're still defining it,
7970                and therefore inside the class body; don't pop
7971                the binding level..  */
7972             && TYPE_SIZE (context) != NULL_TREE
7973             && context == current_class_type)
7974           popclass (1);
7975       }
7976     }
7977
7978  finish_end:
7979
7980   /* If requested, warn about definitions of large data objects.  */
7981
7982   if (warn_larger_than
7983       && ! processing_template_decl
7984       && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
7985       && !DECL_EXTERNAL (decl))
7986     {
7987       register tree decl_size = DECL_SIZE (decl);
7988
7989       if (decl_size && TREE_CODE (decl_size) == INTEGER_CST)
7990         {
7991           unsigned units = TREE_INT_CST_LOW (decl_size) / BITS_PER_UNIT;
7992
7993           if (units > larger_than_size)
7994             warning_with_decl (decl, "size of `%s' is %u bytes", units);
7995         }
7996     }
7997
7998   if (need_pop)
7999     {
8000       /* Resume permanent allocation, if not within a function.  */
8001       /* The corresponding push_obstacks_nochange is in start_decl,
8002          start_method, groktypename, and in grokfield.  */
8003       pop_obstacks ();
8004     }
8005
8006   if (was_readonly)
8007     TREE_READONLY (decl) = 1;
8008 }
8009
8010 /* This is here for a midend callback from c-common.c */
8011
8012 void
8013 finish_decl (decl, init, asmspec_tree)
8014      tree decl, init;
8015      tree asmspec_tree;
8016 {
8017   cp_finish_decl (decl, init, asmspec_tree, 1, 0);
8018 }
8019
8020 void
8021 expand_static_init (decl, init)
8022      tree decl;
8023      tree init;
8024 {
8025   tree oldstatic = value_member (decl, static_aggregates);
8026
8027   if (oldstatic)
8028     {
8029       if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
8030         cp_error ("multiple initializations given for `%D'", decl);
8031     }
8032   else if (! toplevel_bindings_p () && ! pseudo_global_level_p ())
8033     {
8034       /* Emit code to perform this initialization but once.  */
8035       tree temp;
8036
8037       /* Remember this information until end of file.  */
8038       push_obstacks (&permanent_obstack, &permanent_obstack);
8039
8040       /* Emit code to perform this initialization but once.  This code
8041          looks like:
8042
8043            static int temp = 0;
8044            if (!temp) {
8045              // Do initialization.
8046              temp = 1;
8047              // Register variable for destruction at end of program.
8048            }
8049
8050          Note that the `temp' variable is only set to 1 *after* the
8051          initialization is complete.  This ensures that an exception,
8052          thrown during the construction, will cause the variable to
8053          reinitialized when we pass through this code again, as per:
8054          
8055            [stmt.dcl]
8056
8057            If the initialization exits by throwing an exception, the
8058            initialization is not complete, so it will be tried again
8059            the next time control enters the declaration.
8060
8061          In theory, this process should be thread-safe, too; multiple
8062          threads should not be able to initialize the variable more
8063          than once.  We don't yet attempt to ensure thread-safety.  */
8064       temp = get_temp_name (integer_type_node, 1);
8065       rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
8066
8067       /* Begin the conditional initialization.  */
8068       expand_start_cond (build_binary_op (EQ_EXPR, temp,
8069                                           integer_zero_node, 1), 0);
8070       expand_start_target_temps ();
8071
8072       /* Do the initialization itself.  */
8073       if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
8074           || (init && TREE_CODE (init) == TREE_LIST))
8075         {
8076           expand_aggr_init (decl, init, 0);
8077           do_pending_stack_adjust ();
8078         }
8079       else if (init)
8080         expand_assignment (decl, init, 0, 0);
8081
8082       /* Set TEMP to 1.  */
8083       expand_assignment (temp, integer_one_node, 0, 0);
8084
8085       /* Cleanup any temporaries needed for the initial value.  If
8086          destroying one of the temporaries causes an exception to be
8087          thrown, then the object itself has still been fully
8088          constructed.  */
8089       expand_end_target_temps ();
8090
8091       /* Use atexit to register a function for destroying this static
8092          variable.  */
8093       if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
8094         {
8095           tree cleanup, fcall;
8096           static tree Atexit = 0;
8097           if (Atexit == 0)
8098             {
8099               tree atexit_fndecl, PFV, pfvlist;
8100               /* Remember this information until end of file.  */
8101               push_obstacks (&permanent_obstack, &permanent_obstack);
8102               PFV = build_pointer_type (build_function_type
8103                                         (void_type_node, void_list_node));
8104
8105               pfvlist = tree_cons (NULL_TREE, PFV, void_list_node);
8106
8107               push_lang_context (lang_name_c);
8108               atexit_fndecl
8109                 = builtin_function ("atexit",
8110                                     build_function_type (void_type_node,
8111                                                          pfvlist),
8112                                     NOT_BUILT_IN, NULL_PTR);
8113               assemble_external (atexit_fndecl);
8114               Atexit = default_conversion (atexit_fndecl);
8115               pop_lang_context ();
8116               pop_obstacks ();
8117             }
8118               
8119           /* Call build_cleanup before we enter the anonymous function
8120              so that any access checks will be done relative to the
8121              current scope, rather than the scope of the anonymous
8122              function.  */
8123           fcall = build_cleanup (decl);
8124           cleanup = start_anon_func ();
8125           expand_expr_stmt (fcall);
8126           end_anon_func ();
8127           mark_addressable (cleanup);
8128           cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
8129           fcall = build_function_call (Atexit, expr_tree_cons (NULL_TREE, cleanup, NULL_TREE));
8130           expand_expr_stmt (fcall);
8131         }
8132
8133       expand_end_cond ();
8134       if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
8135         {
8136           static_aggregates = perm_tree_cons (temp, decl, static_aggregates);
8137           TREE_STATIC (static_aggregates) = 1;
8138         }
8139
8140       /* Resume old (possibly temporary) allocation.  */
8141       pop_obstacks ();
8142     }
8143   else
8144     {
8145       /* This code takes into account memory allocation
8146          policy of `start_decl'.  Namely, if TYPE_NEEDS_CONSTRUCTING
8147          does not hold for this object, then we must make permanent
8148          the storage currently in the temporary obstack.  */
8149       if (! TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
8150         preserve_initializer ();
8151       static_aggregates = perm_tree_cons (init, decl, static_aggregates);
8152     }
8153 }
8154 \f
8155 /* Make TYPE a complete type based on INITIAL_VALUE.
8156    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8157    2 if there was no information (in which case assume 1 if DO_DEFAULT).  */
8158
8159 int
8160 complete_array_type (type, initial_value, do_default)
8161      tree type, initial_value;
8162      int do_default;
8163 {
8164   register tree maxindex = NULL_TREE;
8165   int value = 0;
8166
8167   if (initial_value)
8168     {
8169       /* Note MAXINDEX  is really the maximum index,
8170          one less than the size.  */
8171       if (TREE_CODE (initial_value) == STRING_CST)
8172         {
8173           int eltsize
8174             = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8175           maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8176                                    / eltsize) - 1, 0);
8177         }
8178       else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8179         {
8180           tree elts = CONSTRUCTOR_ELTS (initial_value);
8181           maxindex = size_binop (MINUS_EXPR, integer_zero_node, size_one_node);
8182           for (; elts; elts = TREE_CHAIN (elts))
8183             {
8184               if (TREE_PURPOSE (elts))
8185                 maxindex = TREE_PURPOSE (elts);
8186               else
8187                 maxindex = size_binop (PLUS_EXPR, maxindex, size_one_node);
8188             }
8189           maxindex = copy_node (maxindex);
8190         }
8191       else
8192         {
8193           /* Make an error message unless that happened already.  */
8194           if (initial_value != error_mark_node)
8195             value = 1;
8196
8197           /* Prevent further error messages.  */
8198           maxindex = build_int_2 (0, 0);
8199         }
8200     }
8201
8202   if (!maxindex)
8203     {
8204       if (do_default)
8205         maxindex = build_int_2 (0, 0);
8206       value = 2;
8207     }
8208
8209   if (maxindex)
8210     {
8211       tree itype;
8212
8213       TYPE_DOMAIN (type) = build_index_type (maxindex);
8214       if (! TREE_TYPE (maxindex))
8215         TREE_TYPE (maxindex) = TYPE_DOMAIN (type);
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) = TYPE_DOMAIN (type);
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)) = TYPE_DOMAIN (type);
8227     }
8228
8229   /* Lay out the type now that we can get the real answer.  */
8230
8231   layout_type (type);
8232
8233   return value;
8234 }
8235 \f
8236 /* Return zero if something is declared to be a member of type
8237    CTYPE when in the context of CUR_TYPE.  STRING is the error
8238    message to print in that case.  Otherwise, quietly return 1.  */
8239
8240 static int
8241 member_function_or_else (ctype, cur_type, string)
8242      tree ctype, cur_type;
8243      char *string;
8244 {
8245   if (ctype && ctype != cur_type)
8246     {
8247       error (string, TYPE_NAME_STRING (ctype));
8248       return 0;
8249     }
8250   return 1;
8251 }
8252 \f
8253 /* Subroutine of `grokdeclarator'.  */
8254
8255 /* Generate errors possibly applicable for a given set of specifiers.
8256    This is for ARM $7.1.2.  */
8257
8258 static void
8259 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8260      tree object;
8261      char *type;
8262      int virtualp, quals, friendp, raises, inlinep;
8263 {
8264   if (virtualp)
8265     cp_error ("`%D' declared as a `virtual' %s", object, type);
8266   if (inlinep)
8267     cp_error ("`%D' declared as an `inline' %s", object, type);
8268   if (quals)
8269     cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
8270               object, type);
8271   if (friendp)
8272     cp_error_at ("invalid friend declaration", object);
8273   if (raises)
8274     cp_error_at ("invalid exception specifications", object);
8275 }
8276
8277 /* CTYPE is class type, or null if non-class.
8278    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8279    or METHOD_TYPE.
8280    DECLARATOR is the function's name.
8281    VIRTUALP is truthvalue of whether the function is virtual or not.
8282    FLAGS are to be passed through to `grokclassfn'.
8283    QUALS are qualifiers indicating whether the function is `const'
8284    or `volatile'.
8285    RAISES is a list of exceptions that this function can raise.
8286    CHECK is 1 if we must find this method in CTYPE, 0 if we should
8287    not look, and -1 if we should not call `grokclassfn' at all.  
8288
8289    Returns `error_mark_node' if something goes wrong, after issuing
8290    applicable error messages.  */
8291
8292 static tree
8293 grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
8294             raises, attrlist, check, friendp, publicp, inlinep, funcdef_flag,
8295             template_count, in_namespace)
8296      tree ctype, type;
8297      tree declarator;
8298      tree orig_declarator;
8299      int virtualp;
8300      enum overload_flags flags;
8301      tree quals, raises, attrlist;
8302      int check, friendp, publicp, inlinep, funcdef_flag, template_count;
8303      tree in_namespace;
8304 {
8305   tree cname, decl;
8306   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8307   tree t;
8308
8309   if (ctype)
8310     cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8311       ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8312   else
8313     cname = NULL_TREE;
8314
8315   if (raises)
8316     {
8317       type = build_exception_variant (type, raises);
8318     }
8319
8320   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8321   /* Propagate volatile out from type to decl. */
8322   if (TYPE_VOLATILE (type))
8323     TREE_THIS_VOLATILE (decl) = 1;
8324
8325   /* If this decl has namespace scope, set that up.  */
8326   if (in_namespace)
8327     set_decl_namespace (decl, in_namespace);
8328   else if (publicp && ! ctype)
8329     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8330
8331   /* `main' and builtins have implicit 'C' linkage.  */
8332   if ((MAIN_NAME_P (declarator)
8333        || (IDENTIFIER_LENGTH (declarator) > 10
8334            && IDENTIFIER_POINTER (declarator)[0] == '_'
8335            && IDENTIFIER_POINTER (declarator)[1] == '_'
8336            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8337       && current_lang_name == lang_name_cplusplus
8338       && ctype == NULL_TREE
8339       /* NULL_TREE means global namespace.  */
8340       && DECL_CONTEXT (decl) == NULL_TREE)
8341     DECL_LANGUAGE (decl) = lang_c;
8342
8343   /* Should probably propagate const out from type to decl I bet (mrs).  */
8344   if (staticp)
8345     {
8346       DECL_STATIC_FUNCTION_P (decl) = 1;
8347       DECL_CONTEXT (decl) = ctype;
8348     }
8349
8350   if (ctype)
8351     DECL_CLASS_CONTEXT (decl) = ctype;
8352
8353   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8354     {
8355       if (processing_template_decl)
8356         error ("cannot declare `main' to be a template");
8357       if (inlinep)
8358         error ("cannot declare `main' to be inline");
8359       else if (! publicp)
8360         error ("cannot declare `main' to be static");
8361       inlinep = 0;
8362       publicp = 1;
8363     }
8364
8365   /* Members of anonymous types and local classes have no linkage; make
8366      them internal.  */
8367   if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
8368                 || hack_decl_function_context (TYPE_MAIN_DECL (ctype))))
8369     publicp = 0;
8370
8371   if (publicp)
8372     {
8373       /* [basic.link]: A name with no linkage (notably, the name of a class
8374          or enumeration declared in a local scope) shall not be used to
8375          declare an entity with linkage.
8376
8377          Only check this for public decls for now.  */
8378       t = no_linkage_check (TREE_TYPE (decl));
8379       if (t)
8380         {
8381           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8382             {
8383               if (DECL_LANGUAGE (decl) == lang_c)
8384                 /* Allow this; it's pretty common in C.  */;
8385               else
8386                 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8387                             decl);
8388             }
8389           else
8390             cp_pedwarn ("non-local function `%#D' uses local type `%T'",
8391                         decl, t);
8392         }
8393     }
8394
8395   TREE_PUBLIC (decl) = publicp;
8396   if (! publicp)
8397     {
8398       DECL_INTERFACE_KNOWN (decl) = 1;
8399       DECL_NOT_REALLY_EXTERN (decl) = 1;
8400     }
8401
8402   if (inlinep)
8403     DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8404
8405   DECL_EXTERNAL (decl) = 1;
8406   if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8407     {
8408       cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8409                 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8410       quals = NULL_TREE;
8411     }
8412
8413   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8414     grok_op_properties (decl, virtualp, check < 0);
8415
8416   if (ctype && hack_decl_function_context (decl))
8417     DECL_NO_STATIC_CHAIN (decl) = 1;
8418
8419   for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8420     if (TREE_PURPOSE (t)
8421         && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8422       {
8423         add_defarg_fn (decl);
8424         break;
8425       }
8426
8427   if (friendp
8428       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8429     {
8430       if (funcdef_flag)
8431         cp_error
8432           ("defining explicit specialization `%D' in friend declaration",
8433            orig_declarator);
8434       else
8435         {
8436           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8437             {
8438               /* Something like `template <class T> friend void f<T>()'.  */
8439               cp_error ("template-id `%D' in declaration of primary template", 
8440                         orig_declarator);
8441               return error_mark_node;
8442             }
8443
8444           /* A friend declaration of the form friend void f<>().  Record
8445              the information in the TEMPLATE_ID_EXPR.  */
8446           SET_DECL_IMPLICIT_INSTANTIATION (decl);
8447           DECL_TEMPLATE_INFO (decl)
8448             = perm_tree_cons (TREE_OPERAND (orig_declarator, 0),
8449                               TREE_OPERAND (orig_declarator, 1),
8450                               NULL_TREE);
8451         }
8452     }
8453
8454   /* Plain overloading: will not be grok'd by grokclassfn.  */
8455   if (! ctype && ! processing_template_decl
8456       && DECL_LANGUAGE (decl) != lang_c
8457       && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
8458     set_mangled_name_for_decl (decl);
8459
8460   if (funcdef_flag)
8461     /* Make the init_value nonzero so pushdecl knows this is not
8462        tentative.  error_mark_node is replaced later with the BLOCK.  */
8463     DECL_INITIAL (decl) = error_mark_node;
8464
8465   /* Caller will do the rest of this.  */
8466   if (check < 0)
8467     return decl;
8468
8469   if (check && funcdef_flag)
8470     DECL_INITIAL (decl) = error_mark_node;
8471
8472   if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
8473     {
8474       tree tmp;
8475       /* Just handle constructors here.  We could do this
8476          inside the following if stmt, but I think
8477          that the code is more legible by breaking this
8478          case out.  See comments below for what each of
8479          the following calls is supposed to do.  */
8480       DECL_CONSTRUCTOR_P (decl) = 1;
8481
8482       grokclassfn (ctype, decl, flags, quals);
8483
8484       decl = check_explicit_specialization (orig_declarator, decl,
8485                                             template_count, 
8486                                             2 * (funcdef_flag != 0) + 
8487                                             4 * (friendp != 0));
8488       if (decl == error_mark_node)
8489         return error_mark_node;
8490
8491       if ((! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8492           && check)
8493         {
8494           tmp = check_classfn (ctype, decl);
8495
8496           if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8497             tmp = DECL_TEMPLATE_RESULT(tmp);
8498
8499           if (tmp && DECL_ARTIFICIAL (tmp))
8500             cp_error ("definition of implicitly-declared `%D'", tmp);
8501           if (tmp && duplicate_decls (decl, tmp))
8502             return tmp;
8503         }
8504       if (! grok_ctor_properties (ctype, decl))
8505         return error_mark_node;
8506     }
8507   else
8508     {
8509       tree tmp;
8510
8511       /* Function gets the ugly name, field gets the nice one.
8512          This call may change the type of the function (because
8513          of default parameters)!  */
8514       if (ctype != NULL_TREE)
8515         grokclassfn (ctype, decl, flags, quals);
8516
8517       decl = check_explicit_specialization (orig_declarator, decl,
8518                                             template_count, 
8519                                             2 * (funcdef_flag != 0) + 
8520                                             4 * (friendp != 0));
8521       if (decl == error_mark_node)
8522         return error_mark_node;
8523
8524       if (ctype != NULL_TREE
8525           && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8526           && check)
8527         {
8528           tmp = check_classfn (ctype, decl);
8529
8530           if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8531             tmp = DECL_TEMPLATE_RESULT (tmp);
8532               
8533           if (tmp && DECL_STATIC_FUNCTION_P (tmp)
8534               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8535             {
8536               /* Remove the `this' parm added by grokclassfn.
8537                  XXX Isn't this done in start_function, too?  */
8538               revert_static_member_fn (&decl, NULL, NULL);
8539               last_function_parms = TREE_CHAIN (last_function_parms);
8540             }
8541           if (tmp && DECL_ARTIFICIAL (tmp))
8542             cp_error ("definition of implicitly-declared `%D'", tmp);
8543           if (tmp)
8544             {
8545               if (!duplicate_decls (decl, tmp))
8546                 my_friendly_abort (892);
8547               return tmp;
8548             }
8549         }
8550
8551       if (ctype == NULL_TREE || check)
8552         return decl;
8553
8554       if (attrlist)
8555         cplus_decl_attributes (decl, TREE_PURPOSE (attrlist), 
8556                                TREE_VALUE (attrlist));
8557       make_decl_rtl (decl, NULL_PTR, 1);
8558
8559       if (virtualp)
8560         {
8561           DECL_VIRTUAL_P (decl) = 1;
8562           if (DECL_VINDEX (decl) == NULL_TREE)
8563             DECL_VINDEX (decl) = error_mark_node;
8564           IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
8565         }
8566     }
8567   return decl;
8568 }
8569
8570 static tree
8571 grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
8572      tree type;
8573      tree declarator;
8574      RID_BIT_TYPE *specbits_in;
8575      int initialized;
8576      int constp;
8577      tree in_namespace;
8578 {
8579   tree decl;
8580   RID_BIT_TYPE specbits;
8581
8582   specbits = *specbits_in;
8583
8584   if (TREE_CODE (type) == OFFSET_TYPE)
8585     {
8586       /* If you declare a static member so that it
8587          can be initialized, the code will reach here.  */
8588       tree basetype = TYPE_OFFSET_BASETYPE (type);
8589       type = TREE_TYPE (type);
8590       decl = build_lang_field_decl (VAR_DECL, declarator, type);
8591       DECL_CONTEXT (decl) = basetype;
8592       DECL_CLASS_CONTEXT (decl) = basetype;
8593       DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
8594     }
8595   else
8596     {
8597       tree context;
8598
8599       if (in_namespace)
8600         context = in_namespace;
8601       else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
8602         context = current_namespace;
8603       else
8604         context = NULL_TREE;
8605
8606       decl = build_decl (VAR_DECL, declarator, complete_type (type));
8607
8608       if (context)
8609         set_decl_namespace (decl, context);
8610
8611       context = DECL_CONTEXT (decl);
8612       if (declarator && context && current_lang_name != lang_name_c)
8613         DECL_ASSEMBLER_NAME (decl) = build_static_name (context, declarator);
8614     }
8615
8616   if (in_namespace)
8617     set_decl_namespace (decl, in_namespace);
8618
8619   if (RIDBIT_SETP (RID_EXTERN, specbits))
8620     {
8621       DECL_THIS_EXTERN (decl) = 1;
8622       DECL_EXTERNAL (decl) = !initialized;
8623     }
8624
8625   /* In class context, static means one per class,
8626      public access, and static storage.  */
8627   if (DECL_CLASS_SCOPE_P (decl))
8628     {
8629       TREE_PUBLIC (decl) = 1;
8630       TREE_STATIC (decl) = 1;
8631       DECL_EXTERNAL (decl) = 0;
8632     }
8633   /* At top level, either `static' or no s.c. makes a definition
8634      (perhaps tentative), and absence of `static' makes it public.  */
8635   else if (toplevel_bindings_p ())
8636     {
8637       TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
8638                             && (DECL_THIS_EXTERN (decl) || ! constp));
8639       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8640     }
8641   /* Not at top level, only `static' makes a static definition.  */
8642   else
8643     {
8644       TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
8645       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8646     }
8647
8648   if (TREE_PUBLIC (decl))
8649     {
8650       /* [basic.link]: A name with no linkage (notably, the name of a class
8651          or enumeration declared in a local scope) shall not be used to
8652          declare an entity with linkage.
8653
8654          Only check this for public decls for now.  */
8655       tree t = no_linkage_check (TREE_TYPE (decl));
8656       if (t)
8657         {
8658           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8659             /* Ignore for now; `enum { foo } e' is pretty common.  */;
8660           else
8661             cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
8662                         decl, t);
8663         }
8664     }
8665
8666   return decl;
8667 }
8668
8669 /* Create and return a canonical pointer to member function type, for
8670    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
8671
8672 tree
8673 build_ptrmemfunc_type (type)
8674      tree type;
8675 {
8676   tree fields[4];
8677   tree t;
8678   tree u;
8679
8680   /* If a canonical type already exists for this type, use it.  We use
8681      this method instead of type_hash_canon, because it only does a
8682      simple equality check on the list of field members.  */
8683
8684   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
8685     return t;
8686
8687   push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8688
8689   u = make_lang_type (UNION_TYPE);
8690   SET_IS_AGGR_TYPE (u, 0);
8691   fields[0] = build_lang_field_decl (FIELD_DECL, pfn_identifier, type);
8692   fields[1] = build_lang_field_decl (FIELD_DECL, delta2_identifier,
8693                                      delta_type_node);
8694   finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
8695   TYPE_NAME (u) = NULL_TREE;
8696
8697   t = make_lang_type (RECORD_TYPE);
8698
8699   /* Let the front-end know this is a pointer to member function...  */
8700   TYPE_PTRMEMFUNC_FLAG (t) = 1;
8701   /* ... and not really an aggregate.  */
8702   SET_IS_AGGR_TYPE (t, 0);
8703
8704   fields[0] = build_lang_field_decl (FIELD_DECL, delta_identifier,
8705                                      delta_type_node);
8706   fields[1] = build_lang_field_decl (FIELD_DECL, index_identifier,
8707                                      delta_type_node);
8708   fields[2] = build_lang_field_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
8709   finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
8710
8711   pop_obstacks ();
8712
8713   /* Zap out the name so that the back-end will give us the debugging
8714      information for this anonymous RECORD_TYPE.  */
8715   TYPE_NAME (t) = NULL_TREE;
8716
8717   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
8718
8719   /* Seems to be wanted.  */
8720   CLASSTYPE_GOT_SEMICOLON (t) = 1;
8721   return t;
8722 }
8723
8724 /* Given declspecs and a declarator,
8725    determine the name and type of the object declared
8726    and construct a ..._DECL node for it.
8727    (In one case we can return a ..._TYPE node instead.
8728     For invalid input we sometimes return 0.)
8729
8730    DECLSPECS is a chain of tree_list nodes whose value fields
8731     are the storage classes and type specifiers.
8732
8733    DECL_CONTEXT says which syntactic context this declaration is in:
8734      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8735      FUNCDEF for a function definition.  Like NORMAL but a few different
8736       error messages in each case.  Return value may be zero meaning
8737       this definition is too screwy to try to parse.
8738      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
8739       handle member functions (which have FIELD context).
8740       Return value may be zero meaning this definition is too screwy to
8741       try to parse.
8742      PARM for a parameter declaration (either within a function prototype
8743       or before a function body).  Make a PARM_DECL, or return void_type_node.
8744      CATCHPARM for a parameter declaration before a catch clause.
8745      TYPENAME if for a typename (in a cast or sizeof).
8746       Don't make a DECL node; just return the ..._TYPE node.
8747      FIELD for a struct or union field; make a FIELD_DECL.
8748      BITFIELD for a field with specified width.
8749    INITIALIZED is 1 if the decl has an initializer.
8750
8751    In the TYPENAME case, DECLARATOR is really an absolute declarator.
8752    It may also be so in the PARM case, for a prototype where the
8753    argument type is specified but not the name.
8754
8755    This function is where the complicated C meanings of `static'
8756    and `extern' are interpreted.
8757
8758    For C++, if there is any monkey business to do, the function which
8759    calls this one must do it, i.e., prepending instance variables,
8760    renaming overloaded function names, etc.
8761
8762    Note that for this C++, it is an error to define a method within a class
8763    which does not belong to that class.
8764
8765    Except in the case where SCOPE_REFs are implicitly known (such as
8766    methods within a class being redundantly qualified),
8767    declarations which involve SCOPE_REFs are returned as SCOPE_REFs
8768    (class_name::decl_name).  The caller must also deal with this.
8769
8770    If a constructor or destructor is seen, and the context is FIELD,
8771    then the type gains the attribute TREE_HAS_x.  If such a declaration
8772    is erroneous, NULL_TREE is returned.
8773
8774    QUALS is used only for FUNCDEF and MEMFUNCDEF cases.  For a member
8775    function, these are the qualifiers to give to the `this' pointer.
8776
8777    May return void_type_node if the declarator turned out to be a friend.
8778    See grokfield for details.  */
8779
8780 enum return_types { return_normal, return_ctor, return_dtor, return_conversion };
8781
8782 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
8783    Check to see that the definition is valid.  Issue appropriate error
8784    messages.  Return 1 if the definition is particularly bad, or 0
8785    otherwise.  */
8786
8787 int
8788 check_static_variable_definition (decl, type)
8789      tree decl;
8790      tree type;
8791 {
8792   /* Motion 10 at San Diego: If a static const integral data member is
8793      initialized with an integral constant expression, the initializer
8794      may appear either in the declaration (within the class), or in
8795      the definition, but not both.  If it appears in the class, the
8796      member is a member constant.  The file-scope definition is always
8797      required.  */
8798   if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
8799     {
8800       cp_error ("in-class initialization of static data member of non-integral type `%T'", 
8801                 type);
8802       /* If we just return the declaration, crashes will sometimes
8803          occur.  We therefore return void_type_node, as if this was a
8804          friend declaration, to cause callers to completely ignore
8805          this declaration.  */
8806       return 1;
8807     }
8808   else if (!CP_TYPE_CONST_P (type))
8809     cp_error ("ANSI C++ forbids in-class initialization of non-const static member `%D'",
8810               decl);
8811   else if (pedantic && !INTEGRAL_TYPE_P (type))
8812     cp_pedwarn ("ANSI C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
8813
8814   return 0;
8815 }
8816
8817 tree
8818 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
8819      tree declspecs;
8820      tree declarator;
8821      enum decl_context decl_context;
8822      int initialized;
8823      tree attrlist;
8824 {
8825   RID_BIT_TYPE specbits;
8826   int nclasses = 0;
8827   tree spec;
8828   tree type = NULL_TREE;
8829   int longlong = 0;
8830   int constp;
8831   int restrictp;
8832   int volatilep;
8833   int type_quals;
8834   int virtualp, explicitp, friendp, inlinep, staticp;
8835   int explicit_int = 0;
8836   int explicit_char = 0;
8837   int defaulted_int = 0;
8838   int opaque_typedef = 0;
8839   tree typedef_decl = NULL_TREE;
8840   char *name;
8841   tree typedef_type = NULL_TREE;
8842   int funcdef_flag = 0;
8843   enum tree_code innermost_code = ERROR_MARK;
8844   int bitfield = 0;
8845 #if 0
8846   /* See the code below that used this.  */
8847   tree decl_machine_attr = NULL_TREE;
8848 #endif
8849   /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
8850      All FIELD_DECLs we build here have `init' put into their DECL_INITIAL.  */
8851   tree init = NULL_TREE;
8852
8853   /* Keep track of what sort of function is being processed
8854      so that we can warn about default return values, or explicit
8855      return values which do not match prescribed defaults.  */
8856   enum return_types return_type = return_normal;
8857
8858   tree dname = NULL_TREE;
8859   tree ctype = current_class_type;
8860   tree ctor_return_type = NULL_TREE;
8861   enum overload_flags flags = NO_SPECIAL;
8862   tree quals = NULL_TREE;
8863   tree raises = NULL_TREE;
8864   int template_count = 0;
8865   tree in_namespace = NULL_TREE;
8866   tree inner_attrs;
8867   int ignore_attrs;
8868
8869   RIDBIT_RESET_ALL (specbits);
8870   if (decl_context == FUNCDEF)
8871     funcdef_flag = 1, decl_context = NORMAL;
8872   else if (decl_context == MEMFUNCDEF)
8873     funcdef_flag = -1, decl_context = FIELD;
8874   else if (decl_context == BITFIELD)
8875     bitfield = 1, decl_context = FIELD;
8876
8877   /* Look inside a declarator for the name being declared
8878      and get it as a string, for an error message.  */
8879   {
8880     tree *next = &declarator;
8881     register tree decl;
8882     name = NULL;
8883
8884     while (next && *next)
8885       {
8886         decl = *next;
8887         switch (TREE_CODE (decl))
8888           {
8889           case TREE_LIST:
8890             /* For attributes.  */
8891             next = &TREE_VALUE (decl);
8892             break;
8893
8894           case COND_EXPR:
8895             ctype = NULL_TREE;
8896             next = &TREE_OPERAND (decl, 0);
8897             break;
8898
8899           case BIT_NOT_EXPR:    /* For C++ destructors!  */
8900             {
8901               tree name = TREE_OPERAND (decl, 0);
8902               tree rename = NULL_TREE;
8903
8904               my_friendly_assert (flags == NO_SPECIAL, 152);
8905               flags = DTOR_FLAG;
8906               return_type = return_dtor;
8907               if (TREE_CODE (name) == TYPE_DECL)
8908                 TREE_OPERAND (decl, 0) = name = constructor_name (name);
8909               my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
8910               if (ctype == NULL_TREE)
8911                 {
8912                   if (current_class_type == NULL_TREE)
8913                     {
8914                       error ("destructors must be member functions");
8915                       flags = NO_SPECIAL;
8916                     }
8917                   else
8918                     {
8919                       tree t = constructor_name (current_class_name);
8920                       if (t != name)
8921                         rename = t;
8922                     }
8923                 }
8924               else
8925                 {
8926                   tree t = constructor_name (ctype);
8927                   if (t != name)
8928                     rename = t;
8929                 }
8930
8931               if (rename)
8932                 {
8933                   cp_error ("destructor `%T' must match class name `%T'",
8934                             name, rename);
8935                   TREE_OPERAND (decl, 0) = rename;
8936                 }
8937               next = &name;
8938             }
8939             break;
8940
8941           case ADDR_EXPR:       /* C++ reference declaration */
8942             /* Fall through. */
8943           case ARRAY_REF:
8944           case INDIRECT_REF:
8945             ctype = NULL_TREE;
8946             innermost_code = TREE_CODE (decl);
8947             next = &TREE_OPERAND (decl, 0);
8948             break;
8949
8950           case CALL_EXPR:
8951             if (parmlist_is_exprlist (TREE_OPERAND (decl, 1)))
8952               {
8953                 /* This is actually a variable declaration using constructor
8954                    syntax.  We need to call start_decl and cp_finish_decl so we
8955                    can get the variable initialized...  */
8956
8957                 *next = TREE_OPERAND (decl, 0);
8958                 init = TREE_OPERAND (decl, 1);
8959
8960                 decl = start_decl (declarator, declspecs, 1, NULL_TREE, NULL_TREE);
8961                 if (decl)
8962                   {
8963                     /* Look for __unused__ attribute */
8964                     if (TREE_USED (TREE_TYPE (decl)))
8965                       TREE_USED (decl) = 1;
8966                     finish_decl (decl, init, NULL_TREE);
8967                   }
8968                 else
8969                   cp_error ("invalid declarator");
8970                 return 0;
8971               }
8972             innermost_code = TREE_CODE (decl);
8973             if (decl_context == FIELD && ctype == NULL_TREE)
8974               ctype = current_class_type;
8975             if (ctype
8976                 && TREE_OPERAND (decl, 0)
8977                 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
8978                     && ((DECL_NAME (TREE_OPERAND (decl, 0))
8979                          == constructor_name_full (ctype))
8980                         || (DECL_NAME (TREE_OPERAND (decl, 0))
8981                             == constructor_name (ctype)))))
8982               TREE_OPERAND (decl, 0) = constructor_name (ctype);
8983             next = &TREE_OPERAND (decl, 0);
8984             decl = *next;
8985             if (ctype != NULL_TREE
8986                 && decl != NULL_TREE && flags != DTOR_FLAG
8987                 && decl == constructor_name (ctype))
8988               {
8989                 return_type = return_ctor;
8990                 ctor_return_type = ctype;
8991               }
8992             ctype = NULL_TREE;
8993             break;
8994             
8995           case TEMPLATE_ID_EXPR:
8996               {
8997                 tree fns = TREE_OPERAND (decl, 0);
8998
8999                 if (TREE_CODE (fns) == LOOKUP_EXPR)
9000                   fns = TREE_OPERAND (fns, 0);
9001
9002                 if (TREE_CODE (fns) == IDENTIFIER_NODE)
9003                   dname = fns;
9004                 else if (is_overloaded_fn (fns))
9005                   dname = DECL_NAME (get_first_fn (fns));
9006                 else
9007                   my_friendly_abort (0);
9008               }
9009           /* Fall through. */
9010
9011           case IDENTIFIER_NODE:
9012             if (TREE_CODE (decl) == IDENTIFIER_NODE)
9013               dname = decl;
9014
9015             next = 0;
9016
9017             if (is_rid (dname))
9018               {
9019                 cp_error ("declarator-id missing; using reserved word `%D'",
9020                           dname);
9021                 name = IDENTIFIER_POINTER (dname);
9022               }
9023             if (! IDENTIFIER_OPNAME_P (dname)
9024                 /* GNU/Linux headers use '__op'.  Arrgh.  */
9025                 || (IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname)))
9026               name = IDENTIFIER_POINTER (dname);
9027             else
9028               {
9029                 if (IDENTIFIER_TYPENAME_P (dname))
9030                   {
9031                     my_friendly_assert (flags == NO_SPECIAL, 154);
9032                     flags = TYPENAME_FLAG;
9033                     ctor_return_type = TREE_TYPE (dname);
9034                     return_type = return_conversion;
9035                   }
9036                 name = operator_name_string (dname);
9037               }
9038             break;
9039
9040             /* C++ extension */
9041           case SCOPE_REF:
9042             {
9043               /* Perform error checking, and decide on a ctype.  */
9044               tree cname = TREE_OPERAND (decl, 0);
9045               if (cname == NULL_TREE)
9046                 ctype = NULL_TREE;
9047               else if (TREE_CODE (cname) == NAMESPACE_DECL)
9048                 {
9049                   ctype = NULL_TREE;
9050                   in_namespace = TREE_OPERAND (decl, 0);
9051                   TREE_OPERAND (decl, 0) = NULL_TREE;
9052                 }
9053               else if (! is_aggr_type (cname, 1))
9054                 TREE_OPERAND (decl, 0) = NULL_TREE;
9055               /* Must test TREE_OPERAND (decl, 1), in case user gives
9056                  us `typedef (class::memfunc)(int); memfunc *memfuncptr;'  */
9057               else if (TREE_OPERAND (decl, 1)
9058                        && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9059                 ctype = cname;
9060               else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
9061                        || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
9062                 {
9063                   cp_error ("`%T::%D' is not a valid declarator", cname,
9064                             TREE_OPERAND (decl, 1));
9065                   cp_error ("  perhaps you want `typename %T::%D' to make it a type",
9066                             cname, TREE_OPERAND (decl, 1));
9067                   return void_type_node;
9068                 }
9069               else if (ctype == NULL_TREE)
9070                 ctype = cname;
9071               else if (TREE_COMPLEXITY (decl) == current_class_depth)
9072                 TREE_OPERAND (decl, 0) = ctype;
9073               else
9074                 {
9075                   if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
9076                     {
9077                       cp_error ("type `%T' is not derived from type `%T'",
9078                                 cname, ctype);
9079                       TREE_OPERAND (decl, 0) = NULL_TREE;
9080                     }
9081                   else
9082                     ctype = cname;
9083                 }
9084
9085               if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
9086                   && ((DECL_NAME (TREE_OPERAND (decl, 1))
9087                        == constructor_name_full (ctype))
9088                       || (DECL_NAME (TREE_OPERAND (decl, 1))
9089                           == constructor_name (ctype))))
9090                 TREE_OPERAND (decl, 1) = constructor_name (ctype);
9091               next = &TREE_OPERAND (decl, 1);
9092               decl = *next;
9093               if (ctype)
9094                 {
9095                   if (TREE_CODE (decl) == IDENTIFIER_NODE
9096                       && constructor_name (ctype) == decl)
9097                     {
9098                       return_type = return_ctor;
9099                       ctor_return_type = ctype;
9100                     }
9101                   else if (TREE_CODE (decl) == BIT_NOT_EXPR
9102                            && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9103                            && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9104                                || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9105                     {
9106                       return_type = return_dtor;
9107                       ctor_return_type = ctype;
9108                       flags = DTOR_FLAG;
9109                       TREE_OPERAND (decl, 0) = constructor_name (ctype);
9110                       next = &TREE_OPERAND (decl, 0);
9111                     }
9112                 }
9113             }
9114             break;
9115
9116           case ERROR_MARK:
9117             next = 0;
9118             break;
9119
9120           case TYPE_DECL:
9121             /* Parse error puts this typespec where
9122                a declarator should go.  */
9123             cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
9124             if (TREE_TYPE (decl) == current_class_type)
9125               cp_error ("  perhaps you want `%T' for a constructor",
9126                         current_class_name);
9127             dname = DECL_NAME (decl);
9128             name = IDENTIFIER_POINTER (dname);
9129
9130             /* Avoid giving two errors for this.  */
9131             IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9132
9133             declspecs = temp_tree_cons (NULL_TREE, integer_type_node,
9134                                         declspecs);
9135             *next = dname;
9136             next = 0;
9137             break;
9138
9139           default:
9140             cp_compiler_error ("`%D' as declarator", decl);
9141             return 0; /* We used to do a 155 abort here.  */
9142           }
9143       }
9144     if (name == NULL)
9145       name = "type name";
9146   }
9147
9148   /* A function definition's declarator must have the form of
9149      a function declarator.  */
9150
9151   if (funcdef_flag && innermost_code != CALL_EXPR)
9152     return 0;
9153
9154   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9155       && innermost_code != CALL_EXPR
9156       && ! (ctype && declspecs == NULL_TREE))
9157     {
9158       cp_error ("declaration of `%D' as non-function", dname);
9159       return void_type_node;
9160     }
9161
9162   /* Anything declared one level down from the top level
9163      must be one of the parameters of a function
9164      (because the body is at least two levels down).  */
9165
9166   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9167      by not allowing C++ class definitions to specify their parameters
9168      with xdecls (must be spec.d in the parmlist).
9169
9170      Since we now wait to push a class scope until we are sure that
9171      we are in a legitimate method context, we must set oldcname
9172      explicitly (since current_class_name is not yet alive).
9173
9174      We also want to avoid calling this a PARM if it is in a namespace.  */
9175
9176   if (decl_context == NORMAL && ! namespace_bindings_p ()
9177       && ! pseudo_global_level_p ())
9178     {
9179       struct binding_level *b = current_binding_level;
9180       current_binding_level = b->level_chain;
9181       if (current_binding_level != 0 && toplevel_bindings_p ())
9182         decl_context = PARM;
9183       current_binding_level = b;
9184     }
9185
9186   /* Look through the decl specs and record which ones appear.
9187      Some typespecs are defined as built-in typenames.
9188      Others, the ones that are modifiers of other types,
9189      are represented by bits in SPECBITS: set the bits for
9190      the modifiers that appear.  Storage class keywords are also in SPECBITS.
9191
9192      If there is a typedef name or a type, store the type in TYPE.
9193      This includes builtin typedefs such as `int'.
9194
9195      Set EXPLICIT_INT if the type is `int' or `char' and did not
9196      come from a user typedef.
9197
9198      Set LONGLONG if `long' is mentioned twice.
9199
9200      For C++, constructors and destructors have their own fast treatment.  */
9201
9202   for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9203     {
9204       register int i;
9205       register tree id;
9206
9207       /* Certain parse errors slip through.  For example,
9208          `int class;' is not caught by the parser. Try
9209          weakly to recover here.  */
9210       if (TREE_CODE (spec) != TREE_LIST)
9211         return 0;
9212
9213       id = TREE_VALUE (spec);
9214
9215       if (TREE_CODE (id) == IDENTIFIER_NODE)
9216         {
9217           if (id == ridpointers[(int) RID_INT]
9218               || id == ridpointers[(int) RID_CHAR]
9219               || id == ridpointers[(int) RID_BOOL]
9220               || id == ridpointers[(int) RID_WCHAR])
9221             {
9222               if (type)
9223                 {
9224                   if (id == ridpointers[(int) RID_BOOL])
9225                     error ("`bool' is now a keyword");
9226                   else
9227                     cp_error ("extraneous `%T' ignored", id);
9228                 }
9229               else
9230                 {
9231                   if (id == ridpointers[(int) RID_INT])
9232                     explicit_int = 1;
9233                   else if (id == ridpointers[(int) RID_CHAR])
9234                     explicit_char = 1;
9235                   type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
9236                 }
9237               goto found;
9238             }
9239           /* C++ aggregate types.  */
9240           if (IDENTIFIER_HAS_TYPE_VALUE (id))
9241             {
9242               if (type)
9243                 cp_error ("multiple declarations `%T' and `%T'", type, id);
9244               else
9245                 type = IDENTIFIER_TYPE_VALUE (id);
9246               goto found;
9247             }
9248
9249           for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
9250             {
9251               if (ridpointers[i] == id)
9252                 {
9253                   if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
9254                     {
9255                       if (pedantic && ! in_system_header && warn_long_long)
9256                         pedwarn ("ANSI C++ does not support `long long'");
9257                       if (longlong)
9258                         error ("`long long long' is too long for GCC");
9259                       else
9260                         longlong = 1;
9261                     }
9262                   else if (RIDBIT_SETP (i, specbits))
9263                     pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
9264                   RIDBIT_SET (i, specbits);
9265                   goto found;
9266                 }
9267             }
9268         }
9269       /* C++ aggregate types.  */
9270       else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
9271         {
9272           if (type)
9273             cp_error ("multiple declarations `%T' and `%T'", type,
9274                       TREE_TYPE (id));
9275           else
9276             {
9277               type = TREE_TYPE (id);
9278               TREE_VALUE (spec) = type;
9279             }
9280           goto found;
9281         }
9282       if (type)
9283         error ("two or more data types in declaration of `%s'", name);
9284       else if (TREE_CODE (id) == IDENTIFIER_NODE)
9285         {
9286           register tree t = lookup_name (id, 1);
9287           if (!t || TREE_CODE (t) != TYPE_DECL)
9288             error ("`%s' fails to be a typedef or built in type",
9289                    IDENTIFIER_POINTER (id));
9290           else
9291             {
9292               type = TREE_TYPE (t);
9293 #if 0
9294               /* See the code below that used this.  */
9295               decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
9296 #endif
9297               typedef_decl = t;
9298             }
9299         }
9300       else if (id != error_mark_node)
9301         /* Can't change CLASS nodes into RECORD nodes here!  */
9302         type = id;
9303
9304     found: ;
9305     }
9306
9307   typedef_type = type;
9308
9309   /* No type at all: default to `int', and set DEFAULTED_INT
9310      because it was not a user-defined typedef.
9311      Except when we have a `typedef' inside a signature, in
9312      which case the type defaults to `unknown type' and is
9313      instantiated when assigning to a signature pointer or ref.  */
9314
9315   if (type == NULL_TREE
9316       && (RIDBIT_SETP (RID_SIGNED, specbits)
9317           || RIDBIT_SETP (RID_UNSIGNED, specbits)
9318           || RIDBIT_SETP (RID_LONG, specbits)
9319           || RIDBIT_SETP (RID_SHORT, specbits)))
9320     {
9321       /* These imply 'int'.  */
9322       type = integer_type_node;
9323       defaulted_int = 1;
9324     }
9325
9326   if (type == NULL_TREE)
9327     {
9328       explicit_int = -1;
9329       if (return_type == return_dtor)
9330         type = void_type_node;
9331       else if (return_type == return_ctor)
9332         type = build_pointer_type (ctor_return_type);
9333       else if (return_type == return_conversion)
9334         type = ctor_return_type;
9335       else if (current_class_type
9336                && IS_SIGNATURE (current_class_type)
9337                && RIDBIT_SETP (RID_TYPEDEF, specbits)
9338                && (decl_context == FIELD || decl_context == NORMAL))
9339         {
9340           explicit_int = 0;
9341           opaque_typedef = 1;
9342           type = copy_node (opaque_type_node);
9343         }
9344       else
9345         {
9346           if (! pedantic && ! warn_return_type
9347               && funcdef_flag
9348               && MAIN_NAME_P (dname)
9349               && ctype == NULL_TREE
9350               && in_namespace == NULL_TREE
9351               && current_namespace == global_namespace)
9352             /* Let `main () { }' slide, since it's so common.  */;
9353           else
9354             cp_pedwarn ("ANSI C++ forbids declaration `%D' with no type",
9355                         dname);
9356           type = integer_type_node;
9357         }
9358     }
9359   else if (return_type == return_dtor)
9360     {
9361       error ("return type specification for destructor invalid");
9362       type = void_type_node;
9363     }
9364   else if (return_type == return_ctor)
9365     {
9366       error ("return type specification for constructor invalid");
9367       type = build_pointer_type (ctor_return_type);
9368     }
9369   else if (return_type == return_conversion)
9370     {
9371       if (!same_type_p (type, ctor_return_type))
9372         cp_error ("operator `%T' declared to return `%T'",
9373                   ctor_return_type, type);
9374       else
9375         cp_pedwarn ("return type specified for `operator %T'",
9376                     ctor_return_type);
9377
9378       type = ctor_return_type;
9379     }
9380
9381   ctype = NULL_TREE;
9382
9383   /* Now process the modifiers that were specified
9384      and check for invalid combinations.  */
9385
9386   /* Long double is a special combination.  */
9387
9388   if (RIDBIT_SETP (RID_LONG, specbits)
9389       && TYPE_MAIN_VARIANT (type) == double_type_node)
9390     {
9391       RIDBIT_RESET (RID_LONG, specbits);
9392       type = build_qualified_type (long_double_type_node, 
9393                                    CP_TYPE_QUALS (type));
9394     }
9395
9396   /* Check all other uses of type modifiers.  */
9397
9398   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9399       || RIDBIT_SETP (RID_SIGNED, specbits)
9400       || RIDBIT_SETP (RID_LONG, specbits)
9401       || RIDBIT_SETP (RID_SHORT, specbits))
9402     {
9403       int ok = 0;
9404
9405       if (TREE_CODE (type) == REAL_TYPE)
9406         error ("short, signed or unsigned invalid for `%s'", name);
9407       else if (TREE_CODE (type) != INTEGER_TYPE)
9408         error ("long, short, signed or unsigned invalid for `%s'", name);
9409       else if (RIDBIT_SETP (RID_LONG, specbits)
9410                && RIDBIT_SETP (RID_SHORT, specbits))
9411         error ("long and short specified together for `%s'", name);
9412       else if ((RIDBIT_SETP (RID_LONG, specbits)
9413                 || RIDBIT_SETP (RID_SHORT, specbits))
9414                && explicit_char)
9415         error ("long or short specified with char for `%s'", name);
9416       else if ((RIDBIT_SETP (RID_LONG, specbits)
9417                 || RIDBIT_SETP (RID_SHORT, specbits))
9418                && TREE_CODE (type) == REAL_TYPE)
9419         error ("long or short specified with floating type for `%s'", name);
9420       else if (RIDBIT_SETP (RID_SIGNED, specbits)
9421                && RIDBIT_SETP (RID_UNSIGNED, specbits))
9422         error ("signed and unsigned given together for `%s'", name);
9423       else
9424         {
9425           ok = 1;
9426           if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
9427             {
9428               pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
9429                        name);
9430               if (flag_pedantic_errors)
9431                 ok = 0;
9432             }
9433         }
9434
9435       /* Discard the type modifiers if they are invalid.  */
9436       if (! ok)
9437         {
9438           RIDBIT_RESET (RID_UNSIGNED, specbits);
9439           RIDBIT_RESET (RID_SIGNED, specbits);
9440           RIDBIT_RESET (RID_LONG, specbits);
9441           RIDBIT_RESET (RID_SHORT, specbits);
9442           longlong = 0;
9443         }
9444     }
9445
9446   if (RIDBIT_SETP (RID_COMPLEX, specbits)
9447       && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9448     {
9449       error ("complex invalid for `%s'", name);
9450       RIDBIT_RESET (RID_COMPLEX, specbits);
9451     }
9452
9453   /* Decide whether an integer type is signed or not.
9454      Optionally treat bitfields as signed by default.  */
9455   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9456       || (bitfield && ! flag_signed_bitfields
9457           && (explicit_int || defaulted_int || explicit_char
9458               /* A typedef for plain `int' without `signed'
9459                  can be controlled just like plain `int'.  */
9460               || ! (typedef_decl != NULL_TREE
9461                     && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
9462           && TREE_CODE (type) != ENUMERAL_TYPE
9463           && RIDBIT_NOTSETP (RID_SIGNED, specbits)))
9464     {
9465       if (longlong)
9466         type = long_long_unsigned_type_node;
9467       else if (RIDBIT_SETP (RID_LONG, specbits))
9468         type = long_unsigned_type_node;
9469       else if (RIDBIT_SETP (RID_SHORT, specbits))
9470         type = short_unsigned_type_node;
9471       else if (type == char_type_node)
9472         type = unsigned_char_type_node;
9473       else if (typedef_decl)
9474         type = unsigned_type (type);
9475       else
9476         type = unsigned_type_node;
9477     }
9478   else if (RIDBIT_SETP (RID_SIGNED, specbits)
9479            && type == char_type_node)
9480     type = signed_char_type_node;
9481   else if (longlong)
9482     type = long_long_integer_type_node;
9483   else if (RIDBIT_SETP (RID_LONG, specbits))
9484     type = long_integer_type_node;
9485   else if (RIDBIT_SETP (RID_SHORT, specbits))
9486     type = short_integer_type_node;
9487
9488   if (RIDBIT_SETP (RID_COMPLEX, specbits))
9489     {
9490       /* If we just have "complex", it is equivalent to
9491          "complex double", but if any modifiers at all are specified it is
9492          the complex form of TYPE.  E.g, "complex short" is
9493          "complex short int".  */
9494
9495       if (defaulted_int && ! longlong
9496           && ! (RIDBIT_SETP (RID_LONG, specbits)
9497                 || RIDBIT_SETP (RID_SHORT, specbits)
9498                 || RIDBIT_SETP (RID_SIGNED, specbits)
9499                 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
9500         type = complex_double_type_node;
9501       else if (type == integer_type_node)
9502         type = complex_integer_type_node;
9503       else if (type == float_type_node)
9504         type = complex_float_type_node;
9505       else if (type == double_type_node)
9506         type = complex_double_type_node;
9507       else if (type == long_double_type_node)
9508         type = complex_long_double_type_node;
9509       else
9510         type = build_complex_type (type);
9511     }
9512
9513   if (return_type == return_conversion 
9514       && (RIDBIT_SETP (RID_CONST, specbits)
9515           || RIDBIT_SETP (RID_VOLATILE, specbits)
9516           || RIDBIT_SETP (RID_RESTRICT, specbits)))
9517     cp_error ("qualifiers are not allowed on declaration of `operator %T'",
9518               ctor_return_type);
9519
9520   /* Set CONSTP if this declaration is `const', whether by
9521      explicit specification or via a typedef.
9522      Likewise for VOLATILEP.  */
9523
9524   constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
9525   restrictp = 
9526     !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
9527   volatilep = 
9528     !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
9529   type_quals = ((constp ? TYPE_QUAL_CONST : 0)
9530                 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
9531                 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
9532   type = cp_build_qualified_type (type, type_quals);
9533   staticp = 0;
9534   inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
9535   virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
9536   RIDBIT_RESET (RID_VIRTUAL, specbits);
9537   explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
9538   RIDBIT_RESET (RID_EXPLICIT, specbits);
9539
9540   if (RIDBIT_SETP (RID_STATIC, specbits))
9541     staticp = 1 + (decl_context == FIELD);
9542
9543   if (virtualp && staticp == 2)
9544     {
9545       cp_error ("member `%D' cannot be declared both virtual and static",
9546                 dname);
9547       staticp = 0;
9548     }
9549   friendp = RIDBIT_SETP (RID_FRIEND, specbits);
9550   RIDBIT_RESET (RID_FRIEND, specbits);
9551
9552   /* $7.1.2, Function specifiers */
9553   if (friendp && explicitp)
9554     error ("only declarations of constructors can be `explicit'");
9555
9556   if (RIDBIT_SETP (RID_MUTABLE, specbits))
9557     {
9558       if (decl_context == PARM)
9559         {
9560           error ("non-member `%s' cannot be declared `mutable'", name);
9561           RIDBIT_RESET (RID_MUTABLE, specbits);
9562         }
9563       else if (friendp || decl_context == TYPENAME)
9564         {
9565           error ("non-object member `%s' cannot be declared `mutable'", name);
9566           RIDBIT_RESET (RID_MUTABLE, specbits);
9567         }
9568     }
9569
9570   /* Warn if two storage classes are given. Default to `auto'.  */
9571
9572   if (RIDBIT_ANY_SET (specbits))
9573     {
9574       if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
9575       if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
9576       if (decl_context == PARM && nclasses > 0)
9577         error ("storage class specifiers invalid in parameter declarations");
9578       if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9579         {
9580           if (decl_context == PARM)
9581             error ("typedef declaration invalid in parameter declaration");
9582           nclasses++;
9583         }
9584       if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
9585       if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
9586     }
9587
9588   /* Give error if `virtual' is used outside of class declaration.  */
9589   if (virtualp
9590       && (current_class_name == NULL_TREE || decl_context != FIELD))
9591     {
9592       error ("virtual outside class declaration");
9593       virtualp = 0;
9594     }
9595   if (current_class_name == NULL_TREE && RIDBIT_SETP (RID_MUTABLE, specbits))
9596     {
9597       error ("only members can be declared mutable");
9598       RIDBIT_RESET (RID_MUTABLE, specbits);
9599     }
9600
9601   /* Static anonymous unions are dealt with here.  */
9602   if (staticp && decl_context == TYPENAME
9603       && TREE_CODE (declspecs) == TREE_LIST
9604       && ANON_UNION_TYPE_P (TREE_VALUE (declspecs)))
9605     decl_context = FIELD;
9606
9607   /* Give error if `const,' `volatile,' `inline,' `friend,' or `virtual'
9608      is used in a signature member function declaration.  */
9609   if (decl_context == FIELD
9610       && IS_SIGNATURE (current_class_type)
9611       && RIDBIT_NOTSETP (RID_TYPEDEF, specbits))
9612     {
9613       if (type_quals != TYPE_UNQUALIFIED)
9614         {
9615           error ("type qualifiers specified for signature member function `%s'", name);
9616           type_quals = TYPE_UNQUALIFIED;
9617         }
9618       if (inlinep)
9619         {
9620           error ("`inline' specified for signature member function `%s'", name);
9621           /* Later, we'll make signature member functions inline.  */
9622           inlinep = 0;
9623         }
9624       if (friendp)
9625         {
9626           error ("`friend' declaration in signature definition");
9627           friendp = 0;
9628         }
9629       if (virtualp)
9630         {
9631           error ("`virtual' specified for signature member function `%s'",
9632                  name);
9633           /* Later, we'll make signature member functions virtual.  */
9634           virtualp = 0;
9635         }
9636     }
9637
9638   /* Warn about storage classes that are invalid for certain
9639      kinds of declarations (parameters, typenames, etc.).  */
9640
9641   if (nclasses > 1)
9642     error ("multiple storage classes in declaration of `%s'", name);
9643   else if (decl_context != NORMAL && nclasses > 0)
9644     {
9645       if ((decl_context == PARM || decl_context == CATCHPARM)
9646           && (RIDBIT_SETP (RID_REGISTER, specbits)
9647               || RIDBIT_SETP (RID_AUTO, specbits)))
9648         ;
9649       else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9650         ;
9651       else if (decl_context == FIELD
9652                && ! IS_SIGNATURE (current_class_type)
9653                /* C++ allows static class elements  */
9654                && RIDBIT_SETP (RID_STATIC, specbits))
9655         /* C++ also allows inlines and signed and unsigned elements,
9656            but in those cases we don't come in here.  */
9657         ;
9658       else
9659         {
9660           if (decl_context == FIELD)
9661             {
9662               tree tmp = NULL_TREE;
9663               register int op = 0;
9664
9665               if (declarator)
9666                 {
9667                   /* Avoid trying to get an operand off an identifier node.  */ 
9668                   if (TREE_CODE (declarator) == IDENTIFIER_NODE)
9669                     tmp = declarator;
9670                   else
9671                     tmp = TREE_OPERAND (declarator, 0);
9672                   op = IDENTIFIER_OPNAME_P (tmp);
9673                 }
9674               error ("storage class specified for %s `%s'",
9675                      IS_SIGNATURE (current_class_type)
9676                      ? (op
9677                         ? "signature member operator"
9678                         : "signature member function")
9679                      : (op ? "member operator" : "field"),
9680                      op ? operator_name_string (tmp) : name);
9681             }
9682           else
9683             error (((decl_context == PARM || decl_context == CATCHPARM)
9684                     ? "storage class specified for parameter `%s'"
9685                     : "storage class specified for typename"), name);
9686           RIDBIT_RESET (RID_REGISTER, specbits);
9687           RIDBIT_RESET (RID_AUTO, specbits);
9688           RIDBIT_RESET (RID_EXTERN, specbits);
9689
9690           if (decl_context == FIELD && IS_SIGNATURE (current_class_type))
9691             {
9692               RIDBIT_RESET (RID_STATIC, specbits);
9693               staticp = 0;
9694             }
9695         }
9696     }
9697   else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
9698     {
9699       if (toplevel_bindings_p ())
9700         {
9701           /* It's common practice (and completely valid) to have a const
9702              be initialized and declared extern.  */
9703           if (!(type_quals & TYPE_QUAL_CONST))
9704             warning ("`%s' initialized and declared `extern'", name);
9705         }
9706       else
9707         error ("`%s' has both `extern' and initializer", name);
9708     }
9709   else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
9710            && ! toplevel_bindings_p ())
9711     error ("nested function `%s' declared `extern'", name);
9712   else if (toplevel_bindings_p ())
9713     {
9714       if (RIDBIT_SETP (RID_AUTO, specbits))
9715         error ("top-level declaration of `%s' specifies `auto'", name);
9716     }
9717
9718   if (nclasses > 0 && friendp)
9719     error ("storage class specifiers invalid in friend function declarations");
9720
9721   /* Now figure out the structure of the declarator proper.
9722      Descend through it, creating more complex types, until we reach
9723      the declared identifier (or NULL_TREE, in an absolute declarator).  */
9724
9725   inner_attrs = NULL_TREE;
9726   ignore_attrs = 0;  
9727
9728   while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
9729          && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
9730     {
9731       /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
9732          an INDIRECT_REF (for *...),
9733          a CALL_EXPR (for ...(...)),
9734          an identifier (for the name being declared)
9735          or a null pointer (for the place in an absolute declarator
9736          where the name was omitted).
9737          For the last two cases, we have just exited the loop.
9738
9739          For C++ it could also be
9740          a SCOPE_REF (for class :: ...).  In this case, we have converted
9741          sensible names to types, and those are the values we use to
9742          qualify the member name.
9743          an ADDR_EXPR (for &...),
9744          a BIT_NOT_EXPR (for destructors)
9745
9746          At this point, TYPE is the type of elements of an array,
9747          or for a function to return, or for a pointer to point to.
9748          After this sequence of ifs, TYPE is the type of the
9749          array or function or pointer, and DECLARATOR has had its
9750          outermost layer removed.  */
9751
9752       if (type == error_mark_node)
9753         {
9754           if (TREE_CODE (declarator) == SCOPE_REF)
9755             declarator = TREE_OPERAND (declarator, 1);
9756           else
9757             declarator = TREE_OPERAND (declarator, 0);
9758           continue;
9759         }
9760       if (quals != NULL_TREE
9761           && (declarator == NULL_TREE
9762               || TREE_CODE (declarator) != SCOPE_REF))
9763         {
9764           if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
9765             ctype = TYPE_METHOD_BASETYPE (type);
9766           if (ctype != NULL_TREE)
9767             {
9768               tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
9769               ctype = grok_method_quals (ctype, dummy, quals);
9770               type = TREE_TYPE (dummy);
9771               quals = NULL_TREE;
9772             }
9773         }
9774
9775       /* See the comment for the TREE_LIST case, below.  */
9776       if (ignore_attrs)
9777         ignore_attrs = 0;
9778       else if (inner_attrs)
9779         {
9780           decl_attributes (type, inner_attrs, NULL_TREE);
9781           inner_attrs = NULL_TREE;
9782         }
9783
9784       switch (TREE_CODE (declarator))
9785         {
9786         case TREE_LIST:
9787           {
9788             /* We encode a declarator with embedded attributes using
9789                a TREE_LIST.  The attributes apply to the declarator
9790                directly inside them, so we have to skip an iteration
9791                before applying them to the type.  If the declarator just
9792                inside is the declarator-id, we apply the attrs to the
9793                decl itself.  */
9794             inner_attrs = TREE_PURPOSE (declarator);
9795             ignore_attrs = 1;
9796             declarator = TREE_VALUE (declarator);
9797           }
9798           break;
9799
9800         case ARRAY_REF:
9801           {
9802             register tree itype = NULL_TREE;
9803             register tree size = TREE_OPERAND (declarator, 1);
9804             /* The index is a signed object `sizetype' bits wide.  */
9805             tree index_type = signed_type (sizetype);
9806
9807             declarator = TREE_OPERAND (declarator, 0);
9808
9809             /* Check for some types that there cannot be arrays of.  */
9810
9811             if (TREE_CODE (type) == VOID_TYPE)
9812               {
9813                 cp_error ("declaration of `%D' as array of voids", dname);
9814                 type = error_mark_node;
9815               }
9816
9817             if (TREE_CODE (type) == FUNCTION_TYPE)
9818               {
9819                 cp_error ("declaration of `%D' as array of functions", dname);
9820                 type = error_mark_node;
9821               }
9822
9823             /* ARM $8.4.3: Since you can't have a pointer to a reference,
9824                you can't have arrays of references.  If we allowed them,
9825                then we'd be saying x[i] is valid for an array x, but
9826                then you'd have to ask: what does `*(x + i)' mean?  */
9827             if (TREE_CODE (type) == REFERENCE_TYPE)
9828               {
9829                 if (decl_context == TYPENAME)
9830                   cp_error ("cannot make arrays of references");
9831                 else
9832                   cp_error ("declaration of `%D' as array of references",
9833                             dname);
9834                 type = error_mark_node;
9835               }
9836
9837             if (TREE_CODE (type) == OFFSET_TYPE)
9838               {
9839                   cp_error ("declaration of `%D' as array of data members",
9840                             dname);
9841                 type = error_mark_node;
9842               }
9843
9844             if (TREE_CODE (type) == METHOD_TYPE)
9845               {
9846                 cp_error ("declaration of `%D' as array of function members",
9847                           dname);
9848                 type = error_mark_node;
9849               }
9850
9851             if (size == error_mark_node)
9852               type = error_mark_node;
9853             else if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9854               {
9855                 /* [dcl.array]
9856
9857                    the constant expressions that specify the bounds of
9858                    the arrays can be omitted only for the first member
9859                    of the sequence.  */
9860                 cp_error ("declaration of `%D' as multidimensional array",
9861                           dname);
9862                 cp_error ("must have bounds for all dimensions except the first");
9863                 type = error_mark_node;
9864               }
9865
9866             if (type == error_mark_node)
9867               continue;
9868
9869             if (size)
9870               {
9871                 /* Must suspend_momentary here because the index
9872                    type may need to live until the end of the function.
9873                    For example, it is used in the declaration of a
9874                    variable which requires destructing at the end of
9875                    the function; then build_vec_delete will need this
9876                    value.  */
9877                 int yes = suspend_momentary ();
9878                 /* Might be a cast. */
9879                 if (TREE_CODE (size) == NOP_EXPR
9880                     && TREE_TYPE (size) == TREE_TYPE (TREE_OPERAND (size, 0)))
9881                   size = TREE_OPERAND (size, 0);
9882
9883                 /* If this involves a template parameter, it'll be
9884                    constant, but we don't know what the value is yet.  */
9885                 if (uses_template_parms (size))
9886                   {
9887                     /* Resolve a qualified reference to an enumerator or
9888                        static const data member of ours.  */
9889                     if (TREE_CODE (size) == SCOPE_REF
9890                         && TREE_OPERAND (size, 0) == current_class_type)
9891                       {
9892                         tree t = lookup_field (current_class_type,
9893                                                TREE_OPERAND (size, 1), 0, 0);
9894                         if (t)
9895                           size = t;
9896                       }
9897
9898                     itype = make_node (INTEGER_TYPE);
9899                     TYPE_MIN_VALUE (itype) = size_zero_node;
9900                     TYPE_MAX_VALUE (itype) = build_min
9901                       (MINUS_EXPR, sizetype, size, integer_one_node);
9902                     goto dont_grok_size;
9903                   }
9904
9905                 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
9906                     && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
9907                     && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
9908                   {
9909                     cp_error ("size of array `%D' has non-integer type",
9910                               dname);
9911                     size = integer_one_node;
9912                   }
9913                 if (TREE_READONLY_DECL_P (size))
9914                   size = decl_constant_value (size);
9915                 if (pedantic && integer_zerop (size))
9916                   cp_pedwarn ("ANSI C++ forbids zero-size array `%D'", dname);
9917                 if (TREE_CONSTANT (size))
9918                   {
9919                     int old_flag_pedantic_errors = flag_pedantic_errors;
9920                     int old_pedantic = pedantic;
9921                     pedantic = flag_pedantic_errors = 1;
9922                     /* Always give overflow errors on array subscripts.  */
9923                     constant_expression_warning (size);
9924                     pedantic = old_pedantic;
9925                     flag_pedantic_errors = old_flag_pedantic_errors;
9926                     if (INT_CST_LT (size, integer_zero_node))
9927                       {
9928                         cp_error ("size of array `%D' is negative", dname);
9929                         size = integer_one_node;
9930                       }
9931                   }
9932                 else
9933                   {
9934                     if (pedantic)
9935                       {
9936                         if (dname)
9937                           cp_pedwarn ("ANSI C++ forbids variable-size array `%D'",
9938                                       dname);
9939                         else
9940                           cp_pedwarn ("ANSI C++ forbids variable-size array");
9941                       }
9942                   }
9943
9944                 itype
9945                   = fold (build_binary_op (MINUS_EXPR,
9946                                            cp_convert (index_type, size),
9947                                            cp_convert (index_type,
9948                                                        integer_one_node), 1));
9949                 if (! TREE_CONSTANT (itype))
9950                   itype = variable_size (itype);
9951                 else if (TREE_OVERFLOW (itype))
9952                   {
9953                     error ("overflow in array dimension");
9954                     TREE_OVERFLOW (itype) = 0;
9955                   }
9956
9957                 /* If we're a parm, we need to have a permanent type so
9958                    mangling checks for re-use will work right.  If both the
9959                    element and index types are permanent, the array type
9960                    will be, too.  */
9961                 if (decl_context == PARM
9962                     && allocation_temporary_p () && TREE_PERMANENT (type))
9963                   {
9964                     push_obstacks (&permanent_obstack, &permanent_obstack);
9965                     itype = build_index_type (itype);
9966                     pop_obstacks ();
9967                   }
9968                 else
9969                   itype = build_index_type (itype);
9970
9971               dont_grok_size:
9972                 resume_momentary (yes);
9973               }
9974
9975             type = build_cplus_array_type (type, itype);
9976             ctype = NULL_TREE;
9977           }
9978           break;
9979
9980         case CALL_EXPR:
9981           {
9982             tree arg_types;
9983             int funcdecl_p;
9984             tree inner_parms = TREE_OPERAND (declarator, 1);
9985             tree inner_decl = TREE_OPERAND (declarator, 0);
9986
9987             /* Declaring a function type.
9988                Make sure we have a valid type for the function to return.  */
9989
9990             /* We now know that the TYPE_QUALS don't apply to the
9991                decl, but to its return type.  */
9992             type_quals = TYPE_UNQUALIFIED;
9993
9994             /* Warn about some types functions can't return.  */
9995
9996             if (TREE_CODE (type) == FUNCTION_TYPE)
9997               {
9998                 error ("`%s' declared as function returning a function", name);
9999                 type = integer_type_node;
10000               }
10001             if (TREE_CODE (type) == ARRAY_TYPE)
10002               {
10003                 error ("`%s' declared as function returning an array", name);
10004                 type = integer_type_node;
10005               }
10006
10007             if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
10008               inner_decl = TREE_OPERAND (inner_decl, 1);
10009
10010             if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR) 
10011               inner_decl = dname;
10012
10013             /* Pick up type qualifiers which should be applied to `this'.  */
10014             quals = TREE_OPERAND (declarator, 2);
10015
10016             /* Pick up the exception specifications.  */
10017             raises = TREE_TYPE (declarator);
10018
10019             /* Say it's a definition only for the CALL_EXPR
10020                closest to the identifier.  */
10021             funcdecl_p
10022               = inner_decl 
10023               && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
10024                   || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR 
10025                   || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
10026             
10027             if (ctype == NULL_TREE
10028                 && decl_context == FIELD
10029                 && funcdecl_p
10030                 && (friendp == 0 || dname == current_class_name))
10031               ctype = current_class_type;
10032
10033             if (ctype && return_type == return_conversion)
10034               TYPE_HAS_CONVERSION (ctype) = 1;
10035             if (ctype && constructor_name (ctype) == dname)
10036               {
10037                 /* We are within a class's scope. If our declarator name
10038                    is the same as the class name, and we are defining
10039                    a function, then it is a constructor/destructor, and
10040                    therefore returns a void type.  */
10041
10042                 if (flags == DTOR_FLAG)
10043                   {
10044                     /* ANSI C++ June 5 1992 WP 12.4.1.  A destructor may
10045                        not be declared const or volatile.  A destructor
10046                        may not be static.  */
10047                     if (staticp == 2)
10048                       error ("destructor cannot be static member function");
10049                     if (quals)
10050                       {
10051                         cp_error ("destructors may not be `%s'",
10052                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10053                         quals = NULL_TREE;
10054                       }
10055                     if (decl_context == FIELD)
10056                       {
10057                         if (! member_function_or_else (ctype, current_class_type,
10058                                                        "destructor for alien class `%s' cannot be a member"))
10059                           return void_type_node;
10060                       }
10061                   }
10062                 else            /* It's a constructor.  */
10063                   {
10064                     if (explicitp == 1)
10065                       explicitp = 2;
10066                     /* ANSI C++ June 5 1992 WP 12.1.2.  A constructor may
10067                        not be declared const or volatile.  A constructor may
10068                        not be virtual.  A constructor may not be static.  */
10069                     if (staticp == 2)
10070                       error ("constructor cannot be static member function");
10071                     if (virtualp)
10072                       {
10073                         pedwarn ("constructors cannot be declared virtual");
10074                         virtualp = 0;
10075                       }
10076                     if (quals)
10077                       {
10078                         cp_error ("constructors may not be `%s'",
10079                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10080                         quals = NULL_TREE;
10081                       }
10082                     {
10083                       RID_BIT_TYPE tmp_bits;
10084                       bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
10085                       RIDBIT_RESET (RID_INLINE, tmp_bits);
10086                       RIDBIT_RESET (RID_STATIC, tmp_bits);
10087                       if (RIDBIT_ANY_SET (tmp_bits))
10088                         error ("return value type specifier for constructor ignored");
10089                     }
10090                     type = build_pointer_type (ctype);
10091                     if (decl_context == FIELD
10092                         && IS_SIGNATURE (current_class_type))
10093                       {
10094                         error ("constructor not allowed in signature");
10095                         return void_type_node;
10096                       }                   
10097                     else if (decl_context == FIELD)
10098                       {
10099                         if (! member_function_or_else (ctype, current_class_type,
10100                                                        "constructor for alien class `%s' cannot be member"))
10101                           return void_type_node;
10102                         TYPE_HAS_CONSTRUCTOR (ctype) = 1;
10103                         if (return_type != return_ctor)
10104                           return NULL_TREE;
10105                       }
10106                   }
10107                 if (decl_context == FIELD)
10108                   staticp = 0;
10109               }
10110             else if (friendp)
10111               {
10112                 if (initialized)
10113                   error ("can't initialize friend function `%s'", name);
10114                 if (virtualp)
10115                   {
10116                     /* Cannot be both friend and virtual.  */
10117                     error ("virtual functions cannot be friends");
10118                     RIDBIT_RESET (RID_FRIEND, specbits);
10119                     friendp = 0;
10120                   }
10121                 if (decl_context == NORMAL)
10122                   error ("friend declaration not in class definition");
10123                 if (current_function_decl && funcdef_flag)
10124                   cp_error ("can't define friend function `%s' in a local class definition",
10125                             name);
10126               }
10127
10128             /* Construct the function type and go to the next
10129                inner layer of declarator.  */
10130
10131             declarator = TREE_OPERAND (declarator, 0);
10132
10133             /* FIXME: This is where default args should be fully
10134                processed.  */
10135
10136             arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
10137
10138             if (declarator && flags == DTOR_FLAG)
10139               {
10140                 /* A destructor declared in the body of a class will
10141                    be represented as a BIT_NOT_EXPR.  But, we just
10142                    want the underlying IDENTIFIER.  */
10143                 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
10144                   declarator = TREE_OPERAND (declarator, 0);
10145                 
10146                 if (strict_prototype == 0 && arg_types == NULL_TREE)
10147                   arg_types = void_list_node;
10148                 else if (arg_types == NULL_TREE
10149                          || arg_types != void_list_node)
10150                   {
10151                     cp_error ("destructors may not have parameters");
10152                     arg_types = void_list_node;
10153                     last_function_parms = NULL_TREE;
10154                   }
10155               }
10156
10157             /* ANSI says that `const int foo ();'
10158                does not make the function foo const.  */
10159             type = build_function_type (type, arg_types);
10160
10161             {
10162               tree t;
10163               for (t = arg_types; t; t = TREE_CHAIN (t))
10164                 if (TREE_PURPOSE (t)
10165                     && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10166                   {
10167                     add_defarg_fn (type);
10168                     break;
10169                   }
10170             }
10171           }
10172           break;
10173
10174         case ADDR_EXPR:
10175         case INDIRECT_REF:
10176           /* Filter out pointers-to-references and references-to-references.
10177              We can get these if a TYPE_DECL is used.  */
10178
10179           if (TREE_CODE (type) == REFERENCE_TYPE)
10180             {
10181               error ("cannot declare %s to references",
10182                      TREE_CODE (declarator) == ADDR_EXPR
10183                      ? "references" : "pointers");
10184               declarator = TREE_OPERAND (declarator, 0);
10185               continue;
10186             }
10187
10188           if (TREE_CODE (type) == OFFSET_TYPE
10189               && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10190                   || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10191             {
10192               cp_error ("cannot declare pointer to `%#T' member",
10193                         TREE_TYPE (type));
10194               type = TREE_TYPE (type);
10195             }
10196
10197           /* Merge any constancy or volatility into the target type
10198              for the pointer.  */
10199
10200           /* We now know that the TYPE_QUALS don't apply to the decl,
10201              but to the target of the pointer.  */
10202           type_quals = TYPE_UNQUALIFIED;
10203
10204           if (IS_SIGNATURE (type))
10205             {
10206               if (TREE_CODE (declarator) == ADDR_EXPR)
10207                 {
10208                   if (CLASSTYPE_METHOD_VEC (type) == NULL_TREE
10209                       && TYPE_SIZE (type))
10210                     cp_warning ("empty signature `%T' used in signature reference declaration",
10211                                 type);
10212 #if 0
10213                   type = build_signature_reference_type (type);
10214 #else
10215                   sorry ("signature reference");
10216                   return NULL_TREE;
10217 #endif
10218                 }
10219               else
10220                 {
10221                   if (CLASSTYPE_METHOD_VEC (type) == NULL_TREE
10222                       && TYPE_SIZE (type))
10223                     cp_warning ("empty signature `%T' used in signature pointer declaration",
10224                                 type);
10225                   type = build_signature_pointer_type (type);
10226                 }
10227             }
10228           else if (TREE_CODE (declarator) == ADDR_EXPR)
10229             {
10230               if (TREE_CODE (type) == VOID_TYPE)
10231                 error ("invalid type: `void &'");
10232               else
10233                 type = build_reference_type (type);
10234             }
10235           else if (TREE_CODE (type) == METHOD_TYPE)
10236             type = build_ptrmemfunc_type (build_pointer_type (type));
10237           else
10238             type = build_pointer_type (type);
10239
10240           /* Process a list of type modifier keywords (such as
10241              const or volatile) that were given inside the `*' or `&'.  */
10242
10243           if (TREE_TYPE (declarator))
10244             {
10245               register tree typemodlist;
10246               int erred = 0;
10247
10248               constp = 0;
10249               volatilep = 0;
10250               restrictp = 0;
10251               for (typemodlist = TREE_TYPE (declarator); typemodlist;
10252                    typemodlist = TREE_CHAIN (typemodlist))
10253                 {
10254                   tree qualifier = TREE_VALUE (typemodlist);
10255
10256                   if (qualifier == ridpointers[(int) RID_CONST])
10257                     constp++;
10258                   else if (qualifier == ridpointers[(int) RID_VOLATILE])
10259                     volatilep++;
10260                   else if (qualifier == ridpointers[(int) RID_RESTRICT])
10261                     restrictp++;
10262                   else if (!erred)
10263                     {
10264                       erred = 1;
10265                       error ("invalid type modifier within pointer declarator");
10266                     }
10267                 }
10268               if (constp > 1)
10269                 pedwarn ("duplicate `const'");
10270               if (volatilep > 1)
10271                 pedwarn ("duplicate `volatile'");
10272               if (restrictp > 1)
10273                 pedwarn ("duplicate `restrict'");
10274
10275               type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10276                             | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10277                             | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10278               if (TREE_CODE (declarator) == ADDR_EXPR
10279                   && (constp || volatilep))
10280                 {
10281                   if (constp)
10282                     pedwarn ("discarding `const' applied to a reference");
10283                   if (volatilep)
10284                     pedwarn ("discarding `volatile' applied to a reference");
10285                   type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
10286                 }
10287               type = cp_build_qualified_type (type, type_quals);
10288             }
10289           declarator = TREE_OPERAND (declarator, 0);
10290           ctype = NULL_TREE;
10291           break;
10292
10293         case SCOPE_REF:
10294           {
10295             /* We have converted type names to NULL_TREE if the
10296                name was bogus, or to a _TYPE node, if not.
10297
10298                The variable CTYPE holds the type we will ultimately
10299                resolve to.  The code here just needs to build
10300                up appropriate member types.  */
10301             tree sname = TREE_OPERAND (declarator, 1);
10302             tree t;
10303
10304             /* Destructors can have their visibilities changed as well.  */
10305             if (TREE_CODE (sname) == BIT_NOT_EXPR)
10306               sname = TREE_OPERAND (sname, 0);
10307
10308             if (TREE_COMPLEXITY (declarator) == 0)
10309               /* This needs to be here, in case we are called
10310                  multiple times.  */ ;
10311             else if (TREE_COMPLEXITY (declarator) == -1)
10312               /* Namespace member. */
10313               pop_decl_namespace ();
10314             else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
10315               /* Don't fall out into global scope. Hides real bug? --eichin */ ;
10316             else if (! IS_AGGR_TYPE_CODE
10317                      (TREE_CODE (TREE_OPERAND (declarator, 0))))
10318               ;
10319             else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10320               {
10321                 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10322                    that refer to ctype.  They couldn't be resolved earlier
10323                    because we hadn't pushed into the class yet.
10324                    Example: resolve 'B<T>::type' in
10325                    'B<typename B<T>::type> B<T>::f () { }'.  */
10326                 if (current_template_parms
10327                     && uses_template_parms (type)
10328                     && uses_template_parms (current_class_type))
10329                   {
10330                     tree args = current_template_args ();
10331                     type = tsubst (type, args, NULL_TREE);
10332                   }
10333
10334                 /* This pop_nested_class corresponds to the
10335                    push_nested_class used to push into class scope for
10336                    parsing the argument list of a function decl, in
10337                    qualified_id.  */
10338                 pop_nested_class (1);
10339                 TREE_COMPLEXITY (declarator) = current_class_depth;
10340               }
10341             else
10342               my_friendly_abort (16);
10343
10344             if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10345               {
10346                 /* We had a reference to a global decl, or
10347                    perhaps we were given a non-aggregate typedef,
10348                    in which case we cleared this out, and should just
10349                    keep going as though it wasn't there.  */
10350                 declarator = sname;
10351                 continue;
10352               }
10353             ctype = TREE_OPERAND (declarator, 0);
10354
10355             t = ctype;
10356             while (t != NULL_TREE && CLASS_TYPE_P (t)) 
10357               {
10358                 if (CLASSTYPE_TEMPLATE_INFO (t) &&
10359                     !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
10360                   template_count += 1;
10361                 t = TYPE_MAIN_DECL (t);
10362                 if (DECL_LANG_SPECIFIC (t))
10363                   t = DECL_CLASS_CONTEXT (t);
10364                 else
10365                   t = NULL_TREE;
10366               }
10367
10368             if (sname == NULL_TREE)
10369               goto done_scoping;
10370
10371             if (TREE_CODE (sname) == IDENTIFIER_NODE)
10372               {
10373                 /* This is the `standard' use of the scoping operator:
10374                    basetype :: member .  */
10375
10376                 if (ctype == current_class_type)
10377                   {
10378                     /* class A {
10379                          void A::f ();
10380                        };
10381
10382                        Is this ill-formed?  */
10383
10384                     if (pedantic)
10385                       cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
10386                                   ctype, name);
10387                   }
10388                 else if (TREE_CODE (type) == FUNCTION_TYPE)
10389                   {
10390                     if (current_class_type == NULL_TREE
10391                         || friendp)
10392                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10393                                                       TYPE_ARG_TYPES (type));
10394                     else
10395                       {
10396                         cp_error ("cannot declare member function `%T::%s' within `%T'",
10397                                   ctype, name, current_class_type);
10398                         return void_type_node;
10399                       }
10400                   }
10401                 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
10402                          || TYPE_SIZE (complete_type (ctype)) != NULL_TREE)
10403                   {
10404                     /* Have to move this code elsewhere in this function.
10405                        this code is used for i.e., typedef int A::M; M *pm;
10406
10407                        It is?  How? jason 10/2/94 */
10408
10409                     if (current_class_type)
10410                       {
10411                         cp_error ("cannot declare member `%T::%s' within `%T'",
10412                                   ctype, name, current_class_type);
10413                         return void_type_node;
10414                       }
10415                     type = build_offset_type (ctype, type);
10416                   }
10417                 else if (uses_template_parms (ctype))
10418                   {
10419                     if (TREE_CODE (type) == FUNCTION_TYPE)
10420                       type
10421                         = build_cplus_method_type (ctype, TREE_TYPE (type),
10422                                                    TYPE_ARG_TYPES (type));
10423                   }
10424                 else
10425                   {
10426                     cp_error ("structure `%T' not yet defined", ctype);
10427                     return error_mark_node;
10428                   }
10429
10430                 declarator = sname;
10431               }
10432             else if (TREE_CODE (sname) == SCOPE_REF)
10433               my_friendly_abort (17);
10434             else
10435               {
10436               done_scoping:
10437                 declarator = TREE_OPERAND (declarator, 1);
10438                 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10439                   /* In this case, we will deal with it later.  */
10440                   ;
10441                 else
10442                   {
10443                     if (TREE_CODE (type) == FUNCTION_TYPE)
10444                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10445                                                       TYPE_ARG_TYPES (type));
10446                     else
10447                       type = build_offset_type (ctype, type);
10448                   }
10449               }
10450           }
10451           break;
10452
10453         case BIT_NOT_EXPR:
10454           declarator = TREE_OPERAND (declarator, 0);
10455           break;
10456
10457         case RECORD_TYPE:
10458         case UNION_TYPE:
10459         case ENUMERAL_TYPE:
10460           declarator = NULL_TREE;
10461           break;
10462
10463         case ERROR_MARK:
10464           declarator = NULL_TREE;
10465           break;
10466
10467         default:
10468           my_friendly_abort (158);
10469         }
10470     }
10471
10472   /* See the comment for the TREE_LIST case, above.  */
10473   if (inner_attrs)
10474     {
10475       if (! ignore_attrs)
10476         decl_attributes (type, inner_attrs, NULL_TREE);
10477       else if (attrlist)
10478         TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
10479       else
10480         attrlist = build_decl_list (NULL_TREE, inner_attrs);
10481     }
10482
10483   if (explicitp == 1)
10484     {
10485       error ("only constructors can be declared `explicit'");
10486       explicitp = 0;
10487     }
10488
10489   /* Now TYPE has the actual type.  */
10490
10491   /* If this is declaring a typedef name, return a TYPE_DECL.  */
10492
10493   if (RIDBIT_SETP (RID_MUTABLE, specbits))
10494     {
10495       if (type_quals & TYPE_QUAL_CONST)
10496         {
10497           error ("const `%s' cannot be declared `mutable'", name);
10498           RIDBIT_RESET (RID_MUTABLE, specbits);
10499         }
10500       else if (staticp)
10501         {
10502           error ("static `%s' cannot be declared `mutable'", name);
10503           RIDBIT_RESET (RID_MUTABLE, specbits);
10504         }
10505     }
10506
10507   if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
10508     {
10509       tree decl;
10510
10511       /* Note that the grammar rejects storage classes
10512          in typenames, fields or parameters.  */
10513       if (current_lang_name == lang_name_java)
10514         TYPE_FOR_JAVA (type) = 1;
10515
10516       if (decl_context == FIELD)
10517         {
10518           if (declarator == constructor_name (current_class_type))
10519             cp_pedwarn ("ANSI C++ forbids nested type `%D' with same name as enclosing class",
10520                         declarator);
10521           decl = build_lang_decl (TYPE_DECL, declarator, type);
10522           if (IS_SIGNATURE (current_class_type) && opaque_typedef)
10523             SIGNATURE_HAS_OPAQUE_TYPEDECLS (current_class_type) = 1;
10524         }
10525       else
10526         {
10527           /* Make sure this typedef lives as long as its type,
10528              since it might be used as a template parameter. */
10529           if (type != error_mark_node)
10530             push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
10531           decl = build_decl (TYPE_DECL, declarator, type);
10532           if (type != error_mark_node)
10533             pop_obstacks ();
10534         }
10535
10536       /* If the user declares "struct {...} foo" then `foo' will have
10537          an anonymous name.  Fill that name in now.  Nothing can
10538          refer to it, so nothing needs know about the name change.
10539          The TYPE_NAME field was filled in by build_struct_xref.  */
10540       if (type != error_mark_node
10541           && TYPE_NAME (type)
10542           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10543           && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type)))
10544         {
10545           /* FIXME: This is bogus; we should not be doing this for
10546                     cv-qualified types.  */
10547
10548           /* For anonymous structs that are cv-qualified, need to use
10549              TYPE_MAIN_VARIANT so that name will mangle correctly. As
10550              type not referenced after this block, don't bother
10551              resetting type to original type, ie. TREE_TYPE (decl). */
10552           type = TYPE_MAIN_VARIANT (type);
10553
10554           /* Replace the anonymous name with the real name everywhere.  */
10555           lookup_tag_reverse (type, declarator);
10556           TYPE_NAME (type) = decl;
10557
10558           if (TYPE_LANG_SPECIFIC (type))
10559             TYPE_WAS_ANONYMOUS (type) = 1;
10560
10561           /* If this is a typedef within a template class, the nested
10562              type is a (non-primary) template.  The name for the
10563              template needs updating as well.  */
10564           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10565             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)) 
10566               = TYPE_IDENTIFIER (type);
10567
10568           /* XXX Temporarily set the scope. 
10569              When returning, start_decl expects it as NULL_TREE,
10570              and will then then set it using pushdecl. */
10571           my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 980404);
10572           if (current_class_type)
10573             DECL_CONTEXT (decl) = current_class_type;
10574           else
10575             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10576
10577           DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
10578           DECL_ASSEMBLER_NAME (decl)
10579             = get_identifier (build_overload_name (type, 1, 1));
10580           DECL_CONTEXT (decl) = NULL_TREE;
10581
10582           /* FIXME remangle member functions; member functions of a
10583              type with external linkage have external linkage.  */
10584         }
10585
10586       if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
10587         {
10588           cp_error_at ("typedef name may not be class-qualified", decl);
10589           return NULL_TREE;
10590         }
10591       else if (quals)
10592         {
10593           if (ctype == NULL_TREE)
10594             {
10595               if (TREE_CODE (type) != METHOD_TYPE)
10596                 cp_error_at ("invalid type qualifier for non-method type", decl);
10597               else
10598                 ctype = TYPE_METHOD_BASETYPE (type);
10599             }
10600           if (ctype != NULL_TREE)
10601             grok_method_quals (ctype, decl, quals);
10602         }
10603
10604       if (RIDBIT_SETP (RID_SIGNED, specbits)
10605           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10606         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10607
10608       if (RIDBIT_SETP (RID_MUTABLE, specbits))
10609         error ("non-object member `%s' cannot be declared mutable", name);
10610
10611       bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
10612                       inlinep, friendp, raises != NULL_TREE);
10613
10614       if (initialized)
10615         error ("typedef declaration includes an initializer");
10616
10617       return decl;
10618     }
10619
10620   /* Detect the case of an array type of unspecified size
10621      which came, as such, direct from a typedef name.
10622      We must copy the type, so that each identifier gets
10623      a distinct type, so that each identifier's size can be
10624      controlled separately by its own initializer.  */
10625
10626   if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
10627       && TYPE_DOMAIN (type) == NULL_TREE)
10628     {
10629       type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
10630     }
10631
10632   /* If this is a type name (such as, in a cast or sizeof),
10633      compute the type and return it now.  */
10634
10635   if (decl_context == TYPENAME)
10636     {
10637       /* Note that the grammar rejects storage classes
10638          in typenames, fields or parameters.  */
10639       if (type_quals != TYPE_UNQUALIFIED)
10640         {
10641           if (IS_SIGNATURE (type))
10642             error ("type qualifiers specified for signature type");
10643           type_quals = TYPE_UNQUALIFIED;
10644         }
10645
10646       /* Special case: "friend class foo" looks like a TYPENAME context.  */
10647       if (friendp)
10648         {
10649           if (type_quals != TYPE_UNQUALIFIED)
10650             {
10651               cp_error ("type qualifiers specified for friend class declaration");
10652               type_quals = TYPE_UNQUALIFIED;
10653             }
10654           if (inlinep)
10655             {
10656               cp_error ("`inline' specified for friend class declaration");
10657               inlinep = 0;
10658             }
10659
10660           /* Only try to do this stuff if we didn't already give up.  */
10661           if (type != integer_type_node)
10662             {
10663               /* A friendly class?  */
10664               if (current_class_type)
10665                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
10666               else
10667                 error ("trying to make class `%s' a friend of global scope",
10668                        TYPE_NAME_STRING (type));
10669               type = void_type_node;
10670             }
10671         }
10672       else if (quals)
10673         {
10674           tree dummy = build_decl (TYPE_DECL, declarator, type);
10675           if (ctype == NULL_TREE)
10676             {
10677               my_friendly_assert (TREE_CODE (type) == METHOD_TYPE, 159);
10678               ctype = TYPE_METHOD_BASETYPE (type);
10679             }
10680           grok_method_quals (ctype, dummy, quals);
10681           type = TREE_TYPE (dummy);
10682         }
10683
10684       return type;
10685     }
10686   else if (declarator == NULL_TREE && decl_context != PARM
10687            && decl_context != CATCHPARM
10688            && TREE_CODE (type) != UNION_TYPE
10689            && ! bitfield)
10690     {
10691       cp_error ("abstract declarator `%T' used as declaration", type);
10692       declarator = make_anon_name ();
10693     }
10694
10695   /* `void' at top level (not within pointer)
10696      is allowed only in typedefs or type names.
10697      We don't complain about parms either, but that is because
10698      a better error message can be made later.  */
10699
10700   if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
10701     {
10702       if (! declarator)
10703         error ("unnamed variable or field declared void");
10704       else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10705         {
10706           if (IDENTIFIER_OPNAME_P (declarator))
10707             my_friendly_abort (356);
10708           else
10709             error ("variable or field `%s' declared void", name);
10710         }
10711       else
10712         error ("variable or field declared void");
10713       type = integer_type_node;
10714     }
10715
10716   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10717      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
10718
10719   if (decl_context == PARM || decl_context == CATCHPARM)
10720     {
10721       if (ctype || in_namespace)
10722         error ("cannot use `::' in parameter declaration");
10723
10724       /* A parameter declared as an array of T is really a pointer to T.
10725          One declared as a function is really a pointer to a function.
10726          One declared as a member is really a pointer to member.  */
10727
10728       if (TREE_CODE (type) == ARRAY_TYPE)
10729         {
10730           /* Transfer const-ness of array into that of type pointed to.  */
10731           type = build_pointer_type (TREE_TYPE (type));
10732           type_quals = TYPE_UNQUALIFIED;
10733         }
10734       else if (TREE_CODE (type) == FUNCTION_TYPE)
10735         type = build_pointer_type (type);
10736       else if (TREE_CODE (type) == OFFSET_TYPE)
10737         type = build_pointer_type (type);
10738       else if (TREE_CODE (type) == VOID_TYPE && declarator)
10739         {
10740           error ("declaration of `%s' as void", name);
10741           return NULL_TREE;
10742         }
10743     }
10744   
10745   {
10746     register tree decl;
10747
10748     if (decl_context == PARM)
10749       {
10750         decl = build_decl (PARM_DECL, declarator, type);
10751
10752         bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
10753                         inlinep, friendp, raises != NULL_TREE);
10754         if (current_class_type
10755             && IS_SIGNATURE (current_class_type))
10756           {
10757             if (inlinep)
10758               error ("parameter of signature member function declared `inline'");
10759             if (RIDBIT_SETP (RID_AUTO, specbits))
10760               error ("parameter of signature member function declared `auto'");
10761             if (RIDBIT_SETP (RID_REGISTER, specbits))
10762               error ("parameter of signature member function declared `register'");
10763           }
10764
10765         /* Compute the type actually passed in the parmlist,
10766            for the case where there is no prototype.
10767            (For example, shorts and chars are passed as ints.)
10768            When there is a prototype, this is overridden later.  */
10769
10770         DECL_ARG_TYPE (decl) = type_promotes_to (type);
10771       }
10772     else if (decl_context == FIELD)
10773       {
10774         if (type == error_mark_node)
10775           {
10776             /* Happens when declaring arrays of sizes which
10777                are error_mark_node, for example.  */
10778             decl = NULL_TREE;
10779           }
10780         else if (in_namespace && !friendp)
10781           {
10782             /* Something like struct S { int N::j; };  */
10783             cp_error ("invalid use of `::'");
10784             decl = NULL_TREE;
10785           }
10786         else if (TREE_CODE (type) == FUNCTION_TYPE)
10787           {
10788             int publicp = 0;
10789             tree function_context;
10790
10791             /* We catch the others as conflicts with the builtin
10792                typedefs.  */
10793             if (friendp && declarator == ridpointers[(int) RID_SIGNED])
10794               {
10795                 cp_error ("function `%D' cannot be declared friend",
10796                           declarator);
10797                 friendp = 0;
10798               }
10799
10800             if (friendp == 0)
10801               {
10802                 if (ctype == NULL_TREE)
10803                   ctype = current_class_type;
10804
10805                 if (ctype == NULL_TREE)
10806                   {
10807                     cp_error ("can't make `%D' into a method -- not in a class",
10808                               declarator);
10809                     return void_type_node;
10810                   }
10811
10812                 /* ``A union may [ ... ] not [ have ] virtual functions.''
10813                    ARM 9.5 */
10814                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10815                   {
10816                     cp_error ("function `%D' declared virtual inside a union",
10817                               declarator);
10818                     return void_type_node;
10819                   }
10820
10821                 if (declarator == ansi_opname[(int) NEW_EXPR]
10822                     || declarator == ansi_opname[(int) VEC_NEW_EXPR]
10823                     || declarator == ansi_opname[(int) DELETE_EXPR]
10824                     || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
10825                   {
10826                     if (virtualp)
10827                       {
10828                         cp_error ("`%D' cannot be declared virtual, since it is always static",
10829                                   declarator);
10830                         virtualp = 0;
10831                       }
10832                   }
10833                 else if (staticp < 2)
10834                   type = build_cplus_method_type (ctype, TREE_TYPE (type),
10835                                                   TYPE_ARG_TYPES (type));
10836               }
10837
10838             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
10839             function_context = (ctype != NULL_TREE) ? 
10840               hack_decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10841             publicp = (! friendp || ! staticp)
10842               && function_context == NULL_TREE;
10843             decl = grokfndecl (ctype, type, 
10844                                TREE_CODE (declarator) != TEMPLATE_ID_EXPR
10845                                ? declarator : dname,
10846                                declarator,
10847                                virtualp, flags, quals, raises, attrlist,
10848                                friendp ? -1 : 0, friendp, publicp, inlinep,
10849                                funcdef_flag, template_count, in_namespace);
10850             if (decl == NULL_TREE || decl == error_mark_node)
10851               return decl;
10852 #if 0
10853             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
10854             /* The decl and setting of decl_machine_attr is also turned off.  */
10855             decl = build_decl_attribute_variant (decl, decl_machine_attr);
10856 #endif
10857
10858             /* [class.conv.ctor]
10859
10860                A constructor declared without the function-specifier
10861                explicit that can be called with a single parameter
10862                specifies a conversion from the type of its first
10863                parameter to the type of its class.  Such a constructor
10864                is called a converting constructor.  */
10865             if (explicitp == 2)
10866               DECL_NONCONVERTING_P (decl) = 1;
10867             else if (DECL_CONSTRUCTOR_P (decl))
10868               {
10869                 /* The constructor can be called with exactly one
10870                    parameter if there is at least one parameter, and
10871                    any subsequent parameters have default arguments.
10872                    We don't look at the first parameter, which is
10873                    really just the `this' parameter for the new
10874                    object.  */
10875                 tree arg_types = 
10876                   TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)));
10877
10878                 /* Skip the `in_chrg' argument too, if present.  */
10879                 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (decl)))
10880                   arg_types = TREE_CHAIN (arg_types);
10881
10882                 if (arg_types == void_list_node
10883                     || (arg_types 
10884                         && TREE_CHAIN (arg_types) 
10885                         && TREE_CHAIN (arg_types) != void_list_node
10886                         && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
10887                   DECL_NONCONVERTING_P (decl) = 1;
10888               }
10889           }
10890         else if (TREE_CODE (type) == METHOD_TYPE)
10891           {
10892             /* We only get here for friend declarations of
10893                members of other classes.  */
10894             /* All method decls are public, so tell grokfndecl to set
10895                TREE_PUBLIC, also.  */
10896             decl = grokfndecl (ctype, type, declarator, declarator,
10897                                virtualp, flags, quals, raises, attrlist,
10898                                friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
10899                                template_count, in_namespace);
10900             if (decl == NULL_TREE)
10901               return NULL_TREE;
10902           }
10903         else if (!staticp && ! processing_template_decl
10904                  && TYPE_SIZE (complete_type (type)) == NULL_TREE
10905                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
10906           {
10907             if (declarator)
10908               cp_error ("field `%D' has incomplete type", declarator);
10909             else
10910               cp_error ("name `%T' has incomplete type", type);
10911
10912             /* If we're instantiating a template, tell them which
10913                instantiation made the field's type be incomplete.  */
10914             if (current_class_type
10915                 && TYPE_NAME (current_class_type)
10916                 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
10917                 && declspecs && TREE_VALUE (declspecs)
10918                 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
10919               cp_error ("  in instantiation of template `%T'",
10920                         current_class_type);
10921
10922             type = error_mark_node;
10923             decl = NULL_TREE;
10924           }
10925         else
10926           {
10927             if (friendp)
10928               {
10929                 error ("`%s' is neither function nor method; cannot be declared friend",
10930                        IDENTIFIER_POINTER (declarator));
10931                 friendp = 0;
10932               }
10933             decl = NULL_TREE;
10934           }
10935
10936         if (friendp)
10937           {
10938             /* Friends are treated specially.  */
10939             if (ctype == current_class_type)
10940               warning ("member functions are implicitly friends of their class");
10941             else
10942               {
10943                 tree t = NULL_TREE;
10944                 if (decl && DECL_NAME (decl))
10945                   {
10946                     if (template_class_depth (current_class_type) == 0)
10947                       {
10948                         decl 
10949                           = check_explicit_specialization 
10950                           (declarator, decl,
10951                            template_count, 2 * (funcdef_flag != 0) + 4);
10952                         if (decl == error_mark_node)
10953                           return error_mark_node;
10954                       }
10955
10956                     t = do_friend (ctype, declarator, decl,
10957                                    last_function_parms, flags, quals,
10958                                    funcdef_flag);
10959                   }
10960                 if (t && funcdef_flag)
10961                   return t;
10962                 
10963                 return void_type_node;
10964               }
10965           }
10966
10967         /* Structure field.  It may not be a function, except for C++ */
10968
10969         if (decl == NULL_TREE)
10970           {
10971             if (initialized)
10972               {
10973                 if (!staticp)
10974                   {
10975                     /* An attempt is being made to initialize a non-static
10976                        member.  But, from [class.mem]:
10977                        
10978                        4 A member-declarator can contain a
10979                        constant-initializer only if it declares a static
10980                        member (_class.static_) of integral or enumeration
10981                        type, see _class.static.data_.  
10982
10983                        This used to be relatively common practice, but
10984                        the rest of the compiler does not correctly
10985                        handle the initialization unless the member is
10986                        static so we make it static below.  */
10987                     cp_pedwarn ("ANSI C++ forbids initialization of member `%D'",
10988                                 declarator);
10989                     cp_pedwarn ("making `%D' static", declarator);
10990                     staticp = 1;
10991                   }
10992
10993                 if (uses_template_parms (type))
10994                   /* We'll check at instantiation time.  */
10995                   ;
10996                 else if (check_static_variable_definition (declarator,
10997                                                            type))
10998                   /* If we just return the declaration, crashes
10999                      will sometimes occur.  We therefore return
11000                      void_type_node, as if this was a friend
11001                      declaration, to cause callers to completely
11002                      ignore this declaration.  */
11003                   return void_type_node;
11004               }
11005
11006             /* 9.2p13 [class.mem] */
11007             if (declarator == constructor_name (current_class_type)
11008                 /* Divergence from the standard:  In extern "C", we
11009                    allow non-static data members here, because C does
11010                    and /usr/include/netinet/in.h uses that.  */
11011                 && (staticp || current_lang_name != lang_c))
11012               cp_pedwarn ("ANSI C++ forbids data member `%D' with same name as enclosing class",
11013                           declarator);
11014
11015             if (staticp)
11016               {
11017                 /* C++ allows static class members.
11018                    All other work for this is done by grokfield.
11019                    This VAR_DCL is built by build_lang_field_decl.
11020                    All other VAR_DECLs are built by build_decl.  */
11021                 decl = build_lang_field_decl (VAR_DECL, declarator, type);
11022                 TREE_STATIC (decl) = 1;
11023                 /* In class context, 'static' means public access.  */
11024                 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
11025               }
11026             else
11027               {
11028                 decl = build_lang_field_decl (FIELD_DECL, declarator, type);
11029                 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11030                   {
11031                     DECL_MUTABLE_P (decl) = 1;
11032                     RIDBIT_RESET (RID_MUTABLE, specbits);
11033                   }
11034               }
11035
11036             bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
11037                             inlinep, friendp, raises != NULL_TREE);
11038           }
11039       }
11040     else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
11041       {
11042         tree original_name;
11043         int publicp = 0;
11044
11045         if (! declarator)
11046           return NULL_TREE;
11047
11048         if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11049           original_name = dname;
11050         else
11051           original_name = declarator;
11052
11053         if (RIDBIT_SETP (RID_AUTO, specbits))
11054           error ("storage class `auto' invalid for function `%s'", name);
11055         else if (RIDBIT_SETP (RID_REGISTER, specbits))
11056           error ("storage class `register' invalid for function `%s'", name);
11057
11058         /* Function declaration not at top level.
11059            Storage classes other than `extern' are not allowed
11060            and `extern' makes no difference.  */
11061         if (! toplevel_bindings_p ()
11062             && (RIDBIT_SETP (RID_STATIC, specbits)
11063                 || RIDBIT_SETP (RID_INLINE, specbits))
11064             && pedantic)
11065           {
11066             if (RIDBIT_SETP (RID_STATIC, specbits))
11067               pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
11068             else
11069               pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
11070           }
11071         
11072         if (ctype == NULL_TREE)
11073           {
11074             if (virtualp)
11075               {
11076                 error ("virtual non-class function `%s'", name);
11077                 virtualp = 0;
11078               }
11079           }
11080         else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
11081           type = build_cplus_method_type (ctype, TREE_TYPE (type),
11082                                           TYPE_ARG_TYPES (type));
11083
11084         /* Record presence of `static'.  */
11085         publicp = (ctype != NULL_TREE
11086                    || RIDBIT_SETP (RID_EXTERN, specbits)
11087                    || !RIDBIT_SETP (RID_STATIC, specbits));
11088
11089         decl = grokfndecl (ctype, type, original_name, declarator,
11090                            virtualp, flags, quals, raises, attrlist,
11091                            1, friendp,
11092                            publicp, inlinep, funcdef_flag, 
11093                            template_count, in_namespace);
11094         if (decl == NULL_TREE)
11095           return NULL_TREE;
11096
11097         /* Among other times, could occur from check_explicit_specialization
11098            returning an error_mark_node.  */
11099         if (decl == error_mark_node)
11100           return error_mark_node;
11101
11102         if (staticp == 1)
11103           {
11104             int illegal_static = 0;
11105
11106             /* Don't allow a static member function in a class, and forbid
11107                declaring main to be static.  */
11108             if (TREE_CODE (type) == METHOD_TYPE)
11109               {
11110                 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
11111                 illegal_static = 1;
11112               }
11113             else if (current_function_decl)
11114               {
11115                 /* FIXME need arm citation */
11116                 error ("cannot declare static function inside another function");
11117                 illegal_static = 1;
11118               }
11119
11120             if (illegal_static)
11121               {
11122                 staticp = 0;
11123                 RIDBIT_RESET (RID_STATIC, specbits);
11124               }
11125           }
11126       }
11127     else
11128       {
11129         /* It's a variable.  */
11130
11131         /* An uninitialized decl with `extern' is a reference.  */
11132         decl = grokvardecl (type, declarator, &specbits, 
11133                             initialized, 
11134                             (type_quals & TYPE_QUAL_CONST) != 0, 
11135                             in_namespace);
11136         bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11137                         inlinep, friendp, raises != NULL_TREE);
11138
11139         if (ctype)
11140           {
11141             DECL_CONTEXT (decl) = ctype;
11142             if (staticp == 1)
11143               {
11144                 cp_pedwarn ("static member `%D' re-declared as static", decl);
11145                 staticp = 0;
11146                 RIDBIT_RESET (RID_STATIC, specbits);
11147               }
11148             if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11149               {
11150                 cp_error ("static member `%D' declared `register'", decl);
11151                 RIDBIT_RESET (RID_REGISTER, specbits);
11152               }
11153             if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
11154               {
11155                 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
11156                             decl);
11157                 RIDBIT_RESET (RID_EXTERN, specbits);
11158               }
11159           }
11160       }
11161
11162     if (RIDBIT_SETP (RID_MUTABLE, specbits))
11163       {
11164         error ("`%s' cannot be declared mutable", name);
11165       }
11166
11167     /* Record `register' declaration for warnings on &
11168        and in case doing stupid register allocation.  */
11169
11170     if (RIDBIT_SETP (RID_REGISTER, specbits))
11171       DECL_REGISTER (decl) = 1;
11172
11173     if (RIDBIT_SETP (RID_EXTERN, specbits))
11174       DECL_THIS_EXTERN (decl) = 1;
11175
11176     if (RIDBIT_SETP (RID_STATIC, specbits))
11177       DECL_THIS_STATIC (decl) = 1;
11178
11179     /* Record constancy and volatility.  */
11180     /* FIXME: Disallow `restrict' pointer-to-member declarations.  */
11181     c_apply_type_quals_to_decl (type_quals, decl);
11182
11183     return decl;
11184   }
11185 }
11186 \f
11187 /* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11188    An empty exprlist is a parmlist.  An exprlist which
11189    contains only identifiers at the global level
11190    is a parmlist.  Otherwise, it is an exprlist.  */
11191
11192 int
11193 parmlist_is_exprlist (exprs)
11194      tree exprs;
11195 {
11196   if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11197     return 0;
11198
11199   if (toplevel_bindings_p ())
11200     {
11201       /* At the global level, if these are all identifiers,
11202          then it is a parmlist.  */
11203       while (exprs)
11204         {
11205           if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11206             return 1;
11207           exprs = TREE_CHAIN (exprs);
11208         }
11209       return 0;
11210     }
11211   return 1;
11212 }
11213
11214 /* Subroutine of start_function.  Ensure that each of the parameter
11215    types (as listed in PARMS) is complete, as is required for a
11216    function definition.  */
11217
11218 static void
11219 require_complete_types_for_parms (parms)
11220      tree parms;
11221 {
11222   while (parms)
11223     {
11224       tree type = TREE_TYPE (parms);
11225       if (TYPE_SIZE (complete_type (type)) == NULL_TREE)
11226         {
11227           if (DECL_NAME (parms))
11228             error ("parameter `%s' has incomplete type",
11229                    IDENTIFIER_POINTER (DECL_NAME (parms)));
11230           else
11231             error ("parameter has incomplete type");
11232           TREE_TYPE (parms) = error_mark_node;
11233         }
11234       else
11235         layout_decl (parms, 0);
11236
11237       parms = TREE_CHAIN (parms);
11238     }
11239 }
11240
11241 /* Decode the list of parameter types for a function type.
11242    Given the list of things declared inside the parens,
11243    return a list of types.
11244
11245    The list we receive can have three kinds of elements:
11246    an IDENTIFIER_NODE for names given without types,
11247    a TREE_LIST node for arguments given as typespecs or names with typespecs,
11248    or void_type_node, to mark the end of an argument list
11249    when additional arguments are not permitted (... was not used).
11250
11251    FUNCDEF_FLAG is nonzero for a function definition, 0 for
11252    a mere declaration.  A nonempty identifier-list gets an error message
11253    when FUNCDEF_FLAG is zero.
11254    If FUNCDEF_FLAG is 1, then parameter types must be complete.
11255    If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
11256
11257    If all elements of the input list contain types,
11258    we return a list of the types.
11259    If all elements contain no type (except perhaps a void_type_node
11260    at the end), we return a null list.
11261    If some have types and some do not, it is an error, and we
11262    return a null list.
11263
11264    Also set last_function_parms to either
11265    a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
11266    A list of names is converted to a chain of PARM_DECLs
11267    by store_parm_decls so that ultimately it is always a chain of decls.
11268
11269    Note that in C++, parameters can take default values.  These default
11270    values are in the TREE_PURPOSE field of the TREE_LIST.  It is
11271    an error to specify default values which are followed by parameters
11272    that have no default values, or an ELLIPSES.  For simplicities sake,
11273    only parameters which are specified with their types can take on
11274    default values.  */
11275
11276 static tree
11277 grokparms (first_parm, funcdef_flag)
11278      tree first_parm;
11279      int funcdef_flag;
11280 {
11281   tree result = NULL_TREE;
11282   tree decls = NULL_TREE;
11283
11284   if (first_parm != NULL_TREE
11285       && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
11286     {
11287       if (! funcdef_flag)
11288         pedwarn ("parameter names (without types) in function declaration");
11289       last_function_parms = first_parm;
11290       return NULL_TREE;
11291     }
11292   else if (first_parm != NULL_TREE
11293            && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
11294            && TREE_CODE (TREE_VALUE (first_parm)) != VOID_TYPE)
11295     my_friendly_abort (145);
11296   else
11297     {
11298       /* Types were specified.  This is a list of declarators
11299          each represented as a TREE_LIST node.  */
11300       register tree parm, chain;
11301       int any_init = 0, any_error = 0;
11302
11303       if (first_parm != NULL_TREE)
11304         {
11305           tree last_result = NULL_TREE;
11306           tree last_decl = NULL_TREE;
11307
11308           for (parm = first_parm; parm != NULL_TREE; parm = chain)
11309             {
11310               tree type = NULL_TREE, list_node = parm;
11311               register tree decl = TREE_VALUE (parm);
11312               tree init = TREE_PURPOSE (parm);
11313
11314               chain = TREE_CHAIN (parm);
11315               /* @@ weak defense against parse errors.  */
11316               if (TREE_CODE (decl) != VOID_TYPE 
11317                   && TREE_CODE (decl) != TREE_LIST)
11318                 {
11319                   /* Give various messages as the need arises.  */
11320                   if (TREE_CODE (decl) == STRING_CST)
11321                     cp_error ("invalid string constant `%E'", decl);
11322                   else if (TREE_CODE (decl) == INTEGER_CST)
11323                     error ("invalid integer constant in parameter list, did you forget to give parameter name?");
11324                   continue;
11325                 }
11326
11327               if (TREE_CODE (decl) != VOID_TYPE)
11328                 {
11329                   decl = grokdeclarator (TREE_VALUE (decl),
11330                                          TREE_PURPOSE (decl),
11331                                          PARM, init != NULL_TREE,
11332                                          NULL_TREE);
11333                   if (! decl || TREE_TYPE (decl) == error_mark_node)
11334                     continue;
11335
11336                   /* Top-level qualifiers on the parameters are
11337                      ignored for function types.  */
11338                   type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
11339
11340                   if (TREE_CODE (type) == VOID_TYPE)
11341                     decl = void_type_node;
11342                   else if (TREE_CODE (type) == METHOD_TYPE)
11343                     {
11344                       if (DECL_NAME (decl))
11345                         /* Cannot use the decl here because
11346                            we don't have DECL_CONTEXT set up yet.  */
11347                         cp_error ("parameter `%D' invalidly declared method type",
11348                                   DECL_NAME (decl));
11349                       else
11350                         error ("parameter invalidly declared method type");
11351                       type = build_pointer_type (type);
11352                       TREE_TYPE (decl) = type;
11353                     }
11354                   else if (TREE_CODE (type) == OFFSET_TYPE)
11355                     {
11356                       if (DECL_NAME (decl))
11357                         cp_error ("parameter `%D' invalidly declared offset type",
11358                                   DECL_NAME (decl));
11359                       else
11360                         error ("parameter invalidly declared offset type");
11361                       type = build_pointer_type (type);
11362                       TREE_TYPE (decl) = type;
11363                     }
11364                   else if (TREE_CODE (type) == RECORD_TYPE
11365                            && TYPE_LANG_SPECIFIC (type)
11366                            && CLASSTYPE_ABSTRACT_VIRTUALS (type))
11367                     {
11368                       abstract_virtuals_error (decl, type);
11369                       any_error = 1;  /* Seems like a good idea. */
11370                     }
11371                   else if (TREE_CODE (type) == RECORD_TYPE
11372                            && TYPE_LANG_SPECIFIC (type)
11373                            && IS_SIGNATURE (type))
11374                     {
11375                       signature_error (decl, type);
11376                       any_error = 1;  /* Seems like a good idea. */
11377                     }
11378                   else if (POINTER_TYPE_P (type))
11379                     {
11380                       tree t = type;
11381                       while (POINTER_TYPE_P (t)
11382                              || (TREE_CODE (t) == ARRAY_TYPE
11383                                  && TYPE_DOMAIN (t) != NULL_TREE))
11384                         t = TREE_TYPE (t);
11385                       if (TREE_CODE (t) == ARRAY_TYPE)
11386                         cp_error ("parameter type `%T' includes %s to array of unknown bound",
11387                                   type,
11388                                   TYPE_PTR_P (type) ? "pointer" : "reference");
11389                     }
11390                 }
11391
11392               if (TREE_CODE (decl) == VOID_TYPE)
11393                 {
11394                   if (result == NULL_TREE)
11395                     {
11396                       result = void_list_node;
11397                       last_result = result;
11398                     }
11399                   else
11400                     {
11401                       TREE_CHAIN (last_result) = void_list_node;
11402                       last_result = void_list_node;
11403                     }
11404                   if (chain
11405                       && (chain != void_list_node || TREE_CHAIN (chain)))
11406                     error ("`void' in parameter list must be entire list");
11407                   break;
11408                 }
11409
11410               /* Since there is a prototype, args are passed in their own types.  */
11411               DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
11412 #ifdef PROMOTE_PROTOTYPES
11413               if ((TREE_CODE (type) == INTEGER_TYPE
11414                    || TREE_CODE (type) == ENUMERAL_TYPE)
11415                   && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
11416                 DECL_ARG_TYPE (decl) = integer_type_node;
11417 #endif
11418               if (!any_error)
11419                 {
11420                   if (init)
11421                     {
11422                       any_init++;
11423                       if (TREE_CODE (init) == SAVE_EXPR)
11424                         PARM_DECL_EXPR (init) = 1;
11425                       else if (processing_template_decl)
11426                         ;
11427                       /* Unparsed default arg from in-class decl.  */
11428                       else if (TREE_CODE (init) == DEFAULT_ARG)
11429                         ;
11430                       else if (TREE_CODE (init) == PARM_DECL
11431                                || TREE_CODE (init) == VAR_DECL)
11432                         {
11433                           if (TREE_CODE (init) == VAR_DECL
11434                               && (IDENTIFIER_VALUE (DECL_NAME (init))
11435                                   == init)
11436                               && LOCAL_BINDING_P
11437                               (IDENTIFIER_BINDING (DECL_NAME
11438                                                    (init))))
11439                             {
11440                               /* ``Local variables may not be used in
11441                                  default argument expressions.''
11442                                  dpANSI C++ 8.2.6 */
11443
11444                               cp_error ("local variable `%D' may not be used as a default argument", init);
11445                               any_error = 1;
11446                             }
11447                           else if (TREE_READONLY_DECL_P (init))
11448                             init = decl_constant_value (init);
11449                         }
11450                       else if (TREE_TYPE (init) == NULL_TREE)
11451                         {
11452                           error ("argument list may not have an initializer list");
11453                           init = error_mark_node;
11454                         }
11455
11456                       if (! processing_template_decl
11457                           && init != error_mark_node
11458                           && TREE_CODE (init) != DEFAULT_ARG
11459                           && ! can_convert_arg (type, TREE_TYPE (init), init))
11460                         cp_pedwarn ("invalid type `%T' for default argument to `%#D'",
11461                                     TREE_TYPE (init), decl);
11462                     }
11463                 }
11464               else
11465                 init = NULL_TREE;
11466
11467               if (decls == NULL_TREE)
11468                 {
11469                   decls = decl;
11470                   last_decl = decls;
11471                 }
11472               else
11473                 {
11474                   TREE_CHAIN (last_decl) = decl;
11475                   last_decl = decl;
11476                 }
11477               if (! current_function_decl && TREE_PERMANENT (list_node))
11478                 {
11479                   TREE_PURPOSE (list_node) = init;
11480                   TREE_VALUE (list_node) = type;
11481                   TREE_CHAIN (list_node) = NULL_TREE;
11482                 }
11483               else
11484                 list_node = saveable_tree_cons (init, type, NULL_TREE);
11485               if (result == NULL_TREE)
11486                 {
11487                   result = list_node;
11488                   last_result = result;
11489                 }
11490               else
11491                 {
11492                   TREE_CHAIN (last_result) = list_node;
11493                   last_result = list_node;
11494                 }
11495             }
11496           if (last_result)
11497             TREE_CHAIN (last_result) = NULL_TREE;
11498           /* If there are no parameters, and the function does not end
11499              with `...', then last_decl will be NULL_TREE.  */
11500           if (last_decl != NULL_TREE)
11501             TREE_CHAIN (last_decl) = NULL_TREE;
11502         }
11503     }
11504
11505   last_function_parms = decls;
11506
11507   return result;
11508 }
11509
11510 /* Called from the parser to update an element of TYPE_ARG_TYPES for some
11511    FUNCTION_TYPE with the newly parsed version of its default argument, which
11512    was previously digested as text.  See snarf_defarg et al in lex.c.  */
11513
11514 void
11515 replace_defarg (arg, init)
11516      tree arg, init;
11517 {
11518   if (! processing_template_decl
11519       && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
11520     cp_pedwarn ("invalid type `%T' for default argument to `%T'",
11521                 TREE_TYPE (init), TREE_VALUE (arg));
11522   TREE_PURPOSE (arg) = init;
11523 }
11524 \f
11525 int
11526 copy_args_p (d)
11527      tree d;
11528 {
11529   tree t = FUNCTION_ARG_CHAIN (d);
11530   if (DECL_CONSTRUCTOR_P (d)
11531       && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (d)))
11532     t = TREE_CHAIN (t);
11533   if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
11534       && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
11535           == DECL_CLASS_CONTEXT (d))
11536       && (TREE_CHAIN (t) == NULL_TREE
11537           || TREE_CHAIN (t) == void_list_node
11538           || TREE_PURPOSE (TREE_CHAIN (t))))
11539     return 1;
11540   return 0;
11541 }
11542
11543 /* These memoizing functions keep track of special properties which
11544    a class may have.  `grok_ctor_properties' notices whether a class
11545    has a constructor of the form X(X&), and also complains
11546    if the class has a constructor of the form X(X).
11547    `grok_op_properties' takes notice of the various forms of
11548    operator= which are defined, as well as what sorts of type conversion
11549    may apply.  Both functions take a FUNCTION_DECL as an argument.  */
11550
11551 int
11552 grok_ctor_properties (ctype, decl)
11553      tree ctype, decl;
11554 {
11555   tree parmtypes = FUNCTION_ARG_CHAIN (decl);
11556   tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
11557
11558   /* When a type has virtual baseclasses, a magical first int argument is
11559      added to any ctor so we can tell if the class has been initialized
11560      yet.  This could screw things up in this function, so we deliberately
11561      ignore the leading int if we're in that situation.  */
11562   if (TYPE_USES_VIRTUAL_BASECLASSES (ctype))
11563     {
11564       my_friendly_assert (parmtypes
11565                           && TREE_VALUE (parmtypes) == integer_type_node,
11566                           980529);
11567       parmtypes = TREE_CHAIN (parmtypes);
11568       parmtype = TREE_VALUE (parmtypes);
11569     }
11570
11571   /* [class.copy]
11572
11573      A non-template constructor for class X is a copy constructor if
11574      its first parameter is of type X&, const X&, volatile X& or const
11575      volatile X&, and either there are no other parameters or else all
11576      other parameters have default arguments.  */
11577   if (TREE_CODE (parmtype) == REFERENCE_TYPE
11578       && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
11579       && (TREE_CHAIN (parmtypes) == NULL_TREE
11580           || TREE_CHAIN (parmtypes) == void_list_node
11581           || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11582       && !(DECL_TEMPLATE_INSTANTIATION (decl)
11583            && is_member_template (DECL_TI_TEMPLATE (decl))))
11584     {
11585       TYPE_HAS_INIT_REF (ctype) = 1;
11586       if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11587         TYPE_HAS_CONST_INIT_REF (ctype) = 1;
11588     }
11589   /* [class.copy]
11590
11591      A declaration of a constructor for a class X is ill-formed if its
11592      first parameter is of type (optionally cv-qualified) X and either
11593      there are no other parameters or else all other parameters have
11594      default arguments.  
11595
11596      We *don't* complain about member template instantiations that
11597      have this form, though; they can occur as we try to decide what
11598      constructor to use during overload resolution.  Since overload
11599      resolution will never prefer such a constructor to the
11600      non-template copy constructor (which is either explicitly or
11601      implicitly defined), there's no need to worry about their
11602      existence.  Theoretically, they should never even be
11603      instantiated, but that's hard to forestall.  */
11604   else if (TYPE_MAIN_VARIANT (parmtype) == ctype
11605            && (TREE_CHAIN (parmtypes) == NULL_TREE
11606                || TREE_CHAIN (parmtypes) == void_list_node
11607                || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11608            && !(DECL_TEMPLATE_INSTANTIATION (decl)
11609                 && is_member_template (DECL_TI_TEMPLATE (decl))))
11610     {
11611       cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
11612                 ctype, ctype);
11613       SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
11614       return 0;
11615     }
11616   else if (TREE_CODE (parmtype) == VOID_TYPE
11617            || TREE_PURPOSE (parmtypes) != NULL_TREE)
11618     TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
11619
11620   return 1;
11621 }
11622
11623 /* An operator with this name can be either unary or binary.  */
11624
11625 static int
11626 ambi_op_p (name)
11627      tree name;
11628 {
11629   return (name == ansi_opname [(int) INDIRECT_REF]
11630           || name == ansi_opname [(int) ADDR_EXPR]
11631           || name == ansi_opname [(int) NEGATE_EXPR]
11632           || name == ansi_opname[(int) POSTINCREMENT_EXPR]
11633           || name == ansi_opname[(int) POSTDECREMENT_EXPR]
11634           || name == ansi_opname [(int) CONVERT_EXPR]);
11635 }
11636
11637 /* An operator with this name can only be unary.  */
11638
11639 static int
11640 unary_op_p (name)
11641      tree name;
11642 {
11643   return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
11644           || name == ansi_opname [(int) BIT_NOT_EXPR]
11645           || name == ansi_opname [(int) COMPONENT_REF]
11646           || OPERATOR_TYPENAME_P (name));
11647 }
11648
11649 /* Do a little sanity-checking on how they declared their operator.  */
11650
11651 void
11652 grok_op_properties (decl, virtualp, friendp)
11653      tree decl;
11654      int virtualp, friendp;
11655 {
11656   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11657   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11658   tree name = DECL_NAME (decl);
11659
11660   if (current_class_type == NULL_TREE)
11661     friendp = 1;
11662
11663   if (! friendp)
11664     {
11665       /* [class.copy]
11666
11667          A user-declared copy assignment operator X::operator= is a
11668          non-static non-template member function of class X with
11669          exactly one parameter of type X, X&, const X&, volatile X& or
11670          const volatile X&.  */
11671       if (name == ansi_opname[(int) MODIFY_EXPR]
11672           && !(DECL_TEMPLATE_INSTANTIATION (decl)
11673                && is_member_template (DECL_TI_TEMPLATE (decl))))
11674         TYPE_HAS_ASSIGNMENT (current_class_type) = 1;
11675       else if (name == ansi_opname[(int) CALL_EXPR])
11676         TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
11677       else if (name == ansi_opname[(int) ARRAY_REF])
11678         TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
11679       else if (name == ansi_opname[(int) COMPONENT_REF]
11680                || name == ansi_opname[(int) MEMBER_REF])
11681         TYPE_OVERLOADS_ARROW (current_class_type) = 1;
11682       else if (name == ansi_opname[(int) NEW_EXPR])
11683         TYPE_GETS_NEW (current_class_type) |= 1;
11684       else if (name == ansi_opname[(int) DELETE_EXPR])
11685         TYPE_GETS_DELETE (current_class_type) |= 1;
11686       else if (name == ansi_opname[(int) VEC_NEW_EXPR])
11687         TYPE_GETS_NEW (current_class_type) |= 2;
11688       else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
11689         TYPE_GETS_DELETE (current_class_type) |= 2;
11690     }
11691
11692   if (name == ansi_opname[(int) NEW_EXPR]
11693       || name == ansi_opname[(int) VEC_NEW_EXPR])
11694     {
11695       /* When the compiler encounters the definition of A::operator new, it
11696          doesn't look at the class declaration to find out if it's static.  */
11697       if (methodp)
11698         revert_static_member_fn (&decl, NULL, NULL);
11699      
11700       /* Take care of function decl if we had syntax errors.  */
11701       if (argtypes == NULL_TREE)
11702         TREE_TYPE (decl)
11703           = build_function_type (ptr_type_node,
11704                                  hash_tree_chain (integer_type_node,
11705                                                   void_list_node));
11706       else
11707         TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11708     }
11709   else if (name == ansi_opname[(int) DELETE_EXPR]
11710            || name == ansi_opname[(int) VEC_DELETE_EXPR])
11711     {
11712       if (methodp)
11713         revert_static_member_fn (&decl, NULL, NULL);
11714      
11715       if (argtypes == NULL_TREE)
11716         TREE_TYPE (decl)
11717           = build_function_type (void_type_node,
11718                                  hash_tree_chain (ptr_type_node,
11719                                                   void_list_node));
11720       else
11721         {
11722           TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11723
11724           if (! friendp && name == ansi_opname[(int) VEC_DELETE_EXPR]
11725               && (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
11726                   != void_list_node))
11727             TYPE_VEC_DELETE_TAKES_SIZE (current_class_type) = 1;
11728         }
11729     }
11730   else
11731     {
11732       /* An operator function must either be a non-static member function
11733          or have at least one parameter of a class, a reference to a class,
11734          an enumeration, or a reference to an enumeration.  13.4.0.6 */
11735       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11736         {
11737           if (OPERATOR_TYPENAME_P (name)
11738               || name == ansi_opname[(int) CALL_EXPR]
11739               || name == ansi_opname[(int) MODIFY_EXPR]
11740               || name == ansi_opname[(int) COMPONENT_REF]
11741               || name == ansi_opname[(int) ARRAY_REF])
11742             cp_error ("`%D' must be a nonstatic member function", decl);
11743           else
11744             {
11745               tree p = argtypes;
11746
11747               if (DECL_STATIC_FUNCTION_P (decl))
11748                 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
11749
11750               if (p)
11751                 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
11752                   {
11753                     tree arg = TREE_VALUE (p);
11754                     if (TREE_CODE (arg) == REFERENCE_TYPE)
11755                       arg = TREE_TYPE (arg);
11756
11757                     /* This lets bad template code slip through.  */
11758                     if (IS_AGGR_TYPE (arg)
11759                         || TREE_CODE (arg) == ENUMERAL_TYPE
11760                         || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
11761                         || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11762                       goto foundaggr;
11763                   }
11764               cp_error
11765                 ("`%D' must have an argument of class or enumerated type",
11766                  decl);
11767             foundaggr:
11768               ;
11769             }
11770         }
11771       
11772       if (name == ansi_opname[(int) CALL_EXPR])
11773         return;                 /* No restrictions on args. */
11774
11775       if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
11776         {
11777           tree t = TREE_TYPE (name);
11778           if (TREE_CODE (t) == VOID_TYPE)
11779             pedwarn ("void is not a valid type conversion operator");
11780           else if (! friendp)
11781             {
11782               int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11783               char *what = 0;
11784               if (ref)
11785                 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11786
11787               if (t == current_class_type)
11788                 what = "the same type";
11789               /* Don't force t to be complete here.  */
11790               else if (IS_AGGR_TYPE (t)
11791                        && TYPE_SIZE (t)
11792                        && DERIVED_FROM_P (t, current_class_type))
11793                 what = "a base class";
11794
11795               if (what)
11796                 warning ("conversion to %s%s will never use a type conversion operator",
11797                          ref ? "a reference to " : "", what);
11798             }
11799         }
11800
11801       if (name == ansi_opname[(int) MODIFY_EXPR])
11802         {
11803           tree parmtype;
11804
11805           if (list_length (argtypes) != 3 && methodp)
11806             {
11807               cp_error ("`%D' must take exactly one argument", decl);
11808               return;
11809             }
11810           parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
11811
11812           if (copy_assignment_arg_p (parmtype, virtualp)
11813               && ! friendp)
11814             {
11815               TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
11816               if (TREE_CODE (parmtype) != REFERENCE_TYPE
11817                   || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11818                 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
11819             }
11820         }
11821       else if (name == ansi_opname[(int) COND_EXPR])
11822         {
11823           /* 13.4.0.3 */
11824           pedwarn ("ANSI C++ prohibits overloading operator ?:");
11825           if (list_length (argtypes) != 4)
11826             cp_error ("`%D' must take exactly three arguments", decl);
11827         }         
11828       else if (ambi_op_p (name))
11829         {
11830           if (list_length (argtypes) == 2)
11831             /* prefix */;
11832           else if (list_length (argtypes) == 3)
11833             {
11834               if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
11835                    || name == ansi_opname[(int) POSTDECREMENT_EXPR])
11836                   && ! processing_template_decl
11837                   && TREE_VALUE (TREE_CHAIN (argtypes)) != integer_type_node)
11838                 {
11839                   if (methodp)
11840                     cp_error ("postfix `%D' must take `int' as its argument",
11841                               decl);
11842                   else
11843                     cp_error
11844                       ("postfix `%D' must take `int' as its second argument",
11845                        decl);
11846                 }
11847             }
11848           else
11849             {
11850               if (methodp)
11851                 cp_error ("`%D' must take either zero or one argument", decl);
11852               else
11853                 cp_error ("`%D' must take either one or two arguments", decl);
11854             }
11855
11856           /* More Effective C++ rule 6.  */
11857           if (warn_ecpp
11858               && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
11859                   || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
11860             {
11861               tree arg = TREE_VALUE (argtypes);
11862               tree ret = TREE_TYPE (TREE_TYPE (decl));
11863               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11864                 arg = TREE_TYPE (arg);
11865               arg = TYPE_MAIN_VARIANT (arg);
11866               if (list_length (argtypes) == 2)
11867                 {
11868                   if (TREE_CODE (ret) != REFERENCE_TYPE
11869                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11870                                        arg))
11871                     cp_warning ("prefix `%D' should return `%T'", decl,
11872                                 build_reference_type (arg));
11873                 }
11874               else
11875                 {
11876                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
11877                     cp_warning ("postfix `%D' should return `%T'", decl, arg);
11878                 }
11879             }
11880         }
11881       else if (unary_op_p (name))
11882         {
11883           if (list_length (argtypes) != 2)
11884             {
11885               if (methodp)
11886                 cp_error ("`%D' must take `void'", decl);
11887               else
11888                 cp_error ("`%D' must take exactly one argument", decl);
11889             }
11890         }
11891       else /* if (binary_op_p (name)) */
11892         {
11893           if (list_length (argtypes) != 3)
11894             {
11895               if (methodp)
11896                 cp_error ("`%D' must take exactly one argument", decl);
11897               else
11898                 cp_error ("`%D' must take exactly two arguments", decl);
11899             }
11900
11901           /* More Effective C++ rule 7.  */
11902           if (warn_ecpp
11903               && (name == ansi_opname [TRUTH_ANDIF_EXPR]
11904                   || name == ansi_opname [TRUTH_ORIF_EXPR]
11905                   || name == ansi_opname [COMPOUND_EXPR]))
11906             cp_warning ("user-defined `%D' always evaluates both arguments",
11907                         decl);
11908         }
11909
11910       /* Effective C++ rule 23.  */
11911       if (warn_ecpp
11912           && list_length (argtypes) == 3
11913           && (name == ansi_opname [PLUS_EXPR]
11914               || name == ansi_opname [MINUS_EXPR]
11915               || name == ansi_opname [TRUNC_DIV_EXPR]
11916               || name == ansi_opname [MULT_EXPR])
11917           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
11918         cp_warning ("`%D' should return by value", decl);
11919
11920       /* 13.4.0.8 */
11921       if (argtypes)
11922         for (; argtypes != void_list_node ; argtypes = TREE_CHAIN (argtypes))
11923           if (TREE_PURPOSE (argtypes))
11924             {
11925               TREE_PURPOSE (argtypes) = NULL_TREE;
11926               if (name == ansi_opname[(int) POSTINCREMENT_EXPR]
11927                   || name == ansi_opname[(int) POSTDECREMENT_EXPR])
11928                 {
11929                   if (pedantic)
11930                     cp_pedwarn ("`%D' cannot have default arguments", decl);
11931                 }
11932               else
11933                 cp_error ("`%D' cannot have default arguments", decl);
11934             }
11935     }
11936 }
11937 \f
11938 static char *
11939 tag_name (code)
11940      enum tag_types code;
11941 {
11942   switch (code)
11943     {
11944     case record_type:
11945       return "struct";
11946     case class_type:
11947       return "class";
11948     case union_type:
11949       return "union ";
11950     case enum_type:
11951       return "enum";
11952     case signature_type:
11953       return "signature";
11954     default:
11955       my_friendly_abort (981122);
11956     }
11957 }
11958
11959 /* Get the struct, enum or union (CODE says which) with tag NAME.
11960    Define the tag as a forward-reference if it is not defined.
11961
11962    C++: If a class derivation is given, process it here, and report
11963    an error if multiple derivation declarations are not identical.
11964
11965    If this is a definition, come in through xref_tag and only look in
11966    the current frame for the name (since C++ allows new names in any
11967    scope.)  */
11968
11969 tree
11970 xref_tag (code_type_node, name, globalize)
11971      tree code_type_node;
11972      tree name;
11973      int globalize;
11974 {
11975   enum tag_types tag_code;
11976   enum tree_code code;
11977   int temp = 0;
11978   register tree ref, t;
11979   struct binding_level *b = inner_binding_level;
11980   int got_type = 0;
11981   tree attributes = NULL_TREE;
11982
11983   /* If we are called from the parser, code_type_node will sometimes be a
11984      TREE_LIST.  This indicates that the user wrote
11985      "class __attribute__ ((foo)) bar".  Extract the attributes so we can
11986      use them later.  */
11987   if (TREE_CODE (code_type_node) == TREE_LIST)
11988     {
11989       attributes = TREE_PURPOSE (code_type_node);
11990       code_type_node = TREE_VALUE (code_type_node);
11991     }
11992
11993   tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
11994   switch (tag_code)
11995     {
11996     case record_type:
11997     case class_type:
11998     case signature_type:
11999       code = RECORD_TYPE;
12000       break;
12001     case union_type:
12002       code = UNION_TYPE;
12003       break;
12004     case enum_type:
12005       code = ENUMERAL_TYPE;
12006       break;
12007     default:
12008       my_friendly_abort (18);
12009     }
12010
12011   /* If a cross reference is requested, look up the type
12012      already defined for this tag and return it.  */
12013   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
12014     {
12015       t = name;
12016       name = TYPE_IDENTIFIER (t);
12017       got_type = 1;
12018     }
12019   else
12020     t = IDENTIFIER_TYPE_VALUE (name);
12021
12022   if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
12023       && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
12024     t = NULL_TREE;
12025
12026   if (! globalize)
12027     {
12028       /* If we know we are defining this tag, only look it up in
12029          this scope and don't try to find it as a type.  */
12030       ref = lookup_tag (code, name, b, 1);
12031     }
12032   else
12033     {
12034       if (current_class_type 
12035           && template_class_depth (current_class_type) 
12036           && PROCESSING_REAL_TEMPLATE_DECL_P ())
12037       /* Since GLOBALIZE is non-zero, we are not looking at a
12038          definition of this tag.  Since, in addition, we are currently
12039          processing a (member) template declaration of a template
12040          class, we don't want to do any lookup at all; consider:
12041
12042            template <class X>
12043            struct S1
12044
12045            template <class U>
12046            struct S2
12047            { template <class V>
12048              friend struct S1; };
12049            
12050          Here, the S2::S1 declaration should not be confused with the
12051          outer declaration.  In particular, the inner version should
12052          have a template parameter of level 2, not level 1.  This
12053          would be particularly important if the member declaration
12054          were instead:
12055
12056            template <class V = U> friend struct S1;
12057
12058          say, when we should tsubst into `U' when instantiating S2.  */
12059         ref = NULL_TREE;
12060       else 
12061         {
12062           if (t)
12063             {
12064               if (t != TYPE_MAIN_VARIANT (t))
12065                 cp_pedwarn ("using typedef-name `%D' after `%s'",
12066                             TYPE_NAME (t), tag_name (tag_code));
12067               ref = t;
12068             }
12069           else
12070             ref = lookup_tag (code, name, b, 0);
12071           
12072           if (! ref)
12073             {
12074               /* Try finding it as a type declaration.  If that wins,
12075                  use it.  */ 
12076               ref = lookup_name (name, 1);
12077
12078               if (ref != NULL_TREE
12079                   && processing_template_decl
12080                   && DECL_CLASS_TEMPLATE_P (ref)
12081                   && template_class_depth (current_class_type) == 0)
12082                 /* Since GLOBALIZE is true, we're declaring a global
12083                template, so we want this type.  */
12084                 ref = DECL_RESULT (ref);
12085
12086               if (ref && TREE_CODE (ref) == TYPE_DECL
12087                   && TREE_CODE (TREE_TYPE (ref)) == code)
12088                 ref = TREE_TYPE (ref);
12089               else
12090                 ref = NULL_TREE;
12091             }
12092         }
12093     }
12094
12095   push_obstacks_nochange ();
12096
12097   if (! ref)
12098     {
12099       /* If no such tag is yet defined, create a forward-reference node
12100          and record it as the "definition".
12101          When a real declaration of this type is found,
12102          the forward-reference will be altered into a real type.  */
12103
12104       /* In C++, since these migrate into the global scope, we must
12105          build them on the permanent obstack.  */
12106
12107       temp = allocation_temporary_p ();
12108       if (temp)
12109         end_temporary_allocation ();
12110
12111       if (code == ENUMERAL_TYPE)
12112         {
12113           cp_error ("use of enum `%#D' without previous declaration", name);
12114
12115           ref = make_node (ENUMERAL_TYPE);
12116
12117           /* Give the type a default layout like unsigned int
12118              to avoid crashing if it does not get defined.  */
12119           TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12120           TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
12121           TREE_UNSIGNED (ref) = 1;
12122           TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12123           TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12124           TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12125
12126           /* Enable us to recognize when a type is created in class context.
12127              To do nested classes correctly, this should probably be cleared
12128              out when we leave this classes scope.  Currently this in only
12129              done in `start_enum'.  */
12130
12131           pushtag (name, ref, globalize);
12132         }
12133       else
12134         {
12135           struct binding_level *old_b = class_binding_level;
12136
12137           ref = make_lang_type (code);
12138
12139           if (tag_code == signature_type)
12140             {
12141               SET_SIGNATURE (ref);
12142               /* Since a signature type will be turned into the type
12143                  of signature tables, it's not only an interface.  */
12144               CLASSTYPE_INTERFACE_ONLY (ref) = 0;
12145               SET_CLASSTYPE_INTERFACE_KNOWN (ref);
12146               /* A signature doesn't have a vtable.  */
12147               CLASSTYPE_VTABLE_NEEDS_WRITING (ref) = 0;
12148             }
12149
12150 #ifdef NONNESTED_CLASSES
12151           /* Class types don't nest the way enums do.  */
12152           class_binding_level = (struct binding_level *)0;
12153 #endif
12154           pushtag (name, ref, globalize);
12155           class_binding_level = old_b;
12156         }
12157     }
12158   else
12159     {
12160       /* If it no longer looks like a nested type, make sure it's
12161          in global scope.  
12162          If it is not an IDENTIFIER, this is not a declaration */
12163       if (b->namespace_p && !class_binding_level
12164           && TREE_CODE (name) == IDENTIFIER_NODE)
12165         {
12166           if (IDENTIFIER_NAMESPACE_VALUE (name) == NULL_TREE)
12167             SET_IDENTIFIER_NAMESPACE_VALUE (name, TYPE_NAME (ref));
12168         }
12169
12170       if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
12171         redeclare_class_template (ref, current_template_parms);
12172     }
12173
12174   /* Until the type is defined, tentatively accept whatever
12175      structure tag the user hands us.  */
12176   if (TYPE_SIZE (ref) == NULL_TREE
12177       && ref != current_class_type
12178       /* Have to check this, in case we have contradictory tag info.  */
12179       && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12180     {
12181       if (tag_code == class_type)
12182         CLASSTYPE_DECLARED_CLASS (ref) = 1;
12183       else if (tag_code == record_type || tag_code == signature_type)
12184         CLASSTYPE_DECLARED_CLASS (ref) = 0;
12185     }
12186
12187   pop_obstacks ();
12188
12189   TREE_TYPE (ref) = attributes;
12190
12191   if (ref && TYPE_P (ref))
12192     {
12193       /* [dcl.type.elab]
12194              
12195          If the identifier resolves to a typedef-name or a template
12196          type-parameter, the elaborated-type-specifier is
12197          ill-formed.  */
12198       if (TYPE_LANG_SPECIFIC (ref) && TYPE_WAS_ANONYMOUS (ref))
12199         cp_error ("`%T' is a typedef name", ref);
12200       else if (TREE_CODE (ref) == TEMPLATE_TYPE_PARM)
12201         cp_error ("`%T' is a template type paramter", ref);
12202     }
12203
12204   return ref;
12205 }
12206
12207 tree
12208 xref_tag_from_type (old, id, globalize)
12209      tree old, id;
12210      int globalize;
12211 {
12212   tree code_type_node;
12213
12214   if (TREE_CODE (old) == RECORD_TYPE)
12215     code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12216                       ? class_type_node : record_type_node);
12217   else
12218     code_type_node = union_type_node;
12219
12220   if (id == NULL_TREE)
12221     id = TYPE_IDENTIFIER (old);
12222
12223   return xref_tag (code_type_node, id, globalize);
12224 }
12225
12226 void
12227 xref_basetypes (code_type_node, name, ref, binfo)
12228      tree code_type_node;
12229      tree name, ref;
12230      tree binfo;
12231 {
12232   /* In the declaration `A : X, Y, ... Z' we mark all the types
12233      (A, X, Y, ..., Z) so we can check for duplicates.  */
12234   tree binfos;
12235   int i, len;
12236   enum tag_types tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12237
12238   if (tag_code == union_type)
12239     {
12240       cp_error ("derived union `%T' invalid", ref);
12241       return;
12242     }
12243
12244   len = list_length (binfo);
12245   push_obstacks (TYPE_OBSTACK (ref), TYPE_OBSTACK (ref));
12246
12247   SET_CLASSTYPE_MARKED (ref);
12248   BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12249
12250   for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12251     {
12252       /* The base of a derived struct is public by default.  */
12253       int via_public
12254         = (TREE_PURPOSE (binfo) == access_public_node
12255            || TREE_PURPOSE (binfo) == access_public_virtual_node
12256            || (tag_code != class_type
12257                && (TREE_PURPOSE (binfo) == access_default_node
12258                    || TREE_PURPOSE (binfo) == access_default_virtual_node)));
12259       int via_protected
12260         = (TREE_PURPOSE (binfo) == access_protected_node
12261            || TREE_PURPOSE (binfo) == access_protected_virtual_node);
12262       int via_virtual
12263         = (TREE_PURPOSE (binfo) == access_private_virtual_node
12264            || TREE_PURPOSE (binfo) == access_protected_virtual_node
12265            || TREE_PURPOSE (binfo) == access_public_virtual_node
12266            || TREE_PURPOSE (binfo) == access_default_virtual_node);
12267       tree basetype = TREE_VALUE (binfo);
12268       tree base_binfo;
12269
12270       if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12271         basetype = TREE_TYPE (basetype);
12272       if (!basetype
12273           || (TREE_CODE (basetype) != RECORD_TYPE
12274               && TREE_CODE (basetype) != TYPENAME_TYPE
12275               && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
12276               && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
12277         {
12278           cp_error ("base type `%T' fails to be a struct or class type",
12279                     TREE_VALUE (binfo));
12280           continue;
12281         }
12282
12283       GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
12284
12285 #if 1
12286       /* This code replaces similar code in layout_basetypes.
12287          We put the complete_type first for implicit `typename'.  */
12288       if (TYPE_SIZE (complete_type (basetype)) == NULL_TREE
12289           && ! (current_template_parms && uses_template_parms (basetype)))
12290         {
12291           cp_error ("base class `%T' has incomplete type", basetype);
12292           continue;
12293         }
12294 #endif
12295       else
12296         {
12297           if (CLASSTYPE_MARKED (basetype))
12298             {
12299               if (basetype == ref)
12300                 cp_error ("recursive type `%T' undefined", basetype);
12301               else
12302                 cp_error ("duplicate base type `%T' invalid", basetype);
12303               continue;
12304             }
12305
12306           if (TYPE_FOR_JAVA (basetype)
12307               && current_lang_stack == current_lang_base)
12308             TYPE_FOR_JAVA (ref) = 1;
12309
12310           /* Note that the BINFO records which describe individual
12311              inheritances are *not* shared in the lattice!  They
12312              cannot be shared because a given baseclass may be
12313              inherited with different `accessibility' by different
12314              derived classes.  (Each BINFO record describing an
12315              individual inheritance contains flags which say what
12316              the `accessibility' of that particular inheritance is.)  */
12317   
12318           base_binfo 
12319             = make_binfo (integer_zero_node, basetype,
12320                           CLASS_TYPE_P (basetype)
12321                           ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12322                           CLASS_TYPE_P (basetype)
12323                           ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
12324  
12325           TREE_VEC_ELT (binfos, i) = base_binfo;
12326           TREE_VIA_PUBLIC (base_binfo) = via_public;
12327           TREE_VIA_PROTECTED (base_binfo) = via_protected;
12328           TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12329           BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12330
12331           /* We need to unshare the binfos now so that lookups during class
12332              definition work.  */
12333           unshare_base_binfos (base_binfo);
12334
12335           SET_CLASSTYPE_MARKED (basetype);
12336
12337           /* We are free to modify these bits because they are meaningless
12338              at top level, and BASETYPE is a top-level type.  */
12339           if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
12340             {
12341               TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
12342               TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12343             }
12344
12345           if (CLASS_TYPE_P (basetype))
12346             {
12347               TYPE_GETS_NEW (ref) |= TYPE_GETS_NEW (basetype);
12348               TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12349             }
12350
12351           i += 1;
12352         }
12353     }
12354   if (i)
12355     TREE_VEC_LENGTH (binfos) = i;
12356   else
12357     BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
12358
12359   if (i > 1)
12360     TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
12361   else if (i == 1)
12362     {
12363       tree basetype = BINFO_TYPE (TREE_VEC_ELT (binfos, 0));
12364       
12365       if (CLASS_TYPE_P (basetype))
12366         TYPE_USES_MULTIPLE_INHERITANCE (ref)
12367           = TYPE_USES_MULTIPLE_INHERITANCE (basetype);
12368     }
12369
12370   if (TYPE_USES_MULTIPLE_INHERITANCE (ref))
12371     TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12372
12373   /* Unmark all the types.  */
12374   while (--i >= 0)
12375     CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
12376   CLEAR_CLASSTYPE_MARKED (ref);
12377
12378   pop_obstacks ();
12379 }
12380   
12381 \f
12382 /* Begin compiling the definition of an enumeration type.
12383    NAME is its name (or null if anonymous).
12384    Returns the type object, as yet incomplete.
12385    Also records info about it so that build_enumerator
12386    may be used to declare the individual values as they are read.  */
12387
12388 tree
12389 start_enum (name)
12390      tree name;
12391 {
12392   register tree enumtype = NULL_TREE;
12393   struct binding_level *b = inner_binding_level;
12394
12395   /* We are wasting space here and putting these on the permanent_obstack so
12396      that typeid(local enum) will work correctly. */
12397   push_obstacks (&permanent_obstack, &permanent_obstack);
12398
12399   /* If this is the real definition for a previous forward reference,
12400      fill in the contents in the same object that used to be the
12401      forward reference.  */
12402
12403   if (name != NULL_TREE)
12404     enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
12405
12406   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12407     cp_error ("multiple definition of `%#T'", enumtype);
12408   else
12409     {
12410       enumtype = make_node (ENUMERAL_TYPE);
12411       pushtag (name, enumtype, 0);
12412     }
12413
12414   if (current_class_type)
12415     TREE_ADDRESSABLE (b->tags) = 1;
12416
12417   /* We don't copy this value because build_enumerator needs to do it.  */
12418   enum_next_value = integer_zero_node;
12419   enum_overflow = 0;
12420
12421   GNU_xref_decl (current_function_decl, enumtype);
12422   return enumtype;
12423 }
12424
12425 /* After processing and defining all the values of an enumeration type,
12426    install their decls in the enumeration type and finish it off.
12427    ENUMTYPE is the type object and VALUES a list of name-value pairs.
12428    Returns ENUMTYPE.  */
12429
12430 tree
12431 finish_enum (enumtype)
12432      tree enumtype;
12433 {
12434   register tree minnode = NULL_TREE, maxnode = NULL_TREE;
12435   /* Calculate the maximum value of any enumerator in this type.  */
12436
12437   tree values = TYPE_VALUES (enumtype);
12438   if (values)
12439     {
12440       tree pair;
12441
12442       for (pair = values; pair; pair = TREE_CHAIN (pair))
12443         {
12444           tree decl;
12445           tree value;
12446
12447           /* The TREE_VALUE is a CONST_DECL for this enumeration
12448              constant.  */
12449           decl = TREE_VALUE (pair);
12450
12451           /* The DECL_INITIAL will be NULL if we are processing a
12452              template declaration and this enumeration constant had no
12453              explicit initializer.  */
12454           value = DECL_INITIAL (decl);
12455           if (value && !processing_template_decl)
12456             {
12457               /* Set the TREE_TYPE for the VALUE as well.  That's so
12458                  that when we call decl_constant_value we get an
12459                  entity of the right type (but with the constant
12460                  value).  Since we shouldn't ever call
12461                  decl_constant_value on a template type, there's no
12462                  reason to do that when processing_template_decl.
12463                  And, if the expression is something like a
12464                  TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
12465                  wreak havoc on the intended type of the expression.  
12466
12467                  Of course, there's also no point in trying to compute
12468                  minimum or maximum values if we're in a template.  */
12469               TREE_TYPE (value) = enumtype;
12470
12471               if (!minnode)
12472                 minnode = maxnode = value;
12473               else if (tree_int_cst_lt (maxnode, value))
12474                 maxnode = value;
12475               else if (tree_int_cst_lt (value, minnode))
12476                 minnode = value;
12477             }
12478
12479           if (processing_template_decl) 
12480             /* If this is just a template, leave the CONST_DECL
12481                alone.  That way tsubst_copy will find CONST_DECLs for
12482                CONST_DECLs, and not INTEGER_CSTs.  */
12483             ;
12484           else
12485             /* In the list we're building up, we want the enumeration
12486                values, not the CONST_DECLs.  */
12487             TREE_VALUE (pair) = value;
12488         }
12489     }
12490   else
12491     maxnode = minnode = integer_zero_node;
12492
12493   TYPE_VALUES (enumtype) = nreverse (values);
12494
12495   if (processing_template_decl)
12496     {
12497       tree scope = current_scope ();
12498       if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12499         add_tree (build_min (TAG_DEFN, enumtype));
12500     }
12501   else
12502     {
12503       int unsignedp = tree_int_cst_sgn (minnode) >= 0;
12504       int lowprec = min_precision (minnode, unsignedp);
12505       int highprec = min_precision (maxnode, unsignedp);
12506       int precision = MAX (lowprec, highprec);
12507       tree tem;
12508
12509       TYPE_SIZE (enumtype) = NULL_TREE;
12510
12511       /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'.  */
12512
12513       TYPE_PRECISION (enumtype) = precision;
12514       if (unsignedp)
12515         fixup_unsigned_type (enumtype);
12516       else
12517         fixup_signed_type (enumtype);
12518
12519       if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
12520         /* Use the width of the narrowest normal C type which is wide
12521            enough.  */ 
12522         TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
12523                                                     (precision, 1));
12524       else
12525         TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
12526
12527       TYPE_SIZE (enumtype) = 0;
12528       layout_type (enumtype);
12529     
12530       /* Fix up all variant types of this enum type.  */
12531       for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
12532            tem = TYPE_NEXT_VARIANT (tem))
12533         {
12534           TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
12535           TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
12536           TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
12537           TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
12538           TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
12539           TYPE_MODE (tem) = TYPE_MODE (enumtype);
12540           TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
12541           TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
12542           TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
12543         }
12544
12545       /* Finish debugging output for this type.  */
12546       rest_of_type_compilation (enumtype, namespace_bindings_p ());
12547     }
12548
12549   /* In start_enum we pushed obstacks.  Here, we must pop them.  */
12550   pop_obstacks ();
12551
12552   return enumtype;
12553 }
12554
12555 /* Build and install a CONST_DECL for an enumeration constant of the
12556    enumeration type TYPE whose NAME and VALUE (if any) are provided.
12557    Assignment of sequential values by default is handled here.  */
12558
12559 tree
12560 build_enumerator (name, value, type)
12561      tree name;
12562      tree value;
12563      tree type;
12564 {
12565   tree decl, result;
12566   tree context;
12567
12568   /* Remove no-op casts from the value.  */
12569   if (value)
12570     STRIP_TYPE_NOPS (value);
12571
12572  if (! processing_template_decl)
12573    {
12574      /* Validate and default VALUE.  */
12575      if (value != NULL_TREE)
12576        {
12577          if (TREE_READONLY_DECL_P (value))
12578            value = decl_constant_value (value);
12579
12580          if (TREE_CODE (value) == INTEGER_CST)
12581            {
12582              value = default_conversion (value);
12583              constant_expression_warning (value);
12584            }
12585          else
12586            {
12587              cp_error ("enumerator value for `%D' not integer constant", name);
12588              value = NULL_TREE;
12589            }
12590        }
12591
12592      /* Default based on previous value.  */
12593      if (value == NULL_TREE && ! processing_template_decl)
12594        {
12595          value = enum_next_value;
12596          if (enum_overflow)
12597            cp_error ("overflow in enumeration values at `%D'", name);
12598        }
12599
12600      /* Remove no-op casts from the value.  */
12601      if (value)
12602        STRIP_TYPE_NOPS (value);
12603 #if 0
12604      /* To fix MAX_VAL enum consts. (bkoz)  */
12605      TREE_TYPE (value) = integer_type_node;
12606 #endif
12607    }
12608
12609  /* We always have to copy here; not all INTEGER_CSTs are unshared.
12610     Even in other cases, we will later (in finish_enum) be setting the
12611     type of VALUE.  */
12612  if (value != NULL_TREE)
12613    value = copy_node (value);
12614
12615   /* C++ associates enums with global, function, or class declarations.  */
12616  
12617  context = current_scope ();
12618  if (context && context == current_class_type)
12619    /* This enum declaration is local to the class.  */
12620    decl = build_lang_field_decl (CONST_DECL, name, type);
12621  else
12622    /* It's a global enum, or it's local to a function.  (Note local to
12623       a function could mean local to a class method.  */
12624    decl = build_decl (CONST_DECL, name, type);
12625
12626  DECL_CONTEXT (decl) = FROB_CONTEXT (context);
12627  DECL_INITIAL (decl) = value;
12628  TREE_READONLY (decl) = 1;
12629
12630  if (context && context == current_class_type)
12631    {
12632      pushdecl_class_level (decl);
12633      /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12634         on the TYPE_FIELDS list for `S'.  (That's so that you can say
12635         things like `S::i' later.)  */
12636      finish_member_declaration (decl);
12637    }
12638  else
12639    {
12640      pushdecl (decl);
12641      GNU_xref_decl (current_function_decl, decl);
12642    }
12643
12644  if (! processing_template_decl)
12645    {
12646      /* Set basis for default for next value.  */
12647      enum_next_value = build_binary_op_nodefault (PLUS_EXPR, value,
12648                                                   integer_one_node, PLUS_EXPR);
12649      enum_overflow = tree_int_cst_lt (enum_next_value, value);
12650    }
12651
12652   result = saveable_tree_cons (name, decl, NULL_TREE);
12653   return result;
12654 }
12655
12656 \f
12657 static int function_depth;
12658
12659 /* Create the FUNCTION_DECL for a function definition.
12660    DECLSPECS and DECLARATOR are the parts of the declaration;
12661    they describe the function's name and the type it returns,
12662    but twisted together in a fashion that parallels the syntax of C.
12663
12664    If PRE_PARSED_P is non-zero then DECLARATOR is really the DECL for
12665    the function we are about to process; DECLSPECS are ignored.  For
12666    example, we set PRE_PARSED_P when processing the definition of
12667    inline function that was defined in-class; the definition is
12668    actually processed when the class is complete.  In this case,
12669    PRE_PARSED_P is 2.  We also set PRE_PARSED_P when instanting the
12670    body of a template function, and when constructing thunk functions
12671    and such; in these cases PRE_PARSED_P is 1.
12672    
12673    This function creates a binding context for the function body
12674    as well as setting up the FUNCTION_DECL in current_function_decl.
12675
12676    Returns 1 on success.  If the DECLARATOR is not suitable for a function
12677    (it defines a datum instead), we return 0, which tells
12678    yyparse to report a parse error.
12679
12680    For C++, we must first check whether that datum makes any sense.
12681    For example, "class A local_a(1,2);" means that variable local_a
12682    is an aggregate of type A, which should have a constructor
12683    applied to it with the argument list [1, 2].
12684
12685    @@ There is currently no way to retrieve the storage
12686    @@ allocated to FUNCTION (or all of its parms) if we return
12687    @@ something we had previously.  */
12688
12689 int
12690 start_function (declspecs, declarator, attrs, pre_parsed_p)
12691      tree declspecs, declarator, attrs;
12692      int pre_parsed_p;
12693 {
12694   tree decl1;
12695   tree ctype = NULL_TREE;
12696   tree fntype;
12697   tree restype;
12698   extern int have_extern_spec;
12699   extern int used_extern_spec;
12700   int doing_friend = 0;
12701
12702   /* Sanity check.  */
12703   my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
12704   my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
12705
12706   /* Assume, until we see it does.  */
12707   current_function_returns_value = 0;
12708   current_function_returns_null = 0;
12709   named_labels = 0;
12710   shadowed_labels = 0;
12711   current_function_assigns_this = 0;
12712   current_function_just_assigned_this = 0;
12713   current_function_parms_stored = 0;
12714   original_result_rtx = NULL_RTX;
12715   base_init_expr = NULL_TREE;
12716   current_base_init_list = NULL_TREE;
12717   current_member_init_list = NULL_TREE;
12718   ctor_label = dtor_label = NULL_TREE;
12719   static_labelno = 0;
12720
12721   clear_temp_name ();
12722
12723   /* This should only be done once on the top most decl.  */
12724   if (have_extern_spec && !used_extern_spec)
12725     {
12726       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
12727       used_extern_spec = 1;
12728     }
12729
12730   if (pre_parsed_p)
12731     {
12732       decl1 = declarator;
12733
12734 #if 0
12735       /* What was this testing for, exactly?  */
12736       if (! DECL_ARGUMENTS (decl1)
12737           && !DECL_STATIC_FUNCTION_P (decl1)
12738           && !DECL_ARTIFICIAL (decl1)
12739           && DECL_CLASS_SCOPE_P (decl1)
12740           && TYPE_IDENTIFIER (DECL_CONTEXT (decl1))
12741           && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (DECL_CONTEXT (decl1))))
12742         {
12743           tree binding = binding_for_name (DECL_NAME (decl1), 
12744                                            current_namespace);
12745           cp_error ("redeclaration of `%#D'", decl1);
12746           if (IDENTIFIER_CLASS_VALUE (DECL_NAME (decl1)))
12747             cp_error_at ("previous declaration here", IDENTIFIER_CLASS_VALUE (DECL_NAME (decl1)));
12748           else if (BINDING_VALUE (binding))
12749             cp_error_at ("previous declaration here", BINDING_VALUE (binding));
12750         }
12751 #endif
12752
12753       fntype = TREE_TYPE (decl1);
12754       if (TREE_CODE (fntype) == METHOD_TYPE)
12755         ctype = TYPE_METHOD_BASETYPE (fntype);
12756
12757       /* ANSI C++ June 5 1992 WP 11.4.5.  A friend function defined in a
12758          class is in the (lexical) scope of the class in which it is
12759          defined.  */
12760       if (!ctype && DECL_FRIEND_P (decl1))
12761         {
12762           ctype = DECL_CLASS_CONTEXT (decl1);
12763
12764           /* CTYPE could be null here if we're dealing with a template;
12765              for example, `inline friend float foo()' inside a template
12766              will have no CTYPE set.  */
12767           if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
12768             ctype = NULL_TREE;
12769           else
12770             doing_friend = 1;
12771         }
12772
12773       last_function_parms = DECL_ARGUMENTS (decl1);
12774       last_function_parm_tags = NULL_TREE;
12775     }
12776   else
12777     {
12778       decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
12779       /* If the declarator is not suitable for a function definition,
12780          cause a syntax error.  */
12781       if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
12782
12783       fntype = TREE_TYPE (decl1);
12784
12785       restype = TREE_TYPE (fntype);
12786       if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
12787         {
12788           cp_error ("semicolon missing after declaration of `%#T'", restype);
12789           shadow_tag (build_expr_list (NULL_TREE, restype));
12790           CLASSTYPE_GOT_SEMICOLON (restype) = 1;
12791           if (TREE_CODE (fntype) == FUNCTION_TYPE)
12792             fntype = build_function_type (integer_type_node,
12793                                           TYPE_ARG_TYPES (fntype));
12794           else
12795             fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
12796                                               integer_type_node,
12797                                               TYPE_ARG_TYPES (fntype));
12798           TREE_TYPE (decl1) = fntype;
12799         }
12800
12801       if (TREE_CODE (fntype) == METHOD_TYPE)
12802         ctype = TYPE_METHOD_BASETYPE (fntype);
12803       else if (DECL_MAIN_P (decl1))
12804         {
12805           /* If this doesn't return integer_type, complain.  */
12806           if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
12807             {
12808               if (pedantic || warn_return_type)
12809                 pedwarn ("return type for `main' changed to `int'");
12810               TREE_TYPE (decl1) = fntype = default_function_type;
12811             }
12812         }
12813     }
12814
12815   /* Warn if function was previously implicitly declared
12816      (but not if we warned then).  */
12817   if (! warn_implicit
12818       && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
12819     cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
12820
12821   announce_function (decl1);
12822
12823   /* Set up current_class_type, and enter the scope of the class, if
12824      appropriate.  */
12825   if (ctype)
12826     push_nested_class (ctype, 1);
12827   else if (DECL_STATIC_FUNCTION_P (decl1))
12828     push_nested_class (DECL_CONTEXT (decl1), 2);
12829
12830   /* Now that we have entered the scope of the class, we must restore
12831      the bindings for any template parameters surrounding DECL1, if it
12832      is an inline member template.  (Order is important; consider the
12833      case where a template parameter has the same name as a field of
12834      the class.)  It is not until after this point that
12835      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
12836   if (pre_parsed_p == 2)
12837     maybe_begin_member_template_processing (decl1);
12838
12839   /* We are now in the scope of the function being defined.  */
12840   current_function_decl = decl1;
12841
12842   /* Save the parm names or decls from this function's declarator
12843      where store_parm_decls will find them.  */
12844   current_function_parms = last_function_parms;
12845   current_function_parm_tags = last_function_parm_tags;
12846
12847   if (! processing_template_decl)
12848     {
12849       /* In a fcn definition, arg types must be complete.  */
12850       require_complete_types_for_parms (DECL_ARGUMENTS (decl1));
12851
12852       if (TYPE_SIZE (complete_type (TREE_TYPE (fntype))) == NULL_TREE)
12853         {
12854           cp_error ("return-type `%#T' is an incomplete type",
12855                     TREE_TYPE (fntype));
12856
12857           /* Make it return void instead, but don't change the
12858              type of the DECL_RESULT, in case we have a named return value.  */
12859           if (ctype)
12860             TREE_TYPE (decl1)
12861               = build_cplus_method_type (build_type_variant (ctype,
12862                                                              TREE_READONLY (decl1),
12863                                                              TREE_SIDE_EFFECTS (decl1)),
12864                                          void_type_node,
12865                                          FUNCTION_ARG_CHAIN (decl1));
12866           else
12867             TREE_TYPE (decl1)
12868               = build_function_type (void_type_node,
12869                                      TYPE_ARG_TYPES (TREE_TYPE (decl1)));
12870           DECL_RESULT (decl1)
12871             = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (TREE_TYPE (fntype)));
12872           TREE_READONLY (DECL_RESULT (decl1))
12873             = CP_TYPE_CONST_P (TREE_TYPE (fntype));
12874           TREE_THIS_VOLATILE (DECL_RESULT (decl1))
12875             = CP_TYPE_VOLATILE_P (TREE_TYPE (fntype));
12876         }
12877
12878       if (TYPE_LANG_SPECIFIC (TREE_TYPE (fntype))
12879           && CLASSTYPE_ABSTRACT_VIRTUALS (TREE_TYPE (fntype)))
12880         abstract_virtuals_error (decl1, TREE_TYPE (fntype));
12881     }
12882
12883   /* Effective C++ rule 15.  See also c_expand_return.  */
12884   if (warn_ecpp
12885       && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
12886       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
12887     cp_warning ("`operator=' should return a reference to `*this'");
12888
12889   /* Make the init_value nonzero so pushdecl knows this is not tentative.
12890      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
12891   DECL_INITIAL (decl1) = error_mark_node;
12892
12893 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
12894   SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
12895 #endif
12896   
12897   /* This function exists in static storage.
12898      (This does not mean `static' in the C sense!)  */
12899   TREE_STATIC (decl1) = 1;
12900
12901   /* We must call push_template_decl after current_class_type is set
12902      up.  (If we are processing inline definitions after exiting a
12903      class scope, current_class_type will be NULL_TREE until set above
12904      by push_nested_class.)  */
12905   if (processing_template_decl)
12906     decl1 = push_template_decl (decl1);
12907
12908   /* Record the decl so that the function name is defined.
12909      If we already have a decl for this name, and it is a FUNCTION_DECL,
12910      use the old decl.  */
12911   if (!processing_template_decl && pre_parsed_p == 0)
12912     {
12913       /* A specialization is not used to guide overload resolution.  */
12914       if ((flag_guiding_decls 
12915            || !DECL_TEMPLATE_SPECIALIZATION (decl1))
12916           && ! DECL_FUNCTION_MEMBER_P (decl1))
12917         decl1 = pushdecl (decl1);
12918       else
12919         {
12920           /* We need to set the DECL_CONTEXT. */
12921           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
12922             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
12923           /* And make sure we have enough default args.  */
12924           check_default_args (decl1);
12925         }
12926       DECL_MAIN_VARIANT (decl1) = decl1;
12927       fntype = TREE_TYPE (decl1);
12928     }
12929
12930   current_function_decl = decl1;
12931
12932   if (DECL_INTERFACE_KNOWN (decl1))
12933     {
12934       tree ctx = hack_decl_function_context (decl1);
12935
12936       if (DECL_NOT_REALLY_EXTERN (decl1))
12937         DECL_EXTERNAL (decl1) = 0;
12938
12939       if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx) 
12940           && TREE_PUBLIC (ctx))
12941         /* This is a function in a local class in an extern inline
12942            function.  */
12943         comdat_linkage (decl1);
12944     }
12945   /* If this function belongs to an interface, it is public.
12946      If it belongs to someone else's interface, it is also external.
12947      It doesn't matter whether it's inline or not.  */
12948   else if (interface_unknown == 0
12949            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
12950                || flag_alt_external_templates))
12951     {
12952       if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
12953           || processing_template_decl)
12954         DECL_EXTERNAL (decl1)
12955           = (interface_only
12956              || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines));
12957       else
12958         DECL_EXTERNAL (decl1) = 0;
12959       DECL_NOT_REALLY_EXTERN (decl1) = 0;
12960       DECL_INTERFACE_KNOWN (decl1) = 1;
12961     }
12962   else
12963     {
12964       /* This is a definition, not a reference.
12965          So clear DECL_EXTERNAL.  */
12966       DECL_EXTERNAL (decl1) = 0;
12967
12968       if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
12969           && ! DECL_INTERFACE_KNOWN (decl1)
12970           /* Don't try to defer nested functions for now.  */
12971           && ! hack_decl_function_context (decl1))
12972         DECL_DEFER_OUTPUT (decl1) = 1;
12973       else
12974         DECL_INTERFACE_KNOWN (decl1) = 1;
12975     }
12976
12977   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1))
12978     {
12979       if (TREE_CODE (fntype) == METHOD_TYPE)
12980         TREE_TYPE (decl1) = fntype
12981           = build_function_type (TREE_TYPE (fntype),
12982                                  TREE_CHAIN (TYPE_ARG_TYPES (fntype)));
12983       current_function_parms = TREE_CHAIN (current_function_parms);
12984       DECL_ARGUMENTS (decl1) = current_function_parms;
12985       ctype = NULL_TREE;
12986     }
12987   restype = TREE_TYPE (fntype);
12988
12989   if (ctype)
12990     {
12991       /* If we're compiling a friend function, neither of the variables
12992          current_class_ptr nor current_class_type will have values.  */
12993       if (! doing_friend)
12994         {
12995           /* We know that this was set up by `grokclassfn'.
12996              We do not wait until `store_parm_decls', since evil
12997              parse errors may never get us to that point.  Here
12998              we keep the consistency between `current_class_type'
12999              and `current_class_ptr'.  */
13000           tree t = current_function_parms;
13001
13002           my_friendly_assert (t != NULL_TREE
13003                               && TREE_CODE (t) == PARM_DECL, 162);
13004
13005           if (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE)
13006             {
13007               int i;
13008
13009               if (! hack_decl_function_context (decl1))
13010                 temporary_allocation ();
13011               i = suspend_momentary ();
13012
13013               /* Normally, build_indirect_ref returns
13014                  current_class_ref whenever current_class_ptr is
13015                  dereferenced.  This time, however, we want it to
13016                  *create* current_class_ref, so we temporarily clear
13017                  current_class_ptr to fool it.  */
13018               current_class_ptr = NULL_TREE;
13019               current_class_ref = build_indirect_ref (t, NULL_PTR);
13020               current_class_ptr = t;
13021
13022               resume_momentary (i);
13023               if (! hack_decl_function_context (decl1))
13024                 end_temporary_allocation ();
13025             }
13026           else
13027             /* We're having a signature pointer here.  */
13028             current_class_ref = current_class_ptr = t;
13029
13030         }
13031     }
13032   else
13033     current_class_ptr = current_class_ref = NULL_TREE;
13034
13035   pushlevel (0);
13036   current_binding_level->parm_flag = 1;
13037
13038   GNU_xref_function (decl1, current_function_parms);
13039
13040   if (attrs)
13041     cplus_decl_attributes (decl1, NULL_TREE, attrs);
13042   
13043   make_function_rtl (decl1);
13044
13045   /* Promote the value to int before returning it.  */
13046   if (C_PROMOTING_INTEGER_TYPE_P (restype))
13047     restype = type_promotes_to (restype);
13048
13049   /* If this fcn was already referenced via a block-scope `extern' decl
13050      (or an implicit decl), propagate certain information about the usage.  */
13051   if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
13052     TREE_ADDRESSABLE (decl1) = 1;
13053
13054   if (DECL_RESULT (decl1) == NULL_TREE)
13055     {
13056       DECL_RESULT (decl1)
13057         = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13058       TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13059       TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
13060     }
13061
13062   /* Allocate further tree nodes temporarily during compilation
13063      of this function only.  Tiemann moved up here from bottom of fn.  */
13064   /* If this is a nested function, then we must continue to allocate RTL
13065      on the permanent obstack in case we need to inline it later.  */
13066   if (! hack_decl_function_context (decl1))
13067     temporary_allocation ();
13068
13069   if (processing_template_decl)
13070     {
13071       ++minimal_parse_mode;
13072       last_tree = DECL_SAVED_TREE (decl1)
13073         = build_nt (EXPR_STMT, void_zero_node);
13074     }
13075
13076   ++function_depth;
13077
13078   if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl1))
13079       && DECL_LANGUAGE (decl1) == lang_cplusplus)
13080     {
13081       dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13082       ctor_label = NULL_TREE;
13083     }
13084   else
13085     {
13086       dtor_label = NULL_TREE;
13087       if (DECL_CONSTRUCTOR_P (decl1))
13088         ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13089     }
13090
13091   return 1;
13092 }
13093 \f
13094 /* Called after store_parm_decls for a function-try-block.  We need to update
13095    last_parm_cleanup_insn so that the base initializers for a constructor
13096    are run within this block, not before it.  */
13097
13098 void
13099 expand_start_early_try_stmts ()
13100 {
13101   expand_start_try_stmts ();
13102   last_parm_cleanup_insn = get_last_insn ();
13103 }
13104
13105 /* Store the parameter declarations into the current function declaration.
13106    This is called after parsing the parameter declarations, before
13107    digesting the body of the function.
13108
13109    Also install to binding contour return value identifier, if any.  */
13110
13111 void
13112 store_parm_decls ()
13113 {
13114   register tree fndecl = current_function_decl;
13115   register tree parm;
13116   int parms_have_cleanups = 0;
13117   tree cleanups = NULL_TREE;
13118
13119   /* This is either a chain of PARM_DECLs (when a prototype is used).  */
13120   tree specparms = current_function_parms;
13121
13122   /* This is a list of types declared among parms in a prototype.  */
13123   tree parmtags = current_function_parm_tags;
13124
13125   /* This is a chain of any other decls that came in among the parm
13126      declarations.  If a parm is declared with  enum {foo, bar} x;
13127      then CONST_DECLs for foo and bar are put here.  */
13128   tree nonparms = NULL_TREE;
13129
13130   if (toplevel_bindings_p ())
13131     fatal ("parse errors have confused me too much");
13132
13133   /* Initialize RTL machinery.  */
13134   init_function_start (fndecl, input_filename, lineno);
13135
13136   /* Create a binding level for the parms.  */
13137   expand_start_bindings (0);
13138
13139   if (specparms != NULL_TREE)
13140     {
13141       /* This case is when the function was defined with an ANSI prototype.
13142          The parms already have decls, so we need not do anything here
13143          except record them as in effect
13144          and complain if any redundant old-style parm decls were written.  */
13145
13146       register tree next;
13147
13148       /* Must clear this because it might contain TYPE_DECLs declared
13149          at class level.  */
13150       storedecls (NULL_TREE);
13151
13152       for (parm = nreverse (specparms); parm; parm = next)
13153         {
13154           next = TREE_CHAIN (parm);
13155           if (TREE_CODE (parm) == PARM_DECL)
13156             {
13157               tree cleanup;
13158               if (DECL_NAME (parm) == NULL_TREE)
13159                 {
13160                   pushdecl (parm);
13161                 }
13162               else if (TREE_CODE (TREE_TYPE (parm)) == VOID_TYPE)
13163                 cp_error ("parameter `%D' declared void", parm);
13164               else
13165                 {
13166                   /* Now fill in DECL_REFERENCE_SLOT for any of the parm decls.
13167                      A parameter is assumed not to have any side effects.
13168                      If this should change for any reason, then this
13169                      will have to wrap the bashed reference type in a save_expr.
13170                      
13171                      Also, if the parameter type is declared to be an X
13172                      and there is an X(X&) constructor, we cannot lay it
13173                      into the stack (any more), so we make this parameter
13174                      look like it is really of reference type.  Functions
13175                      which pass parameters to this function will know to
13176                      create a temporary in their frame, and pass a reference
13177                      to that.  */
13178
13179                   if (TREE_CODE (TREE_TYPE (parm)) == REFERENCE_TYPE
13180                       && TYPE_SIZE (TREE_TYPE (TREE_TYPE (parm))))
13181                     SET_DECL_REFERENCE_SLOT (parm, convert_from_reference (parm));
13182
13183                   pushdecl (parm);
13184                 }
13185               if (! processing_template_decl
13186                   && (cleanup = maybe_build_cleanup (parm), cleanup))
13187                 {
13188                   expand_decl (parm);
13189                   parms_have_cleanups = 1;
13190
13191                   /* Keep track of the cleanups.  */
13192                   cleanups = tree_cons (parm, cleanup, cleanups);
13193                 }
13194             }
13195           else
13196             {
13197               /* If we find an enum constant or a type tag,
13198                  put it aside for the moment.  */
13199               TREE_CHAIN (parm) = NULL_TREE;
13200               nonparms = chainon (nonparms, parm);
13201             }
13202         }
13203
13204       /* Get the decls in their original chain order
13205          and record in the function.  This is all and only the
13206          PARM_DECLs that were pushed into scope by the loop above.  */
13207       DECL_ARGUMENTS (fndecl) = getdecls ();
13208
13209       storetags (chainon (parmtags, gettags ()));
13210     }
13211   else
13212     DECL_ARGUMENTS (fndecl) = NULL_TREE;
13213
13214   /* Now store the final chain of decls for the arguments
13215      as the decl-chain of the current lexical scope.
13216      Put the enumerators in as well, at the front so that
13217      DECL_ARGUMENTS is not modified.  */
13218
13219   storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
13220
13221   /* Declare __FUNCTION__ and __PRETTY_FUNCTION__ for this function.  */
13222   declare_function_name ();
13223
13224   /* Initialize the RTL code for the function.  */
13225   DECL_SAVED_INSNS (fndecl) = NULL_RTX;
13226   if (! processing_template_decl)
13227     expand_function_start (fndecl, parms_have_cleanups);
13228
13229   current_function_parms_stored = 1;
13230
13231   /* If this function is `main', emit a call to `__main'
13232      to run global initializers, etc.  */
13233   if (DECL_MAIN_P (fndecl))
13234     expand_main_function ();
13235
13236   /* Now that we have initialized the parms, we can start their
13237      cleanups.  We cannot do this before, since expand_decl_cleanup
13238      should not be called before the parm can be used.  */
13239   if (cleanups
13240       && ! processing_template_decl)      
13241     {
13242       for (cleanups = nreverse (cleanups); cleanups; cleanups = TREE_CHAIN (cleanups))
13243         {
13244           if (! expand_decl_cleanup (TREE_PURPOSE (cleanups), TREE_VALUE (cleanups)))
13245             cp_error ("parser lost in parsing declaration of `%D'",
13246                       TREE_PURPOSE (cleanups));
13247         }
13248     }
13249
13250   /* Create a binding contour which can be used to catch
13251      cleanup-generated temporaries.  Also, if the return value needs or
13252      has initialization, deal with that now.  */
13253   if (parms_have_cleanups)
13254     {
13255       pushlevel (0);
13256       expand_start_bindings (0);
13257     }
13258
13259   if (! processing_template_decl && flag_exceptions)
13260     {
13261       /* Do the starting of the exception specifications, if we have any.  */
13262       if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13263         expand_start_eh_spec ();
13264     }
13265
13266   last_parm_cleanup_insn = get_last_insn ();
13267   last_dtor_insn = get_last_insn ();
13268 }
13269
13270 /* Bind a name and initialization to the return value of
13271    the current function.  */
13272
13273 void
13274 store_return_init (return_id, init)
13275      tree return_id, init;
13276 {
13277   tree decl = DECL_RESULT (current_function_decl);
13278
13279   if (pedantic)
13280     /* Give this error as many times as there are occurrences,
13281        so that users can use Emacs compilation buffers to find
13282        and fix all such places.  */
13283     pedwarn ("ANSI C++ does not permit named return values");
13284
13285   if (return_id != NULL_TREE)
13286     {
13287       if (DECL_NAME (decl) == NULL_TREE)
13288         {
13289           DECL_NAME (decl) = return_id;
13290           DECL_ASSEMBLER_NAME (decl) = return_id;
13291         }
13292       else
13293         cp_error ("return identifier `%D' already in place", decl);
13294     }
13295
13296   /* Can't let this happen for constructors.  */
13297   if (DECL_CONSTRUCTOR_P (current_function_decl))
13298     {
13299       error ("can't redefine default return value for constructors");
13300       return;
13301     }
13302
13303   /* If we have a named return value, put that in our scope as well.  */
13304   if (DECL_NAME (decl) != NULL_TREE)
13305     {
13306       /* If this named return value comes in a register,
13307          put it in a pseudo-register.  */
13308       if (DECL_REGISTER (decl))
13309         {
13310           original_result_rtx = DECL_RTL (decl);
13311           DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
13312         }
13313
13314       /* Let `cp_finish_decl' know that this initializer is ok.  */
13315       DECL_INITIAL (decl) = init;
13316       pushdecl (decl);
13317
13318       if (minimal_parse_mode)
13319         add_tree (build_min_nt (RETURN_INIT, return_id,
13320                                 copy_to_permanent (init)));
13321       else
13322         cp_finish_decl (decl, init, NULL_TREE, 0, 0);
13323     }
13324 }
13325
13326 \f
13327 /* Finish up a function declaration and compile that function
13328    all the way to assembler language output.  The free the storage
13329    for the function definition.
13330
13331    This is called after parsing the body of the function definition.
13332    LINENO is the current line number.
13333
13334    FLAGS is a bitwise or of the following values: 
13335      1 - CALL_POPLEVEL 
13336        An extra call to poplevel (and expand_end_bindings) must be
13337        made to take care of the binding contour for the base
13338        initializers.  This is only relevant for constructors.
13339      2 - INCLASS_INLINE
13340        We just finished processing the body of an in-class inline
13341        function definition.  (This processing will have taken place
13342        after the class definition is complete.)
13343
13344    NESTED is nonzero if we were in the middle of compiling another function
13345    when we started on this one.  */
13346
13347 void
13348 finish_function (lineno, flags, nested)
13349      int lineno;
13350      int flags;
13351      int nested;
13352 {
13353   register tree fndecl = current_function_decl;
13354   tree fntype, ctype = NULL_TREE;
13355   rtx last_parm_insn, insns;
13356   /* Label to use if this function is supposed to return a value.  */
13357   tree no_return_label = NULL_TREE;
13358   tree decls = NULL_TREE;
13359   int call_poplevel = (flags & 1) != 0;
13360   int inclass_inline = (flags & 2) != 0;
13361   int in_template;
13362
13363   /* When we get some parse errors, we can end up without a
13364      current_function_decl, so cope.  */
13365   if (fndecl == NULL_TREE)
13366     return;
13367
13368   if (! nested && function_depth > 1)
13369     nested = 1;
13370
13371   fntype = TREE_TYPE (fndecl);
13372
13373 /*  TREE_READONLY (fndecl) = 1;
13374     This caused &foo to be of type ptr-to-const-function
13375     which then got a warning when stored in a ptr-to-function variable.  */
13376
13377   /* This happens on strange parse errors.  */
13378   if (! current_function_parms_stored)
13379     {
13380       call_poplevel = 0;
13381       store_parm_decls ();
13382     }
13383
13384   if (processing_template_decl)
13385     {
13386       if (DECL_CONSTRUCTOR_P (fndecl) && call_poplevel)
13387         {
13388           decls = getdecls ();
13389           expand_end_bindings (decls, decls != NULL_TREE, 0);
13390           poplevel (decls != NULL_TREE, 0, 0);
13391         }
13392     }
13393   else
13394     {
13395       if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
13396         {
13397           tree ttype = target_type (fntype);
13398           tree parmdecl;
13399
13400           if (IS_AGGR_TYPE (ttype))
13401             /* Let debugger know it should output info for this type.  */
13402             note_debug_info_needed (ttype);
13403
13404           for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
13405             {
13406               ttype = target_type (TREE_TYPE (parmdecl));
13407               if (IS_AGGR_TYPE (ttype))
13408                 /* Let debugger know it should output info for this type.  */
13409                 note_debug_info_needed (ttype);
13410             }
13411         }
13412
13413       /* Clean house because we will need to reorder insns here.  */
13414       do_pending_stack_adjust ();
13415
13416       if (dtor_label)
13417         {
13418           tree binfo = TYPE_BINFO (current_class_type);
13419           tree cond = integer_one_node;
13420           tree exprstmt;
13421           tree in_charge_node = lookup_name (in_charge_identifier, 0);
13422           tree virtual_size;
13423           int ok_to_optimize_dtor = 0;
13424           int empty_dtor = get_last_insn () == last_dtor_insn;
13425
13426           if (current_function_assigns_this)
13427             cond = build (NE_EXPR, boolean_type_node,
13428                           current_class_ptr, integer_zero_node);
13429           else
13430             {
13431               int n_baseclasses = CLASSTYPE_N_BASECLASSES (current_class_type);
13432
13433               /* If this destructor is empty, then we don't need to check
13434                  whether `this' is NULL in some cases.  */
13435               if ((flag_this_is_variable & 1) == 0)
13436                 ok_to_optimize_dtor = 1;
13437               else if (empty_dtor)
13438                 ok_to_optimize_dtor
13439                   = (n_baseclasses == 0
13440                      || (n_baseclasses == 1
13441                          && TYPE_HAS_DESTRUCTOR (TYPE_BINFO_BASETYPE (current_class_type, 0))));
13442             }
13443
13444           /* These initializations might go inline.  Protect
13445              the binding level of the parms.  */
13446           pushlevel (0);
13447           expand_start_bindings (0);
13448
13449           if (current_function_assigns_this)
13450             {
13451               current_function_assigns_this = 0;
13452               current_function_just_assigned_this = 0;
13453             }
13454
13455           /* Generate the code to call destructor on base class.
13456              If this destructor belongs to a class with virtual
13457              functions, then set the virtual function table
13458              pointer to represent the type of our base class.  */
13459
13460           /* This side-effect makes call to `build_delete' generate the
13461              code we have to have at the end of this destructor.
13462              `build_delete' will set the flag again.  */
13463           TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
13464
13465           /* These are two cases where we cannot delegate deletion.  */
13466           if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)
13467               || TYPE_GETS_REG_DELETE (current_class_type))
13468             exprstmt = build_delete (current_class_type, current_class_ref, integer_zero_node,
13469                                      LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
13470           else
13471             exprstmt = build_delete (current_class_type, current_class_ref, in_charge_node,
13472                                      LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
13473
13474           /* If we did not assign to this, then `this' is non-zero at
13475              the end of a destructor.  As a special optimization, don't
13476              emit test if this is an empty destructor.  If it does nothing,
13477              it does nothing.  If it calls a base destructor, the base
13478              destructor will perform the test.  */
13479
13480           if (exprstmt != error_mark_node
13481               && (TREE_CODE (exprstmt) != NOP_EXPR
13482                   || TREE_OPERAND (exprstmt, 0) != integer_zero_node
13483                   || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
13484             {
13485               expand_label (dtor_label);
13486               if (cond != integer_one_node)
13487                 expand_start_cond (cond, 0);
13488               if (exprstmt != void_zero_node)
13489                 /* Don't call `expand_expr_stmt' if we're not going to do
13490                    anything, since -Wall will give a diagnostic.  */
13491                 expand_expr_stmt (exprstmt);
13492
13493               /* Run destructor on all virtual baseclasses.  */
13494               if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13495                 {
13496                   tree vbases = nreverse (copy_list (CLASSTYPE_VBASECLASSES (current_class_type)));
13497                   expand_start_cond (build (BIT_AND_EXPR, integer_type_node,
13498                                             in_charge_node, integer_two_node), 0);
13499                   while (vbases)
13500                     {
13501                       if (TYPE_NEEDS_DESTRUCTOR (BINFO_TYPE (vbases)))
13502                         {
13503                           tree vb = get_vbase
13504                             (BINFO_TYPE (vbases),
13505                              TYPE_BINFO (current_class_type));
13506                           expand_expr_stmt
13507                             (build_scoped_method_call
13508                              (current_class_ref, vb, dtor_identifier,
13509                               build_expr_list (NULL_TREE, integer_zero_node)));
13510                         }
13511                       vbases = TREE_CHAIN (vbases);
13512                     }
13513                   expand_end_cond ();
13514                 }
13515
13516               do_pending_stack_adjust ();
13517               if (cond != integer_one_node)
13518                 expand_end_cond ();
13519             }
13520
13521           virtual_size = c_sizeof (current_class_type);
13522
13523           /* At the end, call delete if that's what's requested.  */
13524
13525           /* FDIS sez: At the point of definition of a virtual destructor
13526                (including an implicit definition), non-placement operator
13527                delete shall be looked up in the scope of the destructor's
13528                class and if found shall be accessible and unambiguous.
13529
13530              This is somewhat unclear, but I take it to mean that if the
13531              class only defines placement deletes we don't do anything here.
13532              So we pass LOOKUP_SPECULATIVELY; delete_sanity will complain
13533              for us if they ever try to delete one of these.  */
13534
13535           if (TYPE_GETS_REG_DELETE (current_class_type)
13536               || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13537             exprstmt = build_op_delete_call
13538               (DELETE_EXPR, current_class_ptr, virtual_size,
13539                LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
13540           else
13541             exprstmt = NULL_TREE;
13542
13543           if (exprstmt)
13544             {
13545               cond = build (BIT_AND_EXPR, integer_type_node,
13546                             in_charge_node, integer_one_node);
13547               expand_start_cond (cond, 0);
13548               expand_expr_stmt (exprstmt);
13549               expand_end_cond ();
13550             }
13551
13552           /* End of destructor.  */
13553           expand_end_bindings (NULL_TREE, getdecls () != NULL_TREE, 0);
13554           poplevel (getdecls () != NULL_TREE, 0, 0);
13555
13556           /* Back to the top of destructor.  */
13557           /* Don't execute destructor code if `this' is NULL.  */
13558
13559           start_sequence ();
13560
13561           /* If the dtor is empty, and we know there is not possible way we
13562              could use any vtable entries, before they are possibly set by
13563              a base class dtor, we don't have to setup the vtables, as we
13564              know that any base class dtoring will set up any vtables it
13565              needs.  We avoid MI, because one base class dtor can do a
13566              virtual dispatch to an overridden function that would need to
13567              have a non-related vtable set up, we cannot avoid setting up
13568              vtables in that case.  We could change this to see if there is
13569              just one vtable.  */
13570           if (! empty_dtor || TYPE_USES_COMPLEX_INHERITANCE (current_class_type))
13571             {
13572               /* Make all virtual function table pointers in non-virtual base
13573                  classes point to CURRENT_CLASS_TYPE's virtual function
13574                  tables.  */
13575               expand_direct_vtbls_init (binfo, binfo, 1, 0, current_class_ptr);
13576
13577               if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13578                 expand_indirect_vtbls_init (binfo, current_class_ref, current_class_ptr);
13579             }
13580           
13581           if (! ok_to_optimize_dtor)
13582             {
13583               cond = build_binary_op (NE_EXPR,
13584                                       current_class_ptr, integer_zero_node, 1);
13585               expand_start_cond (cond, 0);
13586             }
13587
13588           insns = get_insns ();
13589           end_sequence ();
13590
13591           last_parm_insn = get_first_nonparm_insn ();
13592           if (last_parm_insn == NULL_RTX)
13593             last_parm_insn = get_last_insn ();
13594           else
13595             last_parm_insn = previous_insn (last_parm_insn);
13596
13597           emit_insns_after (insns, last_parm_insn);
13598
13599           if (! ok_to_optimize_dtor)
13600             expand_end_cond ();
13601         }
13602       else if (current_function_assigns_this)
13603         {
13604           /* Does not need to call emit_base_init, because
13605              that is done (if needed) just after assignment to this
13606              is seen.  */
13607
13608           if (DECL_CONSTRUCTOR_P (current_function_decl))
13609             {
13610               end_protect_partials ();
13611               expand_label (ctor_label);
13612               ctor_label = NULL_TREE;
13613
13614               if (call_poplevel)
13615                 {
13616                   decls = getdecls ();
13617                   expand_end_bindings (decls, decls != NULL_TREE, 0);
13618                   poplevel (decls != NULL_TREE, 0, 0);
13619                 }
13620               /* c_expand_return knows to return 'this' from a constructor.  */
13621               c_expand_return (NULL_TREE);
13622             }
13623           else if (TREE_CODE (TREE_TYPE (DECL_RESULT (current_function_decl))) != VOID_TYPE
13624                    && return_label != NULL_RTX)
13625             no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13626
13627           current_function_assigns_this = 0;
13628           current_function_just_assigned_this = 0;
13629           base_init_expr = NULL_TREE;
13630         }
13631       else if (DECL_CONSTRUCTOR_P (fndecl))
13632         {
13633           tree cond = NULL_TREE, thenclause = NULL_TREE;
13634           /* Allow constructor for a type to get a new instance of the object
13635              using `build_new'.  */
13636           tree abstract_virtuals = CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type);
13637           CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = NULL_TREE;
13638
13639           DECL_RETURNS_FIRST_ARG (fndecl) = 1;
13640
13641           if (flag_this_is_variable > 0)
13642             {
13643               cond = build_binary_op (EQ_EXPR,
13644                                       current_class_ptr, integer_zero_node, 1);
13645               thenclause = build_modify_expr (current_class_ptr, NOP_EXPR,
13646                                               build_new (NULL_TREE, current_class_type, void_type_node, 0));
13647             }
13648
13649           CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = abstract_virtuals;
13650
13651           start_sequence ();
13652
13653           if (flag_this_is_variable > 0)
13654             {
13655               expand_start_cond (cond, 0);
13656               expand_expr_stmt (thenclause);
13657               expand_end_cond ();
13658             }
13659
13660           /* Emit insns from `emit_base_init' which sets up virtual
13661              function table pointer(s).  */
13662           if (base_init_expr)
13663             {
13664               expand_expr_stmt (base_init_expr);
13665               base_init_expr = NULL_TREE;
13666             }
13667
13668           insns = get_insns ();
13669           end_sequence ();
13670
13671           /* This is where the body of the constructor begins.  */
13672
13673           emit_insns_after (insns, last_parm_cleanup_insn);
13674
13675           end_protect_partials ();
13676
13677           /* This is where the body of the constructor ends.  */
13678           expand_label (ctor_label);
13679           ctor_label = NULL_TREE;
13680
13681           if (call_poplevel)
13682             {
13683               decls = getdecls ();
13684               expand_end_bindings (decls, decls != NULL_TREE, 0);
13685               poplevel (decls != NULL_TREE, 1, 0);
13686             }
13687
13688           /* c_expand_return knows to return 'this' from a constructor.  */
13689           c_expand_return (NULL_TREE);
13690
13691           current_function_assigns_this = 0;
13692           current_function_just_assigned_this = 0;
13693         }
13694       else if (DECL_MAIN_P (fndecl))
13695         {
13696           /* Make it so that `main' always returns 0 by default.  */
13697 #ifdef VMS
13698           c_expand_return (integer_one_node);
13699 #else
13700           c_expand_return (integer_zero_node);
13701 #endif
13702         }
13703       else if (return_label != NULL_RTX
13704                && current_function_return_value == NULL_TREE
13705                && ! DECL_NAME (DECL_RESULT (current_function_decl)))
13706         no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13707
13708       if (flag_exceptions)
13709         expand_exception_blocks ();
13710
13711       /* If this function is supposed to return a value, ensure that
13712          we do not fall into the cleanups by mistake.  The end of our
13713          function will look like this:
13714          
13715          user code (may have return stmt somewhere)
13716          goto no_return_label
13717          cleanup_label:
13718          cleanups
13719          goto return_label
13720          no_return_label:
13721          NOTE_INSN_FUNCTION_END
13722          return_label:
13723          things for return
13724          
13725          If the user omits a return stmt in the USER CODE section, we
13726          will have a control path which reaches NOTE_INSN_FUNCTION_END.
13727          Otherwise, we won't.  */
13728       if (no_return_label)
13729         {
13730           DECL_CONTEXT (no_return_label) = fndecl;
13731           DECL_INITIAL (no_return_label) = error_mark_node;
13732           DECL_SOURCE_FILE (no_return_label) = input_filename;
13733           DECL_SOURCE_LINE (no_return_label) = lineno;
13734           expand_goto (no_return_label);
13735         }
13736
13737       if (cleanup_label)
13738         {
13739           /* Remove the binding contour which is used
13740              to catch cleanup-generated temporaries.  */
13741           expand_end_bindings (0, 0, 0);
13742           poplevel (0, 0, 0);
13743
13744           /* Emit label at beginning of cleanup code for parameters.  */
13745           emit_label (cleanup_label);
13746         }
13747
13748       /* Get return value into register if that's where it's supposed to be.  */
13749       if (original_result_rtx)
13750         fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
13751
13752       /* Finish building code that will trigger warnings if users forget
13753          to make their functions return values.  */
13754       if (no_return_label || cleanup_label)
13755         emit_jump (return_label);
13756       if (no_return_label)
13757         {
13758           /* We don't need to call `expand_*_return' here because we
13759              don't need any cleanups here--this path of code is only
13760              for error checking purposes.  */
13761           expand_label (no_return_label);
13762         }
13763
13764       /* Generate rtl for function exit.  */
13765       expand_function_end (input_filename, lineno, 1);
13766     }
13767   
13768   /* Must mark the RESULT_DECL as being in this function.  */
13769   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
13770
13771   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
13772      to the FUNCTION_DECL node itself.  */
13773   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
13774
13775   /* If we're processing a template, squirrel away the definition
13776      until we do an instantiation.  */
13777   if (processing_template_decl)
13778     {
13779       --minimal_parse_mode;
13780       DECL_SAVED_TREE (fndecl) = TREE_CHAIN (DECL_SAVED_TREE (fndecl));
13781       /* We have to save this value here in case
13782          maybe_end_member_template_processing decides to pop all the
13783          template parameters.  */
13784       in_template = 1;
13785     }
13786   else
13787     in_template = 0;
13788
13789   /* This must come after expand_function_end because cleanups might
13790      have declarations (from inline functions) that need to go into
13791      this function's blocks.  */
13792   if (current_binding_level->parm_flag != 1)
13793     my_friendly_abort (122);
13794   poplevel (1, 0, 1);
13795
13796   /* If this is a in-class inline definition, we may have to pop the
13797      bindings for the template parameters that we added in
13798      maybe_begin_member_template_processing when start_function was
13799      called.  */
13800   if (inclass_inline)
13801     maybe_end_member_template_processing ();
13802
13803   /* Reset scope for C++: if we were in the scope of a class,
13804      then when we finish this function, we are not longer so.
13805      This cannot be done until we know for sure that no more
13806      class members will ever be referenced in this function
13807      (i.e., calls to destructors).  */
13808   if (current_class_name)
13809     {
13810       ctype = current_class_type;
13811       pop_nested_class (1);
13812     }
13813
13814   if (!in_template)
13815     {
13816       int saved_flag_keep_inline_functions =
13817         flag_keep_inline_functions;
13818
13819       /* So we can tell if jump_optimize sets it to 1.  */
13820       can_reach_end = 0;
13821
13822       if (DECL_CONTEXT (fndecl) != NULL_TREE
13823           && hack_decl_function_context (fndecl))
13824         /* Trick rest_of_compilation into not deferring output of this
13825            function, even if it is inline, since the rtl_obstack for
13826            this function is the function_obstack of the enclosing
13827            function and will be deallocated when the enclosing
13828            function is gone.  See save_tree_status.  */
13829         flag_keep_inline_functions = 1;
13830
13831       /* Run the optimizers and output the assembler code for this
13832          function.  */
13833
13834       if (DECL_ARTIFICIAL (fndecl))
13835         {
13836           /* Do we really *want* to inline this synthesized method?  */
13837
13838           int save_fif = flag_inline_functions;
13839           flag_inline_functions = 1;
13840
13841           /* Turn off DECL_INLINE for the moment so function_cannot_inline_p
13842              will check our size.  */
13843           DECL_INLINE (fndecl) = 0;
13844
13845           rest_of_compilation (fndecl);
13846           flag_inline_functions = save_fif;
13847         }
13848       else
13849         rest_of_compilation (fndecl);
13850
13851       flag_keep_inline_functions = saved_flag_keep_inline_functions;
13852
13853       if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
13854         {
13855           /* Set DECL_EXTERNAL so that assemble_external will be called as
13856              necessary.  We'll clear it again in finish_file.  */
13857           if (! DECL_EXTERNAL (fndecl))
13858             DECL_NOT_REALLY_EXTERN (fndecl) = 1;
13859           DECL_EXTERNAL (fndecl) = 1;
13860           mark_inline_for_output (fndecl);
13861         }
13862
13863       if (ctype && TREE_ASM_WRITTEN (fndecl))
13864         note_debug_info_needed (ctype);
13865
13866       current_function_returns_null |= can_reach_end;
13867
13868       /* Since we don't normally go through c_expand_return for constructors,
13869          this normally gets the wrong value.
13870          Also, named return values have their return codes emitted after
13871          NOTE_INSN_FUNCTION_END, confusing jump.c.  */
13872       if (DECL_CONSTRUCTOR_P (fndecl)
13873           || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
13874         current_function_returns_null = 0;
13875
13876       if (TREE_THIS_VOLATILE (fndecl) && current_function_returns_null)
13877         cp_warning ("`noreturn' function `%D' does return", fndecl);
13878       else if ((warn_return_type || pedantic)
13879                && current_function_returns_null
13880                && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE)
13881         {
13882           /* If this function returns non-void and control can drop through,
13883              complain.  */
13884           cp_warning ("control reaches end of non-void function `%D'", fndecl);
13885         }
13886       /* With just -W, complain only if function returns both with
13887          and without a value.  */
13888       else if (extra_warnings
13889                && current_function_returns_value && current_function_returns_null)
13890         warning ("this function may return with or without a value");
13891     }
13892
13893   --function_depth;
13894
13895   /* Free all the tree nodes making up this function.  */
13896   /* Switch back to allocating nodes permanently
13897      until we start another function.  */
13898   if (! nested)
13899     permanent_allocation (1);
13900
13901   if (DECL_SAVED_INSNS (fndecl) == NULL_RTX)
13902     {
13903       tree t;
13904
13905       /* Stop pointing to the local nodes about to be freed.  */
13906       /* But DECL_INITIAL must remain nonzero so we know this
13907          was an actual function definition.  */
13908       DECL_INITIAL (fndecl) = error_mark_node;
13909       for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
13910         DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
13911     }
13912
13913   if (DECL_STATIC_CONSTRUCTOR (fndecl))
13914     static_ctors = perm_tree_cons (NULL_TREE, fndecl, static_ctors);
13915   if (DECL_STATIC_DESTRUCTOR (fndecl))
13916     static_dtors = perm_tree_cons (NULL_TREE, fndecl, static_dtors);
13917
13918   if (! nested)
13919     {
13920       /* Let the error reporting routines know that we're outside a
13921          function.  For a nested function, this value is used in
13922          pop_cp_function_context and then reset via pop_function_context.  */
13923       current_function_decl = NULL_TREE;
13924     }
13925
13926   named_label_uses = NULL;
13927   current_class_ptr = NULL_TREE;
13928   current_class_ref = NULL_TREE;
13929 }
13930 \f
13931 /* Create the FUNCTION_DECL for a function definition.
13932    DECLSPECS and DECLARATOR are the parts of the declaration;
13933    they describe the return type and the name of the function,
13934    but twisted together in a fashion that parallels the syntax of C.
13935
13936    This function creates a binding context for the function body
13937    as well as setting up the FUNCTION_DECL in current_function_decl.
13938
13939    Returns a FUNCTION_DECL on success.
13940
13941    If the DECLARATOR is not suitable for a function (it defines a datum
13942    instead), we return 0, which tells yyparse to report a parse error.
13943
13944    May return void_type_node indicating that this method is actually
13945    a friend.  See grokfield for more details.
13946
13947    Came here with a `.pushlevel' .
13948
13949    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
13950    CHANGES TO CODE IN `grokfield'.  */
13951
13952 tree
13953 start_method (declspecs, declarator, attrlist)
13954      tree declarator, declspecs, attrlist;
13955 {
13956   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
13957                                 attrlist);
13958
13959   /* Something too ugly to handle.  */
13960   if (fndecl == NULL_TREE)
13961     return NULL_TREE;
13962
13963   /* Pass friends other than inline friend functions back.  */
13964   if (fndecl == void_type_node)
13965     return fndecl;
13966
13967   if (TREE_CODE (fndecl) != FUNCTION_DECL)
13968     /* Not a function, tell parser to report parse error.  */
13969     return NULL_TREE;
13970
13971   if (IS_SIGNATURE (current_class_type))
13972     IS_DEFAULT_IMPLEMENTATION (fndecl) = 1;
13973
13974   if (DECL_IN_AGGR_P (fndecl))
13975     {
13976       if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
13977         {
13978           if (DECL_CONTEXT (fndecl) 
13979               && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
13980             cp_error ("`%D' is already defined in class %s", fndecl,
13981                              TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
13982         }
13983       return void_type_node;
13984     }
13985
13986   check_template_shadow (fndecl);
13987
13988   DECL_THIS_INLINE (fndecl) = 1;
13989
13990   if (flag_default_inline)
13991     DECL_INLINE (fndecl) = 1;
13992
13993   /* We process method specializations in finish_struct_1.  */
13994   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
13995     fndecl = push_template_decl (fndecl);
13996
13997   /* We read in the parameters on the maybepermanent_obstack,
13998      but we won't be getting back to them until after we
13999      may have clobbered them.  So the call to preserve_data
14000      will keep them safe.  */
14001   preserve_data ();
14002
14003   if (! DECL_FRIEND_P (fndecl))
14004     {
14005       if (TREE_CHAIN (fndecl))
14006         {
14007           fndecl = copy_node (fndecl);
14008           TREE_CHAIN (fndecl) = NULL_TREE;
14009         }
14010
14011       if (DECL_CONSTRUCTOR_P (fndecl))
14012         {
14013           if (! grok_ctor_properties (current_class_type, fndecl))
14014             return void_type_node;
14015         }
14016       else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
14017         grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
14018     }
14019
14020   cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0, 0);
14021
14022   /* Make a place for the parms */
14023   pushlevel (0);
14024   current_binding_level->parm_flag = 1;
14025   
14026   DECL_IN_AGGR_P (fndecl) = 1;
14027   return fndecl;
14028 }
14029
14030 /* Go through the motions of finishing a function definition.
14031    We don't compile this method until after the whole class has
14032    been processed.
14033
14034    FINISH_METHOD must return something that looks as though it
14035    came from GROKFIELD (since we are defining a method, after all).
14036
14037    This is called after parsing the body of the function definition.
14038    STMTS is the chain of statements that makes up the function body.
14039
14040    DECL is the ..._DECL that `start_method' provided.  */
14041
14042 tree
14043 finish_method (decl)
14044      tree decl;
14045 {
14046   register tree fndecl = decl;
14047   tree old_initial;
14048
14049   register tree link;
14050
14051   if (decl == void_type_node)
14052     return decl;
14053
14054   old_initial = DECL_INITIAL (fndecl);
14055
14056   /* Undo the level for the parms (from start_method).
14057      This is like poplevel, but it causes nothing to be
14058      saved.  Saving information here confuses symbol-table
14059      output routines.  Besides, this information will
14060      be correctly output when this method is actually
14061      compiled.  */
14062
14063   /* Clear out the meanings of the local variables of this level;
14064      also record in each decl which block it belongs to.  */
14065
14066   for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
14067     {
14068       if (DECL_NAME (link) != NULL_TREE)
14069         pop_binding (DECL_NAME (link), link);
14070       my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
14071       DECL_CONTEXT (link) = NULL_TREE;
14072     }
14073
14074   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
14075                       (HOST_WIDE_INT) current_binding_level->level_chain,
14076                       current_binding_level->parm_flag,
14077                       current_binding_level->keep);
14078
14079   poplevel (0, 0, 0);
14080
14081   DECL_INITIAL (fndecl) = old_initial;
14082
14083   /* We used to check if the context of FNDECL was different from
14084      current_class_type as another way to get inside here.  This didn't work
14085      for String.cc in libg++.  */
14086   if (DECL_FRIEND_P (fndecl))
14087     {
14088       CLASSTYPE_INLINE_FRIENDS (current_class_type)
14089         = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
14090       decl = void_type_node;
14091     }
14092
14093   return decl;
14094 }
14095 \f
14096 /* Called when a new struct TYPE is defined.
14097    If this structure or union completes the type of any previous
14098    variable declaration, lay it out and output its rtl.  */
14099
14100 void
14101 hack_incomplete_structures (type)
14102      tree type;
14103 {
14104   tree *list;
14105
14106   if (current_binding_level->incomplete == NULL_TREE)
14107     return;
14108
14109   if (!type) /* Don't do this for class templates.  */
14110     return;
14111
14112   for (list = &current_binding_level->incomplete; *list; )
14113     {
14114       tree decl = TREE_VALUE (*list);
14115       if ((decl && TREE_TYPE (decl) == type)
14116           || (TREE_TYPE (decl)
14117               && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14118               && TREE_TYPE (TREE_TYPE (decl)) == type))
14119         {
14120           int toplevel = toplevel_bindings_p ();
14121           if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14122               && TREE_TYPE (TREE_TYPE (decl)) == type)
14123             layout_type (TREE_TYPE (decl));
14124           layout_decl (decl, 0);
14125           rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
14126           if (! toplevel)
14127             {
14128               tree cleanup;
14129               expand_decl (decl);
14130               cleanup = maybe_build_cleanup (decl);
14131               expand_decl_init (decl);
14132               if (! expand_decl_cleanup (decl, cleanup))
14133                 cp_error ("parser lost in parsing declaration of `%D'",
14134                           decl);
14135             }
14136           *list = TREE_CHAIN (*list);
14137         }
14138       else
14139         list = &TREE_CHAIN (*list);
14140     }
14141 }
14142
14143 /* If DECL is of a type which needs a cleanup, build that cleanup here.
14144    See build_delete for information about AUTO_DELETE.
14145
14146    Don't build these on the momentary obstack; they must live
14147    the life of the binding contour.  */
14148
14149 static tree
14150 maybe_build_cleanup_1 (decl, auto_delete)
14151      tree decl, auto_delete;
14152 {
14153   tree type = TREE_TYPE (decl);
14154   if (TYPE_NEEDS_DESTRUCTOR (type))
14155     {
14156       int temp = 0, flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
14157       tree rval;
14158
14159       if (TREE_CODE (decl) != PARM_DECL)
14160         temp = suspend_momentary ();
14161
14162       if (TREE_CODE (type) == ARRAY_TYPE)
14163         rval = decl;
14164       else
14165         {
14166           mark_addressable (decl);
14167           rval = build_unary_op (ADDR_EXPR, decl, 0);
14168         }
14169
14170       /* Optimize for space over speed here.  */
14171       if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14172           || flag_expensive_optimizations)
14173         flags |= LOOKUP_NONVIRTUAL;
14174
14175       rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
14176
14177       if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14178           && ! TYPE_HAS_DESTRUCTOR (type))
14179         rval = build_compound_expr (expr_tree_cons (NULL_TREE, rval,
14180                                                build_expr_list (NULL_TREE, build_vbase_delete (type, decl))));
14181
14182       if (TREE_CODE (decl) != PARM_DECL)
14183         resume_momentary (temp);
14184
14185       return rval;
14186     }
14187   return 0;
14188 }
14189
14190 /* If DECL is of a type which needs a cleanup, build that cleanup
14191    here.  The cleanup does free the storage with a call to delete.  */
14192
14193 tree
14194 maybe_build_cleanup_and_delete (decl)
14195      tree decl;
14196 {
14197   return maybe_build_cleanup_1 (decl, integer_three_node);
14198 }
14199
14200 /* If DECL is of a type which needs a cleanup, build that cleanup
14201    here.  The cleanup does not free the storage with a call a delete.  */
14202
14203 tree
14204 maybe_build_cleanup (decl)
14205      tree decl;
14206 {
14207   return maybe_build_cleanup_1 (decl, integer_two_node);
14208 }
14209 \f
14210 /* Expand a C++ expression at the statement level.
14211    This is needed to ferret out nodes which have UNKNOWN_TYPE.
14212    The C++ type checker should get all of these out when
14213    expressions are combined with other, type-providing, expressions,
14214    leaving only orphan expressions, such as:
14215
14216    &class::bar;         / / takes its address, but does nothing with it.  */
14217
14218 void
14219 cplus_expand_expr_stmt (exp)
14220      tree exp;
14221 {
14222   if (processing_template_decl)
14223     {
14224       add_tree (build_min_nt (EXPR_STMT, exp));
14225       return;
14226     }
14227
14228   /* Arrange for all temps to disappear.  */
14229   expand_start_target_temps ();
14230
14231   if (TREE_TYPE (exp) == unknown_type_node)
14232     {
14233       if (TREE_CODE (exp) == COMPONENT_REF)
14234         error ("invalid reference to a member function name, did you forget the ()?");
14235       else
14236         error ("address of overloaded function with no contextual type information");
14237     }
14238   else
14239     {
14240       if (TREE_CODE (exp) == FUNCTION_DECL)
14241         {
14242           cp_warning ("reference, not call, to function `%D'", exp);
14243           warning ("at this point in file");
14244         }
14245
14246 #if 0
14247       /* We should do this eventually, but right now this causes regex.o from
14248          libg++ to miscompile, and tString to core dump.  */
14249       exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
14250 #endif
14251
14252       /* Strip unused implicit INDIRECT_REFs of references.  */
14253       if (TREE_CODE (exp) == INDIRECT_REF
14254           && TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 0))) == REFERENCE_TYPE)
14255         exp = TREE_OPERAND (exp, 0);
14256
14257       /* If we don't do this, we end up down inside expand_expr
14258          trying to do TYPE_MODE on the ERROR_MARK, and really
14259          go outside the bounds of the type.  */
14260       if (exp != error_mark_node)
14261         expand_expr_stmt (break_out_cleanups (exp));
14262     }
14263
14264   /* Clean up any pending cleanups.  This happens when a function call
14265      returns a cleanup-needing value that nobody uses.  */
14266   expand_end_target_temps ();
14267 }
14268
14269 /* When a stmt has been parsed, this function is called.
14270
14271    Currently, this function only does something within a
14272    constructor's scope: if a stmt has just assigned to this,
14273    and we are in a derived class, we call `emit_base_init'.  */
14274
14275 void
14276 finish_stmt ()
14277 {
14278   extern struct nesting *cond_stack, *loop_stack, *case_stack;
14279
14280   
14281   if (current_function_assigns_this
14282       || ! current_function_just_assigned_this)
14283     return;
14284   if (DECL_CONSTRUCTOR_P (current_function_decl))
14285     {
14286       /* Constructors must wait until we are out of control
14287          zones before calling base constructors.  */
14288       if (cond_stack || loop_stack || case_stack)
14289         return;
14290       expand_expr_stmt (base_init_expr);
14291       check_base_init (current_class_type);
14292     }
14293   current_function_assigns_this = 1;
14294 }
14295
14296 /* Change a static member function definition into a FUNCTION_TYPE, instead
14297    of the METHOD_TYPE that we create when it's originally parsed.
14298
14299    WARNING: DO NOT pass &TREE_TYPE (decl) to FN or &TYPE_ARG_TYPES
14300    (TREE_TYPE (decl)) to ARGTYPES, as doing so will corrupt the types of
14301    other decls.  Either pass the addresses of local variables or NULL.  */
14302
14303 void
14304 revert_static_member_fn (decl, fn, argtypes)
14305      tree *decl, *fn, *argtypes;
14306 {
14307   tree tmp;
14308   tree function = fn ? *fn : TREE_TYPE (*decl);
14309   tree args = argtypes ? *argtypes : TYPE_ARG_TYPES (function);
14310
14311   if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args))) 
14312       != TYPE_UNQUALIFIED)
14313     cp_error ("static member function `%#D' declared with type qualifiers", 
14314               *decl);
14315
14316   args = TREE_CHAIN (args);
14317   tmp = build_function_type (TREE_TYPE (function), args);
14318   tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
14319   tmp = build_exception_variant (tmp,
14320                                  TYPE_RAISES_EXCEPTIONS (function));
14321   TREE_TYPE (*decl) = tmp;
14322   if (DECL_ARGUMENTS (*decl))
14323     DECL_ARGUMENTS (*decl) = TREE_CHAIN (DECL_ARGUMENTS (*decl));
14324   DECL_STATIC_FUNCTION_P (*decl) = 1;
14325   if (fn)
14326     *fn = tmp;
14327   if (argtypes)
14328     *argtypes = args;
14329 }
14330
14331 int
14332 id_in_current_class (id)
14333      tree id;
14334 {
14335   return !!purpose_member (id, class_binding_level->class_shadowed);
14336 }
14337
14338 struct cp_function
14339 {
14340   int returns_value;
14341   int returns_null;
14342   int assigns_this;
14343   int just_assigned_this;
14344   int parms_stored;
14345   int temp_name_counter;
14346   tree named_labels;
14347   struct named_label_list *named_label_uses;
14348   tree shadowed_labels;
14349   tree ctor_label;
14350   tree dtor_label;
14351   rtx last_dtor_insn;
14352   rtx last_parm_cleanup_insn;
14353   tree base_init_list;
14354   tree member_init_list;
14355   tree base_init_expr;
14356   tree current_class_ptr;
14357   tree current_class_ref;
14358   rtx result_rtx;
14359   struct cp_function *next;
14360   struct binding_level *binding_level;
14361   int static_labelno;
14362 };
14363
14364 static struct cp_function *cp_function_chain;
14365
14366 extern int temp_name_counter;
14367
14368 /* Save and reinitialize the variables
14369    used during compilation of a C++ function.  */
14370
14371 void
14372 push_cp_function_context (context)
14373      tree context;
14374 {
14375   struct cp_function *p
14376     = (struct cp_function *) xmalloc (sizeof (struct cp_function));
14377
14378   push_function_context_to (context);
14379
14380   p->next = cp_function_chain;
14381   cp_function_chain = p;
14382
14383   p->named_labels = named_labels;
14384   p->named_label_uses = named_label_uses;
14385   p->shadowed_labels = shadowed_labels;
14386   p->returns_value = current_function_returns_value;
14387   p->returns_null = current_function_returns_null;
14388   p->binding_level = current_binding_level;
14389   p->ctor_label = ctor_label;
14390   p->dtor_label = dtor_label;
14391   p->last_dtor_insn = last_dtor_insn;
14392   p->last_parm_cleanup_insn = last_parm_cleanup_insn;
14393   p->assigns_this = current_function_assigns_this;
14394   p->just_assigned_this = current_function_just_assigned_this;
14395   p->parms_stored = current_function_parms_stored;
14396   p->result_rtx = original_result_rtx;
14397   p->base_init_expr = base_init_expr;
14398   p->temp_name_counter = temp_name_counter;
14399   p->base_init_list = current_base_init_list;
14400   p->member_init_list = current_member_init_list;
14401   p->current_class_ptr = current_class_ptr;
14402   p->current_class_ref = current_class_ref;
14403   p->static_labelno = static_labelno;
14404 }
14405
14406 /* Restore the variables used during compilation of a C++ function.  */
14407
14408 void
14409 pop_cp_function_context (context)
14410      tree context;
14411 {
14412   struct cp_function *p = cp_function_chain;
14413   tree link;
14414
14415   /* Bring back all the labels that were shadowed.  */
14416   for (link = shadowed_labels; link; link = TREE_CHAIN (link))
14417     if (DECL_NAME (TREE_VALUE (link)) != 0)
14418       SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link)),
14419                                   TREE_VALUE (link));
14420
14421   pop_function_context_from (context);
14422
14423   cp_function_chain = p->next;
14424
14425   named_labels = p->named_labels;
14426   named_label_uses = p->named_label_uses;
14427   shadowed_labels = p->shadowed_labels;
14428   current_function_returns_value = p->returns_value;
14429   current_function_returns_null = p->returns_null;
14430   current_binding_level = p->binding_level;
14431   ctor_label = p->ctor_label;
14432   dtor_label = p->dtor_label;
14433   last_dtor_insn = p->last_dtor_insn;
14434   last_parm_cleanup_insn = p->last_parm_cleanup_insn;
14435   current_function_assigns_this = p->assigns_this;
14436   current_function_just_assigned_this = p->just_assigned_this;
14437   current_function_parms_stored = p->parms_stored;
14438   original_result_rtx = p->result_rtx;
14439   base_init_expr = p->base_init_expr;
14440   temp_name_counter = p->temp_name_counter;
14441   current_base_init_list = p->base_init_list;
14442   current_member_init_list = p->member_init_list;
14443   current_class_ptr = p->current_class_ptr;
14444   current_class_ref = p->current_class_ref;
14445   static_labelno = p->static_labelno;
14446
14447   free (p);
14448 }
14449
14450 int
14451 in_function_p ()
14452 {
14453   return function_depth != 0;
14454 }