OSDN Git Service

* cp-tree.h (ANON_UNION_TYPE_P): Robustify.
[pf3gnuchains/gcc-fork.git] / gcc / cp / decl.c
1 /* Process declarations and variables for C compiler.
2    Copyright (C) 1988, 92-98, 1999 Free Software Foundation, Inc.
3    Contributed by Michael Tiemann (tiemann@cygnus.com)
4
5 This file is part of GNU CC.
6
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING.  If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA.  */
21
22
23 /* Process declarations and symbol lookup for C front end.
24    Also constructs types; the standard scalar types at initialization,
25    and structure, union, array and enum types when they are declared.  */
26
27 /* ??? not all decl nodes are given the most useful possible
28    line numbers.  For example, the CONST_DECLs for enum values.  */
29
30 #include "config.h"
31 #include "system.h"
32 #include "tree.h"
33 #include "rtl.h"
34 #include "flags.h"
35 #include "cp-tree.h"
36 #include "decl.h"
37 #include "lex.h"
38 #include <signal.h>
39 #include "obstack.h"
40 #include "defaults.h"
41 #include "output.h"
42 #include "except.h"
43 #include "toplev.h"
44 #include "../hash.h"
45
46 #define obstack_chunk_alloc xmalloc
47 #define obstack_chunk_free free
48
49 extern tree builtin_return_address_fndecl;
50
51 extern struct obstack permanent_obstack;
52 extern struct obstack* saveable_obstack;
53
54 extern int current_class_depth;
55
56 extern tree static_ctors, static_dtors;
57
58 extern int static_labelno;
59
60 extern tree current_namespace;
61 extern tree global_namespace;
62
63 extern void (*print_error_function) PROTO((char *));
64
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
139 static struct stack_level *push_decl_level PROTO((struct stack_level *,
140                                                   struct obstack *));
141 static void push_binding_level PROTO((struct binding_level *, int,
142                                       int));
143 static void pop_binding_level PROTO((void));
144 static void suspend_binding_level PROTO((void));
145 static void resume_binding_level PROTO((struct binding_level *));
146 static struct binding_level *make_binding_level PROTO((void));
147 static void declare_namespace_level PROTO((void));
148 static void signal_catch PROTO((int)) ATTRIBUTE_NORETURN;
149 static void storedecls PROTO((tree));
150 static void storetags PROTO((tree));
151 static void require_complete_types_for_parms PROTO((tree));
152 static void push_overloaded_decl_1 PROTO((tree));
153 static int ambi_op_p PROTO((tree));
154 static int unary_op_p PROTO((tree));
155 static tree store_bindings PROTO((tree, tree));
156 static tree lookup_tag_reverse PROTO((tree, tree));
157 static tree obscure_complex_init PROTO((tree, tree));
158 static tree maybe_build_cleanup_1 PROTO((tree, tree));
159 static tree lookup_name_real PROTO((tree, int, int, int));
160 static void warn_extern_redeclared_static PROTO((tree, tree));
161 static void grok_reference_init PROTO((tree, tree, tree));
162 static tree grokfndecl PROTO((tree, tree, tree, tree, int,
163                               enum overload_flags, tree,
164                               tree, tree, int, int, int, int, int, int, tree));
165 static tree grokvardecl PROTO((tree, tree, RID_BIT_TYPE *, int, int, tree));
166 static tree lookup_tag PROTO((enum tree_code, tree,
167                               struct binding_level *, int));
168 static void set_identifier_type_value_with_scope
169         PROTO((tree, tree, struct binding_level *));
170 static void record_builtin_type PROTO((enum rid, char *, tree));
171 static void record_unknown_type PROTO((tree, char *));
172 static int member_function_or_else PROTO((tree, tree, char *));
173 static void bad_specifiers PROTO((tree, char *, int, int, int, int,
174                                   int));
175 static void lang_print_error_function PROTO((char *));
176 static tree maybe_process_template_type_declaration PROTO((tree, int, struct binding_level*));
177 static void check_for_uninitialized_const_var PROTO((tree));
178 static unsigned long typename_hash PROTO((hash_table_key));
179 static boolean typename_compare PROTO((hash_table_key, hash_table_key));
180 static void push_binding PROTO((tree, tree, struct binding_level*));
181 static void add_binding PROTO((tree, tree));
182 static void pop_binding PROTO((tree, tree));
183 static tree local_variable_p PROTO((tree));
184
185 #if defined (DEBUG_CP_BINDING_LEVELS)
186 static void indent PROTO((void));
187 #endif
188
189 /* A node which has tree code ERROR_MARK, and whose type is itself.
190    All erroneous expressions are replaced with this node.  All functions
191    that accept nodes as arguments should avoid generating error messages
192    if this node is one of the arguments, since it is undesirable to get
193    multiple error messages from one error in the input.  */
194
195 tree error_mark_node;
196
197 /* Erroneous argument lists can use this *IFF* they do not modify it.  */
198 tree error_mark_list;
199
200 /* INTEGER_TYPE and REAL_TYPE nodes for the standard data types */
201
202 tree short_integer_type_node;
203 tree integer_type_node;
204 tree long_integer_type_node;
205 tree long_long_integer_type_node;
206
207 tree short_unsigned_type_node;
208 tree unsigned_type_node;
209 tree long_unsigned_type_node;
210 tree long_long_unsigned_type_node;
211
212 tree ptrdiff_type_node;
213
214 tree unsigned_char_type_node;
215 tree signed_char_type_node;
216 tree char_type_node;
217 tree wchar_type_node;
218 tree signed_wchar_type_node;
219 tree unsigned_wchar_type_node;
220
221 tree wchar_decl_node;
222
223 tree float_type_node;
224 tree double_type_node;
225 tree long_double_type_node;
226
227 tree complex_integer_type_node;
228 tree complex_float_type_node;
229 tree complex_double_type_node;
230 tree complex_long_double_type_node;
231
232 tree intQI_type_node;
233 tree intHI_type_node;
234 tree intSI_type_node;
235 tree intDI_type_node;
236 #if HOST_BITS_PER_WIDE_INT >= 64
237 tree intTI_type_node;
238 #endif
239
240 tree unsigned_intQI_type_node;
241 tree unsigned_intHI_type_node;
242 tree unsigned_intSI_type_node;
243 tree unsigned_intDI_type_node;
244 #if HOST_BITS_PER_WIDE_INT >= 64
245 tree unsigned_intTI_type_node;
246 #endif
247
248 tree java_byte_type_node;
249 tree java_short_type_node;
250 tree java_int_type_node;
251 tree java_long_type_node;
252 tree java_float_type_node;
253 tree java_double_type_node;
254 tree java_char_type_node;
255 tree java_boolean_type_node;
256
257 /* A VOID_TYPE node, and the same, packaged in a TREE_LIST.  */
258
259 tree void_type_node, void_list_node;
260 tree void_zero_node;
261
262 /* Nodes for types `void *' and `const void *'.  */
263
264 tree ptr_type_node;
265 tree const_ptr_type_node;
266
267 /* Nodes for types `char *' and `const char *'.  */
268
269 tree string_type_node, const_string_type_node;
270
271 /* Type `char[256]' or something like it.
272    Used when an array of char is needed and the size is irrelevant.  */
273
274 tree char_array_type_node;
275
276 /* Type `int[256]' or something like it.
277    Used when an array of int needed and the size is irrelevant.  */
278
279 tree int_array_type_node;
280
281 /* Type `wchar_t[256]' or something like it.
282    Used when a wide string literal is created.  */
283
284 tree wchar_array_type_node;
285
286 /* The bool data type, and constants */
287 tree boolean_type_node, boolean_true_node, boolean_false_node;
288
289 /* Type `int ()' -- used for implicit declaration of functions.  */
290
291 tree default_function_type;
292
293 /* Function types `double (double)' and `double (double, double)', etc.  */
294
295 static tree double_ftype_double, double_ftype_double_double;
296 static tree int_ftype_int, long_ftype_long;
297 static tree float_ftype_float;
298 static tree ldouble_ftype_ldouble;
299
300 /* Function type `int (const void *, const void *, size_t)' */
301 static tree int_ftype_cptr_cptr_sizet;
302
303 /* C++ extensions */
304 tree vtable_entry_type;
305 tree delta_type_node;
306 #if 0
307 /* Old rtti stuff.  */
308 tree __baselist_desc_type_node;
309 tree __i_desc_type_node, __m_desc_type_node;
310 tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
311 #endif
312 tree __t_desc_type_node;
313 #if 0
314 tree __tp_desc_type_node;
315 #endif
316 tree __access_mode_type_node;
317 tree __bltn_desc_type_node, __user_desc_type_node, __class_desc_type_node;
318 tree __ptr_desc_type_node, __attr_desc_type_node, __func_desc_type_node;
319 tree __ptmf_desc_type_node, __ptmd_desc_type_node;
320 #if 0
321 /* Not needed yet?  May be needed one day?  */
322 tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
323 tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
324 tree __ptmf_desc_array_type, __ptmd_desc_array_type;
325 #endif
326
327 /* Indicates that there is a type value in some namespace, although
328    that is not necessarily in scope at the moment. */
329
330 static tree global_type_node;
331
332 tree class_star_type_node;
333 tree class_type_node, record_type_node, union_type_node, enum_type_node;
334 tree unknown_type_node;
335 tree opaque_type_node, signature_type_node;
336 tree sigtable_entry_type;
337
338 /* Array type `vtable_entry_type[]' */
339 tree vtbl_type_node;
340 tree vtbl_ptr_type_node;
341
342 /* namespace std */
343 tree std_node;
344 int in_std = 0;
345
346 /* Expect only namespace names now. */
347 static int only_namespace_names;
348
349 /* In a destructor, the point at which all derived class destroying
350    has been done, just before any base class destroying will be done.  */
351
352 tree dtor_label;
353
354 /* In a destructor, the last insn emitted after the start of the
355    function and the parms.  */
356
357 static rtx last_dtor_insn;
358
359 /* In a constructor, the last insn emitted after the start of the
360    function and the parms, the exception specification and any
361    function-try-block.  The constructor initializers are emitted after
362    this insn.  */
363
364 static rtx last_parm_cleanup_insn;
365
366 /* In a constructor, the point at which we are ready to return
367    the pointer to the initialized object.  */
368
369 tree ctor_label;
370
371 /* A FUNCTION_DECL which can call `abort'.  Not necessarily the
372    one that the user will declare, but sufficient to be called
373    by routines that want to abort the program.  */
374
375 tree abort_fndecl;
376
377 /* A FUNCTION_DECL for the default `::operator delete'.  */
378
379 tree global_delete_fndecl;
380
381 extern rtx cleanup_label, return_label;
382
383 /* If original DECL_RESULT of current function was a register,
384    but due to being an addressable named return value, would up
385    on the stack, this variable holds the named return value's
386    original location.  */
387 static rtx original_result_rtx;
388
389 /* Sequence of insns which represents base initialization.  */
390 tree base_init_expr;
391
392 /* C++: Keep these around to reduce calls to `get_identifier'.
393    Identifiers for `this' in member functions and the auto-delete
394    parameter for destructors.  */
395 tree this_identifier, in_charge_identifier;
396 tree ctor_identifier, dtor_identifier;
397 /* Used in pointer to member functions, in vtables, and in sigtables.  */
398 tree pfn_identifier, index_identifier, delta_identifier, delta2_identifier;
399 tree pfn_or_delta2_identifier, tag_identifier;
400 tree vt_off_identifier;
401
402 struct named_label_list
403 {
404   struct binding_level *binding_level;
405   tree names_in_scope;
406   tree label_decl;
407   char *filename_o_goto;
408   int lineno_o_goto;
409   struct named_label_list *next;
410 };
411
412 /* A list (chain of TREE_LIST nodes) of named label uses.
413    The TREE_PURPOSE field is the list of variables defined
414    in the label's scope defined at the point of use.
415    The TREE_VALUE field is the LABEL_DECL used.
416    The TREE_TYPE field holds `current_binding_level' at the
417    point of the label's use.
418
419    BWAHAHAAHAHahhahahahaah.  No, no, no, said the little chicken.
420
421    Look at the pretty struct named_label_list. See the pretty struct
422    with the pretty named fields that describe what they do. See the
423    pretty lack of gratuitous casts. Notice the code got a lot cleaner.
424
425    Used only for jumps to as-yet undefined labels, since
426    jumps to defined labels can have their validity checked
427    by stmt.c.  */
428
429 static struct named_label_list *named_label_uses = NULL;
430
431 /* A list of objects which have constructors or destructors
432    which reside in the global scope.  The decl is stored in
433    the TREE_VALUE slot and the initializer is stored
434    in the TREE_PURPOSE slot.  */
435 tree static_aggregates;
436
437 /* -- end of C++ */
438
439 /* Two expressions that are constants with value zero.
440    The first is of type `int', the second of type `void *'.  */
441
442 tree integer_zero_node;
443 tree null_pointer_node;
444
445 /* The value for __null (NULL), namely, a zero of an integer type with
446    the same number of bits as a pointer.  */
447 tree null_node;
448
449 /* A node for the integer constants 1, 2, and 3.  */
450
451 tree integer_one_node, integer_two_node, integer_three_node;
452
453 /* While defining an enum type, this is 1 plus the last enumerator
454    constant value.  */
455
456 static tree enum_next_value;
457
458 /* Nonzero means that there was overflow computing enum_next_value.  */
459
460 static int enum_overflow;
461
462 /* Parsing a function declarator leaves a list of parameter names
463    or a chain or parameter decls here.  */
464
465 tree last_function_parms;
466
467 /* Parsing a function declarator leaves here a chain of structure
468    and enum types declared in the parmlist.  */
469
470 static tree last_function_parm_tags;
471
472 /* After parsing the declarator that starts a function definition,
473    `start_function' puts here the list of parameter names or chain of decls.
474    `store_parm_decls' finds it here.  */
475
476 static tree current_function_parms;
477
478 /* Similar, for last_function_parm_tags.  */
479 static tree current_function_parm_tags;
480
481 /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
482    that have names.  Here so we can clear out their names' definitions
483    at the end of the function.  */
484
485 static tree named_labels;
486
487 /* A list of LABEL_DECLs from outer contexts that are currently shadowed.  */
488
489 static tree shadowed_labels;
490
491 /* The FUNCTION_DECL for the function currently being compiled,
492    or 0 if between functions.  */
493 tree current_function_decl;
494
495 /* Set to 0 at beginning of a function definition, set to 1 if
496    a return statement that specifies a return value is seen.  */
497
498 int current_function_returns_value;
499
500 /* Set to 0 at beginning of a function definition, set to 1 if
501    a return statement with no argument is seen.  */
502
503 int current_function_returns_null;
504
505 /* Set to 0 at beginning of a function definition, and whenever
506    a label (case or named) is defined.  Set to value of expression
507    returned from function when that value can be transformed into
508    a named return value.  */
509
510 tree current_function_return_value;
511
512 /* Nonzero means give `double' the same size as `float'.  */
513
514 extern int flag_short_double;
515
516 /* Nonzero means don't recognize any builtin functions.  */
517
518 extern int flag_no_builtin;
519
520 /* Nonzero means don't recognize the non-ANSI builtin functions.
521    -ansi sets this.  */
522
523 extern int flag_no_nonansi_builtin;
524
525 /* Nonzero means enable obscure ANSI features and disable GNU extensions
526    that might cause ANSI-compliant code to be miscompiled.  */
527
528 extern int flag_ansi;
529
530 /* Nonzero if we want to support huge (> 2^(sizeof(short)*8-1) bytes)
531    objects.  */
532 extern int flag_huge_objects;
533
534 /* Nonzero if we want to conserve space in the .o files.  We do this
535    by putting uninitialized data and runtime initialized data into
536    .common instead of .data at the expense of not flagging multiple
537    definitions.  */
538 extern int flag_conserve_space;
539
540 /* Pointers to the base and current top of the language name stack.  */
541
542 extern tree *current_lang_base, *current_lang_stack;
543 \f
544 /* C and C++ flags are in decl2.c.  */
545
546 /* Set to 0 at beginning of a constructor, set to 1
547    if that function does an allocation before referencing its
548    instance variable.  */
549 static int current_function_assigns_this;
550 int current_function_just_assigned_this;
551
552 /* Set to 0 at beginning of a function.  Set non-zero when
553    store_parm_decls is called.  Don't call store_parm_decls
554    if this flag is non-zero!  */
555 int current_function_parms_stored;
556
557 /* Flag used when debugging spew.c */
558
559 extern int spew_debug;
560
561 /* This is a copy of the class_shadowed list of the previous class binding
562    contour when at global scope.  It's used to reset IDENTIFIER_CLASS_VALUEs
563    when entering another class scope (i.e. a cache miss).  */
564 extern tree previous_class_values;
565
566 /* A expression of value 0 with the same precision as a sizetype
567    node, but signed.  */
568 tree signed_size_zero_node;
569
570 /* The name of the anonymous namespace, throughout this translation
571    unit.  */
572 tree anonymous_namespace_name;
573
574 \f
575 /* Allocate a level of searching.  */
576
577 static
578 struct stack_level *
579 push_decl_level (stack, obstack)
580      struct stack_level *stack;
581      struct obstack *obstack;
582 {
583   struct stack_level tem;
584   tem.prev = stack;
585
586   return push_stack_level (obstack, (char *)&tem, sizeof (tem));
587 }
588 \f
589 /* For each binding contour we allocate a binding_level structure
590    which records the names defined in that contour.
591    Contours include:
592     0) the global one
593     1) one for each function definition,
594        where internal declarations of the parameters appear.
595     2) one for each compound statement,
596        to record its declarations.
597
598    The current meaning of a name can be found by searching the levels
599    from the current one out to the global one.
600
601    Off to the side, may be the class_binding_level.  This exists only
602    to catch class-local declarations.  It is otherwise nonexistent.
603
604    Also there may be binding levels that catch cleanups that must be
605    run when exceptions occur.  Thus, to see whether a name is bound in
606    the current scope, it is not enough to look in the
607    CURRENT_BINDING_LEVEL.  You should use lookup_name_current_level
608    instead.  */
609
610 /* Note that the information in the `names' component of the global contour
611    is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers.  */
612
613 struct binding_level
614   {
615     /* A chain of _DECL nodes for all variables, constants, functions,
616        and typedef types.  These are in the reverse of the order
617        supplied.  There may be OVERLOADs on this list, too, but they
618        are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD.  */
619     tree names;
620
621     /* A list of structure, union and enum definitions, for looking up
622        tag names.
623        It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
624        or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
625        or ENUMERAL_TYPE node.
626
627        C++: the TREE_VALUE nodes can be simple types for
628        component_bindings.  */
629     tree tags;
630
631     /* A list of USING_DECL nodes. */
632     tree usings;
633
634     /* A list of used namespaces. PURPOSE is the namespace,
635        VALUE the common ancestor with this binding_level's namespace. */
636     tree using_directives;
637
638     /* If this binding level is the binding level for a class, then
639        class_shadowed is a TREE_LIST.  The TREE_PURPOSE of each node
640        is the name of an entity bound in the class; the TREE_VALUE is
641        the IDENTIFIER_CLASS_VALUE before we entered the class.  Thus,
642        when leaving class scope, we can restore the
643        IDENTIFIER_CLASS_VALUE by walking this list.  The TREE_TYPE is
644        the DECL bound by this name in the class.  */
645     tree class_shadowed;
646
647     /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
648        is used for all binding levels.  */
649     tree type_shadowed;
650
651     /* For each level (except not the global one),
652        a chain of BLOCK nodes for all the levels
653        that were entered and exited one level down.  */
654     tree blocks;
655
656     /* The BLOCK node for this level, if one has been preallocated.
657        If 0, the BLOCK is allocated (if needed) when the level is popped.  */
658     tree this_block;
659
660     /* The binding level which this one is contained in (inherits from).  */
661     struct binding_level *level_chain;
662
663     /* List of decls in `names' that have incomplete
664        structure or union types.  */
665     tree incomplete;
666
667     /* List of VAR_DECLS saved from a previous for statement.
668        These would be dead in ANSI-conforming code, but might
669        be referenced in ARM-era code.  These are stored in a
670        TREE_LIST; the TREE_VALUE is the actual declaration.  */
671     tree dead_vars_from_for;
672
673     /* 1 for the level that holds the parameters of a function.
674        2 for the level that holds a class declaration.
675        3 for levels that hold parameter declarations.  */
676     unsigned parm_flag : 4;
677
678     /* 1 means make a BLOCK for this level regardless of all else.
679        2 for temporary binding contours created by the compiler.  */
680     unsigned keep : 3;
681
682     /* Nonzero if this level "doesn't exist" for tags.  */
683     unsigned tag_transparent : 1;
684
685     /* Nonzero if this level can safely have additional
686        cleanup-needing variables added to it.  */
687     unsigned more_cleanups_ok : 1;
688     unsigned have_cleanups : 1;
689
690     /* Nonzero if this level is for storing the decls for template
691        parameters and generic decls; these decls will be discarded and
692        replaced with a TEMPLATE_DECL.  */
693     unsigned pseudo_global : 1;
694
695     /* This is set for a namespace binding level.  */
696     unsigned namespace_p : 1;
697
698     /* True if this level is that of a for-statement where we need to
699        worry about ambiguous (ARM or ANSI) scope rules.  */
700     unsigned is_for_scope : 1;
701
702     /* Two bits left for this word.  */
703
704 #if defined(DEBUG_CP_BINDING_LEVELS)
705     /* Binding depth at which this level began.  */
706     unsigned binding_depth;
707 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
708   };
709
710 #define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
711   
712 /* The (non-class) binding level currently in effect.  */
713
714 static struct binding_level *current_binding_level;
715
716 /* The binding level of the current class, if any.  */
717
718 static struct binding_level *class_binding_level;
719
720 /* The current (class or non-class) binding level currently in effect.  */
721
722 #define inner_binding_level \
723   (class_binding_level ? class_binding_level : current_binding_level)
724
725 /* A chain of binding_level structures awaiting reuse.  */
726
727 static struct binding_level *free_binding_level;
728
729 /* The outermost binding level, for names of file scope.
730    This is created when the compiler is started and exists
731    through the entire run.  */
732
733 static struct binding_level *global_binding_level;
734
735 /* Binding level structures are initialized by copying this one.  */
736
737 static struct binding_level clear_binding_level;
738
739 /* Nonzero means unconditionally make a BLOCK for the next level pushed.  */
740
741 static int keep_next_level_flag;
742
743 #if defined(DEBUG_CP_BINDING_LEVELS)
744 static int binding_depth = 0;
745 static int is_class_level = 0;
746
747 static void
748 indent ()
749 {
750   register unsigned i;
751
752   for (i = 0; i < binding_depth*2; i++)
753     putc (' ', stderr);
754 }
755 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
756
757 static tree pushdecl_with_scope PROTO((tree, struct binding_level *));
758
759 static void
760 push_binding_level (newlevel, tag_transparent, keep)
761      struct binding_level *newlevel;
762      int tag_transparent, keep;
763 {
764   /* Add this level to the front of the chain (stack) of levels that
765      are active.  */
766   *newlevel = clear_binding_level;
767   if (class_binding_level)
768     {
769       newlevel->level_chain = class_binding_level;
770       class_binding_level = (struct binding_level *)0;
771     }
772   else
773     {
774       newlevel->level_chain = current_binding_level;
775     }
776   current_binding_level = newlevel;
777   newlevel->tag_transparent = tag_transparent;
778   newlevel->more_cleanups_ok = 1;
779   newlevel->keep = keep;
780 #if defined(DEBUG_CP_BINDING_LEVELS)
781   newlevel->binding_depth = binding_depth;
782   indent ();
783   fprintf (stderr, "push %s level 0x%08x line %d\n",
784            (is_class_level) ? "class" : "block", newlevel, lineno);
785   is_class_level = 0;
786   binding_depth++;
787 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
788 }
789
790 static void
791 pop_binding_level ()
792 {
793   if (class_binding_level)
794     current_binding_level = class_binding_level;
795
796   if (global_binding_level)
797     {
798       /* Cannot pop a level, if there are none left to pop.  */
799       if (current_binding_level == global_binding_level)
800         my_friendly_abort (123);
801     }
802   /* Pop the current level, and free the structure for reuse.  */
803 #if defined(DEBUG_CP_BINDING_LEVELS)
804   binding_depth--;
805   indent ();
806   fprintf (stderr, "pop  %s level 0x%08x line %d\n",
807           (is_class_level) ? "class" : "block",
808           current_binding_level, lineno);
809   if (is_class_level != (current_binding_level == class_binding_level))
810     {
811       indent ();
812       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
813     }
814   is_class_level = 0;
815 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
816   {
817     register struct binding_level *level = current_binding_level;
818     current_binding_level = current_binding_level->level_chain;
819     level->level_chain = free_binding_level;
820 #if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
821     if (level->binding_depth != binding_depth)
822       abort ();
823 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
824       free_binding_level = level;
825
826     class_binding_level = current_binding_level;
827     if (class_binding_level->parm_flag != 2)
828       class_binding_level = 0;
829     while (current_binding_level->parm_flag == 2)
830       current_binding_level = current_binding_level->level_chain;
831   }
832 }
833
834 static void
835 suspend_binding_level ()
836 {
837   if (class_binding_level)
838     current_binding_level = class_binding_level;
839
840   if (global_binding_level)
841     {
842       /* Cannot suspend a level, if there are none left to suspend.  */
843       if (current_binding_level == global_binding_level)
844         my_friendly_abort (123);
845     }
846   /* Suspend the current level.  */
847 #if defined(DEBUG_CP_BINDING_LEVELS)
848   binding_depth--;
849   indent ();
850   fprintf (stderr, "suspend  %s level 0x%08x line %d\n",
851           (is_class_level) ? "class" : "block",
852           current_binding_level, lineno);
853   if (is_class_level != (current_binding_level == class_binding_level))
854     {
855       indent ();
856       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
857     }
858   is_class_level = 0;
859 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
860   {
861     current_binding_level = current_binding_level->level_chain;
862     class_binding_level = current_binding_level;
863     if (class_binding_level->parm_flag != 2)
864       class_binding_level = 0;
865     while (current_binding_level->parm_flag == 2)
866       current_binding_level = current_binding_level->level_chain;
867   }
868 }
869
870 static void
871 resume_binding_level (b)
872      struct binding_level *b;
873 {
874   /* Resuming binding levels is meant only for namespaces,
875      and those cannot nest into classes. */
876   my_friendly_assert(!class_binding_level, 386);
877   /* Also, resuming a non-directly nested namespace is a no-no.  */
878   my_friendly_assert(b->level_chain == current_binding_level, 386);
879   current_binding_level = b;
880 #if defined(DEBUG_CP_BINDING_LEVELS)
881   b->binding_depth = binding_depth;
882   indent ();
883   fprintf (stderr, "resume %s level 0x%08x line %d\n",
884            (is_class_level) ? "class" : "block", b, lineno);
885   is_class_level = 0;
886   binding_depth++;
887 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
888 }
889 \f
890 /* Create a new `struct binding_level'.  */
891
892 static
893 struct binding_level *
894 make_binding_level ()
895 {
896   /* NOSTRICT */
897   return (struct binding_level *) xmalloc (sizeof (struct binding_level));
898 }
899
900 /* Nonzero if we are currently in the global binding level.  */
901
902 int
903 global_bindings_p ()
904 {
905   return current_binding_level == global_binding_level;
906 }
907
908 /* Nonzero if we are currently in a toplevel binding level.  This
909    means either the global binding level or a namespace in a toplevel
910    binding level.
911    Since there are no non-toplevel namespace levels, this really
912    means any namespace or pseudo-global level.  */
913
914 int
915 toplevel_bindings_p ()
916 {
917   return current_binding_level->namespace_p 
918     || current_binding_level->pseudo_global;
919 }
920
921 /* Nonzero if this is a namespace scope.  */
922
923 int
924 namespace_bindings_p ()
925 {
926   return current_binding_level->namespace_p;
927 }
928
929 void
930 keep_next_level ()
931 {
932   keep_next_level_flag = 1;
933 }
934
935 /* Nonzero if the current level needs to have a BLOCK made.  */
936
937 int
938 kept_level_p ()
939 {
940   return (current_binding_level->blocks != NULL_TREE
941           || current_binding_level->keep
942           || current_binding_level->names != NULL_TREE
943           || (current_binding_level->tags != NULL_TREE
944               && !current_binding_level->tag_transparent));
945 }
946
947 /* Identify this binding level as a level of parameters.  */
948
949 void
950 declare_parm_level ()
951 {
952   current_binding_level->parm_flag = 1;
953 }
954
955 void
956 declare_pseudo_global_level ()
957 {
958   current_binding_level->pseudo_global = 1;
959 }
960
961 static void
962 declare_namespace_level ()
963 {
964   current_binding_level->namespace_p = 1;
965 }
966
967 int
968 pseudo_global_level_p ()
969 {
970   return current_binding_level->pseudo_global;
971 }
972
973 void
974 set_class_shadows (shadows)
975      tree shadows;
976 {
977   class_binding_level->class_shadowed = shadows;
978 }
979
980 /* Enter a new binding level.
981    If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
982    not for that of tags.  */
983
984 void
985 pushlevel (tag_transparent)
986      int tag_transparent;
987 {
988   register struct binding_level *newlevel = NULL_BINDING_LEVEL;
989
990   /* If this is the top level of a function,
991      just make sure that NAMED_LABELS is 0.
992      They should have been set to 0 at the end of the previous function.  */
993
994   if (current_binding_level == global_binding_level)
995     my_friendly_assert (named_labels == NULL_TREE, 134);
996
997   /* Reuse or create a struct for this binding level.  */
998
999 #if defined(DEBUG_CP_BINDING_LEVELS)
1000   if (0)
1001 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1002   if (free_binding_level)
1003 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1004     {
1005       newlevel = free_binding_level;
1006       free_binding_level = free_binding_level->level_chain;
1007     }
1008   else
1009     {
1010       newlevel = make_binding_level ();
1011     }
1012
1013   push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
1014   GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
1015   keep_next_level_flag = 0;
1016 }
1017
1018 void
1019 note_level_for_for ()
1020 {
1021   current_binding_level->is_for_scope = 1;
1022 }
1023
1024 void
1025 pushlevel_temporary (tag_transparent)
1026      int tag_transparent;
1027 {
1028   pushlevel (tag_transparent);
1029   current_binding_level->keep = 2;
1030   clear_last_expr ();
1031
1032   /* Note we don't call push_momentary() here.  Otherwise, it would cause
1033      cleanups to be allocated on the momentary obstack, and they will be
1034      overwritten by the next statement.  */
1035
1036   expand_start_bindings (0);
1037 }
1038
1039 /* For a binding between a name and an entity at a block scope,
1040    this is the `struct binding_level' for the block.  */
1041 #define BINDING_LEVEL(NODE) \
1042    (((struct tree_binding*)NODE)->scope.level)
1043
1044 /* These are currently unused, but permanent, CPLUS_BINDING nodes.
1045    They are kept here because they are allocated from the permanent
1046    obstack and cannot be easily freed.  */
1047 static tree free_binding_nodes;
1048
1049 /* Make DECL the innermost binding for ID.  The LEVEL is the binding
1050    level at which this declaration is being bound.  */
1051
1052 static void
1053 push_binding (id, decl, level)
1054      tree id;
1055      tree decl;
1056      struct binding_level* level;
1057 {
1058   tree binding;
1059
1060   if (!free_binding_nodes)
1061     {
1062       /* There are no free nodes, so we must build one here.  */
1063       push_obstacks_nochange ();
1064       end_temporary_allocation ();
1065       binding = make_node (CPLUS_BINDING);
1066       pop_obstacks ();
1067     }
1068   else
1069     {
1070       /* There are nodes on the free list.  Grab the first one.  */
1071       binding = free_binding_nodes;
1072       
1073       /* And update the free list.  */
1074       free_binding_nodes = TREE_CHAIN (free_binding_nodes);
1075     }
1076
1077   /* Now, fill in the binding information.  */
1078   BINDING_VALUE (binding) = decl;
1079   BINDING_TYPE (binding) = NULL_TREE;
1080   BINDING_LEVEL (binding) = level;
1081   LOCAL_BINDING_P (binding) = (level != class_binding_level);
1082
1083   /* And put it on the front of the ilst of bindings for ID.  */
1084   TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
1085   IDENTIFIER_BINDING (id) = binding;
1086 }
1087
1088 /* ID is already bound in the current scope.  But, DECL is an
1089    additional binding for ID in the same scope.  This is the `struct
1090    stat' hack whereby a non-typedef class-name or enum-name can be
1091    bound at the same level as some other kind of entity.  It's the
1092    responsibility of the caller to check that inserting this name is
1093    legal here.  */
1094 static void
1095 add_binding (id, decl)
1096      tree id;
1097      tree decl;
1098 {
1099   tree binding = IDENTIFIER_BINDING (id);
1100
1101   if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
1102     /* The new name is the type name.  */
1103     BINDING_TYPE (binding) = decl;
1104   else 
1105     {
1106       /* The old name must be the type name.  It was placed in
1107          IDENTIFIER_VALUE because it was thought, at the point it
1108          was declared, to be the only entity with such a name.  */
1109       my_friendly_assert (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
1110                           && DECL_ARTIFICIAL (BINDING_VALUE (binding)),
1111                           0);
1112
1113       /* Move the type name into the type slot; it is now hidden by
1114          the new binding.  */
1115       BINDING_TYPE (binding) = BINDING_VALUE (binding);
1116       BINDING_VALUE (binding) = decl;
1117     }
1118 }
1119
1120 /* Bind DECL to ID in the current_binding_level.
1121    If PUSH_USING is set in FLAGS, we know that DECL doesn't really belong
1122    to this binding level, that it got here through a using-declaration.  */
1123
1124 void
1125 push_local_binding (id, decl, flags)
1126      tree id;
1127      tree decl;
1128      int flags;
1129 {
1130   tree d = decl;
1131
1132   if (lookup_name_current_level (id))
1133     /* Supplement the existing binding.  */
1134     add_binding (id, d);
1135   else
1136     /* Create a new binding.  */
1137     push_binding (id, d, current_binding_level);
1138
1139   if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
1140     /* We must put the OVERLOAD into a TREE_LIST since the
1141        TREE_CHAIN of an OVERLOAD is already used.  Similarly for
1142        decls that got here through a using-declaration.  */
1143     decl = build_tree_list (NULL_TREE, decl);
1144
1145   /* And put DECL on the list of things declared by the current
1146      binding level.  */
1147   TREE_CHAIN (decl) = current_binding_level->names;
1148   current_binding_level->names = decl;
1149 }
1150
1151 /* Bind DECL to ID in the class_binding_level.  */
1152
1153 void
1154 push_class_binding (id, decl)
1155      tree id;
1156      tree decl;
1157 {
1158   if (IDENTIFIER_BINDING (id)
1159       && BINDING_LEVEL (IDENTIFIER_BINDING (id)) == class_binding_level)
1160     /* Supplement the existing binding.  */
1161     add_binding (id, decl);
1162   else
1163     /* Create a new binding.  */
1164     push_binding (id, decl, class_binding_level);
1165
1166   /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
1167      class-level declaration.  Note that we do not use DECL here
1168      because of the possibility of the `struct stat' hack; if DECL is
1169      a class-name or enum-name we might prefer a field-name, or some
1170      such.  */
1171   IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
1172 }
1173
1174 /* Remove the binding for DECL which should be the innermost binding
1175    for ID.  */
1176
1177 static void 
1178 pop_binding (id, decl) 
1179      tree id;
1180      tree decl;
1181 {
1182   tree binding;
1183     
1184   if (id == NULL_TREE)
1185     /* It's easiest to write the loops that call this function without
1186        checking whether or not the entities involved have names.  We
1187        get here for such an entity.  */
1188     return;
1189
1190   /* Get the innermost binding for ID.  */
1191   binding = IDENTIFIER_BINDING (id);
1192
1193   /* The name should be bound.  */
1194   my_friendly_assert (binding != NULL_TREE, 0);
1195
1196   /* The DECL will be either the ordinary binding or the type
1197      binding for this identifier.  Remove that binding.  */
1198   if (BINDING_VALUE (binding) == decl)
1199     BINDING_VALUE (binding) = NULL_TREE;
1200   else if (BINDING_TYPE (binding) == decl)
1201     BINDING_TYPE (binding) = NULL_TREE;
1202   else
1203     my_friendly_abort (0);
1204
1205   if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
1206     {
1207       /* We're completely done with the innermost binding for this
1208          identifier.  Unhook it from the list of bindings.  */
1209       IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
1210
1211       /* And place it on the free list.  */
1212       TREE_CHAIN (binding) = free_binding_nodes;
1213       free_binding_nodes = binding;
1214     }
1215 }
1216
1217 /* Exit a binding level.
1218    Pop the level off, and restore the state of the identifier-decl mappings
1219    that were in effect when this level was entered.
1220
1221    If KEEP == 1, this level had explicit declarations, so
1222    and create a "block" (a BLOCK node) for the level
1223    to record its declarations and subblocks for symbol table output.
1224
1225    If FUNCTIONBODY is nonzero, this level is the body of a function,
1226    so create a block as if KEEP were set and also clear out all
1227    label names.
1228
1229    If REVERSE is nonzero, reverse the order of decls before putting
1230    them into the BLOCK.  */
1231
1232 tree
1233 poplevel (keep, reverse, functionbody)
1234      int keep;
1235      int reverse;
1236      int functionbody;
1237 {
1238   register tree link;
1239   /* The chain of decls was accumulated in reverse order.
1240      Put it into forward order, just for cleanliness.  */
1241   tree decls;
1242   int tmp = functionbody;
1243   int real_functionbody = current_binding_level->keep == 2
1244     ? ((functionbody = 0), tmp) : functionbody;
1245   tree tags = functionbody >= 0 ? current_binding_level->tags : 0;
1246   tree subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1247   tree block = NULL_TREE;
1248   tree decl;
1249   int block_previously_created;
1250   int leaving_for_scope;
1251
1252   if (current_binding_level->parm_flag == 2
1253       || current_binding_level->class_shadowed)
1254     /* We should not be using poplevel to pop a class binding level.
1255        Use poplevel_class instead.  */
1256     my_friendly_abort (0);
1257
1258   /* We used to use KEEP == 2 to indicate that the new block should go
1259      at the beginning of the list of blocks at this binding level,
1260      rather than the end.  This hack is no longer used.  */
1261   my_friendly_assert (keep == 0 || keep == 1, 0);
1262
1263   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1264                       (HOST_WIDE_INT) current_binding_level->level_chain,
1265                       current_binding_level->parm_flag,
1266                       current_binding_level->keep);
1267
1268   if (current_binding_level->keep == 1)
1269     keep = 1;
1270
1271   /* Get the decls in the order they were written.
1272      Usually current_binding_level->names is in reverse order.
1273      But parameter decls were previously put in forward order.  */
1274
1275   if (reverse)
1276     current_binding_level->names
1277       = decls = nreverse (current_binding_level->names);
1278   else
1279     decls = current_binding_level->names;
1280
1281   /* Output any nested inline functions within this block
1282      if they weren't already output.  */
1283
1284   for (decl = decls; decl; decl = TREE_CHAIN (decl))
1285     if (TREE_CODE (decl) == FUNCTION_DECL
1286         && ! TREE_ASM_WRITTEN (decl)
1287         && DECL_INITIAL (decl) != NULL_TREE
1288         && TREE_ADDRESSABLE (decl)
1289         && decl_function_context (decl) == current_function_decl)
1290       {
1291         /* If this decl was copied from a file-scope decl
1292            on account of a block-scope extern decl,
1293            propagate TREE_ADDRESSABLE to the file-scope decl.  */
1294         if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1295           TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1296         else
1297           {
1298             push_function_context ();
1299             output_inline_function (decl);
1300             pop_function_context ();
1301           }
1302       }
1303
1304   /* If there were any declarations or structure tags in that level,
1305      or if this level is a function body,
1306      create a BLOCK to record them for the life of this function.  */
1307
1308   block = NULL_TREE;
1309   block_previously_created = (current_binding_level->this_block != NULL_TREE);
1310   if (block_previously_created)
1311     block = current_binding_level->this_block;
1312   else if (keep == 1 || functionbody)
1313     block = make_node (BLOCK);
1314   if (block != NULL_TREE)
1315     {
1316       if (block_previously_created)
1317         {
1318           if (decls || tags || subblocks)
1319             {
1320               if (BLOCK_VARS (block) || BLOCK_TYPE_TAGS (block))
1321                 warning ("internal compiler error: debugging info corrupted");
1322
1323               BLOCK_VARS (block) = decls;
1324               BLOCK_TYPE_TAGS (block) = tags;
1325
1326               /* We can have previous subblocks and new subblocks when
1327                  doing fixup_gotos with complex cleanups.  We chain the new
1328                  subblocks onto the end of any pre-existing subblocks.  */
1329               BLOCK_SUBBLOCKS (block) = chainon (BLOCK_SUBBLOCKS (block),
1330                                                  subblocks);
1331             }
1332           /* If we created the block earlier on, and we are just
1333              diddling it now, then it already should have a proper
1334              BLOCK_END_NOTE value associated with it.  */
1335         }
1336       else
1337         {
1338           BLOCK_VARS (block) = decls;
1339           BLOCK_TYPE_TAGS (block) = tags;
1340           BLOCK_SUBBLOCKS (block) = subblocks;
1341           /* Otherwise, for a new block, install a new BLOCK_END_NOTE
1342              value.  */ 
1343           remember_end_note (block);
1344         }
1345     }
1346
1347   /* In each subblock, record that this is its superior.  */
1348
1349   if (keep >= 0)
1350     for (link = subblocks; link; link = TREE_CHAIN (link))
1351       BLOCK_SUPERCONTEXT (link) = block;
1352
1353   /* We still support the old for-scope rules, whereby the variables
1354      in a for-init statement were in scope after the for-statement
1355      ended.  We only use the new rules in flag_new_for_scope is
1356      nonzero.  */
1357   leaving_for_scope 
1358     = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1359
1360   /* Remove declarations for all the DECLs in this level.  */
1361   for (link = decls; link; link = TREE_CHAIN (link))
1362     {
1363       if (leaving_for_scope && TREE_CODE (link) == VAR_DECL)
1364         {
1365           tree outer_binding 
1366             = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1367           tree ns_binding;
1368
1369           if (!outer_binding)
1370             ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
1371           else
1372             ns_binding = NULL_TREE;
1373
1374           if (outer_binding 
1375               && (BINDING_LEVEL (outer_binding) 
1376                   == current_binding_level->level_chain))
1377             /* We have something like:
1378                
1379                  int i;
1380                  for (int i; ;);
1381                  
1382                and we are leaving the `for' scope.  There's no reason to
1383                keep the binding of the inner `i' in this case.  */
1384             pop_binding (DECL_NAME (link), link);
1385           else if ((outer_binding 
1386                     && (TREE_CODE (BINDING_VALUE (outer_binding)) 
1387                         == TYPE_DECL))
1388                    || (ns_binding 
1389                        && TREE_CODE (ns_binding) == TYPE_DECL))
1390             /* Here, we have something like:
1391
1392                  typedef int I;
1393
1394                  void f () {
1395                    for (int I; ;);
1396                  }
1397
1398                We must pop the for-scope binding so we know what's a
1399                type and what isn't.  */
1400             pop_binding (DECL_NAME (link), link);
1401           else
1402             {
1403               /* Mark this VAR_DECL as dead so that we can tell we left it
1404                  there only for backward compatibility.  */
1405               DECL_DEAD_FOR_LOCAL (link) = 1;
1406               
1407               /* Keep track of what should of have happenned when we
1408                  popped the binding.  */
1409               if (outer_binding && BINDING_VALUE (outer_binding))
1410                 DECL_SHADOWED_FOR_VAR (link) 
1411                   = BINDING_VALUE (outer_binding);
1412
1413               /* Add it to the list of dead variables in the next
1414                  outermost binding to that we can remove these when we
1415                  leave that binding.  */
1416               current_binding_level->level_chain->dead_vars_from_for
1417                 = tree_cons (NULL_TREE, link,
1418                              current_binding_level->level_chain->
1419                              dead_vars_from_for);
1420
1421               /* Although we don't pop the CPLUS_BINDING, we do clear
1422                  its BINDING_LEVEL since the level is going away now.  */
1423               BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1424                 = 0;
1425             }
1426         }
1427       else 
1428         {
1429           /* Remove the binding.  */
1430           decl = link;
1431           if (TREE_CODE (decl) == TREE_LIST)
1432             decl = TREE_VALUE (decl);
1433           if (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd')
1434             pop_binding (DECL_NAME (decl), decl);
1435           else if (TREE_CODE (decl) == OVERLOAD)
1436             pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
1437           else 
1438             my_friendly_abort (0);
1439         }
1440     }
1441
1442   /* Remove declarations for any `for' variables from inner scopes
1443      that we kept around.  */
1444   for (link = current_binding_level->dead_vars_from_for;
1445        link; link = TREE_CHAIN (link))
1446     pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
1447
1448   /* Restore the IDENTIFIER_TYPE_VALUEs.  */
1449   for (link = current_binding_level->type_shadowed;
1450        link; link = TREE_CHAIN (link))
1451     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
1452   
1453   /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1454      list if a `using' declaration put them there.  The debugging
1455      back-ends won't understand OVERLOAD, so we remove them here.
1456      Because the BLOCK_VARS are (temporarily) shared with
1457      CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1458      popped all the bindings.  */
1459   if (block)
1460     {
1461       tree* d;
1462
1463       for (d = &BLOCK_VARS (block); *d; )
1464         {
1465           if (TREE_CODE (*d) == TREE_LIST)
1466             *d = TREE_CHAIN (*d);
1467           else
1468             d = &TREE_CHAIN (*d);
1469         }
1470     }
1471
1472   /* If the level being exited is the top level of a function,
1473      check over all the labels.  */
1474
1475   if (functionbody)
1476     {
1477       /* If this is the top level block of a function,
1478          the vars are the function's parameters.
1479          Don't leave them in the BLOCK because they are
1480          found in the FUNCTION_DECL instead.  */
1481
1482       BLOCK_VARS (block) = 0;
1483
1484       /* Clear out the definitions of all label names,
1485          since their scopes end here.  */
1486
1487       for (link = named_labels; link; link = TREE_CHAIN (link))
1488         {
1489           register tree label = TREE_VALUE (link);
1490
1491           if (DECL_INITIAL (label) == NULL_TREE)
1492             {
1493               cp_error_at ("label `%D' used but not defined", label);
1494               /* Avoid crashing later.  */
1495               define_label (input_filename, 1, DECL_NAME (label));
1496             }
1497           else if (warn_unused && !TREE_USED (label))
1498             cp_warning_at ("label `%D' defined but not used", label);
1499           SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), NULL_TREE);
1500
1501           /* Put the labels into the "variables" of the
1502              top-level block, so debugger can see them.  */
1503           TREE_CHAIN (label) = BLOCK_VARS (block);
1504           BLOCK_VARS (block) = label;
1505         }
1506
1507       named_labels = NULL_TREE;
1508     }
1509
1510   /* Any uses of undefined labels now operate under constraints
1511      of next binding contour.  */
1512   {
1513     struct binding_level *level_chain;
1514     level_chain = current_binding_level->level_chain;
1515     if (level_chain)
1516       {
1517         struct named_label_list *labels;
1518         for (labels = named_label_uses; labels; labels = labels->next)
1519           if (labels->binding_level == current_binding_level)
1520             {
1521               labels->binding_level = level_chain;
1522               labels->names_in_scope = level_chain->names;
1523             }
1524       }
1525   }
1526
1527   tmp = current_binding_level->keep;
1528
1529   pop_binding_level ();
1530   if (functionbody)
1531     DECL_INITIAL (current_function_decl) = block;
1532   else if (block)
1533     {
1534       if (!block_previously_created)
1535         current_binding_level->blocks
1536           = chainon (current_binding_level->blocks, block);
1537     }
1538   /* If we did not make a block for the level just exited,
1539      any blocks made for inner levels
1540      (since they cannot be recorded as subblocks in that level)
1541      must be carried forward so they will later become subblocks
1542      of something else.  */
1543   else if (subblocks)
1544     current_binding_level->blocks
1545       = chainon (current_binding_level->blocks, subblocks);
1546
1547   /* Take care of compiler's internal binding structures.  */
1548   if (tmp == 2)
1549     {
1550       expand_end_bindings (getdecls (), keep, 1);
1551       /* Each and every BLOCK node created here in `poplevel' is important
1552          (e.g. for proper debugging information) so if we created one
1553          earlier, mark it as "used".  */
1554       if (block)
1555         TREE_USED (block) = 1;
1556       block = poplevel (keep, reverse, real_functionbody);
1557     }
1558
1559   /* Each and every BLOCK node created here in `poplevel' is important
1560      (e.g. for proper debugging information) so if we created one
1561      earlier, mark it as "used".  */
1562   if (block)
1563     TREE_USED (block) = 1;
1564   return block;
1565 }
1566
1567 /* Delete the node BLOCK from the current binding level.
1568    This is used for the block inside a stmt expr ({...})
1569    so that the block can be reinserted where appropriate.  */
1570
1571 void
1572 delete_block (block)
1573      tree block;
1574 {
1575   tree t;
1576   if (current_binding_level->blocks == block)
1577     current_binding_level->blocks = TREE_CHAIN (block);
1578   for (t = current_binding_level->blocks; t;)
1579     {
1580       if (TREE_CHAIN (t) == block)
1581         TREE_CHAIN (t) = TREE_CHAIN (block);
1582       else
1583         t = TREE_CHAIN (t);
1584     }
1585   TREE_CHAIN (block) = NULL_TREE;
1586   /* Clear TREE_USED which is always set by poplevel.
1587      The flag is set again if insert_block is called.  */
1588   TREE_USED (block) = 0;
1589 }
1590
1591 /* Insert BLOCK at the end of the list of subblocks of the
1592    current binding level.  This is used when a BIND_EXPR is expanded,
1593    to handle the BLOCK node inside the BIND_EXPR.  */
1594
1595 void
1596 insert_block (block)
1597      tree block;
1598 {
1599   TREE_USED (block) = 1;
1600   current_binding_level->blocks
1601     = chainon (current_binding_level->blocks, block);
1602 }
1603
1604 /* Set the BLOCK node for the innermost scope
1605    (the one we are currently in).  */
1606
1607 void
1608 set_block (block)
1609     register tree block;
1610 {
1611   current_binding_level->this_block = block;
1612 }
1613
1614 /* Do a pushlevel for class declarations.  */
1615
1616 void
1617 pushlevel_class ()
1618 {
1619   register struct binding_level *newlevel;
1620
1621   /* Reuse or create a struct for this binding level.  */
1622 #if defined(DEBUG_CP_BINDING_LEVELS)
1623   if (0)
1624 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1625   if (free_binding_level)
1626 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1627     {
1628       newlevel = free_binding_level;
1629       free_binding_level = free_binding_level->level_chain;
1630     }
1631   else
1632     newlevel = make_binding_level ();
1633
1634 #if defined(DEBUG_CP_BINDING_LEVELS)
1635   is_class_level = 1;
1636 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1637
1638   push_binding_level (newlevel, 0, 0);
1639
1640   decl_stack = push_decl_level (decl_stack, &decl_obstack);
1641   class_binding_level = current_binding_level;
1642   class_binding_level->parm_flag = 2;
1643   /* We have just pushed into a new binding level.  Now, fake out the rest
1644      of the compiler.  Set the `current_binding_level' back to point to
1645      the most closely containing non-class binding level.  */
1646   do
1647     {
1648       current_binding_level = current_binding_level->level_chain;
1649     }
1650   while (current_binding_level->parm_flag == 2);
1651 }
1652
1653 /* ...and a poplevel for class declarations.  FORCE is used to force
1654    clearing out of CLASS_VALUEs after a class definition.  */
1655
1656 tree
1657 poplevel_class (force)
1658      int force;
1659 {
1660   register struct binding_level *level = class_binding_level;
1661   tree block = NULL_TREE;
1662   tree shadowed;
1663
1664   my_friendly_assert (level != 0, 354);
1665   
1666   decl_stack = pop_stack_level (decl_stack);
1667   /* If we're leaving a toplevel class, don't bother to do the setting
1668      of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
1669      shouldn't even be used when current_class_type isn't set, and second,
1670      if we don't touch it here, we're able to use the cache effect if the
1671      next time we're entering a class scope, it is the same class.  */
1672   if (current_class_depth != 1 || force)
1673     for (shadowed = level->class_shadowed;
1674          shadowed;
1675          shadowed = TREE_CHAIN (shadowed))
1676       IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = TREE_VALUE (shadowed);
1677   else
1678     /* Remember to save what IDENTIFIER's were bound in this scope so we
1679        can recover from cache misses.  */
1680     {
1681       previous_class_type = current_class_type;
1682       previous_class_values = class_binding_level->class_shadowed;
1683     }
1684   for (shadowed = level->type_shadowed;
1685        shadowed;
1686        shadowed = TREE_CHAIN (shadowed))
1687     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
1688
1689   /* Remove the bindings for all of the class-level declarations.  */
1690   for (shadowed = level->class_shadowed; 
1691        shadowed; 
1692        shadowed = TREE_CHAIN (shadowed))
1693     pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
1694
1695   GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1696                       (HOST_WIDE_INT) class_binding_level->level_chain,
1697                       class_binding_level->parm_flag,
1698                       class_binding_level->keep);
1699
1700   if (class_binding_level->parm_flag != 2)
1701     class_binding_level = (struct binding_level *)0;
1702
1703   /* Now, pop out of the binding level which we created up in the
1704      `pushlevel_class' routine.  */
1705 #if defined(DEBUG_CP_BINDING_LEVELS)
1706   is_class_level = 1;
1707 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1708
1709   pop_binding_level ();
1710
1711   return block;
1712 }
1713 \f
1714 /* For debugging.  */
1715 static int no_print_functions = 0;
1716 static int no_print_builtins = 0;
1717
1718 void
1719 print_binding_level (lvl)
1720      struct binding_level *lvl;
1721 {
1722   tree t;
1723   int i = 0, len;
1724   fprintf (stderr, " blocks=");
1725   fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
1726   fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
1727            list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
1728   if (lvl->tag_transparent)
1729     fprintf (stderr, " tag-transparent");
1730   if (lvl->more_cleanups_ok)
1731     fprintf (stderr, " more-cleanups-ok");
1732   if (lvl->have_cleanups)
1733     fprintf (stderr, " have-cleanups");
1734   fprintf (stderr, "\n");
1735   if (lvl->names)
1736     {
1737       fprintf (stderr, " names:\t");
1738       /* We can probably fit 3 names to a line?  */
1739       for (t = lvl->names; t; t = TREE_CHAIN (t))
1740         {
1741           if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL)) 
1742             continue;
1743           if (no_print_builtins
1744               && (TREE_CODE (t) == TYPE_DECL)
1745               && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
1746             continue;
1747
1748           /* Function decls tend to have longer names.  */
1749           if (TREE_CODE (t) == FUNCTION_DECL)
1750             len = 3;
1751           else
1752             len = 2;
1753           i += len;
1754           if (i > 6)
1755             {
1756               fprintf (stderr, "\n\t");
1757               i = len;
1758             }
1759           print_node_brief (stderr, "", t, 0);
1760           if (t == error_mark_node)
1761             break;
1762         }
1763       if (i)
1764         fprintf (stderr, "\n");
1765     }
1766   if (lvl->tags)
1767     {
1768       fprintf (stderr, " tags:\t");
1769       i = 0;
1770       for (t = lvl->tags; t; t = TREE_CHAIN (t))
1771         {
1772           if (TREE_PURPOSE (t) == NULL_TREE)
1773             len = 3;
1774           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1775             len = 2;
1776           else
1777             len = 4;
1778           i += len;
1779           if (i > 5)
1780             {
1781               fprintf (stderr, "\n\t");
1782               i = len;
1783             }
1784           if (TREE_PURPOSE (t) == NULL_TREE)
1785             {
1786               print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
1787               fprintf (stderr, ">");
1788             }
1789           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1790             print_node_brief (stderr, "", TREE_VALUE (t), 0);
1791           else
1792             {
1793               print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
1794               print_node_brief (stderr, "", TREE_VALUE (t), 0);
1795               fprintf (stderr, ">");
1796             }
1797         }
1798       if (i)
1799         fprintf (stderr, "\n");
1800     }
1801   if (lvl->class_shadowed)
1802     {
1803       fprintf (stderr, " class-shadowed:");
1804       for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
1805         {
1806           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1807         }
1808       fprintf (stderr, "\n");
1809     }
1810   if (lvl->type_shadowed)
1811     {
1812       fprintf (stderr, " type-shadowed:");
1813       for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
1814         {
1815           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1816         }
1817       fprintf (stderr, "\n");
1818     }
1819 }
1820
1821 void
1822 print_other_binding_stack (stack)
1823      struct binding_level *stack;
1824 {
1825   struct binding_level *level;
1826   for (level = stack; level != global_binding_level; level = level->level_chain)
1827     {
1828       fprintf (stderr, "binding level ");
1829       fprintf (stderr, HOST_PTR_PRINTF, level);
1830       fprintf (stderr, "\n");
1831       print_binding_level (level);
1832     }
1833 }
1834
1835 void
1836 print_binding_stack ()
1837 {
1838   struct binding_level *b;
1839   fprintf (stderr, "current_binding_level=");
1840   fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
1841   fprintf (stderr, "\nclass_binding_level=");
1842   fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
1843   fprintf (stderr, "\nglobal_binding_level=");
1844   fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
1845   fprintf (stderr, "\n");
1846   if (class_binding_level)
1847     {
1848       for (b = class_binding_level; b; b = b->level_chain)
1849         if (b == current_binding_level)
1850           break;
1851       if (b)
1852         b = class_binding_level;
1853       else
1854         b = current_binding_level;
1855     }
1856   else
1857     b = current_binding_level;
1858   print_other_binding_stack (b);
1859   fprintf (stderr, "global:\n");
1860   print_binding_level (global_binding_level);
1861 }
1862
1863 /* Namespace binding access routines: The namespace_bindings field of
1864    the identifier is polymorphic, with three possible values:
1865    NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
1866    indicating the BINDING_VALUE of global_namespace. */
1867
1868 /* Check whether the a binding for the name to scope is known.
1869    Assumes that the bindings of the name are already a list
1870    of bindings. Returns the binding found, or NULL_TREE. */
1871
1872 static tree
1873 find_binding (name, scope)
1874      tree name;
1875      tree scope;
1876 {
1877   tree iter, prev = NULL_TREE;
1878
1879   scope = ORIGINAL_NAMESPACE (scope);
1880   
1881   for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
1882        iter = TREE_CHAIN (iter))
1883     {
1884       my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
1885       if (BINDING_SCOPE (iter) == scope)
1886         {
1887           /* Move binding found to the fron of the list, so
1888              subsequent lookups will find it faster. */
1889           if (prev)
1890             {
1891               TREE_CHAIN (prev) = TREE_CHAIN (iter);
1892               TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
1893               IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
1894             }
1895           return iter;
1896         }
1897       prev = iter;
1898     }
1899   return NULL_TREE;
1900 }
1901
1902 /* Always returns a binding for name in scope. If the
1903    namespace_bindings is not a list, convert it to one first.
1904    If no binding is found, make a new one. */
1905
1906 tree
1907 binding_for_name (name, scope)
1908      tree name;
1909      tree scope;
1910 {
1911   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
1912   tree result;
1913
1914   scope = ORIGINAL_NAMESPACE (scope);
1915   
1916   if (b && TREE_CODE (b) != CPLUS_BINDING)
1917     {
1918       /* Get rid of optimization for global scope. */
1919       IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
1920       BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
1921       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
1922     }
1923   if (b && (result = find_binding (name, scope)))
1924     return result;
1925   /* Not found, make a new permanent one. */
1926   push_obstacks (&permanent_obstack, &permanent_obstack);
1927   result = make_node (CPLUS_BINDING);
1928   TREE_CHAIN (result) = b;
1929   IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
1930   BINDING_SCOPE (result) = scope;
1931   BINDING_TYPE (result) = NULL_TREE;
1932   BINDING_VALUE (result) = NULL_TREE;
1933   pop_obstacks ();
1934   return result;
1935 }
1936
1937 /* Return the binding value for name in scope, considering that
1938    namespace_binding may or may not be a list of CPLUS_BINDINGS. */
1939
1940 tree
1941 namespace_binding (name, scope)
1942      tree name;
1943      tree scope;
1944 {
1945   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
1946   if (b == NULL_TREE)
1947     return NULL_TREE;
1948   if (scope == NULL_TREE)
1949     scope = global_namespace;
1950   if (TREE_CODE (b) != CPLUS_BINDING)
1951     return (scope == global_namespace) ? b : NULL_TREE;
1952   name = find_binding (name,scope);
1953   if (name == NULL_TREE)
1954     return name;
1955   return BINDING_VALUE (name);
1956 }
1957
1958 /* Set the binding value for name in scope. If modifying the binding
1959    of global_namespace is attempted, try to optimize it. */
1960
1961 void
1962 set_namespace_binding (name, scope, val)
1963      tree name;
1964      tree scope;
1965      tree val;
1966 {
1967   tree b;
1968
1969   if (scope == NULL_TREE)
1970     scope = global_namespace;
1971   
1972   if (scope == global_namespace)
1973     {
1974       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
1975       if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
1976         {
1977           IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
1978           return;
1979         }
1980     }
1981   b = binding_for_name (name, scope);
1982   BINDING_VALUE (b) = val;
1983 }
1984
1985 /* Push into the scope of the NAME namespace.  If NAME is NULL_TREE, then we
1986    select a name that is unique to this compilation unit.  */
1987
1988 void
1989 push_namespace (name)
1990      tree name;
1991 {
1992   tree d = NULL_TREE;
1993   int need_new = 1;
1994   int implicit_use = 0;
1995   int global = 0;
1996   if (!global_namespace)
1997     {
1998       /* This must be ::. */
1999       my_friendly_assert (name == get_identifier ("::"), 377);
2000       global = 1;
2001     }
2002   else if (!name)
2003     {
2004       /* The name of anonymous namespace is unique for the translation
2005          unit.  */
2006       if (!anonymous_namespace_name)
2007         anonymous_namespace_name = get_file_function_name ('N');
2008       name = anonymous_namespace_name;
2009       d = IDENTIFIER_NAMESPACE_VALUE (name);
2010       if (d)
2011         /* Reopening anonymous namespace.  */
2012         need_new = 0;
2013       implicit_use = 1;
2014     }
2015   else if (current_namespace == global_namespace
2016            && name == DECL_NAME (std_node))
2017     {
2018       in_std++;
2019       return;
2020     }
2021   else
2022     {
2023       /* Check whether this is an extended namespace definition. */
2024       d = IDENTIFIER_NAMESPACE_VALUE (name);
2025       if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
2026         {
2027           need_new = 0;
2028           if (DECL_NAMESPACE_ALIAS (d))
2029             {
2030               cp_error ("namespace alias `%D' not allowed here, assuming `%D'",
2031                         d, DECL_NAMESPACE_ALIAS (d));
2032               d = DECL_NAMESPACE_ALIAS (d);
2033             }
2034         }
2035     }
2036   
2037   if (need_new)
2038     {
2039       /* Make a new namespace, binding the name to it. */
2040       d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2041       /* The global namespace is not pushed, and the global binding
2042          level is set elsewhere.  */
2043       if (!global)
2044         {
2045           d = pushdecl (d);
2046           pushlevel (0);
2047           declare_namespace_level ();
2048           NAMESPACE_LEVEL (d) = current_binding_level;
2049         }
2050     }
2051   else
2052     resume_binding_level (NAMESPACE_LEVEL (d));
2053
2054   if (implicit_use)
2055     do_using_directive (d);
2056   /* Enter the name space. */
2057   current_namespace = d;
2058 }
2059
2060 /* Pop from the scope of the current namespace.  */
2061
2062 void
2063 pop_namespace ()
2064 {
2065   if (current_namespace == global_namespace)
2066     {
2067       my_friendly_assert (in_std>0, 980421);
2068       in_std--;
2069       return;
2070     }
2071   current_namespace = CP_DECL_CONTEXT (current_namespace);
2072   /* The binding level is not popped, as it might be re-opened later.  */
2073   suspend_binding_level ();
2074 }
2075
2076 /* Concatenate the binding levels of all namespaces. */
2077
2078 void
2079 cat_namespace_levels()
2080 {
2081   tree current;
2082   tree last;
2083   struct binding_level *b;
2084
2085   last = NAMESPACE_LEVEL (global_namespace) -> names;
2086   /* The nested namespaces appear in the names list of their ancestors. */
2087   for (current = last; current; current = TREE_CHAIN (current))
2088     {
2089       /* Catch simple infinite loops.  */
2090       if (TREE_CHAIN (current) == current)
2091         my_friendly_abort (990126);
2092
2093       if (TREE_CODE (current) != NAMESPACE_DECL
2094           || DECL_NAMESPACE_ALIAS (current))
2095         continue;
2096       if (!DECL_LANG_SPECIFIC (current))
2097         {
2098           /* Hmm. std. */
2099           my_friendly_assert (current == std_node, 393);
2100           continue;
2101         }
2102       b = NAMESPACE_LEVEL (current);
2103       while (TREE_CHAIN (last))
2104         last = TREE_CHAIN (last);
2105       TREE_CHAIN (last) = NAMESPACE_LEVEL (current) -> names;
2106     }
2107 }
2108 \f
2109 /* Subroutines for reverting temporarily to top-level for instantiation
2110    of templates and such.  We actually need to clear out the class- and
2111    local-value slots of all identifiers, so that only the global values
2112    are at all visible.  Simply setting current_binding_level to the global
2113    scope isn't enough, because more binding levels may be pushed.  */
2114 struct saved_scope {
2115   struct binding_level *old_binding_level;
2116   tree old_bindings;
2117   tree old_namespace;
2118   struct saved_scope *prev;
2119   tree class_name, class_type;
2120   tree access_specifier;
2121   tree function_decl;
2122   struct binding_level *class_bindings;
2123   tree *lang_base, *lang_stack, lang_name;
2124   int lang_stacksize;
2125   int minimal_parse_mode;
2126   tree last_function_parms;
2127   tree template_parms;
2128   HOST_WIDE_INT processing_template_decl;
2129   tree previous_class_type, previous_class_values;
2130   int processing_specialization;
2131   int processing_explicit_instantiation;
2132 };
2133 static struct saved_scope *current_saved_scope;
2134
2135 /* A chain of the binding vecs created by store_bindings.  We create a
2136    whole bunch of these during compilation, on permanent_obstack, so we
2137    can't just throw them away.  */
2138 static tree free_binding_vecs;
2139
2140 static tree
2141 store_bindings (names, old_bindings)
2142      tree names, old_bindings;
2143 {
2144   tree t;
2145   for (t = names; t; t = TREE_CHAIN (t))
2146     {
2147       tree binding, t1, id;
2148
2149       if (TREE_CODE (t) == TREE_LIST)
2150         id = TREE_PURPOSE (t);
2151       else
2152         id = DECL_NAME (t);
2153
2154       if (!id 
2155           /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2156              we have no IDENTIFIER_BINDING if we have left the class
2157              scope, but cached the class-level declarations.  */
2158           || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
2159         continue;
2160
2161       for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
2162         if (TREE_VEC_ELT (t1, 0) == id)
2163           goto skip_it;
2164
2165       if (free_binding_vecs)
2166         {
2167           binding = free_binding_vecs;
2168           free_binding_vecs = TREE_CHAIN (free_binding_vecs);
2169         }
2170       else
2171         binding = make_tree_vec (4);
2172
2173       if (id)
2174         {
2175           my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
2176           TREE_VEC_ELT (binding, 0) = id;
2177           TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
2178           TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
2179           TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
2180           IDENTIFIER_BINDING (id) = NULL_TREE;
2181           IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
2182         }
2183       TREE_CHAIN (binding) = old_bindings;
2184       old_bindings = binding;
2185     skip_it:
2186       ;
2187     }
2188   return old_bindings;
2189 }
2190
2191 void
2192 maybe_push_to_top_level (pseudo)
2193      int pseudo;
2194 {
2195   extern int current_lang_stacksize;
2196   struct saved_scope *s
2197     = (struct saved_scope *) xmalloc (sizeof (struct saved_scope));
2198   struct binding_level *b = inner_binding_level;
2199   tree old_bindings = NULL_TREE;
2200
2201   push_cp_function_context (NULL_TREE);
2202
2203   if (previous_class_type)
2204     old_bindings = store_bindings (previous_class_values, old_bindings);
2205
2206   /* Have to include global_binding_level, because class-level decls
2207      aren't listed anywhere useful.  */
2208   for (; b; b = b->level_chain)
2209     {
2210       tree t;
2211
2212       /* Template IDs are inserted into the global level. If they were
2213          inserted into namespace level, finish_file wouldn't find them
2214          when doing pending instantiations. Therefore, don't stop at
2215          namespace level, but continue until :: .  */
2216       if (b == global_binding_level || (pseudo && b->pseudo_global))
2217         break;
2218
2219       old_bindings = store_bindings (b->names, old_bindings);
2220       /* We also need to check class_shadowed to save class-level type
2221          bindings, since pushclass doesn't fill in b->names.  */
2222       if (b->parm_flag == 2)
2223         old_bindings = store_bindings (b->class_shadowed, old_bindings);
2224
2225       /* Unwind type-value slots back to top level.  */
2226       for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2227         SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2228     }
2229
2230   s->old_binding_level = current_binding_level;
2231   current_binding_level = b;
2232
2233   s->old_namespace = current_namespace;
2234   s->class_name = current_class_name;
2235   s->class_type = current_class_type;
2236   s->access_specifier = current_access_specifier;
2237   s->function_decl = current_function_decl;
2238   s->class_bindings = class_binding_level;
2239   s->lang_stack = current_lang_stack;
2240   s->lang_base = current_lang_base;
2241   s->lang_stacksize = current_lang_stacksize;
2242   s->lang_name = current_lang_name;
2243   s->minimal_parse_mode = minimal_parse_mode;
2244   s->last_function_parms = last_function_parms;
2245   s->template_parms = current_template_parms;
2246   s->processing_template_decl = processing_template_decl;
2247   s->previous_class_type = previous_class_type;
2248   s->previous_class_values = previous_class_values;
2249   s->processing_specialization = processing_specialization;
2250   s->processing_explicit_instantiation = processing_explicit_instantiation;
2251
2252   current_class_name = current_class_type = NULL_TREE;
2253   current_function_decl = NULL_TREE;
2254   class_binding_level = (struct binding_level *)0;
2255   current_lang_stacksize = 10;
2256   current_lang_stack = current_lang_base
2257     = (tree *) xmalloc (current_lang_stacksize * sizeof (tree));
2258   current_lang_name = lang_name_cplusplus;
2259   strict_prototype = strict_prototypes_lang_cplusplus;
2260   named_labels = NULL_TREE;
2261   shadowed_labels = NULL_TREE;
2262   minimal_parse_mode = 0;
2263   previous_class_type = previous_class_values = NULL_TREE;
2264   processing_specialization = 0;
2265   processing_explicit_instantiation = 0;
2266   current_template_parms = NULL_TREE;
2267   processing_template_decl = 0;
2268   current_namespace = global_namespace;
2269
2270   s->prev = current_saved_scope;
2271   s->old_bindings = old_bindings;
2272   current_saved_scope = s;
2273
2274   push_obstacks (&permanent_obstack, &permanent_obstack);
2275 }
2276
2277 void
2278 push_to_top_level ()
2279 {
2280   maybe_push_to_top_level (0);
2281 }
2282
2283 void
2284 pop_from_top_level ()
2285 {
2286   extern int current_lang_stacksize;
2287   struct saved_scope *s = current_saved_scope;
2288   tree t;
2289
2290   /* Clear out class-level bindings cache.  */
2291   if (previous_class_type)
2292     {
2293       popclass (-1);
2294       previous_class_type = NULL_TREE;
2295     }
2296
2297   pop_obstacks ();
2298
2299   current_binding_level = s->old_binding_level;
2300   current_saved_scope = s->prev;
2301   for (t = s->old_bindings; t; )
2302     {
2303       tree save = t;
2304       tree id = TREE_VEC_ELT (t, 0);
2305       if (id)
2306         {
2307           SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
2308           IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
2309           IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
2310         }
2311       t = TREE_CHAIN (t);
2312       TREE_CHAIN (save) = free_binding_vecs;
2313       free_binding_vecs = save;
2314     }
2315   current_namespace = s->old_namespace;
2316   current_class_name = s->class_name;
2317   current_class_type = s->class_type;
2318   current_access_specifier = s->access_specifier;
2319   current_function_decl = s->function_decl;
2320   class_binding_level = s->class_bindings;
2321   free (current_lang_base);
2322   current_lang_base = s->lang_base;
2323   current_lang_stack = s->lang_stack;
2324   current_lang_name = s->lang_name;
2325   current_lang_stacksize = s->lang_stacksize;
2326   if (current_lang_name == lang_name_cplusplus)
2327     strict_prototype = strict_prototypes_lang_cplusplus;
2328   else if (current_lang_name == lang_name_c)
2329     strict_prototype = strict_prototypes_lang_c;
2330   minimal_parse_mode = s->minimal_parse_mode;
2331   last_function_parms = s->last_function_parms;
2332   current_template_parms = s->template_parms;
2333   processing_template_decl = s->processing_template_decl;
2334   previous_class_type = s->previous_class_type;
2335   previous_class_values = s->previous_class_values;
2336   processing_specialization = s->processing_specialization;
2337   processing_explicit_instantiation = s->processing_explicit_instantiation;
2338
2339   free (s);
2340
2341   pop_cp_function_context (NULL_TREE);
2342 }
2343 \f
2344 /* Push a definition of struct, union or enum tag "name".
2345    into binding_level "b".   "type" should be the type node, 
2346    We assume that the tag "name" is not already defined.
2347
2348    Note that the definition may really be just a forward reference.
2349    In that case, the TYPE_SIZE will be a NULL_TREE.
2350
2351    C++ gratuitously puts all these tags in the name space.  */
2352
2353 /* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2354    record the shadowed value for this binding contour.  TYPE is
2355    the type that ID maps to.  */
2356
2357 static void
2358 set_identifier_type_value_with_scope (id, type, b)
2359      tree id;
2360      tree type;
2361      struct binding_level *b;
2362 {
2363   if (!b->namespace_p)
2364     {
2365       /* Shadow the marker, not the real thing, so that the marker
2366          gets restored later. */
2367       tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
2368       b->type_shadowed
2369         = tree_cons (id, old_type_value, b->type_shadowed);
2370     }
2371   else
2372     {
2373       tree binding = binding_for_name (id, current_namespace);
2374       BINDING_TYPE (binding) = type;
2375       /* Store marker instead of real type. */
2376       type = global_type_node;
2377     }
2378   SET_IDENTIFIER_TYPE_VALUE (id, type);
2379 }
2380
2381 /* As set_identifier_type_value_with_scope, but using inner_binding_level.  */
2382
2383 void
2384 set_identifier_type_value (id, type)
2385      tree id;
2386      tree type;
2387 {
2388   set_identifier_type_value_with_scope (id, type, inner_binding_level);
2389 }
2390
2391 /* Return the type associated with id. */
2392
2393 tree
2394 identifier_type_value (id)
2395      tree id;
2396 {
2397   /* There is no type with that name, anywhere. */
2398   if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2399     return NULL_TREE;
2400   /* This is not the type marker, but the real thing. */
2401   if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2402     return REAL_IDENTIFIER_TYPE_VALUE (id);
2403   /* Have to search for it. It must be on the global level, now.
2404      Ask lookup_name not to return non-types. */
2405   id = lookup_name_real (id, 2, 1, 0);
2406   if (id)
2407     return TREE_TYPE (id);
2408   return NULL_TREE;
2409 }
2410
2411 /* Pop off extraneous binding levels left over due to syntax errors.
2412
2413    We don't pop past namespaces, as they might be valid.  */
2414
2415 void
2416 pop_everything ()
2417 {
2418 #ifdef DEBUG_CP_BINDING_LEVELS
2419   fprintf (stderr, "XXX entering pop_everything ()\n");
2420 #endif
2421   while (! toplevel_bindings_p () && ! pseudo_global_level_p ())
2422     {
2423       if (class_binding_level)
2424         pop_nested_class (1);
2425       else
2426         poplevel (0, 0, 0);
2427     }
2428 #ifdef DEBUG_CP_BINDING_LEVELS
2429   fprintf (stderr, "XXX leaving pop_everything ()\n");
2430 #endif
2431 }
2432
2433 /* The type TYPE is being declared.  If it is a class template, or a
2434    specialization of a class template, do any processing required and
2435    perform error-checking.  If IS_FRIEND is non-zero, this TYPE is
2436    being declared a friend.  B is the binding level at which this TYPE
2437    should be bound.
2438
2439    Returns the TYPE_DECL for TYPE, which may have been altered by this
2440    processing.  */
2441
2442 static tree 
2443 maybe_process_template_type_declaration (type, globalize, b)
2444      tree type;
2445      int globalize;
2446      struct binding_level* b;
2447 {
2448   tree decl = TYPE_NAME (type);
2449  
2450   if (processing_template_parmlist)
2451     /* You can't declare a new template type in a template parameter
2452        list.  But, you can declare a non-template type:
2453        
2454          template <class A*> struct S;
2455        
2456        is a forward-declaration of `A'.  */
2457     ;
2458   else 
2459     {
2460       maybe_check_template_type (type);
2461
2462       my_friendly_assert (IS_AGGR_TYPE (type) 
2463                           || TREE_CODE (type) == ENUMERAL_TYPE, 0);
2464                           
2465                           
2466       if (/* If !GLOBALIZE then we are looking at a definition.
2467              It may not be a primary template.  (For example, in:
2468                   
2469                template <class T>
2470                struct S1 { class S2 {}; }
2471                   
2472              we have to push_template_decl for S2.)  */
2473           (processing_template_decl && !globalize)
2474           /* If we are declaring a friend template class, we will
2475              have GLOBALIZE set, since something like:
2476
2477                template <class T>
2478                struct S1 {
2479                  template <class U>
2480                  friend class S2; 
2481                };
2482
2483              declares S2 to be at global scope.  */
2484           || PROCESSING_REAL_TEMPLATE_DECL_P ())
2485         {
2486           /* This may change after the call to
2487              push_template_decl_real, but we want the original value.  */
2488           tree name = DECL_NAME (decl);
2489
2490           decl = push_template_decl_real (decl, globalize);
2491           /* If the current binding level is the binding level for the
2492              template parameters (see the comment in
2493              begin_template_parm_list) and the enclosing level is a class
2494              scope, and we're not looking at a friend, push the
2495              declaration of the member class into the class scope.  In the
2496              friend case, push_template_decl will already have put the
2497              friend into global scope, if appropriate.  */
2498           if (TREE_CODE (type) != ENUMERAL_TYPE
2499               && !globalize && b->pseudo_global
2500               && b->level_chain->parm_flag == 2)
2501             {
2502               pushdecl_with_scope (CLASSTYPE_TI_TEMPLATE (type),
2503                                    b->level_chain);
2504               finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
2505               /* Put this tag on the list of tags for the class, since
2506                  that won't happen below because B is not the class
2507                  binding level, but is instead the pseudo-global level.  */
2508               b->level_chain->tags = 
2509                 saveable_tree_cons (name, type, b->level_chain->tags);
2510               TREE_NONLOCAL_FLAG (type) = 1;
2511               if (TYPE_SIZE (current_class_type) == NULL_TREE)
2512                 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2513             }
2514         }
2515     }
2516
2517   return decl;
2518 }
2519
2520 /* Push a tag name NAME for struct/class/union/enum type TYPE.
2521    Normally put it into the inner-most non-tag-transparent scope,
2522    but if GLOBALIZE is true, put it in the inner-most non-class scope.
2523    The latter is needed for implicit declarations.  */
2524
2525 void
2526 pushtag (name, type, globalize)
2527      tree name, type;
2528      int globalize;
2529 {
2530   register struct binding_level *b;
2531   tree context = 0;
2532   tree c_decl = 0;
2533
2534   b = inner_binding_level;
2535   while (b->tag_transparent
2536          || (globalize && b->parm_flag == 2))
2537     b = b->level_chain;
2538
2539   if (toplevel_bindings_p ())
2540     b->tags = perm_tree_cons (name, type, b->tags);
2541   else
2542     b->tags = saveable_tree_cons (name, type, b->tags);
2543
2544   if (name)
2545     {
2546       context = type ? TYPE_CONTEXT (type) : NULL_TREE;
2547       if (! context)
2548         {
2549           tree cs = current_scope ();
2550
2551           if (! globalize)
2552             context = cs;
2553           else if (cs != NULL_TREE 
2554                    && TREE_CODE_CLASS (TREE_CODE (cs)) == 't')
2555             /* When declaring a friend class of a local class, we want
2556                to inject the newly named class into the scope
2557                containing the local class, not the namespace scope.  */
2558             context = hack_decl_function_context (get_type_decl (cs));
2559         }
2560       if (context)
2561         c_decl = TREE_CODE (context) == FUNCTION_DECL
2562           ? context : TYPE_MAIN_DECL (context);
2563
2564       if (!context)
2565         context = current_namespace;
2566
2567       /* Do C++ gratuitous typedefing.  */
2568       if (IDENTIFIER_TYPE_VALUE (name) != type)
2569         {
2570           register tree d = NULL_TREE;
2571           int newdecl = 0, in_class = 0;
2572
2573           if ((b->pseudo_global && b->level_chain->parm_flag == 2)
2574               || b->parm_flag == 2)
2575             in_class = 1;
2576           else
2577             d = lookup_nested_type (type, c_decl);
2578
2579           if (d == NULL_TREE)
2580             {
2581               newdecl = 1;
2582               d = build_decl (TYPE_DECL, name, type);
2583               if (current_lang_name == lang_name_java)
2584                 TYPE_FOR_JAVA (type) = 1;
2585               SET_DECL_ARTIFICIAL (d);
2586               if (! in_class)
2587                 set_identifier_type_value_with_scope (name, type, b);
2588             }
2589           else
2590             d = TYPE_MAIN_DECL (d);
2591
2592           TYPE_NAME (type) = d;
2593           DECL_CONTEXT (d) = FROB_CONTEXT (context);
2594
2595           d = maybe_process_template_type_declaration (type,
2596                                                        globalize, b);
2597
2598           if (b->parm_flag == 2)
2599             {
2600               pushdecl_class_level (d);
2601               if (newdecl && !PROCESSING_REAL_TEMPLATE_DECL_P ())
2602                 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2603                    class.  But if it's a member template class, we
2604                    want the TEMPLATE_DECL, not the TYPE_DECL, so this
2605                    is done later.  */
2606                 finish_member_declaration (d);
2607             }
2608           else
2609             d = pushdecl_with_scope (d, b);
2610
2611           if (newdecl)
2612             {
2613               if (ANON_AGGRNAME_P (name))
2614                 DECL_IGNORED_P (d) = 1;
2615
2616               TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2617               DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
2618               if (!uses_template_parms (type))
2619                 DECL_ASSEMBLER_NAME (d)
2620                   = get_identifier (build_overload_name (type, 1, 1));
2621             }
2622         }
2623       if (b->parm_flag == 2)
2624         {
2625           TREE_NONLOCAL_FLAG (type) = 1;
2626           if (TYPE_SIZE (current_class_type) == NULL_TREE)
2627             CLASSTYPE_TAGS (current_class_type) = b->tags;
2628         }
2629     }
2630
2631   if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2632     /* Use the canonical TYPE_DECL for this node.  */
2633     TYPE_STUB_DECL (type) = TYPE_NAME (type);
2634   else
2635     {
2636       /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2637          will be the tagged type we just added to the current
2638          binding level.  This fake NULL-named TYPE_DECL node helps
2639          dwarfout.c to know when it needs to output a
2640          representation of a tagged type, and it also gives us a
2641          convenient place to record the "scope start" address for
2642          the tagged type.  */
2643
2644       tree d = build_decl (TYPE_DECL, NULL_TREE, type);
2645       TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2646     }
2647 }
2648
2649 /* Counter used to create anonymous type names.  */
2650
2651 static int anon_cnt = 0;
2652
2653 /* Return an IDENTIFIER which can be used as a name for
2654    anonymous structs and unions.  */
2655
2656 tree
2657 make_anon_name ()
2658 {
2659   char buf[32];
2660
2661   sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2662   return get_identifier (buf);
2663 }
2664
2665 /* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2666    This keeps dbxout from getting confused.  */
2667
2668 void
2669 clear_anon_tags ()
2670 {
2671   register struct binding_level *b;
2672   register tree tags;
2673   static int last_cnt = 0;
2674
2675   /* Fast out if no new anon names were declared.  */
2676   if (last_cnt == anon_cnt)
2677     return;
2678
2679   b = current_binding_level;
2680   while (b->tag_transparent)
2681     b = b->level_chain;
2682   tags = b->tags;
2683   while (tags)
2684     {
2685       /* A NULL purpose means we have already processed all tags
2686          from here to the end of the list.  */
2687       if (TREE_PURPOSE (tags) == NULL_TREE)
2688         break;
2689       if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2690         TREE_PURPOSE (tags) = NULL_TREE;
2691       tags = TREE_CHAIN (tags);
2692     }
2693   last_cnt = anon_cnt;
2694 }
2695 \f
2696 /* Subroutine of duplicate_decls: return truthvalue of whether
2697    or not types of these decls match.
2698
2699    For C++, we must compare the parameter list so that `int' can match
2700    `int&' in a parameter position, but `int&' is not confused with
2701    `const int&'.  */
2702
2703 int
2704 decls_match (newdecl, olddecl)
2705      tree newdecl, olddecl;
2706 {
2707   int types_match;
2708
2709   if (newdecl == olddecl)
2710     return 1;
2711
2712   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
2713     /* If the two DECLs are not even the same kind of thing, we're not
2714        interested in their types.  */
2715     return 0;
2716
2717   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2718     {
2719       tree f1 = TREE_TYPE (newdecl);
2720       tree f2 = TREE_TYPE (olddecl);
2721       tree p1 = TYPE_ARG_TYPES (f1);
2722       tree p2 = TYPE_ARG_TYPES (f2);
2723
2724       if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl)
2725           && ! (DECL_LANGUAGE (newdecl) == lang_c
2726                 && DECL_LANGUAGE (olddecl) == lang_c))
2727         return 0;
2728
2729       /* When we parse a static member function definition,
2730          we put together a FUNCTION_DECL which thinks its type
2731          is METHOD_TYPE.  Change that to FUNCTION_TYPE, and
2732          proceed.  */
2733       if (TREE_CODE (f1) == METHOD_TYPE && DECL_STATIC_FUNCTION_P (olddecl))
2734         revert_static_member_fn (&newdecl, &f1, &p1);
2735       else if (TREE_CODE (f2) == METHOD_TYPE
2736                && DECL_STATIC_FUNCTION_P (newdecl))
2737         revert_static_member_fn (&olddecl, &f2, &p2);
2738
2739       /* Here we must take care of the case where new default
2740          parameters are specified.  Also, warn if an old
2741          declaration becomes ambiguous because default
2742          parameters may cause the two to be ambiguous.  */
2743       if (TREE_CODE (f1) != TREE_CODE (f2))
2744         {
2745           if (TREE_CODE (f1) == OFFSET_TYPE)
2746             cp_compiler_error ("`%D' redeclared as member function", newdecl);
2747           else
2748             cp_compiler_error ("`%D' redeclared as non-member function", newdecl);
2749           return 0;
2750         }
2751
2752       if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
2753         {
2754           if (! strict_prototypes_lang_c && DECL_LANGUAGE (olddecl) == lang_c
2755               && p2 == NULL_TREE)
2756             {
2757               types_match = self_promoting_args_p (p1);
2758               if (p1 == void_list_node)
2759                 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2760             }
2761           else if (!strict_prototypes_lang_c && DECL_LANGUAGE (olddecl)==lang_c
2762                    && DECL_LANGUAGE (newdecl) == lang_c && p1 == NULL_TREE)
2763             {
2764               types_match = self_promoting_args_p (p2);
2765               TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2766             }
2767           else
2768             types_match = compparms (p1, p2);
2769         }
2770       else
2771         types_match = 0;
2772     }
2773   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2774     {
2775       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
2776                                 DECL_TEMPLATE_PARMS (olddecl)))
2777         return 0;
2778       
2779       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2780         types_match = 1;
2781       else
2782         types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
2783                                    DECL_TEMPLATE_RESULT (newdecl));
2784     }
2785   else
2786     {
2787       if (TREE_TYPE (newdecl) == error_mark_node)
2788         types_match = TREE_TYPE (olddecl) == error_mark_node;
2789       else if (TREE_TYPE (olddecl) == NULL_TREE)
2790         types_match = TREE_TYPE (newdecl) == NULL_TREE;
2791       else if (TREE_TYPE (newdecl) == NULL_TREE)
2792         types_match = 0;
2793       else
2794         types_match = comptypes (TREE_TYPE (newdecl),
2795                                  TREE_TYPE (olddecl),
2796                                  COMPARE_REDECLARATION);
2797     }
2798
2799   return types_match;
2800 }
2801
2802 /* If NEWDECL is `static' and an `extern' was seen previously,
2803    warn about it.  (OLDDECL may be NULL_TREE; NAME contains
2804    information about previous usage as an `extern'.)
2805
2806    Note that this does not apply to the C++ case of declaring
2807    a variable `extern const' and then later `const'.
2808
2809    Don't complain about built-in functions, since they are beyond
2810    the user's control.  */
2811
2812 static void
2813 warn_extern_redeclared_static (newdecl, olddecl)
2814      tree newdecl, olddecl;
2815 {
2816   tree name;
2817
2818   static char *explicit_extern_static_warning
2819     = "`%D' was declared `extern' and later `static'";
2820   static char *implicit_extern_static_warning
2821     = "`%D' was declared implicitly `extern' and later `static'";
2822
2823   if (TREE_CODE (newdecl) == TYPE_DECL)
2824     return;
2825
2826   name = DECL_ASSEMBLER_NAME (newdecl);
2827   if (TREE_PUBLIC (name) && DECL_THIS_STATIC (newdecl))
2828     {
2829       /* It's okay to redeclare an ANSI built-in function as static,
2830          or to declare a non-ANSI built-in function as anything.  */
2831       if (! (TREE_CODE (newdecl) == FUNCTION_DECL
2832              && olddecl != NULL_TREE
2833              && TREE_CODE (olddecl) == FUNCTION_DECL
2834              && (DECL_BUILT_IN (olddecl)
2835                  || DECL_BUILT_IN_NONANSI (olddecl))))
2836         {
2837           cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
2838                       ? implicit_extern_static_warning
2839                       : explicit_extern_static_warning, newdecl);
2840           if (olddecl != NULL_TREE)
2841             cp_pedwarn_at ("previous declaration of `%D'", olddecl);
2842         }
2843     }
2844 }
2845
2846 /* Handle when a new declaration NEWDECL has the same name as an old
2847    one OLDDECL in the same binding contour.  Prints an error message
2848    if appropriate.
2849
2850    If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
2851    Otherwise, return 0.  */
2852
2853 int
2854 duplicate_decls (newdecl, olddecl)
2855      tree newdecl, olddecl;
2856 {
2857   extern struct obstack permanent_obstack;
2858   unsigned olddecl_uid = DECL_UID (olddecl);
2859   int olddecl_friend = 0, types_match = 0;
2860   int new_defines_function = 0;
2861
2862   if (newdecl == olddecl)
2863     return 1;
2864
2865   types_match = decls_match (newdecl, olddecl);
2866
2867   /* If either the type of the new decl or the type of the old decl is an
2868      error_mark_node, then that implies that we have already issued an
2869      error (earlier) for some bogus type specification, and in that case,
2870      it is rather pointless to harass the user with yet more error message
2871      about the same declaration, so just pretend the types match here.  */
2872   if (TREE_TYPE (newdecl) == error_mark_node
2873       || TREE_TYPE (olddecl) == error_mark_node)
2874     types_match = 1;
2875  
2876   /* Check for redeclaration and other discrepancies. */
2877   if (TREE_CODE (olddecl) == FUNCTION_DECL
2878       && DECL_ARTIFICIAL (olddecl)
2879       && (DECL_BUILT_IN (olddecl) || DECL_BUILT_IN_NONANSI (olddecl)))
2880     {
2881       /* If you declare a built-in or predefined function name as static,
2882          the old definition is overridden, but optionally warn this was a
2883          bad choice of name.  Ditto for overloads.  */
2884       if (! TREE_PUBLIC (newdecl)
2885           || (TREE_CODE (newdecl) == FUNCTION_DECL
2886               && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl)))
2887         {
2888           if (warn_shadow)
2889             cp_warning ("shadowing %s function `%#D'",
2890                         DECL_BUILT_IN (olddecl) ? "built-in" : "library",
2891                         olddecl);
2892           /* Discard the old built-in function.  */
2893           return 0;
2894         }
2895       else if (! types_match)
2896         {
2897           if (TREE_CODE (newdecl) != FUNCTION_DECL)
2898             {
2899               /* If the built-in is not ansi, then programs can override
2900                  it even globally without an error.  */
2901               if (! DECL_BUILT_IN (olddecl))
2902                 cp_warning ("library function `%#D' redeclared as non-function `%#D'",
2903                             olddecl, newdecl);
2904               else
2905                 {
2906                   cp_error ("declaration of `%#D'", newdecl);
2907                   cp_error ("conflicts with built-in declaration `%#D'",
2908                             olddecl);
2909                 }
2910               return 0;
2911             }
2912
2913           cp_warning ("declaration of `%#D'", newdecl);
2914           cp_warning ("conflicts with built-in declaration `%#D'",
2915                       olddecl);
2916         }
2917     }
2918   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
2919     {
2920       if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
2921            && TREE_CODE (newdecl) != TYPE_DECL
2922            && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
2923                  && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
2924           || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
2925               && TREE_CODE (olddecl) != TYPE_DECL
2926               && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
2927                     && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2928                         == TYPE_DECL))))
2929         {
2930           /* We do nothing special here, because C++ does such nasty
2931              things with TYPE_DECLs.  Instead, just let the TYPE_DECL
2932              get shadowed, and know that if we need to find a TYPE_DECL
2933              for a given name, we can look in the IDENTIFIER_TYPE_VALUE
2934              slot of the identifier.  */
2935           return 0;
2936         }
2937
2938       if ((TREE_CODE (newdecl) == FUNCTION_DECL
2939            && DECL_FUNCTION_TEMPLATE_P (olddecl))
2940           || (TREE_CODE (olddecl) == FUNCTION_DECL
2941               && DECL_FUNCTION_TEMPLATE_P (newdecl)))
2942         return 0;
2943
2944       cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
2945       if (TREE_CODE (olddecl) == TREE_LIST)
2946         olddecl = TREE_VALUE (olddecl);
2947       cp_error_at ("previous declaration of `%#D'", olddecl);
2948
2949       /* New decl is completely inconsistent with the old one =>
2950          tell caller to replace the old one.  */
2951
2952       return 0;
2953     }
2954   else if (!types_match)
2955     {
2956       if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl))
2957         /* These are certainly not duplicate declarations; they're
2958            from different scopes.  */
2959         return 0;
2960
2961       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2962         {
2963           /* The name of a class template may not be declared to refer to
2964              any other template, class, function, object, namespace, value,
2965              or type in the same scope.  */
2966           if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
2967               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2968             {
2969               cp_error ("declaration of template `%#D'", newdecl);
2970               cp_error_at ("conflicts with previous declaration `%#D'",
2971                            olddecl);
2972             }
2973           else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
2974                    && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
2975                    && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
2976                                  TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
2977                    && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
2978                                            DECL_TEMPLATE_PARMS (olddecl)))
2979             {
2980               cp_error ("new declaration `%#D'", newdecl);
2981               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
2982             }
2983           return 0;
2984         }
2985       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2986         {
2987           if (DECL_LANGUAGE (newdecl) == lang_c
2988               && DECL_LANGUAGE (olddecl) == lang_c)
2989             {
2990               cp_error ("declaration of C function `%#D' conflicts with",
2991                         newdecl);
2992               cp_error_at ("previous declaration `%#D' here", olddecl);
2993             }
2994           else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
2995                               TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
2996             {
2997               cp_error ("new declaration `%#D'", newdecl);
2998               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
2999             }
3000           else
3001             return 0;
3002         }
3003
3004       /* Already complained about this, so don't do so again.  */
3005       else if (current_class_type == NULL_TREE
3006           || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3007         {
3008           cp_error ("conflicting types for `%#D'", newdecl);
3009           cp_error_at ("previous declaration as `%#D'", olddecl);
3010         }
3011     }
3012   else if (TREE_CODE (newdecl) == FUNCTION_DECL 
3013             && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3014                  && (!DECL_TEMPLATE_INFO (newdecl)
3015                      || (DECL_TI_TEMPLATE (newdecl) 
3016                          != DECL_TI_TEMPLATE (olddecl))))
3017                 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3018                     && (!DECL_TEMPLATE_INFO (olddecl)
3019                         || (DECL_TI_TEMPLATE (olddecl) 
3020                             != DECL_TI_TEMPLATE (newdecl))))))
3021     /* It's OK to have a template specialization and a non-template
3022        with the same type, or to have specializations of two
3023        different templates with the same type.  Note that if one is a
3024        specialization, and the other is an instantiation of the same
3025        template, that we do not exit at this point.  That situation
3026        can occur if we instantiate a template class, and then
3027        specialize one of its methods.  This situation is legal, but
3028        the declarations must be merged in the usual way.  */
3029     return 0;
3030   else if (TREE_CODE (newdecl) == FUNCTION_DECL 
3031            && ((DECL_TEMPLATE_INSTANTIATION (olddecl) 
3032                 && !DECL_USE_TEMPLATE (newdecl))
3033                || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3034                    && !DECL_USE_TEMPLATE (olddecl))))
3035     /* One of the declarations is a template instantiation, and the
3036        other is not a template at all.  That's OK.  */
3037     return 0;
3038   else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3039            && DECL_NAMESPACE_ALIAS (newdecl)
3040            && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3041     /* Redeclaration of namespace alias, ignore it. */
3042     return 1;
3043   else
3044     {
3045       char *errmsg = redeclaration_error_message (newdecl, olddecl);
3046       if (errmsg)
3047         {
3048           cp_error (errmsg, newdecl);
3049           if (DECL_NAME (olddecl) != NULL_TREE)
3050             cp_error_at ((DECL_INITIAL (olddecl)
3051                           && namespace_bindings_p ())
3052                          ? "`%#D' previously defined here"
3053                          : "`%#D' previously declared here", olddecl);
3054         }
3055       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3056                && DECL_INITIAL (olddecl) != NULL_TREE
3057                && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3058                && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3059         {
3060           /* Prototype decl follows defn w/o prototype.  */
3061           cp_warning_at ("prototype for `%#D'", newdecl);
3062           cp_warning_at ("follows non-prototype definition here", olddecl);
3063         }
3064       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3065                && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
3066         {
3067           /* extern "C" int foo ();
3068              int foo () { bar (); }
3069              is OK.  */
3070           if (current_lang_stack == current_lang_base)
3071             DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3072           else
3073             {
3074               cp_error_at ("previous declaration of `%#D' with %L linkage",
3075                            olddecl, DECL_LANGUAGE (olddecl));
3076               cp_error ("conflicts with new declaration with %L linkage",
3077                         DECL_LANGUAGE (newdecl));
3078             }
3079         }
3080
3081       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
3082         ;
3083       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
3084         {
3085           tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3086           tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3087           int i = 1;
3088
3089           if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3090             t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
3091         
3092           for (; t1 && t1 != void_list_node;
3093                t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3094             if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3095               {
3096                 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3097                                            TREE_PURPOSE (t2)))
3098                   {
3099                     if (pedantic)
3100                       {
3101                         cp_pedwarn ("default argument given for parameter %d of `%#D'",
3102                                     i, newdecl);
3103                         cp_pedwarn_at ("after previous specification in `%#D'",
3104                                        olddecl);
3105                       }
3106                   }
3107                 else
3108                   {
3109                     cp_error ("default argument given for parameter %d of `%#D'",
3110                               i, newdecl);
3111                     cp_error_at ("after previous specification in `%#D'",
3112                                  olddecl);
3113                   }
3114               }
3115
3116           if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
3117               && TREE_ADDRESSABLE (olddecl) && warn_inline)
3118             {
3119               cp_warning ("`%#D' was used before it was declared inline",
3120                           newdecl);
3121               cp_warning_at ("previous non-inline declaration here",
3122                              olddecl);
3123             }
3124         }
3125     }
3126
3127   /* If new decl is `static' and an `extern' was seen previously,
3128      warn about it.  */
3129   warn_extern_redeclared_static (newdecl, olddecl);
3130
3131   /* We have committed to returning 1 at this point.  */
3132   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3133     {
3134       /* Now that functions must hold information normally held
3135          by field decls, there is extra work to do so that
3136          declaration information does not get destroyed during
3137          definition.  */
3138       if (DECL_VINDEX (olddecl))
3139         DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
3140       if (DECL_CONTEXT (olddecl))
3141         DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
3142       if (DECL_CLASS_CONTEXT (olddecl))
3143         DECL_CLASS_CONTEXT (newdecl) = DECL_CLASS_CONTEXT (olddecl);
3144       if (DECL_PENDING_INLINE_INFO (newdecl) == (struct pending_inline *)0)
3145         DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
3146       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3147       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
3148       DECL_ABSTRACT_VIRTUAL_P (newdecl) |= DECL_ABSTRACT_VIRTUAL_P (olddecl);
3149       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
3150       DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
3151       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
3152       
3153       /* Optionally warn about more than one declaration for the same
3154          name, but don't warn about a function declaration followed by a
3155          definition.  */
3156       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3157           && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3158           /* Don't warn about extern decl followed by definition. */
3159           && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3160           /* Don't warn about friends, let add_friend take care of it. */
3161           && ! DECL_FRIEND_P (newdecl))
3162         {
3163           cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3164           cp_warning_at ("previous declaration of `%D'", olddecl);
3165         }
3166     }
3167
3168   /* Deal with C++: must preserve virtual function table size.  */
3169   if (TREE_CODE (olddecl) == TYPE_DECL)
3170     {
3171       register tree newtype = TREE_TYPE (newdecl);
3172       register tree oldtype = TREE_TYPE (olddecl);
3173
3174       if (newtype != error_mark_node && oldtype != error_mark_node
3175           && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3176         {
3177           CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3178           CLASSTYPE_FRIEND_CLASSES (newtype)
3179             = CLASSTYPE_FRIEND_CLASSES (oldtype);
3180         }
3181     }
3182
3183   /* Copy all the DECL_... slots specified in the new decl
3184      except for any that we copy here from the old type.  */
3185   DECL_MACHINE_ATTRIBUTES (newdecl) 
3186     = merge_machine_decl_attributes (olddecl, newdecl);
3187
3188   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3189     {
3190       if (! duplicate_decls (DECL_TEMPLATE_RESULT (newdecl),
3191                              DECL_TEMPLATE_RESULT (olddecl)))
3192         cp_error ("invalid redeclaration of %D", newdecl);
3193       TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
3194       DECL_TEMPLATE_SPECIALIZATIONS (olddecl) 
3195         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3196                    DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
3197  
3198       return 1;
3199     }
3200     
3201   if (types_match)
3202     {
3203       /* Automatically handles default parameters.  */
3204       tree oldtype = TREE_TYPE (olddecl);
3205       tree newtype;
3206
3207       /* Make sure we put the new type in the same obstack as the old one.  */
3208       if (oldtype)
3209         push_obstacks (TYPE_OBSTACK (oldtype), TYPE_OBSTACK (oldtype));
3210       else
3211         {
3212           push_obstacks_nochange ();
3213           end_temporary_allocation ();
3214         }
3215
3216       /* Merge the data types specified in the two decls.  */
3217       newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3218
3219       if (TREE_CODE (newdecl) == VAR_DECL)
3220         DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3221       /* Do this after calling `common_type' so that default
3222          parameters don't confuse us.  */
3223       else if (TREE_CODE (newdecl) == FUNCTION_DECL
3224           && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3225               != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3226         {
3227           TREE_TYPE (newdecl) = build_exception_variant (newtype,
3228                                                          TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
3229           TREE_TYPE (olddecl) = build_exception_variant (newtype,
3230                                                          TYPE_RAISES_EXCEPTIONS (oldtype));
3231
3232           if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3233               && DECL_SOURCE_LINE (olddecl) != 0
3234               && flag_exceptions
3235               && ! compexcepttypes (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
3236             {
3237               cp_pedwarn ("declaration of `%D' throws different exceptions",
3238                         newdecl);
3239               cp_pedwarn_at ("previous declaration here", olddecl);
3240             }
3241         }
3242       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3243
3244       /* Lay the type out, unless already done.  */
3245       if (newtype != canonical_type_variant (oldtype)
3246           && TREE_TYPE (newdecl) != error_mark_node
3247           && !(processing_template_decl && uses_template_parms (newdecl)))
3248         layout_type (TREE_TYPE (newdecl));
3249
3250       if ((TREE_CODE (newdecl) == VAR_DECL
3251            || TREE_CODE (newdecl) == PARM_DECL
3252            || TREE_CODE (newdecl) == RESULT_DECL
3253            || TREE_CODE (newdecl) == FIELD_DECL
3254            || TREE_CODE (newdecl) == TYPE_DECL)
3255           && !(processing_template_decl && uses_template_parms (newdecl)))
3256         layout_decl (newdecl, 0);
3257
3258       /* Merge the type qualifiers.  */
3259       if (TREE_READONLY (newdecl))
3260         TREE_READONLY (olddecl) = 1;
3261       if (TREE_THIS_VOLATILE (newdecl))
3262         TREE_THIS_VOLATILE (olddecl) = 1;
3263
3264       /* Merge the initialization information.  */
3265       if (DECL_INITIAL (newdecl) == NULL_TREE
3266           && DECL_INITIAL (olddecl) != NULL_TREE)
3267         {
3268           DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3269           DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3270           DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
3271           if (DECL_LANG_SPECIFIC (newdecl)
3272               && DECL_LANG_SPECIFIC (olddecl))
3273             DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
3274         }
3275
3276       /* Merge the section attribute.
3277          We want to issue an error if the sections conflict but that must be
3278          done later in decl_attributes since we are called before attributes
3279          are assigned.  */
3280       if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3281         DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3282
3283       /* Keep the old rtl since we can safely use it, unless it's the
3284          call to abort() used for abstract virtuals.  */
3285       if ((DECL_LANG_SPECIFIC (olddecl)
3286            && !DECL_ABSTRACT_VIRTUAL_P (olddecl))
3287           || DECL_RTL (olddecl) != DECL_RTL (abort_fndecl))
3288         DECL_RTL (newdecl) = DECL_RTL (olddecl);
3289
3290       pop_obstacks ();
3291     }
3292   /* If cannot merge, then use the new type and qualifiers,
3293      and don't preserve the old rtl.  */
3294   else
3295     {
3296       /* Clean out any memory we had of the old declaration.  */
3297       tree oldstatic = value_member (olddecl, static_aggregates);
3298       if (oldstatic)
3299         TREE_VALUE (oldstatic) = error_mark_node;
3300
3301       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3302       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3303       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3304       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3305     }
3306
3307   /* Merge the storage class information.  */
3308   DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
3309   DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
3310   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3311   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3312   if (! DECL_EXTERNAL (olddecl))
3313     DECL_EXTERNAL (newdecl) = 0;
3314   
3315   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
3316     {
3317       DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3318       DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
3319       DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
3320       DECL_TEMPLATE_INSTANTIATED (newdecl) 
3321         |= DECL_TEMPLATE_INSTANTIATED (olddecl);
3322       /* Don't really know how much of the language-specific
3323          values we should copy from old to new.  */
3324       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3325       DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3326       DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
3327       DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3328       olddecl_friend = DECL_FRIEND_P (olddecl);
3329     }
3330
3331   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3332     {
3333       if (DECL_TEMPLATE_INSTANTIATION (olddecl) 
3334           && !DECL_TEMPLATE_INSTANTIATION (newdecl)) 
3335         {
3336           /* If newdecl is not a specialization, then it is not a
3337              template-related function at all.  And that means that we
3338              shoud have exited above, returning 0.  */
3339           my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3340                               0);
3341
3342           if (TREE_USED (olddecl)) 
3343             /* From [temp.expl.spec]:
3344                
3345                If a template, a member template or the member of a class
3346                template is explicitly specialized then that
3347                specialization shall be declared before the first use of
3348                that specialization that would cause an implicit
3349                instantiation to take place, in every translation unit in
3350                which such a use occurs.  */
3351             cp_error ("explicit specialization of %D after first use", 
3352                       olddecl);
3353
3354           SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3355         }
3356       DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3357
3358       /* If either decl says `inline', this fn is inline, unless its
3359          definition was passed already.  */
3360       if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3361         DECL_INLINE (olddecl) = 1;
3362       DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3363
3364       if (! types_match)
3365         {
3366           DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3367           DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3368           DECL_RTL (olddecl) = DECL_RTL (newdecl);
3369         }
3370       if (! types_match || new_defines_function)
3371         {
3372           /* These need to be copied so that the names are available.  */
3373           DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3374           DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
3375         }
3376       if (new_defines_function)
3377         /* If defining a function declared with other language
3378            linkage, use the previously declared language linkage.  */
3379         DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3380       else
3381         {
3382           /* If redeclaring a builtin function, and not a definition,
3383              it stays built in.  */
3384           if (DECL_BUILT_IN (olddecl))
3385             {
3386               DECL_BUILT_IN (newdecl) = 1;
3387               DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
3388               /* If we're keeping the built-in definition, keep the rtl,
3389                  regardless of declaration matches.  */
3390               DECL_RTL (newdecl) = DECL_RTL (olddecl);
3391             }
3392           else
3393             DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
3394
3395           DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
3396           if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
3397             /* Previously saved insns go together with
3398                the function's previous definition.  */
3399             DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3400           /* Don't clear out the arguments if we're redefining a function.  */
3401           if (DECL_ARGUMENTS (olddecl))
3402             DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3403         }
3404       if (DECL_LANG_SPECIFIC (olddecl))
3405         DECL_MAIN_VARIANT (newdecl) = DECL_MAIN_VARIANT (olddecl);
3406     }
3407
3408   if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3409     {
3410       NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3411     }
3412
3413   /* Now preserve various other info from the definition.  */
3414   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3415   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3416   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
3417   DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
3418
3419   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3420     {
3421       int function_size;
3422       struct lang_decl *ol = DECL_LANG_SPECIFIC (olddecl);
3423       struct lang_decl *nl = DECL_LANG_SPECIFIC (newdecl);
3424
3425       function_size = sizeof (struct tree_decl);
3426
3427       bcopy ((char *) newdecl + sizeof (struct tree_common),
3428              (char *) olddecl + sizeof (struct tree_common),
3429              function_size - sizeof (struct tree_common));
3430
3431       /* Can we safely free the storage used by newdecl?  */
3432
3433 #define ROUND(x) ((x + obstack_alignment_mask (&permanent_obstack)) \
3434                   & ~ obstack_alignment_mask (&permanent_obstack))
3435
3436       if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3437         {
3438           /* If newdecl is a template instantiation, it is possible that
3439              the following sequence of events has occurred:
3440
3441              o A friend function was declared in a class template.  The
3442              class template was instantiated.  
3443
3444              o The instantiation of the friend declaration was 
3445              recorded on the instantiation list, and is newdecl.  
3446
3447              o Later, however, instantiate_class_template called pushdecl
3448              on the newdecl to perform name injection.  But, pushdecl in
3449              turn called duplicate_decls when it discovered that another
3450              declaration of a global function with the same name already
3451              existed. 
3452
3453              o Here, in duplicate_decls, we decided to clobber newdecl.
3454
3455              If we're going to do that, we'd better make sure that
3456              olddecl, and not newdecl, is on the list of
3457              instantiations so that if we try to do the instantiation
3458              again we won't get the clobbered declaration.  */
3459
3460           tree tmpl = DECL_TI_TEMPLATE (newdecl); 
3461           tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); 
3462
3463           for (; decls; decls = TREE_CHAIN (decls))
3464             if (TREE_VALUE (decls) == newdecl)
3465               TREE_VALUE (decls) = olddecl;
3466         }
3467
3468       if (((char *)newdecl + ROUND (function_size) == (char *)nl
3469            && ((char *)newdecl + ROUND (function_size)
3470                + ROUND (sizeof (struct lang_decl))
3471                == obstack_next_free (&permanent_obstack)))
3472           || ((char *)newdecl + ROUND (function_size)
3473               == obstack_next_free (&permanent_obstack)))
3474         {
3475           DECL_MAIN_VARIANT (newdecl) = olddecl;
3476           DECL_LANG_SPECIFIC (olddecl) = ol;
3477           bcopy ((char *)nl, (char *)ol, sizeof (struct lang_decl));
3478
3479           obstack_free (&permanent_obstack, newdecl);
3480         }
3481       else if (LANG_DECL_PERMANENT (ol) && ol != nl)
3482         {
3483           if (DECL_MAIN_VARIANT (olddecl) == olddecl)
3484             {
3485               /* Save these lang_decls that would otherwise be lost.  */
3486               extern tree free_lang_decl_chain;
3487               tree free_lang_decl = (tree) ol;
3488
3489               if (DECL_LANG_SPECIFIC (olddecl) == ol)
3490                 abort ();
3491
3492               TREE_CHAIN (free_lang_decl) = free_lang_decl_chain;
3493               free_lang_decl_chain = free_lang_decl;
3494             }
3495           else
3496             {
3497               /* Storage leak.  */;
3498             }
3499         }
3500     }
3501   else
3502     {
3503       bcopy ((char *) newdecl + sizeof (struct tree_common),
3504              (char *) olddecl + sizeof (struct tree_common),
3505              sizeof (struct tree_decl) - sizeof (struct tree_common)
3506              + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3507     }
3508
3509   DECL_UID (olddecl) = olddecl_uid;
3510   if (olddecl_friend)
3511     DECL_FRIEND_P (olddecl) = 1;
3512
3513   /* NEWDECL contains the merged attribute lists.
3514      Update OLDDECL to be the same.  */
3515   DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3516
3517   return 1;
3518 }
3519
3520 /* Record a decl-node X as belonging to the current lexical scope.
3521    Check for errors (such as an incompatible declaration for the same
3522    name already seen in the same scope).
3523
3524    Returns either X or an old decl for the same name.
3525    If an old decl is returned, it may have been smashed
3526    to agree with what X says.  */
3527
3528 tree
3529 pushdecl (x)
3530      tree x;
3531 {
3532   register tree t;
3533   register tree name = DECL_ASSEMBLER_NAME (x);
3534   int need_new_binding = 1;
3535
3536   if (DECL_TEMPLATE_PARM_P (x))
3537     /* Template parameters have no context; they are not X::T even
3538        when declared within a class or namespace.  */
3539     ;
3540   else
3541     {
3542       if (current_function_decl && x != current_function_decl
3543           /* A local declaration for a function doesn't constitute
3544              nesting.  */
3545           && (TREE_CODE (x) != FUNCTION_DECL || DECL_INITIAL (x))
3546           /* Don't change DECL_CONTEXT of virtual methods.  */
3547           && (TREE_CODE (x) != FUNCTION_DECL || !DECL_VIRTUAL_P (x))
3548           && !DECL_CONTEXT (x))
3549         DECL_CONTEXT (x) = current_function_decl;
3550       if (!DECL_CONTEXT (x))
3551         DECL_CONTEXT (x) = FROB_CONTEXT (current_namespace);
3552     }
3553
3554   /* Type are looked up using the DECL_NAME, as that is what the rest of the
3555      compiler wants to use.  */
3556   if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
3557       || TREE_CODE (x) == NAMESPACE_DECL)
3558     name = DECL_NAME (x);
3559
3560   if (name)
3561     {
3562 #if 0
3563       /* Not needed...see below.  */
3564       char *file;
3565       int line;
3566 #endif
3567       if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3568         name = TREE_OPERAND (name, 0);
3569       
3570       /* Namespace-scoped variables are not found in the current level. */
3571       if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x))
3572         t = namespace_binding (name, DECL_CONTEXT (x));
3573       else
3574         t = lookup_name_current_level (name);
3575       if (t == error_mark_node)
3576         {
3577           /* error_mark_node is 0 for a while during initialization!  */
3578           t = NULL_TREE;
3579           cp_error_at ("`%#D' used prior to declaration", x);
3580         }
3581
3582       else if (t != NULL_TREE)
3583         {
3584 #if 0
3585           /* This is turned off until I have time to do it right (bpk).  */
3586           /* With the code below that uses it...  */
3587           file = DECL_SOURCE_FILE (t);
3588           line = DECL_SOURCE_LINE (t);
3589 #endif
3590           if (TREE_CODE (t) == PARM_DECL)
3591             {
3592               if (DECL_CONTEXT (t) == NULL_TREE)
3593                 fatal ("parse errors have confused me too much");
3594
3595               /* Check for duplicate params.  */
3596               if (duplicate_decls (x, t))
3597                 return t;
3598             }
3599           else if (((TREE_CODE (x) == FUNCTION_DECL && DECL_LANGUAGE (x) == lang_c)
3600                     || DECL_FUNCTION_TEMPLATE_P (x))
3601                    && is_overloaded_fn (t))
3602             /* Don't do anything just yet. */;
3603           else if (t == wchar_decl_node)
3604             {
3605               if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
3606                 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
3607
3608               /* Throw away the redeclaration.  */
3609               return t;
3610             }
3611           else if (TREE_CODE (t) != TREE_CODE (x))
3612             {
3613               if (duplicate_decls (x, t))
3614                 return t;
3615             }
3616           else if (duplicate_decls (x, t))
3617             {
3618 #if 0
3619               /* This is turned off until I have time to do it right (bpk).  */
3620
3621               /* Also warn if they did a prototype with `static' on it, but
3622                  then later left the `static' off.  */
3623               if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
3624                 {
3625                   if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3626                     return t;
3627
3628                   if (extra_warnings)
3629                     {
3630                       cp_warning ("`static' missing from declaration of `%D'",
3631                                   t);
3632                       warning_with_file_and_line (file, line,
3633                                                   "previous declaration of `%s'",
3634                                                   decl_as_string (t, 0));
3635                     }
3636
3637                   /* Now fix things so it'll do what they expect.  */
3638                   if (current_function_decl)
3639                     TREE_PUBLIC (current_function_decl) = 0;
3640                 }
3641               /* Due to interference in memory reclamation (X may be
3642                  obstack-deallocated at this point), we must guard against
3643                  one really special case.  [jason: This should be handled
3644                  by start_function]  */
3645               if (current_function_decl == x)
3646                 current_function_decl = t;
3647 #endif
3648               if (TREE_CODE (t) == TYPE_DECL)
3649                 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
3650               else if (TREE_CODE (t) == FUNCTION_DECL)
3651                 check_default_args (t);
3652
3653               return t;
3654             }
3655           else if (DECL_MAIN_P (x))
3656             {
3657               /* A redeclaration of main, but not a duplicate of the
3658                  previous one. 
3659
3660                  [basic.start.main]
3661
3662                  This function shall not be overloaded.  */
3663               cp_error_at ("invalid redeclaration of `%D'", t);
3664               cp_error ("as `%D'", x);
3665               /* We don't try to push this declaration since that
3666                  causes a crash.  */
3667               return x;
3668             }
3669         }
3670
3671       check_template_shadow (x);
3672
3673       /* If this is a function conjured up by the backend, massage it
3674          so it looks friendly.  */
3675       if (TREE_CODE (x) == FUNCTION_DECL
3676           && ! DECL_LANG_SPECIFIC (x))
3677         {
3678           retrofit_lang_decl (x);
3679           DECL_LANGUAGE (x) = lang_c;
3680         }
3681
3682       if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_FUNCTION_MEMBER_P (x))
3683         {
3684           t = push_overloaded_decl (x, PUSH_LOCAL);
3685           if (t != x || DECL_LANGUAGE (x) == lang_c)
3686             return t;
3687           if (!namespace_bindings_p ())
3688             /* We do not need to create a binding for this name;
3689                push_overloaded_decl will have already done so if
3690                necessary.  */
3691             need_new_binding = 0;
3692         }
3693       else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
3694         return push_overloaded_decl (x, PUSH_GLOBAL);
3695
3696       /* If declaring a type as a typedef, copy the type (unless we're
3697          at line 0), and install this TYPE_DECL as the new type's typedef
3698          name.  See the extensive comment in ../c-decl.c (pushdecl). */
3699       if (TREE_CODE (x) == TYPE_DECL)
3700         {
3701           tree type = TREE_TYPE (x);
3702           if (DECL_SOURCE_LINE (x) == 0)
3703             {
3704               if (TYPE_NAME (type) == 0)
3705                 TYPE_NAME (type) = x;
3706             }
3707           else if (type != error_mark_node && TYPE_NAME (type) != x
3708                    /* We don't want to copy the type when all we're
3709                       doing is making a TYPE_DECL for the purposes of
3710                       inlining.  */
3711                    && (!TYPE_NAME (type) 
3712                        || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
3713             {
3714               push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
3715
3716               DECL_ORIGINAL_TYPE (x) = type;
3717               type = build_type_copy (type);
3718               TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
3719               TYPE_NAME (type) = x;
3720               TREE_TYPE (x) = type;
3721
3722               pop_obstacks ();
3723             }
3724
3725           if (type != error_mark_node
3726               && TYPE_NAME (type)
3727               && TYPE_IDENTIFIER (type))
3728             set_identifier_type_value_with_scope (DECL_NAME (x), type, 
3729                                                   current_binding_level);
3730
3731         }
3732
3733       /* Multiple external decls of the same identifier ought to match.
3734
3735          We get warnings about inline functions where they are defined.
3736          We get warnings about other functions from push_overloaded_decl.
3737          
3738          Avoid duplicate warnings where they are used.  */
3739       if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
3740         {
3741           tree decl;
3742
3743           if (IDENTIFIER_NAMESPACE_VALUE (name) != NULL_TREE
3744               && (DECL_EXTERNAL (IDENTIFIER_NAMESPACE_VALUE (name))
3745                   || TREE_PUBLIC (IDENTIFIER_NAMESPACE_VALUE (name))))
3746             decl = IDENTIFIER_NAMESPACE_VALUE (name);
3747           else
3748             decl = NULL_TREE;
3749
3750           if (decl
3751               /* If different sort of thing, we already gave an error.  */
3752               && TREE_CODE (decl) == TREE_CODE (x)
3753               && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
3754             {
3755               cp_pedwarn ("type mismatch with previous external decl", x);
3756               cp_pedwarn_at ("previous external decl of `%#D'", decl);
3757             }
3758         }
3759
3760       /* This name is new in its binding level.
3761          Install the new declaration and return it.  */
3762       if (namespace_bindings_p ())
3763         {
3764           /* Install a global value.  */
3765
3766           /* If the first global decl has external linkage,
3767              warn if we later see static one.  */
3768           if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
3769             TREE_PUBLIC (name) = 1;
3770
3771           if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
3772                 && t != NULL_TREE))
3773             {
3774               if (TREE_CODE (x) == FUNCTION_DECL)
3775                 my_friendly_assert 
3776                   ((IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
3777                   || (IDENTIFIER_GLOBAL_VALUE (name) == x), 378);
3778               SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
3779             }
3780
3781           /* Don't forget if the function was used via an implicit decl.  */
3782           if (IDENTIFIER_IMPLICIT_DECL (name)
3783               && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
3784             TREE_USED (x) = 1;
3785
3786           /* Don't forget if its address was taken in that way.  */
3787           if (IDENTIFIER_IMPLICIT_DECL (name)
3788               && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
3789             TREE_ADDRESSABLE (x) = 1;
3790
3791           /* Warn about mismatches against previous implicit decl.  */
3792           if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
3793               /* If this real decl matches the implicit, don't complain.  */
3794               && ! (TREE_CODE (x) == FUNCTION_DECL
3795                     && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
3796             cp_warning
3797               ("`%D' was previously implicitly declared to return `int'", x);
3798
3799           /* If new decl is `static' and an `extern' was seen previously,
3800              warn about it.  */
3801           if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
3802             warn_extern_redeclared_static (x, t);
3803         }
3804       else
3805         {
3806           /* Here to install a non-global value.  */
3807           tree oldlocal = IDENTIFIER_VALUE (name);
3808           tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
3809
3810           if (need_new_binding)
3811             {
3812               push_local_binding (name, x, 0);
3813               /* Because push_local_binding will hook X on to the
3814                  current_binding_level's name list, we don't want to
3815                  do that again below.  */
3816               need_new_binding = 0;
3817             }
3818
3819           /* If this is a TYPE_DECL, push it into the type value slot.  */
3820           if (TREE_CODE (x) == TYPE_DECL)
3821             set_identifier_type_value_with_scope (name, TREE_TYPE (x), 
3822                                                   current_binding_level);
3823
3824           /* Clear out any TYPE_DECL shadowed by a namespace so that
3825              we won't think this is a type.  The C struct hack doesn't
3826              go through namespaces.  */
3827           if (TREE_CODE (x) == NAMESPACE_DECL)
3828             set_identifier_type_value_with_scope (name, NULL_TREE, 
3829                                                   current_binding_level);
3830
3831           /* If this is an extern function declaration, see if we
3832              have a global definition or declaration for the function.  */
3833           if (oldlocal == NULL_TREE
3834               && DECL_EXTERNAL (x)
3835               && oldglobal != NULL_TREE
3836               && TREE_CODE (x) == FUNCTION_DECL
3837               && TREE_CODE (oldglobal) == FUNCTION_DECL)
3838             {
3839               /* We have one.  Their types must agree.  */
3840               if (decls_match (x, oldglobal))
3841                 /* OK */;
3842               else
3843                 {
3844                   cp_warning ("extern declaration of `%#D' doesn't match", x);
3845                   cp_warning_at ("global declaration `%#D'", oldglobal);
3846                 }
3847             }
3848           /* If we have a local external declaration,
3849              and no file-scope declaration has yet been seen,
3850              then if we later have a file-scope decl it must not be static.  */
3851           if (oldlocal == NULL_TREE
3852               && oldglobal == NULL_TREE
3853               && DECL_EXTERNAL (x)
3854               && TREE_PUBLIC (x))
3855             TREE_PUBLIC (name) = 1;
3856
3857           if (DECL_FROM_INLINE (x))
3858             /* Inline decls shadow nothing.  */;
3859
3860           /* Warn if shadowing an argument at the top level of the body.  */
3861           else if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
3862               && TREE_CODE (oldlocal) == PARM_DECL
3863               && TREE_CODE (x) != PARM_DECL)
3864             {
3865               /* Go to where the parms should be and see if we
3866                  find them there.  */
3867               struct binding_level *b = current_binding_level->level_chain;
3868
3869               if (cleanup_label)
3870                 b = b->level_chain;
3871
3872               /* ARM $8.3 */
3873               if (b->parm_flag == 1)
3874                 cp_error ("declaration of `%#D' shadows a parameter", name);
3875             }
3876           else if (warn_shadow && oldlocal != NULL_TREE
3877                    && current_binding_level->is_for_scope
3878                    && !DECL_DEAD_FOR_LOCAL (oldlocal))
3879             {
3880               warning ("variable `%s' shadows local",
3881                        IDENTIFIER_POINTER (name));
3882               cp_warning_at ("  this is the shadowed declaration", oldlocal);
3883             }              
3884           /* Maybe warn if shadowing something else.  */
3885           else if (warn_shadow && !DECL_EXTERNAL (x)
3886                    /* No shadow warnings for internally generated vars.  */
3887                    && ! DECL_ARTIFICIAL (x)
3888                    /* No shadow warnings for vars made for inlining.  */
3889                    && ! DECL_FROM_INLINE (x))
3890             {
3891               char *warnstring = NULL;
3892
3893               if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
3894                 warnstring = "declaration of `%s' shadows a parameter";
3895               else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
3896                        && current_class_ptr
3897                        && !TREE_STATIC (name))
3898                 warnstring = "declaration of `%s' shadows a member of `this'";
3899               else if (oldlocal != NULL_TREE)
3900                 warnstring = "declaration of `%s' shadows previous local";
3901               else if (oldglobal != NULL_TREE)
3902                 /* XXX shadow warnings in outer-more namespaces */
3903                 warnstring = "declaration of `%s' shadows global declaration";
3904
3905               if (warnstring)
3906                 warning (warnstring, IDENTIFIER_POINTER (name));
3907             }
3908         }
3909
3910       if (TREE_CODE (x) == FUNCTION_DECL)
3911         check_default_args (x);
3912
3913       /* Keep count of variables in this level with incomplete type.  */
3914       if (TREE_CODE (x) == VAR_DECL
3915           && TREE_TYPE (x) != error_mark_node
3916           && ((TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
3917                && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
3918               /* RTTI TD entries are created while defining the type_info.  */
3919               || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
3920                   && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
3921         current_binding_level->incomplete 
3922           = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
3923     }
3924
3925   if (need_new_binding)
3926     {
3927       /* Put decls on list in reverse order.
3928          We will reverse them later if necessary.  */
3929       TREE_CHAIN (x) = current_binding_level->names;
3930       current_binding_level->names = x;
3931       if (! (current_binding_level != global_binding_level 
3932              || TREE_PERMANENT (x)))
3933         my_friendly_abort (124);
3934     }
3935
3936   return x;
3937 }
3938
3939 /* Same as pushdecl, but define X in binding-level LEVEL.  We rely on the
3940    caller to set DECL_CONTEXT properly.  */
3941
3942 static tree
3943 pushdecl_with_scope (x, level)
3944      tree x;
3945      struct binding_level *level;
3946 {
3947   register struct binding_level *b;
3948   tree function_decl = current_function_decl;
3949
3950   current_function_decl = NULL_TREE;
3951   if (level->parm_flag == 2)
3952     {
3953       b = class_binding_level;
3954       class_binding_level = level;
3955       pushdecl_class_level (x);
3956       class_binding_level = b;
3957     }
3958   else
3959     {
3960       b = current_binding_level;
3961       current_binding_level = level;
3962       x = pushdecl (x);
3963       current_binding_level = b;
3964     }
3965   current_function_decl = function_decl;
3966   return x;
3967 }
3968
3969 /* Like pushdecl, only it places X in the current namespace,
3970    if appropriate.  */
3971
3972 tree
3973 pushdecl_namespace_level (x)
3974      tree x;
3975 {
3976   register struct binding_level *b = inner_binding_level;
3977   register tree t;
3978
3979   t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
3980
3981   /* Now, the type_shadowed stack may screw us.  Munge it so it does
3982      what we want.  */
3983   if (TREE_CODE (x) == TYPE_DECL)
3984     {
3985       tree name = DECL_NAME (x);
3986       tree newval;
3987       tree *ptr = (tree *)0;
3988       for (; b != global_binding_level; b = b->level_chain)
3989         {
3990           tree shadowed = b->type_shadowed;
3991           for (; shadowed; shadowed = TREE_CHAIN (shadowed))
3992             if (TREE_PURPOSE (shadowed) == name)
3993               {
3994                 ptr = &TREE_VALUE (shadowed);
3995                 /* Can't break out of the loop here because sometimes
3996                    a binding level will have duplicate bindings for
3997                    PT names.  It's gross, but I haven't time to fix it.  */
3998               }
3999         }
4000       newval = TREE_TYPE (x);
4001       if (ptr == (tree *)0)
4002         {
4003           /* @@ This shouldn't be needed.  My test case "zstring.cc" trips
4004              up here if this is changed to an assertion.  --KR  */
4005           SET_IDENTIFIER_TYPE_VALUE (name, newval);
4006         }
4007       else
4008         {
4009           *ptr = newval;
4010         }
4011     }
4012   return t;
4013 }
4014
4015 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4016    if appropriate.  */
4017
4018 tree
4019 pushdecl_top_level (x)
4020      tree x;
4021 {
4022   tree cur_namespace = current_namespace;
4023   current_namespace = global_namespace;
4024   x = pushdecl_namespace_level (x);
4025   current_namespace = cur_namespace;
4026   return x;
4027 }
4028
4029 /* Make the declaration of X appear in CLASS scope.  */
4030
4031 void
4032 pushdecl_class_level (x)
4033      tree x;
4034 {
4035   /* Don't use DECL_ASSEMBLER_NAME here!  Everything that looks in class
4036      scope looks for the pre-mangled name.  */
4037   register tree name = DECL_NAME (x);
4038
4039   if (name)
4040     {
4041       if (TYPE_BEING_DEFINED (current_class_type))
4042         {
4043           /* A name N used in a class S shall refer to the same declaration
4044              in its context and when re-evaluated in the completed scope of S.
4045              Types, enums, and static vars are checked here; other
4046              members are checked in finish_struct.  */
4047           tree icv = IDENTIFIER_CLASS_VALUE (name);
4048
4049           /* This should match check_member_decl_is_same_in_complete_scope.  */
4050           if (icv && icv != x
4051               && flag_optional_diags
4052               /* Don't complain about inherited names.  */
4053               && id_in_current_class (name)
4054               /* Or shadowed tags.  */
4055               && !(DECL_DECLARES_TYPE_P (icv)
4056                    && DECL_CONTEXT (icv) == current_class_type))
4057             {
4058               cp_pedwarn ("declaration of identifier `%D' as `%#D'", name, x);
4059               cp_pedwarn_at ("conflicts with previous use in class as `%#D'",
4060                              icv);
4061             }
4062
4063           check_template_shadow (x);
4064         }
4065
4066       push_class_level_binding (name, x);
4067       if (TREE_CODE (x) == TYPE_DECL)
4068         set_identifier_type_value (name, TREE_TYPE (x));
4069     }
4070 }
4071
4072 #if 0
4073 /* This function is used to push the mangled decls for nested types into
4074    the appropriate scope.  Previously pushdecl_top_level was used, but that
4075    is incorrect for members of local classes.  */
4076
4077 void
4078 pushdecl_nonclass_level (x)
4079      tree x;
4080 {
4081   struct binding_level *b = current_binding_level;
4082
4083   my_friendly_assert (b->parm_flag != 2, 180);
4084
4085 #if 0
4086   /* Get out of template binding levels */
4087   while (b->pseudo_global)
4088     b = b->level_chain;
4089 #endif
4090
4091   pushdecl_with_scope (x, b);
4092 }
4093 #endif
4094
4095 /* Make the declaration(s) of X appear in CLASS scope
4096    under the name NAME.  */
4097
4098 void
4099 push_class_level_binding (name, x)
4100      tree name;
4101      tree x;
4102 {
4103   /* The class_binding_level will be NULL if x is a template 
4104      parameter name in a member template.  */
4105   if (!class_binding_level)
4106     return;
4107
4108   /* If this declaration shadows a declaration from an enclosing
4109      class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4110      we leave this class.  Record the shadowed declaration here.  */
4111   maybe_push_cache_obstack ();
4112   class_binding_level->class_shadowed
4113     = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
4114                  class_binding_level->class_shadowed);
4115   TREE_TYPE (class_binding_level->class_shadowed)
4116     = x;
4117   pop_obstacks ();
4118
4119   /* Put the binding on the stack of bindings for the identifier, and
4120      update IDENTIFIER_CLASS_VALUE.  */
4121   push_class_binding (name, x);
4122
4123   obstack_ptr_grow (&decl_obstack, x);
4124 }
4125
4126 /* Insert another USING_DECL into the current binding level,
4127    returning this declaration. If this is a redeclaration,
4128    do nothing and return NULL_TREE.  */
4129
4130 tree
4131 push_using_decl (scope, name)
4132      tree scope;
4133      tree name;
4134 {
4135   tree decl;
4136   
4137   my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4138   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4139   for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4140     if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4141       break;
4142   if (decl)
4143     return NULL_TREE;
4144   decl = build_lang_decl (USING_DECL, name, void_type_node);
4145   DECL_INITIAL (decl) = scope;
4146   TREE_CHAIN (decl) = current_binding_level->usings;
4147   current_binding_level->usings = decl;
4148   return decl;
4149 }
4150
4151 /* Add namespace to using_directives. Return NULL_TREE if nothing was
4152    changed (i.e. there was already a directive), or the fresh
4153    TREE_LIST otherwise.  */
4154
4155 tree
4156 push_using_directive (used)
4157      tree used;
4158 {
4159   tree ud = current_binding_level->using_directives;
4160   tree iter, ancestor;
4161   
4162   /* Check if we already have this. */
4163   if (purpose_member (used, ud) != NULL_TREE)
4164     return NULL_TREE;
4165
4166   /* Recursively add all namespaces used. */
4167   for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4168     push_using_directive (TREE_PURPOSE (iter));
4169
4170   ancestor = namespace_ancestor (current_decl_namespace (), used);
4171   ud = current_binding_level->using_directives;
4172   ud = perm_tree_cons (used, ancestor, ud);
4173   current_binding_level->using_directives = ud;
4174   return ud;
4175 }
4176
4177 /* DECL is a FUNCTION_DECL for a non-member function, which may have
4178    other definitions already in place.  We get around this by making
4179    the value of the identifier point to a list of all the things that
4180    want to be referenced by that name.  It is then up to the users of
4181    that name to decide what to do with that list.
4182
4183    DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its DECL_RESULT
4184    slot.  It is dealt with the same way.
4185
4186    FLAGS is a bitwise-or of the following values:
4187      PUSH_LOCAL: Bind DECL in the current scope, rather than at
4188                  namespace scope.
4189      PUSH_USING: DECL is being pushed as the result of a using
4190                  declaration. 
4191
4192    The value returned may be a previous declaration if we guessed wrong
4193    about what language DECL should belong to (C or C++).  Otherwise,
4194    it's always DECL (and never something that's not a _DECL).  */
4195
4196 tree
4197 push_overloaded_decl (decl, flags)
4198      tree decl;
4199      int flags;
4200 {
4201   tree name = DECL_NAME (decl);
4202   tree old;
4203   tree new_binding;
4204   int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
4205
4206   if (doing_global)
4207     {
4208       old = namespace_binding (name, DECL_CONTEXT (decl));
4209       if (old && TREE_CODE (old) == FUNCTION_DECL
4210           && DECL_ARTIFICIAL (old)
4211           && (DECL_BUILT_IN (old) || DECL_BUILT_IN_NONANSI (old)))
4212         {
4213           if (duplicate_decls (decl, old))
4214             return old;
4215           old = NULL_TREE;
4216         }
4217     }
4218   else
4219     old = lookup_name_current_level (name);
4220
4221   if (old)
4222     {
4223       if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
4224         {
4225           tree t = TREE_TYPE (old);
4226           if (IS_AGGR_TYPE (t) && warn_shadow
4227               && (! DECL_IN_SYSTEM_HEADER (decl)
4228                   || ! DECL_IN_SYSTEM_HEADER (old)))
4229             cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
4230           old = NULL_TREE;
4231         }
4232       else if (is_overloaded_fn (old))
4233         {
4234           tree tmp;
4235           
4236           for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
4237             {
4238               tree fn = OVL_CURRENT (tmp);
4239
4240               if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4241                   && !(flags & PUSH_USING)
4242                   && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4243                                 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4244                 cp_error ("`%#D' conflicts with previous using declaration `%#D'",
4245                           decl, fn);
4246               
4247               if (duplicate_decls (decl, fn))
4248                 return fn;
4249             }
4250         }
4251       else
4252         {
4253           cp_error_at ("previous non-function declaration `%#D'", old);
4254           cp_error ("conflicts with function declaration `%#D'", decl);
4255           return decl;
4256         }
4257     }
4258
4259   if (old || TREE_CODE (decl) == TEMPLATE_DECL)
4260     {
4261       if (old && TREE_CODE (old) != OVERLOAD)
4262         new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4263       else
4264         new_binding = ovl_cons (decl, old);
4265       if (flags & PUSH_USING)
4266         OVL_USED (new_binding) = 1;
4267     }
4268   else
4269     /* NAME is not ambiguous.  */
4270     new_binding = decl;
4271
4272   if (doing_global)
4273     set_namespace_binding (name, current_namespace, new_binding);
4274   else
4275     {
4276       /* We only create an OVERLOAD if there was a previous binding at
4277          this level, or if decl is a template. In the former case, we
4278          need to remove the old binding and replace it with the new
4279          binding.  We must also run through the NAMES on the binding
4280          level where the name was bound to update the chain.  */
4281
4282       if (TREE_CODE (new_binding) == OVERLOAD && old)
4283         {
4284           tree *d;
4285           
4286           for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4287                *d;
4288                d = &TREE_CHAIN (*d))
4289             if (*d == old
4290                 || (TREE_CODE (*d) == TREE_LIST
4291                     && TREE_VALUE (*d) == old))
4292               {
4293                 if (TREE_CODE (*d) == TREE_LIST)
4294                   /* Just replace the old binding with the new.  */
4295                   TREE_VALUE (*d) = new_binding;
4296                 else
4297                   /* Build a TREE_LIST to wrap the OVERLOAD.  */
4298                   *d = build_tree_list (NULL_TREE, new_binding);
4299
4300                 /* And update the CPLUS_BINDING node.  */
4301                 BINDING_VALUE (IDENTIFIER_BINDING (name))
4302                   = new_binding;
4303                 return decl;
4304               }
4305
4306           /* We should always find a previous binding in this case.  */
4307           my_friendly_abort (0);
4308         }
4309
4310       /* Install the new binding.  */
4311       push_local_binding (name, new_binding, flags);
4312     }
4313
4314   return decl;
4315 }
4316 \f
4317 /* Generate an implicit declaration for identifier FUNCTIONID
4318    as a function of type int ().  Print a warning if appropriate.  */
4319
4320 tree
4321 implicitly_declare (functionid)
4322      tree functionid;
4323 {
4324   register tree decl;
4325   int temp = allocation_temporary_p ();
4326
4327   push_obstacks_nochange ();
4328
4329   /* Save the decl permanently so we can warn if definition follows.
4330      In ANSI C, warn_implicit is usually false, so the saves little space.
4331      But in C++, it's usually true, hence the extra code.  */
4332   if (temp && (! warn_implicit || toplevel_bindings_p ()))
4333     end_temporary_allocation ();
4334
4335   /* We used to reuse an old implicit decl here,
4336      but this loses with inline functions because it can clobber
4337      the saved decl chains.  */
4338   decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4339
4340   DECL_EXTERNAL (decl) = 1;
4341   TREE_PUBLIC (decl) = 1;
4342
4343   /* ANSI standard says implicit declarations are in the innermost block.
4344      So we record the decl in the standard fashion.  */
4345   pushdecl (decl);
4346   rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4347
4348   if (warn_implicit
4349       /* Only one warning per identifier.  */
4350       && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4351     {
4352       cp_pedwarn ("implicit declaration of function `%#D'", decl);
4353     }
4354
4355   SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4356
4357   pop_obstacks ();
4358
4359   return decl;
4360 }
4361
4362 /* Return zero if the declaration NEWDECL is valid
4363    when the declaration OLDDECL (assumed to be for the same name)
4364    has already been seen.
4365    Otherwise return an error message format string with a %s
4366    where the identifier should go.  */
4367
4368 static char *
4369 redeclaration_error_message (newdecl, olddecl)
4370      tree newdecl, olddecl;
4371 {
4372   if (TREE_CODE (newdecl) == TYPE_DECL)
4373     {
4374       /* Because C++ can put things into name space for free,
4375          constructs like "typedef struct foo { ... } foo"
4376          would look like an erroneous redeclaration.  */
4377       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
4378         return 0;
4379       else
4380         return "redefinition of `%#D'";
4381     }
4382   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4383     {
4384       /* If this is a pure function, its olddecl will actually be
4385          the original initialization to `0' (which we force to call
4386          abort()).  Don't complain about redefinition in this case.  */
4387       if (DECL_LANG_SPECIFIC (olddecl) && DECL_ABSTRACT_VIRTUAL_P (olddecl))
4388         return 0;
4389
4390       /* If both functions come from different namespaces, this is not
4391          a redeclaration - this is a conflict with a used function. */
4392       if (DECL_NAMESPACE_SCOPE_P (olddecl)
4393           && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
4394         return "`%D' conflicts with used function";
4395
4396       /* We'll complain about linkage mismatches in
4397          warn_extern_redeclared_static.  */
4398
4399       /* Defining the same name twice is no good.  */
4400       if (DECL_INITIAL (olddecl) != NULL_TREE
4401           && DECL_INITIAL (newdecl) != NULL_TREE)
4402         {
4403           if (DECL_NAME (olddecl) == NULL_TREE)
4404             return "`%#D' not declared in class";
4405           else
4406             return "redefinition of `%#D'";
4407         }
4408       return 0;
4409     }
4410   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4411     {
4412       if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
4413            && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4414            && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4415           || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
4416               && TYPE_SIZE (TREE_TYPE (newdecl))
4417               && TYPE_SIZE (TREE_TYPE (olddecl))))
4418         return "redefinition of `%#D'";
4419       return 0;
4420     }
4421   else if (toplevel_bindings_p ())
4422     {
4423       /* Objects declared at top level:  */
4424       /* If at least one is a reference, it's ok.  */
4425       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
4426         return 0;
4427       /* Reject two definitions.  */
4428       return "redefinition of `%#D'";
4429     }
4430   else
4431     {
4432       /* Objects declared with block scope:  */
4433       /* Reject two definitions, and reject a definition
4434          together with an external reference.  */
4435       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
4436         return "redeclaration of `%#D'";
4437       return 0;
4438     }
4439 }
4440 \f
4441 /* Get the LABEL_DECL corresponding to identifier ID as a label.
4442    Create one if none exists so far for the current function.
4443    This function is called for both label definitions and label references.  */
4444
4445 tree
4446 lookup_label (id)
4447      tree id;
4448 {
4449   register tree decl = IDENTIFIER_LABEL_VALUE (id);
4450
4451   if (current_function_decl == NULL_TREE)
4452     {
4453       error ("label `%s' referenced outside of any function",
4454              IDENTIFIER_POINTER (id));
4455       return NULL_TREE;
4456     }
4457
4458   if ((decl == NULL_TREE
4459       || DECL_SOURCE_LINE (decl) == 0)
4460       && (named_label_uses == NULL
4461           || named_label_uses->names_in_scope != current_binding_level->names
4462           || named_label_uses->label_decl != decl))
4463     {
4464       struct named_label_list *new_ent;
4465       new_ent
4466         = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
4467       new_ent->label_decl = decl;
4468       new_ent->names_in_scope = current_binding_level->names;
4469       new_ent->binding_level = current_binding_level;
4470       new_ent->lineno_o_goto = lineno;
4471       new_ent->filename_o_goto = input_filename;
4472       new_ent->next = named_label_uses;
4473       named_label_uses = new_ent;
4474     }
4475
4476   /* Use a label already defined or ref'd with this name.  */
4477   if (decl != NULL_TREE)
4478     {
4479       /* But not if it is inherited and wasn't declared to be inheritable.  */
4480       if (DECL_CONTEXT (decl) != current_function_decl
4481           && ! C_DECLARED_LABEL_FLAG (decl))
4482         return shadow_label (id);
4483       return decl;
4484     }
4485
4486   decl = build_decl (LABEL_DECL, id, void_type_node);
4487
4488   /* Make sure every label has an rtx.  */
4489   label_rtx (decl);
4490
4491   /* A label not explicitly declared must be local to where it's ref'd.  */
4492   DECL_CONTEXT (decl) = current_function_decl;
4493
4494   DECL_MODE (decl) = VOIDmode;
4495
4496   /* Say where one reference is to the label,
4497      for the sake of the error if it is not defined.  */
4498   DECL_SOURCE_LINE (decl) = lineno;
4499   DECL_SOURCE_FILE (decl) = input_filename;
4500
4501   SET_IDENTIFIER_LABEL_VALUE (id, decl);
4502
4503   named_labels = tree_cons (NULL_TREE, decl, named_labels);
4504   named_label_uses->label_decl = decl;
4505
4506   return decl;
4507 }
4508
4509 /* Make a label named NAME in the current function,
4510    shadowing silently any that may be inherited from containing functions
4511    or containing scopes.
4512
4513    Note that valid use, if the label being shadowed
4514    comes from another scope in the same function,
4515    requires calling declare_nonlocal_label right away.  */
4516
4517 tree
4518 shadow_label (name)
4519      tree name;
4520 {
4521   register tree decl = IDENTIFIER_LABEL_VALUE (name);
4522
4523   if (decl != NULL_TREE)
4524     {
4525       shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
4526       SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE);
4527     }
4528
4529   return lookup_label (name);
4530 }
4531
4532 /* Define a label, specifying the location in the source file.
4533    Return the LABEL_DECL node for the label, if the definition is valid.
4534    Otherwise return 0.  */
4535
4536 tree
4537 define_label (filename, line, name)
4538      char *filename;
4539      int line;
4540      tree name;
4541 {
4542   tree decl;
4543
4544   if (minimal_parse_mode)
4545     {
4546       push_obstacks (&permanent_obstack, &permanent_obstack);
4547       decl = build_decl (LABEL_DECL, name, void_type_node);
4548       pop_obstacks ();
4549       DECL_SOURCE_LINE (decl) = line;
4550       DECL_SOURCE_FILE (decl) = filename;
4551       add_tree (decl);
4552       return decl;
4553     }
4554
4555   decl = lookup_label (name);
4556
4557   /* After labels, make any new cleanups go into their
4558      own new (temporary) binding contour.  */
4559   current_binding_level->more_cleanups_ok = 0;
4560
4561   /* If label with this name is known from an outer context, shadow it.  */
4562   if (decl != NULL_TREE && DECL_CONTEXT (decl) != current_function_decl)
4563     {
4564       shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
4565       SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE);
4566       decl = lookup_label (name);
4567     }
4568
4569   if (name == get_identifier ("wchar_t"))
4570     cp_pedwarn ("label named wchar_t");
4571
4572   if (DECL_INITIAL (decl) != NULL_TREE)
4573     {
4574       cp_error ("duplicate label `%D'", decl);
4575       return 0;
4576     }
4577   else
4578     {
4579       struct named_label_list *uses, *prev;
4580       int identified = 0;
4581
4582       /* Mark label as having been defined.  */
4583       DECL_INITIAL (decl) = error_mark_node;
4584       /* Say where in the source.  */
4585       DECL_SOURCE_FILE (decl) = filename;
4586       DECL_SOURCE_LINE (decl) = line;
4587
4588       prev = NULL;
4589       uses = named_label_uses;
4590       while (uses != NULL)
4591         if (uses->label_decl == decl)
4592           {
4593             struct binding_level *b = current_binding_level;
4594             while (b)
4595               {
4596                 tree new_decls = b->names;
4597                 tree old_decls = (b == uses->binding_level)
4598                                   ? uses->names_in_scope : NULL_TREE;
4599                 while (new_decls != old_decls)
4600                   {
4601                     if (TREE_CODE (new_decls) == VAR_DECL
4602                         /* Don't complain about crossing initialization
4603                            of internal entities.  They can't be accessed,
4604                            and they should be cleaned up
4605                            by the time we get to the label.  */
4606                         && ! DECL_ARTIFICIAL (new_decls)
4607                         && !(DECL_INITIAL (new_decls) == NULL_TREE
4608                              && pod_type_p (TREE_TYPE (new_decls))))
4609                       {
4610                         if (! identified) 
4611                           {
4612                             cp_error ("jump to label `%D'", decl);
4613                             error_with_file_and_line (uses->filename_o_goto,
4614                                                       uses->lineno_o_goto,
4615                                                       "  from here");
4616                             identified = 1;
4617                         }
4618                         if (DECL_INITIAL (new_decls)
4619                             || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls)))
4620                           cp_error_at ("  crosses initialization of `%#D'",
4621                                        new_decls);
4622                         else
4623                           cp_error_at ("  enters scope of non-POD `%#D'",
4624                                          new_decls);
4625                       }
4626                     new_decls = TREE_CHAIN (new_decls);
4627                   }
4628                 if (b == uses->binding_level)
4629                   break;
4630                 b = b->level_chain;
4631               }
4632
4633             if (prev != NULL)
4634               prev->next = uses->next;
4635             else
4636               named_label_uses = uses->next;
4637
4638             uses = uses->next;
4639           }
4640         else
4641           {
4642             prev = uses;
4643             uses = uses->next;
4644           }
4645       current_function_return_value = NULL_TREE;
4646       return decl;
4647     }
4648 }
4649
4650 struct cp_switch
4651 {
4652   struct binding_level *level;
4653   struct cp_switch *next;
4654 };
4655
4656 static struct cp_switch *switch_stack;
4657
4658 void
4659 push_switch ()
4660 {
4661   struct cp_switch *p
4662     = (struct cp_switch *) oballoc (sizeof (struct cp_switch));
4663   p->level = current_binding_level;
4664   p->next = switch_stack;
4665   switch_stack = p;
4666 }
4667
4668 void
4669 pop_switch ()
4670 {
4671   switch_stack = switch_stack->next;
4672 }
4673
4674 /* Same, but for CASE labels.  If DECL is NULL_TREE, it's the default.  */
4675 /* XXX Note decl is never actually used. (bpk) */
4676
4677 void
4678 define_case_label ()
4679 {
4680   tree cleanup = last_cleanup_this_contour ();
4681   struct binding_level *b = current_binding_level;
4682   int identified = 0;
4683
4684   if (cleanup)
4685     {
4686       static int explained = 0;
4687       cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
4688       warning ("where case label appears here");
4689       if (!explained)
4690         {
4691           warning ("(enclose actions of previous case statements requiring");
4692           warning ("destructors in their own binding contours.)");
4693           explained = 1;
4694         }
4695     }
4696
4697   for (; b && b != switch_stack->level; b = b->level_chain)
4698     {
4699       tree new_decls = b->names;
4700       for (; new_decls; new_decls = TREE_CHAIN (new_decls))
4701         {
4702           if (TREE_CODE (new_decls) == VAR_DECL
4703               /* Don't complain about crossing initialization
4704                  of internal entities.  They can't be accessed,
4705                  and they should be cleaned up
4706                  by the time we get to the label.  */
4707               && ! DECL_ARTIFICIAL (new_decls)
4708               && ((DECL_INITIAL (new_decls) != NULL_TREE
4709                    && DECL_INITIAL (new_decls) != error_mark_node)
4710                   || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
4711             {
4712               if (! identified)
4713                 error ("jump to case label");
4714               identified = 1;
4715               cp_error_at ("  crosses initialization of `%#D'",
4716                            new_decls);
4717             }
4718         }
4719     }
4720
4721   /* After labels, make any new cleanups go into their
4722      own new (temporary) binding contour.  */
4723
4724   current_binding_level->more_cleanups_ok = 0;
4725   current_function_return_value = NULL_TREE;
4726 }
4727 \f
4728 /* Return the list of declarations of the current level.
4729    Note that this list is in reverse order unless/until
4730    you nreverse it; and when you do nreverse it, you must
4731    store the result back using `storedecls' or you will lose.  */
4732
4733 tree
4734 getdecls ()
4735 {
4736   return current_binding_level->names;
4737 }
4738
4739 /* Return the list of type-tags (for structs, etc) of the current level.  */
4740
4741 tree
4742 gettags ()
4743 {
4744   return current_binding_level->tags;
4745 }
4746
4747 /* Store the list of declarations of the current level.
4748    This is done for the parameter declarations of a function being defined,
4749    after they are modified in the light of any missing parameters.  */
4750
4751 static void
4752 storedecls (decls)
4753      tree decls;
4754 {
4755   current_binding_level->names = decls;
4756 }
4757
4758 /* Similarly, store the list of tags of the current level.  */
4759
4760 static void
4761 storetags (tags)
4762      tree tags;
4763 {
4764   current_binding_level->tags = tags;
4765 }
4766 \f
4767 /* Given NAME, an IDENTIFIER_NODE,
4768    return the structure (or union or enum) definition for that name.
4769    Searches binding levels from BINDING_LEVEL up to the global level.
4770    If THISLEVEL_ONLY is nonzero, searches only the specified context
4771    (but skips any tag-transparent contexts to find one that is
4772    meaningful for tags).
4773    FORM says which kind of type the caller wants;
4774    it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
4775    If the wrong kind of type is found, and it's not a template, an error is
4776    reported.  */
4777
4778 static tree
4779 lookup_tag (form, name, binding_level, thislevel_only)
4780      enum tree_code form;
4781      tree name;
4782      struct binding_level *binding_level;
4783      int thislevel_only;
4784 {
4785   register struct binding_level *level;
4786   /* Non-zero if, we should look past a pseudo-global level, even if
4787      THISLEVEL_ONLY.  */
4788   int allow_pseudo_global = 1;
4789
4790   for (level = binding_level; level; level = level->level_chain)
4791     {
4792       register tree tail;
4793       if (ANON_AGGRNAME_P (name))
4794         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4795           {
4796             /* There's no need for error checking here, because
4797                anon names are unique throughout the compilation.  */
4798             if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
4799               return TREE_VALUE (tail);
4800           }
4801       else if (level->namespace_p)
4802         /* Do namespace lookup. */
4803         for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
4804           {
4805             tree old = binding_for_name (name, tail);
4806
4807             /* If we just skipped past a pseudo global level, even
4808                though THISLEVEL_ONLY, and we find a template class
4809                declaration, then we use the _TYPE node for the
4810                template.  See the example below.  */
4811             if (thislevel_only && !allow_pseudo_global
4812                 && old && BINDING_VALUE (old) 
4813                 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
4814               old = TREE_TYPE (BINDING_VALUE (old));
4815             else 
4816               old = BINDING_TYPE (old);
4817
4818             /* If it has an original type, it is a typedef, and we
4819                should not return it.  */
4820             if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
4821               old = NULL_TREE;
4822             if (old && TREE_CODE (old) != form
4823                 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
4824               {
4825                 cp_error ("`%#D' redeclared as %C", old, form);
4826                 return NULL_TREE;
4827               }
4828             if (old)
4829               return old;
4830             if (thislevel_only || tail == global_namespace)
4831               return NULL_TREE;
4832           }
4833       else
4834         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4835           {
4836             if (TREE_PURPOSE (tail) == name)
4837               {
4838                 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
4839                 /* Should tighten this up; it'll probably permit
4840                    UNION_TYPE and a struct template, for example.  */
4841                 if (code != form
4842                     && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
4843                   {
4844                     /* Definition isn't the kind we were looking for.  */
4845                     cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
4846                               form);
4847                     return NULL_TREE;
4848                   }
4849                 return TREE_VALUE (tail);
4850               }
4851           }
4852       if (thislevel_only && ! level->tag_transparent)
4853         {
4854           if (level->pseudo_global && allow_pseudo_global)
4855             {
4856               /* We must deal with cases like this:
4857                  
4858                    template <class T> struct S;
4859                    template <class T> struct S {};
4860                    
4861                  When looking up `S', for the second declaration, we
4862                  would like to find the first declaration.  But, we
4863                  are in the pseudo-global level created for the
4864                  template parameters, rather than the (surrounding)
4865                  namespace level.  Thus, we keep going one more level,
4866                  even though THISLEVEL_ONLY is non-zero.  */
4867               allow_pseudo_global = 0;
4868               continue;
4869             }
4870           else
4871             return NULL_TREE;
4872         }
4873       if (current_class_type && level->level_chain->namespace_p)
4874         {
4875           /* Try looking in this class's tags before heading into
4876              global binding level.  */
4877           tree context = current_class_type;
4878           while (context)
4879             {
4880               switch (TREE_CODE_CLASS (TREE_CODE (context)))
4881                 {
4882                 tree these_tags;
4883                 case 't':
4884                     these_tags = CLASSTYPE_TAGS (context);
4885                     if (ANON_AGGRNAME_P (name))
4886                       while (these_tags)
4887                         {
4888                           if (TYPE_IDENTIFIER (TREE_VALUE (these_tags))
4889                               == name)
4890                             return TREE_VALUE (tail);
4891                           these_tags = TREE_CHAIN (these_tags);
4892                         }
4893                     else
4894                       while (these_tags)
4895                         {
4896                           if (TREE_PURPOSE (these_tags) == name)
4897                             {
4898                               if (TREE_CODE (TREE_VALUE (these_tags)) != form)
4899                                 {
4900                                   cp_error ("`%#D' redeclared as %C in class scope",
4901                                             TREE_VALUE (tail), form);
4902                                   return NULL_TREE;
4903                                 }
4904                               return TREE_VALUE (tail);
4905                             }
4906                           these_tags = TREE_CHAIN (these_tags);
4907                         }
4908                     /* If this type is not yet complete, then don't
4909                        look at its context.  */
4910                     if (TYPE_SIZE (context) == NULL_TREE)
4911                       goto no_context;
4912                     /* Go to next enclosing type, if any.  */
4913                     context = DECL_CONTEXT (TYPE_MAIN_DECL (context));
4914                     break;
4915                 case 'd':
4916                     context = DECL_CONTEXT (context);
4917                     break;
4918                 default:
4919                     my_friendly_abort (10);
4920                 }
4921               continue;
4922               no_context:
4923               break;
4924             }
4925         }
4926     }
4927   return NULL_TREE;
4928 }
4929
4930 #if 0
4931 void
4932 set_current_level_tags_transparency (tags_transparent)
4933      int tags_transparent;
4934 {
4935   current_binding_level->tag_transparent = tags_transparent;
4936 }
4937 #endif
4938
4939 /* Given a type, find the tag that was defined for it and return the tag name.
4940    Otherwise return 0.  However, the value can never be 0
4941    in the cases in which this is used.
4942
4943    C++: If NAME is non-zero, this is the new name to install.  This is
4944    done when replacing anonymous tags with real tag names.  */
4945
4946 static tree
4947 lookup_tag_reverse (type, name)
4948      tree type;
4949      tree name;
4950 {
4951   register struct binding_level *level;
4952
4953   for (level = current_binding_level; level; level = level->level_chain)
4954     {
4955       register tree tail;
4956       for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4957         {
4958           if (TREE_VALUE (tail) == type)
4959             {
4960               if (name)
4961                 TREE_PURPOSE (tail) = name;
4962               return TREE_PURPOSE (tail);
4963             }
4964         }
4965     }
4966   return NULL_TREE;
4967 }
4968 \f
4969 /* Lookup TYPE in CONTEXT (a chain of nested types or a FUNCTION_DECL).
4970    Return the type value, or NULL_TREE if not found.  */
4971
4972 static tree
4973 lookup_nested_type (type, context)
4974      tree type;
4975      tree context;
4976 {
4977   if (context == NULL_TREE)
4978     return NULL_TREE;
4979   while (context)
4980     {
4981       switch (TREE_CODE (context))
4982         {
4983         case TYPE_DECL:
4984           {
4985             tree ctype = TREE_TYPE (context);
4986             tree match = value_member (type, CLASSTYPE_TAGS (ctype));
4987             if (match)
4988               return TREE_VALUE (match);
4989             context = DECL_CONTEXT (context);
4990
4991             /* When we have a nested class whose member functions have
4992                local types (e.g., a set of enums), we'll arrive here
4993                with the DECL_CONTEXT as the actual RECORD_TYPE node for
4994                the enclosing class.  Instead, we want to make sure we
4995                come back in here with the TYPE_DECL, not the RECORD_TYPE.  */
4996             if (context && TREE_CODE (context) == RECORD_TYPE)
4997               context = TREE_CHAIN (context);
4998           }
4999           break;
5000         case FUNCTION_DECL:
5001           if (TYPE_NAME (type) && TYPE_IDENTIFIER (type))
5002             return lookup_name (TYPE_IDENTIFIER (type), 1);
5003           return NULL_TREE;
5004         default:
5005           my_friendly_abort (12);
5006         }
5007     }
5008   return NULL_TREE;
5009 }
5010
5011 /* Look up NAME in the NAMESPACE.  */
5012
5013 tree
5014 lookup_namespace_name (namespace, name)
5015      tree namespace, name;
5016 {
5017   struct tree_binding _b;
5018   tree val;
5019
5020   my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
5021
5022   if (TREE_CODE (name) == NAMESPACE_DECL)
5023     /* This happens for A::B<int> when B is a namespace. */
5024     return name;
5025   else if (TREE_CODE (name) == TEMPLATE_DECL)
5026     {
5027       /* This happens for A::B where B is a template, and there are no
5028          template arguments.  */
5029       cp_error ("invalid use of `%D'", name);
5030       return error_mark_node;
5031     }
5032
5033   namespace = ORIGINAL_NAMESPACE (namespace);
5034
5035   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
5036   
5037   val = binding_init (&_b);
5038   if (!qualified_lookup_using_namespace (name, namespace, val, 0))
5039     return error_mark_node;
5040
5041   if (BINDING_VALUE (val))
5042     {
5043       val = BINDING_VALUE (val);
5044
5045       /* If we have a single function from a using decl, pull it out.  */
5046       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5047         val = OVL_FUNCTION (val);
5048       return val;
5049     }
5050
5051   cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
5052   return error_mark_node;
5053 }
5054
5055 /* Hash a TYPENAME_TYPE.  K is really of type `tree'.  */
5056
5057 static unsigned long
5058 typename_hash (k)
5059      hash_table_key k;
5060 {
5061   unsigned long hash;
5062   tree t;
5063
5064   t = (tree) k;
5065   hash = (((unsigned long) TYPE_CONTEXT (t))
5066           ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5067
5068   return hash;
5069 }
5070
5071 /* Compare two TYPENAME_TYPEs.  K1 and K2 are really of type `tree'.  */
5072
5073 static boolean
5074 typename_compare (k1, k2)
5075      hash_table_key k1;
5076      hash_table_key k2;
5077 {
5078   tree t1;
5079   tree t2;
5080   tree d1;
5081   tree d2;
5082
5083   t1 = (tree) k1;
5084   t2 = (tree) k2;
5085   d1 = TYPE_NAME (t1);
5086   d2 = TYPE_NAME (t2);
5087   
5088   return (DECL_NAME (d1) == DECL_NAME (d2)
5089           && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
5090           && ((TREE_TYPE (t1) != NULL_TREE) 
5091               == (TREE_TYPE (t2) != NULL_TREE))
5092           && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5093           && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5094 }
5095
5096 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
5097    the type of `T', NAME is the IDENTIFIER_NODE for `t'.  If BASE_TYPE
5098    is non-NULL, this type is being created by the implicit typename
5099    extension, and BASE_TYPE is a type named `t' in some base class of
5100    `T' which depends on template parameters.  
5101
5102    Returns the new TYPENAME_TYPE.  */
5103
5104 tree
5105 build_typename_type (context, name, fullname, base_type)
5106      tree context;
5107      tree name;
5108      tree fullname;
5109      tree base_type;
5110 {
5111   tree t;
5112   tree d;
5113   struct hash_entry* e;
5114
5115   static struct hash_table ht;
5116
5117   push_obstacks (&permanent_obstack, &permanent_obstack);
5118
5119   if (!ht.table
5120       && !hash_table_init (&ht, &hash_newfunc, &typename_hash, 
5121                            &typename_compare))
5122     fatal ("virtual memory exhausted");
5123
5124   /* Build the TYPENAME_TYPE.  */
5125   t = make_lang_type (TYPENAME_TYPE);
5126   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5127   TYPENAME_TYPE_FULLNAME (t) = fullname;
5128   TREE_TYPE (t) = base_type;
5129
5130   /* Build the corresponding TYPE_DECL.  */
5131   d = build_decl (TYPE_DECL, name, t);
5132   TYPE_NAME (TREE_TYPE (d)) = d;
5133   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5134   DECL_CONTEXT (d) = FROB_CONTEXT (context);
5135   DECL_ARTIFICIAL (d) = 1;
5136
5137   /* See if we already have this type.  */
5138   e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5139   if (e)
5140     {
5141       /* This will free not only TREE_TYPE, but the lang-specific data
5142          and the TYPE_DECL as well.  */
5143       obstack_free (&permanent_obstack, t);
5144       t = (tree) e->key;
5145     }
5146   else
5147     /* Insert the type into the table.  */
5148     hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5149
5150   pop_obstacks ();
5151
5152   return t;
5153 }
5154
5155 tree
5156 make_typename_type (context, name)
5157      tree context, name;
5158 {
5159   tree t;
5160   tree fullname;
5161
5162   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
5163     name = TYPE_IDENTIFIER (name);
5164   else if (TREE_CODE (name) == TYPE_DECL)
5165     name = DECL_NAME (name);
5166
5167   fullname = name;
5168
5169   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5170     {
5171       name = TREE_OPERAND (name, 0);
5172       if (TREE_CODE (name) == TEMPLATE_DECL)
5173         name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5174     }
5175   if (TREE_CODE (name) != IDENTIFIER_NODE)
5176     my_friendly_abort (2000);
5177
5178   if (TREE_CODE (context) == NAMESPACE_DECL)
5179     {
5180       /* We can get here from typename_sub0 in the explicit_template_type
5181          expansion.  Just fail.  */
5182       cp_error ("no class template named `%#T' in `%#T'",
5183                 name, context);
5184       return error_mark_node;
5185     }
5186
5187   if (! uses_template_parms (context)
5188       || currently_open_class (context))
5189     {
5190       if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5191         {
5192           if (IS_AGGR_TYPE (context))
5193             t = lookup_field (context, name, 0, 0);
5194           else
5195             {
5196               cp_error ("no class template named `%#T' in `%#T'",
5197                         name, context);
5198               return error_mark_node;
5199             }
5200
5201           if (t && DECL_CLASS_TEMPLATE_P (t))
5202             return lookup_template_class (t, TREE_OPERAND (fullname, 1),
5203                                           NULL_TREE, context, 
5204                                           /*entering_scope=*/0);
5205         }
5206       else
5207         {
5208           if (IS_AGGR_TYPE (context))
5209             t = lookup_field (context, name, 0, 1);
5210           else
5211             {
5212               cp_error ("no type named `%#T' in `%#T'", name, context);
5213               return error_mark_node;
5214             }
5215
5216           if (t)
5217             return TREE_TYPE (t);
5218         }
5219     }
5220   
5221   return build_typename_type (context, name, fullname,  NULL_TREE);
5222 }
5223
5224 /* Select the right _DECL from multiple choices. */
5225
5226 static tree
5227 select_decl (binding, flags)
5228      tree binding;
5229      int flags;
5230 {
5231   tree val;
5232   val = BINDING_VALUE (binding);
5233   if (LOOKUP_NAMESPACES_ONLY (flags))
5234     {
5235       /* We are not interested in types. */
5236       if (val && TREE_CODE (val) == NAMESPACE_DECL)
5237         return val;
5238       return NULL_TREE;
5239     }
5240   
5241   /* If we could have a type and
5242      we have nothing or we need a type and have none.  */
5243   if (BINDING_TYPE (binding)
5244       && (!val || ((flags & LOOKUP_PREFER_TYPES)
5245                    && TREE_CODE (val) != TYPE_DECL)))
5246     val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5247   /* Don't return non-types if we really prefer types. */
5248   else if (val && LOOKUP_TYPES_ONLY (flags)  && TREE_CODE (val) != TYPE_DECL
5249            && (!looking_for_template || TREE_CODE (val) != TEMPLATE_DECL))
5250     val = NULL_TREE;
5251
5252   return val;
5253 }
5254
5255 /* Unscoped lookup of a global, iterate over namespaces, considering
5256    using namespace statements. */
5257
5258 static tree
5259 unqualified_namespace_lookup (name, flags)
5260      tree name;
5261      int flags;
5262 {
5263   struct tree_binding _binding;
5264   tree b = binding_init (&_binding);
5265   tree initial = current_decl_namespace();
5266   tree scope = initial;
5267   tree siter;
5268   struct binding_level *level;
5269   tree val = NULL_TREE;
5270
5271   while (!val)
5272     {
5273       val = binding_for_name (name, scope);
5274
5275       /* Initialize binding for this context. */
5276       BINDING_VALUE (b) = BINDING_VALUE (val);
5277       BINDING_TYPE (b) = BINDING_TYPE (val);
5278
5279       /* Add all _DECLs seen through local using-directives. */
5280       for (level = current_binding_level; 
5281            !level->namespace_p;
5282            level = level->level_chain)
5283         if (!lookup_using_namespace (name, b, level->using_directives,
5284                                      scope, flags))
5285           /* Give up because of error. */
5286           return NULL_TREE;
5287
5288       /* Add all _DECLs seen through global using-directives. */
5289       /* XXX local and global using lists should work equally. */
5290       siter = initial;
5291       while (1)
5292         {
5293           if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter), 
5294                                        scope, flags))
5295             /* Give up because of error. */
5296             return NULL_TREE;
5297           if (siter == scope) break;
5298           siter = CP_DECL_CONTEXT (siter);
5299         }
5300
5301       val = select_decl (b, flags);
5302       if (scope == global_namespace)
5303         break;
5304       scope = CP_DECL_CONTEXT (scope);
5305     }
5306   return val;
5307 }
5308
5309 /* Combine prefer_type and namespaces_only into flags.  */
5310
5311 static int
5312 lookup_flags (prefer_type, namespaces_only)
5313   int prefer_type, namespaces_only;
5314 {
5315   if (namespaces_only)
5316     return LOOKUP_PREFER_NAMESPACES;
5317   if (prefer_type > 1)
5318     return LOOKUP_PREFER_TYPES;
5319   if (prefer_type > 0)
5320     return LOOKUP_PREFER_BOTH;
5321   return 0;
5322 }
5323
5324 /* Given a lookup that returned VAL, use FLAGS to decide if we want to
5325    ignore it or not.  Subroutine of lookup_name_real.  */
5326
5327 static tree
5328 qualify_lookup (val, flags)
5329      tree val;
5330      int flags;
5331 {
5332   if (val == NULL_TREE)
5333     return val;
5334   if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5335     return val;
5336   if ((flags & LOOKUP_PREFER_TYPES)
5337       && (TREE_CODE (val) == TYPE_DECL
5338           || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5339               && DECL_CLASS_TEMPLATE_P (val))))
5340     return val;
5341   if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
5342     return NULL_TREE;
5343   return val;
5344 }
5345
5346 /* Look up NAME in the current binding level and its superiors in the
5347    namespace of variables, functions and typedefs.  Return a ..._DECL
5348    node of some kind representing its definition if there is only one
5349    such declaration, or return a TREE_LIST with all the overloaded
5350    definitions if there are many, or return 0 if it is undefined.
5351
5352    If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5353    If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
5354    If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
5355    Otherwise we prefer non-TYPE_DECLs.  
5356
5357    If NONCLASS is non-zero, we don't look for the NAME in class scope,
5358    using IDENTIFIER_CLASS_VALUE.  */
5359
5360 static tree
5361 lookup_name_real (name, prefer_type, nonclass, namespaces_only)
5362      tree name;
5363      int prefer_type, nonclass, namespaces_only;
5364 {
5365   register tree val;
5366   int yylex = 0;
5367   tree from_obj = NULL_TREE;
5368   int flags;
5369
5370   /* Hack: copy flag set by parser, if set. */
5371   if (only_namespace_names)
5372     namespaces_only = 1;
5373
5374   if (prefer_type == -2)
5375     {
5376       extern int looking_for_typename;
5377       tree type = NULL_TREE;
5378
5379       yylex = 1;
5380       prefer_type = looking_for_typename;
5381
5382       flags = lookup_flags (prefer_type, namespaces_only);
5383       /* During parsing, we need to complain. */
5384       flags |= LOOKUP_COMPLAIN;
5385       /* If the next thing is '<', class templates are types. */
5386       if (looking_for_template)
5387         flags |= LOOKUP_TEMPLATES_EXPECTED;
5388
5389       /* std:: becomes :: for now.  */
5390       if (got_scope == std_node)
5391         got_scope = void_type_node;
5392
5393       if (got_scope)
5394         type = got_scope;
5395       else if (got_object != error_mark_node)
5396         type = got_object;
5397       
5398       if (type)
5399         {
5400           if (type == error_mark_node)
5401             return error_mark_node;
5402           if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5403             type = TREE_TYPE (type);
5404
5405           if (TYPE_P (type))
5406             type = complete_type (type);
5407
5408           if (TREE_CODE (type) == VOID_TYPE)
5409             type = global_namespace;
5410           if (TREE_CODE (type) == NAMESPACE_DECL)
5411             {
5412               struct tree_binding b;
5413               val = binding_init (&b);
5414               if (!qualified_lookup_using_namespace (name, type, val, flags))
5415                 return NULL_TREE;
5416               val = select_decl (val, flags);
5417             }
5418           else if (! IS_AGGR_TYPE (type)
5419                    || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5420                    || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
5421                    || TREE_CODE (type) == TYPENAME_TYPE)
5422             /* Someone else will give an error about this if needed.  */
5423             val = NULL_TREE;
5424           else if (TYPE_BEING_DEFINED (type))
5425             {
5426               val = IDENTIFIER_CLASS_VALUE (name);
5427               if (val && DECL_CONTEXT (val) != type)
5428                 {
5429                   struct binding_level *b = class_binding_level;
5430                   for (val = NULL_TREE; b; b = b->level_chain)
5431                     {
5432                       tree t = purpose_member (name, b->class_shadowed);
5433                       if (t && TREE_VALUE (t)
5434                           && DECL_CONTEXT (TREE_VALUE (t)) == type)
5435                         {
5436                           val = TREE_VALUE (t);
5437                           break;
5438                         }
5439                     }
5440                 }
5441               if (val == NULL_TREE)
5442                 val = lookup_field (type, name, 0, 1);
5443             }
5444           else if (type == current_class_type)
5445             val = IDENTIFIER_CLASS_VALUE (name);
5446           else
5447             val = lookup_member (type, name, 0, prefer_type);
5448         }
5449       else
5450         val = NULL_TREE;
5451
5452       if (got_scope)
5453         goto done;
5454       else if (got_object && val)
5455         from_obj = val;
5456     }
5457   else
5458     flags = lookup_flags (prefer_type, namespaces_only);
5459
5460   /* First, look in non-namespace scopes.  */
5461   for (val = IDENTIFIER_BINDING (name); val; val = TREE_CHAIN (val))
5462     {
5463       if (!LOCAL_BINDING_P (val) && nonclass)
5464         /* We're not looking for class-scoped bindings, so keep going.  */
5465         continue;
5466       
5467       /* If this is the kind of thing we're looking for, we're done.  */
5468       if (qualify_lookup (BINDING_VALUE (val), flags))
5469         {
5470           val = BINDING_VALUE (val);
5471           break;
5472         }
5473       else if ((flags & LOOKUP_PREFER_TYPES) 
5474                && qualify_lookup (BINDING_TYPE (val), flags))
5475         {
5476           val = BINDING_TYPE (val);
5477           break;
5478         }
5479     }
5480
5481   /* If VAL is a type from a dependent base, we're not really supposed
5482      to be able to see it; the fact that we can is the "implicit
5483      typename" extension.  We call lookup_field here to turn VAL into
5484      a TYPE_DECL for a TYPENAME_TYPE.  */
5485   if (processing_template_decl && val
5486       && val == IDENTIFIER_CLASS_VALUE (name)
5487       && TREE_CODE (val) == TYPE_DECL
5488       && !currently_open_class (DECL_CONTEXT (val))
5489       && uses_template_parms (current_class_type))
5490     val = lookup_field (current_class_type, name, 0, 1);
5491
5492   /* We don't put names from baseclasses onto the IDENTIFIER_BINDING
5493      list when we're defining a type.  It would probably be simpler to
5494      do this, but we don't.  So, we must lookup names from base
5495      classes explicitly.  */
5496   if (!val && !nonclass 
5497       && current_class_type && TYPE_BEING_DEFINED (current_class_type))
5498     {
5499       val = qualify_lookup (lookup_field (current_class_type, name, 0, 0),
5500                             flags);
5501       if (!val)
5502         val = qualify_lookup (lookup_nested_field (name, !yylex),
5503                               flags);
5504     }
5505   
5506   /* If we found a type from a dependent base class (using the
5507      implicit typename extension) make sure that there's not some
5508      global name which should be chosen instead.  */
5509   if (val && TREE_CODE (val) == TYPE_DECL
5510       && IMPLICIT_TYPENAME_P (TREE_TYPE (val)))
5511     {
5512       tree global_val;
5513
5514       /* Any other name takes precedence over an implicit typename.  Warn the
5515          user about this potentially confusing lookup.  */
5516       global_val = unqualified_namespace_lookup (name, flags);
5517
5518       if (global_val)
5519         {
5520           tree subtype;
5521
5522           /* Only warn when not lexing; we don't want to warn if they
5523              use this name as a declarator.  */
5524           subtype = TREE_TYPE (TREE_TYPE (val));
5525           if (! yylex
5526               && ! (TREE_CODE (global_val) == TEMPLATE_DECL
5527                     && CLASSTYPE_TEMPLATE_INFO (subtype)
5528                     && CLASSTYPE_TI_TEMPLATE (subtype) == global_val)
5529               && ! (TREE_CODE (global_val) == TYPE_DECL
5530                     && same_type_p (TREE_TYPE (global_val), subtype)))
5531             {
5532               cp_warning ("lookup of `%D' finds `%#D'", name, global_val);
5533               cp_warning ("  instead of `%D' from dependent base class",
5534                           val);
5535               cp_warning ("  (use `typename %T::%D' if that's what you meant)",
5536                           constructor_name (current_class_type), name);
5537             }
5538
5539           /* Use the global value instead of the implicit typename.  */
5540           val = global_val;
5541         }
5542     }
5543   else if (!val)
5544     /* No local, or class-scoped binding.  Look for a namespace-scope
5545        declaration.  */
5546     val = unqualified_namespace_lookup (name, flags);
5547
5548  done:
5549   if (val)
5550     {
5551       /* This should only warn about types used in qualified-ids.  */
5552       if (from_obj && from_obj != val)
5553         {
5554           if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
5555               && TREE_CODE (val) == TYPE_DECL
5556               && TREE_TYPE (from_obj) != TREE_TYPE (val))
5557             {
5558               cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
5559                           name, got_object, TREE_TYPE (from_obj));
5560               cp_pedwarn ("  does not match lookup in the current scope (`%#T')",
5561                           TREE_TYPE (val));
5562             }
5563
5564           /* We don't change val to from_obj if got_object depends on
5565              template parms because that breaks implicit typename for
5566              destructor calls.  */
5567           if (! uses_template_parms (got_object))
5568             val = from_obj;
5569         }
5570
5571       /* If we have a single function from a using decl, pull it out.  */
5572       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5573         val = OVL_FUNCTION (val);
5574     }
5575   else if (from_obj)
5576     val = from_obj;
5577
5578   return val;
5579 }
5580
5581 tree
5582 lookup_name_nonclass (name)
5583      tree name;
5584 {
5585   return lookup_name_real (name, 0, 1, 0);
5586 }
5587
5588 tree
5589 lookup_function_nonclass (name, args)
5590      tree name;
5591      tree args;
5592 {
5593   return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
5594 }
5595
5596 tree
5597 lookup_name_namespace_only (name)
5598      tree name;
5599 {
5600   /* type-or-namespace, nonclass, namespace_only */
5601   return lookup_name_real (name, 1, 1, 1);
5602 }
5603
5604 tree
5605 lookup_name (name, prefer_type)
5606      tree name;
5607      int prefer_type;
5608 {
5609   return lookup_name_real (name, prefer_type, 0, 0);
5610 }
5611
5612 /* Similar to `lookup_name' but look only at current binding level.  */
5613
5614 tree
5615 lookup_name_current_level (name)
5616      tree name;
5617 {
5618   register tree t = NULL_TREE;
5619
5620   if (current_binding_level->namespace_p)
5621     {
5622       t =  IDENTIFIER_NAMESPACE_VALUE (name);
5623
5624       /* extern "C" function() */
5625       if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
5626         t = TREE_VALUE (t);
5627     }
5628   else if (IDENTIFIER_BINDING (name) 
5629            && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
5630     {
5631       struct binding_level *b = current_binding_level;
5632
5633       while (1)
5634         {
5635           if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
5636             return IDENTIFIER_VALUE (name);
5637           
5638           if (b->keep == 2)
5639             b = b->level_chain;
5640           else
5641             break;
5642         }
5643     }
5644
5645   return t;
5646 }
5647
5648 /* Like lookup_name_current_level, but for types.  */
5649
5650 tree
5651 lookup_type_current_level (name)
5652      tree name;
5653 {
5654   register tree t = NULL_TREE;
5655
5656   my_friendly_assert (! current_binding_level->namespace_p, 980716);
5657
5658   if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
5659       && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
5660     {
5661       struct binding_level *b = current_binding_level;
5662       while (1)
5663         {
5664           if (purpose_member (name, b->type_shadowed))
5665             return REAL_IDENTIFIER_TYPE_VALUE (name);
5666           if (b->keep == 2)
5667             b = b->level_chain;
5668           else
5669             break;
5670         }
5671     }
5672
5673   return t;
5674 }
5675
5676 void
5677 begin_only_namespace_names ()
5678 {
5679   only_namespace_names = 1;
5680 }
5681
5682 void
5683 end_only_namespace_names ()
5684 {
5685   only_namespace_names = 0;
5686 }
5687 \f
5688 /* Arrange for the user to get a source line number, even when the
5689    compiler is going down in flames, so that she at least has a
5690    chance of working around problems in the compiler.  We used to
5691    call error(), but that let the segmentation fault continue
5692    through; now, it's much more passive by asking them to send the
5693    maintainers mail about the problem.  */
5694
5695 static void
5696 signal_catch (sig)
5697      int sig ATTRIBUTE_UNUSED;
5698 {
5699   signal (SIGSEGV, SIG_DFL);
5700 #ifdef SIGIOT
5701   signal (SIGIOT, SIG_DFL);
5702 #endif
5703 #ifdef SIGILL
5704   signal (SIGILL, SIG_DFL);
5705 #endif
5706 #ifdef SIGABRT
5707   signal (SIGABRT, SIG_DFL);
5708 #endif
5709 #ifdef SIGBUS
5710   signal (SIGBUS, SIG_DFL);
5711 #endif
5712   my_friendly_abort (0);
5713 }
5714
5715 #if 0
5716 /* Unused -- brendan 970107 */
5717 /* Array for holding types considered "built-in".  These types
5718    are output in the module in which `main' is defined.  */
5719 static tree *builtin_type_tdescs_arr;
5720 static int builtin_type_tdescs_len, builtin_type_tdescs_max;
5721 #endif
5722
5723 /* Push the declarations of builtin types into the namespace.
5724    RID_INDEX, if < RID_MAX is the index of the builtin type
5725    in the array RID_POINTERS.  NAME is the name used when looking
5726    up the builtin type.  TYPE is the _TYPE node for the builtin type.  */
5727
5728 static void
5729 record_builtin_type (rid_index, name, type)
5730      enum rid rid_index;
5731      char *name;
5732      tree type;
5733 {
5734   tree rname = NULL_TREE, tname = NULL_TREE;
5735   tree tdecl = NULL_TREE;
5736
5737   if ((int) rid_index < (int) RID_MAX)
5738     rname = ridpointers[(int) rid_index];
5739   if (name)
5740     tname = get_identifier (name);
5741
5742   TYPE_BUILT_IN (type) = 1;
5743   
5744   if (tname)
5745     {
5746       tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
5747       set_identifier_type_value (tname, NULL_TREE);
5748       if ((int) rid_index < (int) RID_MAX)
5749         /* Built-in types live in the global namespace. */
5750         SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
5751     }
5752   if (rname != NULL_TREE)
5753     {
5754       if (tname != NULL_TREE)
5755         {
5756           set_identifier_type_value (rname, NULL_TREE);
5757           SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
5758         }
5759       else
5760         {
5761           tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
5762           set_identifier_type_value (rname, NULL_TREE);
5763         }
5764     }
5765 }
5766
5767 /* Record one of the standard Java types.
5768  * Declare it as having the given NAME.
5769  * If SIZE > 0, it is the size of one of the integral types;
5770  * otherwise it is the negative of the size of one of the other types.  */
5771
5772 static tree
5773 record_builtin_java_type (name, size)
5774      char *name;
5775      int size;
5776 {
5777   tree type, decl;
5778   if (size > 0)
5779     type = make_signed_type (size);
5780   else if (size > -32)
5781     { /* "__java_char" or ""__java_boolean". */
5782       type = make_unsigned_type (-size);
5783       /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
5784     }
5785   else
5786     { /* "__java_float" or ""__java_double". */
5787       type = make_node (REAL_TYPE);
5788       TYPE_PRECISION (type) = - size;
5789       layout_type (type);
5790     }
5791   record_builtin_type (RID_MAX, name, type);
5792   decl = TYPE_NAME (type);
5793   DECL_IGNORED_P (decl) = 1;
5794   TYPE_FOR_JAVA (type) = 1;
5795   return type;
5796 }
5797
5798 /* Push a type into the namespace so that the back-ends ignore it. */
5799
5800 static void
5801 record_unknown_type (type, name)
5802      tree type;
5803      char *name;
5804 {
5805   tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
5806   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
5807   DECL_IGNORED_P (decl) = 1;
5808   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5809   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
5810   TYPE_ALIGN (type) = 1;
5811   TYPE_MODE (type) = TYPE_MODE (void_type_node);
5812
5813
5814 /* Push overloaded decl, in global scope, with one argument so it
5815    can be used as a callback from define_function.  */
5816
5817 static void
5818 push_overloaded_decl_1 (x)
5819      tree x;
5820 {
5821   push_overloaded_decl (x, PUSH_GLOBAL);
5822 }
5823
5824 #ifdef __GNUC__
5825 __inline
5826 #endif
5827 tree
5828 auto_function (name, type, code)
5829      tree name, type;
5830      enum built_in_function code;
5831 {
5832   return define_function
5833     (IDENTIFIER_POINTER (name), type, code, push_overloaded_decl_1,
5834      IDENTIFIER_POINTER (build_decl_overload (name, TYPE_ARG_TYPES (type),
5835                                               0)));
5836 }
5837
5838 /* Create the predefined scalar types of C,
5839    and some nodes representing standard constants (0, 1, (void *)0).
5840    Initialize the global binding level.
5841    Make definitions for built-in primitive functions.  */
5842
5843 void
5844 init_decl_processing ()
5845 {
5846   register tree endlink, int_endlink, double_endlink, unsigned_endlink;
5847   tree fields[20];
5848   /* Data type of memcpy.  */
5849   tree memcpy_ftype, strlen_ftype;
5850   int wchar_type_size;
5851   tree temp;
5852   tree array_domain_type;
5853   tree vb_off_identifier = NULL_TREE;
5854   /* Function type `char *(char *, char *)' and similar ones */
5855   tree string_ftype_ptr_ptr, int_ftype_string_string;
5856   tree sizetype_endlink;
5857   tree ptr_ftype, ptr_ftype_unsigned, ptr_ftype_sizetype;
5858   tree void_ftype, void_ftype_int, void_ftype_ptr;
5859
5860   /* Have to make these distinct before we try using them.  */
5861   lang_name_cplusplus = get_identifier ("C++");
5862   lang_name_c = get_identifier ("C");
5863   lang_name_java = get_identifier ("Java");
5864
5865   /* Enter the global namespace. */
5866   my_friendly_assert (global_namespace == NULL_TREE, 375);
5867   my_friendly_assert (current_lang_name == NULL_TREE, 375);
5868   current_lang_name = lang_name_cplusplus;
5869   push_namespace (get_identifier ("::"));
5870   global_namespace = current_namespace;
5871   current_lang_name = NULL_TREE;
5872
5873   if (flag_strict_prototype == 2)
5874     flag_strict_prototype = pedantic;
5875   if (! flag_permissive && ! pedantic)
5876     flag_pedantic_errors = 1;
5877
5878   strict_prototypes_lang_c = flag_strict_prototype;
5879
5880   /* Initially, C.  */
5881   current_lang_name = lang_name_c;
5882
5883   current_function_decl = NULL_TREE;
5884   named_labels = NULL_TREE;
5885   named_label_uses = NULL;
5886   current_binding_level = NULL_BINDING_LEVEL;
5887   free_binding_level = NULL_BINDING_LEVEL;
5888
5889   /* Because most segmentation signals can be traced back into user
5890      code, catch them and at least give the user a chance of working
5891      around compiler bugs.  */
5892   signal (SIGSEGV, signal_catch);
5893
5894   /* We will also catch aborts in the back-end through signal_catch and
5895      give the user a chance to see where the error might be, and to defeat
5896      aborts in the back-end when there have been errors previously in their
5897      code.  */
5898 #ifdef SIGIOT
5899   signal (SIGIOT, signal_catch);
5900 #endif
5901 #ifdef SIGILL
5902   signal (SIGILL, signal_catch);
5903 #endif
5904 #ifdef SIGABRT
5905   signal (SIGABRT, signal_catch);
5906 #endif
5907 #ifdef SIGBUS
5908   signal (SIGBUS, signal_catch);
5909 #endif
5910
5911   gcc_obstack_init (&decl_obstack);
5912
5913   /* Must lay these out before anything else gets laid out.  */
5914   error_mark_node = make_node (ERROR_MARK);
5915   TREE_PERMANENT (error_mark_node) = 1;
5916   TREE_TYPE (error_mark_node) = error_mark_node;
5917   error_mark_list = build_tree_list (error_mark_node, error_mark_node);
5918   TREE_TYPE (error_mark_list) = error_mark_node;
5919
5920   /* Make the binding_level structure for global names.  */
5921   pushlevel (0);
5922   global_binding_level = current_binding_level;
5923   /* The global level is the namespace level of ::.  */
5924   NAMESPACE_LEVEL (global_namespace) = global_binding_level;
5925   declare_namespace_level ();
5926
5927   this_identifier = get_identifier (THIS_NAME);
5928   in_charge_identifier = get_identifier (IN_CHARGE_NAME);
5929   ctor_identifier = get_identifier (CTOR_NAME);
5930   dtor_identifier = get_identifier (DTOR_NAME);
5931   pfn_identifier = get_identifier (VTABLE_PFN_NAME);
5932   index_identifier = get_identifier (VTABLE_INDEX_NAME);
5933   delta_identifier = get_identifier (VTABLE_DELTA_NAME);
5934   delta2_identifier = get_identifier (VTABLE_DELTA2_NAME);
5935   pfn_or_delta2_identifier = get_identifier ("__pfn_or_delta2");
5936   if (flag_handle_signatures)
5937     {
5938       tag_identifier = get_identifier (SIGTABLE_TAG_NAME);
5939       vb_off_identifier = get_identifier (SIGTABLE_VB_OFF_NAME);
5940       vt_off_identifier = get_identifier (SIGTABLE_VT_OFF_NAME);
5941     }
5942
5943   /* Define `int' and `char' first so that dbx will output them first.  */
5944
5945   integer_type_node = make_signed_type (INT_TYPE_SIZE);
5946   record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
5947
5948   /* Define `char', which is like either `signed char' or `unsigned char'
5949      but not the same as either.  */
5950
5951   char_type_node
5952     = (flag_signed_char
5953        ? make_signed_type (CHAR_TYPE_SIZE)
5954        : make_unsigned_type (CHAR_TYPE_SIZE));
5955   record_builtin_type (RID_CHAR, "char", char_type_node);
5956
5957   long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
5958   record_builtin_type (RID_LONG, "long int", long_integer_type_node);
5959
5960   unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
5961   record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
5962
5963   long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
5964   record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
5965   record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
5966
5967   long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
5968   record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
5969
5970   long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
5971   record_builtin_type (RID_MAX, "long long unsigned int",
5972                        long_long_unsigned_type_node);
5973   record_builtin_type (RID_MAX, "long long unsigned",
5974                        long_long_unsigned_type_node);
5975
5976   short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
5977   record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
5978   short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
5979   record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
5980   record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
5981
5982   /* `unsigned long' is the standard type for sizeof.
5983      Note that stddef.h uses `unsigned long',
5984      and this must agree, even if long and int are the same size.  */
5985   set_sizetype
5986     (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
5987
5988   ptrdiff_type_node
5989     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
5990
5991   /* Define both `signed char' and `unsigned char'.  */
5992   signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
5993   record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
5994   unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
5995   record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
5996
5997   /* These are types that type_for_size and type_for_mode use.  */
5998   intQI_type_node = make_signed_type (GET_MODE_BITSIZE (QImode));
5999   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
6000   intHI_type_node = make_signed_type (GET_MODE_BITSIZE (HImode));
6001   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
6002   intSI_type_node = make_signed_type (GET_MODE_BITSIZE (SImode));
6003   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
6004   intDI_type_node = make_signed_type (GET_MODE_BITSIZE (DImode));
6005   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
6006 #if HOST_BITS_PER_WIDE_INT >= 64
6007   intTI_type_node = make_signed_type (GET_MODE_BITSIZE (TImode));
6008   pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
6009 #endif
6010   unsigned_intQI_type_node = make_unsigned_type (GET_MODE_BITSIZE (QImode));
6011   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
6012   unsigned_intHI_type_node = make_unsigned_type (GET_MODE_BITSIZE (HImode));
6013   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
6014   unsigned_intSI_type_node = make_unsigned_type (GET_MODE_BITSIZE (SImode));
6015   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
6016   unsigned_intDI_type_node = make_unsigned_type (GET_MODE_BITSIZE (DImode));
6017   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
6018 #if HOST_BITS_PER_WIDE_INT >= 64
6019   unsigned_intTI_type_node = make_unsigned_type (GET_MODE_BITSIZE (TImode));
6020   pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
6021 #endif
6022
6023   float_type_node = make_node (REAL_TYPE);
6024   TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
6025   record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
6026   layout_type (float_type_node);
6027
6028   double_type_node = make_node (REAL_TYPE);
6029   if (flag_short_double)
6030     TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
6031   else
6032     TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
6033   record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
6034   layout_type (double_type_node);
6035
6036   long_double_type_node = make_node (REAL_TYPE);
6037   TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
6038   record_builtin_type (RID_MAX, "long double", long_double_type_node);
6039   layout_type (long_double_type_node);
6040
6041   complex_integer_type_node = make_node (COMPLEX_TYPE);
6042   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
6043                         complex_integer_type_node));
6044   TREE_TYPE (complex_integer_type_node) = integer_type_node;
6045   layout_type (complex_integer_type_node);
6046
6047   complex_float_type_node = make_node (COMPLEX_TYPE);
6048   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
6049                         complex_float_type_node));
6050   TREE_TYPE (complex_float_type_node) = float_type_node;
6051   layout_type (complex_float_type_node);
6052
6053   complex_double_type_node = make_node (COMPLEX_TYPE);
6054   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
6055                         complex_double_type_node));
6056   TREE_TYPE (complex_double_type_node) = double_type_node;
6057   layout_type (complex_double_type_node);
6058
6059   complex_long_double_type_node = make_node (COMPLEX_TYPE);
6060   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
6061                         complex_long_double_type_node));
6062   TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
6063   layout_type (complex_long_double_type_node);
6064
6065   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6066   java_short_type_node = record_builtin_java_type ("__java_short", 16);
6067   java_int_type_node = record_builtin_java_type ("__java_int", 32);
6068   java_long_type_node = record_builtin_java_type ("__java_long", 64);
6069   java_float_type_node = record_builtin_java_type ("__java_float", -32);
6070   java_double_type_node = record_builtin_java_type ("__java_double", -64);
6071   java_char_type_node = record_builtin_java_type ("__java_char", -16);
6072   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
6073
6074   integer_zero_node = build_int_2 (0, 0);
6075   TREE_TYPE (integer_zero_node) = integer_type_node;
6076   integer_one_node = build_int_2 (1, 0);
6077   TREE_TYPE (integer_one_node) = integer_type_node;
6078   integer_two_node = build_int_2 (2, 0);
6079   TREE_TYPE (integer_two_node) = integer_type_node;
6080   integer_three_node = build_int_2 (3, 0);
6081   TREE_TYPE (integer_three_node) = integer_type_node;
6082
6083   boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6084   TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
6085   TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6086   TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6087   TYPE_PRECISION (boolean_type_node) = 1;
6088   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6089   boolean_false_node = build_int_2 (0, 0);
6090   TREE_TYPE (boolean_false_node) = boolean_type_node;
6091   boolean_true_node = build_int_2 (1, 0);
6092   TREE_TYPE (boolean_true_node) = boolean_type_node;
6093
6094   /* These are needed by stor-layout.c.  */
6095   size_zero_node = size_int (0);
6096   size_one_node = size_int (1);
6097
6098   signed_size_zero_node = build_int_2 (0, 0);
6099   TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6100
6101   void_type_node = make_node (VOID_TYPE);
6102   record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
6103   layout_type (void_type_node); /* Uses integer_zero_node.  */
6104   void_list_node = build_tree_list (NULL_TREE, void_type_node);
6105   TREE_PARMLIST (void_list_node) = 1;
6106
6107   null_pointer_node = build_int_2 (0, 0);
6108   TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
6109   layout_type (TREE_TYPE (null_pointer_node));
6110      
6111   /* Used for expressions that do nothing, but are not errors.  */
6112   void_zero_node = build_int_2 (0, 0);
6113   TREE_TYPE (void_zero_node) = void_type_node;
6114
6115   string_type_node = build_pointer_type (char_type_node);
6116   const_string_type_node
6117     = build_pointer_type (build_qualified_type (char_type_node, 
6118                                                 TYPE_QUAL_CONST));
6119 #if 0
6120   record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6121 #endif
6122
6123   /* Make a type to be the domain of a few array types
6124      whose domains don't really matter.
6125      200 is small enough that it always fits in size_t
6126      and large enough that it can hold most function names for the
6127      initializations of __FUNCTION__ and __PRETTY_FUNCTION__.  */
6128   array_domain_type = build_index_type (build_int_2 (200, 0));
6129
6130   /* Make a type for arrays of characters.
6131      With luck nothing will ever really depend on the length of this
6132      array type.  */
6133   char_array_type_node
6134     = build_array_type (char_type_node, array_domain_type);
6135   /* Likewise for arrays of ints.  */
6136   int_array_type_node
6137     = build_array_type (integer_type_node, array_domain_type);
6138
6139   /* This is just some anonymous class type.  Nobody should ever
6140      need to look inside this envelope.  */
6141   class_star_type_node = build_pointer_type (make_lang_type (RECORD_TYPE));
6142
6143   default_function_type
6144     = build_function_type (integer_type_node, NULL_TREE);
6145
6146   ptr_type_node = build_pointer_type (void_type_node);
6147   const_ptr_type_node
6148     = build_pointer_type (build_qualified_type (void_type_node,
6149                                                 TYPE_QUAL_CONST)); 
6150 #if 0
6151   record_builtin_type (RID_MAX, NULL_PTR, ptr_type_node);
6152 #endif
6153   endlink = void_list_node;
6154   int_endlink = tree_cons (NULL_TREE, integer_type_node, endlink);
6155   double_endlink = tree_cons (NULL_TREE, double_type_node, endlink);
6156   unsigned_endlink = tree_cons (NULL_TREE, unsigned_type_node, endlink);
6157
6158   ptr_ftype = build_function_type (ptr_type_node, NULL_TREE);
6159   ptr_ftype_unsigned = build_function_type (ptr_type_node, unsigned_endlink);
6160   sizetype_endlink = tree_cons (NULL_TREE, sizetype, endlink);
6161   /* We realloc here because sizetype could be int or unsigned.  S'ok.  */
6162   ptr_ftype_sizetype = build_function_type (ptr_type_node, sizetype_endlink);
6163
6164   void_ftype = build_function_type (void_type_node, endlink);
6165   void_ftype_int = build_function_type (void_type_node, int_endlink);
6166   void_ftype_ptr
6167     = build_function_type (void_type_node,
6168                            tree_cons (NULL_TREE, ptr_type_node, endlink));
6169   void_ftype_ptr
6170     = build_exception_variant (void_ftype_ptr,
6171                                tree_cons (NULL_TREE, NULL_TREE, NULL_TREE));
6172
6173   float_ftype_float
6174     = build_function_type (float_type_node,
6175                            tree_cons (NULL_TREE, float_type_node, endlink));
6176
6177   double_ftype_double
6178     = build_function_type (double_type_node, double_endlink);
6179
6180   ldouble_ftype_ldouble
6181     = build_function_type (long_double_type_node,
6182                            tree_cons (NULL_TREE, long_double_type_node,
6183                                       endlink));
6184
6185   double_ftype_double_double
6186     = build_function_type (double_type_node,
6187                            tree_cons (NULL_TREE, double_type_node,
6188                                       double_endlink));
6189
6190   int_ftype_int
6191     = build_function_type (integer_type_node, int_endlink);
6192
6193   long_ftype_long
6194     = build_function_type (long_integer_type_node,
6195                            tree_cons (NULL_TREE, long_integer_type_node,
6196                                       endlink));
6197
6198   int_ftype_cptr_cptr_sizet
6199     = build_function_type (integer_type_node,
6200                            tree_cons (NULL_TREE, const_ptr_type_node,
6201                                       tree_cons (NULL_TREE, const_ptr_type_node,
6202                                                  tree_cons (NULL_TREE,
6203                                                             sizetype,
6204                                                             endlink))));
6205
6206   string_ftype_ptr_ptr          /* strcpy prototype */
6207     = build_function_type (string_type_node,
6208                            tree_cons (NULL_TREE, string_type_node,
6209                                       tree_cons (NULL_TREE,
6210                                                  const_string_type_node,
6211                                                  endlink)));
6212
6213   int_ftype_string_string       /* strcmp prototype */
6214     = build_function_type (integer_type_node,
6215                            tree_cons (NULL_TREE, const_string_type_node,
6216                                       tree_cons (NULL_TREE,
6217                                                  const_string_type_node,
6218                                                  endlink)));
6219
6220   strlen_ftype          /* strlen prototype */
6221     = build_function_type (sizetype,
6222                            tree_cons (NULL_TREE, const_string_type_node,
6223                                       endlink));
6224
6225   memcpy_ftype  /* memcpy prototype */
6226     = build_function_type (ptr_type_node,
6227                            tree_cons (NULL_TREE, ptr_type_node,
6228                                       tree_cons (NULL_TREE, const_ptr_type_node,
6229                                                  sizetype_endlink)));
6230
6231   if (flag_huge_objects)
6232     delta_type_node = long_integer_type_node;
6233   else
6234     delta_type_node = short_integer_type_node;
6235
6236   builtin_function ("__builtin_constant_p", default_function_type,
6237                     BUILT_IN_CONSTANT_P, NULL_PTR);
6238
6239   builtin_return_address_fndecl
6240     = builtin_function ("__builtin_return_address", ptr_ftype_unsigned,
6241                         BUILT_IN_RETURN_ADDRESS, NULL_PTR);
6242
6243   builtin_function ("__builtin_frame_address", ptr_ftype_unsigned,
6244                     BUILT_IN_FRAME_ADDRESS, NULL_PTR);
6245
6246   builtin_function ("__builtin_alloca", ptr_ftype_sizetype,
6247                     BUILT_IN_ALLOCA, "alloca");
6248   builtin_function ("__builtin_ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
6249   /* Define alloca, ffs as builtins.
6250      Declare _exit just to mark it as volatile.  */
6251   if (! flag_no_builtin && !flag_no_nonansi_builtin)
6252     {
6253       temp = builtin_function ("alloca", ptr_ftype_sizetype,
6254                                BUILT_IN_ALLOCA, NULL_PTR);
6255       /* Suppress error if redefined as a non-function.  */
6256       DECL_BUILT_IN_NONANSI (temp) = 1;
6257       temp = builtin_function ("ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
6258       /* Suppress error if redefined as a non-function.  */
6259       DECL_BUILT_IN_NONANSI (temp) = 1;
6260       temp = builtin_function ("_exit", void_ftype_int,
6261                                NOT_BUILT_IN, NULL_PTR);
6262       TREE_THIS_VOLATILE (temp) = 1;
6263       TREE_SIDE_EFFECTS (temp) = 1;
6264       /* Suppress error if redefined as a non-function.  */
6265       DECL_BUILT_IN_NONANSI (temp) = 1;
6266     }
6267
6268   builtin_function ("__builtin_abs", int_ftype_int, BUILT_IN_ABS, NULL_PTR);
6269   builtin_function ("__builtin_fabsf", float_ftype_float, BUILT_IN_FABS,
6270                     NULL_PTR);
6271   builtin_function ("__builtin_fabs", double_ftype_double, BUILT_IN_FABS,
6272                     NULL_PTR);
6273   builtin_function ("__builtin_fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
6274                     NULL_PTR);
6275   builtin_function ("__builtin_labs", long_ftype_long,
6276                     BUILT_IN_LABS, NULL_PTR);
6277   builtin_function ("__builtin_saveregs", ptr_ftype,
6278                     BUILT_IN_SAVEREGS, NULL_PTR);
6279   builtin_function ("__builtin_classify_type", default_function_type,
6280                     BUILT_IN_CLASSIFY_TYPE, NULL_PTR);
6281   builtin_function ("__builtin_next_arg", ptr_ftype,
6282                     BUILT_IN_NEXT_ARG, NULL_PTR);
6283   builtin_function ("__builtin_args_info", int_ftype_int,
6284                     BUILT_IN_ARGS_INFO, NULL_PTR);
6285   builtin_function ("__builtin_setjmp",
6286                     build_function_type (integer_type_node,
6287                                          tree_cons (NULL_TREE, ptr_type_node,
6288                                                     endlink)),
6289                     BUILT_IN_SETJMP, NULL_PTR);
6290   builtin_function ("__builtin_longjmp",
6291                     build_function_type (integer_type_node,
6292                                          tree_cons (NULL_TREE, ptr_type_node,
6293                                                     tree_cons (NULL_TREE,
6294                                                                integer_type_node,
6295                                                                endlink))),
6296                     BUILT_IN_LONGJMP, NULL_PTR);
6297
6298   /* Untyped call and return.  */
6299   builtin_function ("__builtin_apply_args", ptr_ftype,
6300                     BUILT_IN_APPLY_ARGS, NULL_PTR);
6301
6302   temp = tree_cons (NULL_TREE,
6303                     build_pointer_type (build_function_type (void_type_node,
6304                                                              NULL_TREE)),
6305                     tree_cons (NULL_TREE, ptr_ftype_sizetype, NULL_TREE));
6306   builtin_function ("__builtin_apply",
6307                     build_function_type (ptr_type_node, temp),
6308                     BUILT_IN_APPLY, NULL_PTR);
6309   builtin_function ("__builtin_return", void_ftype_ptr,
6310                     BUILT_IN_RETURN, NULL_PTR);
6311
6312   /* Currently under experimentation.  */
6313   builtin_function ("__builtin_memcpy", memcpy_ftype,
6314                     BUILT_IN_MEMCPY, "memcpy");
6315   builtin_function ("__builtin_memcmp", int_ftype_cptr_cptr_sizet,
6316                     BUILT_IN_MEMCMP, "memcmp");
6317   builtin_function ("__builtin_strcmp", int_ftype_string_string,
6318                     BUILT_IN_STRCMP, "strcmp");
6319   builtin_function ("__builtin_strcpy", string_ftype_ptr_ptr,
6320                     BUILT_IN_STRCPY, "strcpy");
6321   builtin_function ("__builtin_strlen", strlen_ftype,
6322                     BUILT_IN_STRLEN, "strlen");
6323   builtin_function ("__builtin_sqrtf", float_ftype_float, 
6324                     BUILT_IN_FSQRT, "sqrtf");
6325   builtin_function ("__builtin_fsqrt", double_ftype_double,
6326                     BUILT_IN_FSQRT, NULL_PTR);
6327   builtin_function ("__builtin_sqrtl", ldouble_ftype_ldouble, 
6328                     BUILT_IN_FSQRT, "sqrtl");
6329   builtin_function ("__builtin_sinf", float_ftype_float, 
6330                     BUILT_IN_SIN, "sinf");
6331   builtin_function ("__builtin_sin", double_ftype_double, 
6332                     BUILT_IN_SIN, "sin");
6333   builtin_function ("__builtin_sinl", ldouble_ftype_ldouble, 
6334                     BUILT_IN_SIN, "sinl");
6335   builtin_function ("__builtin_cosf", float_ftype_float, 
6336                     BUILT_IN_COS, "cosf");
6337   builtin_function ("__builtin_cos", double_ftype_double, 
6338                     BUILT_IN_COS, "cos");
6339   builtin_function ("__builtin_cosl", ldouble_ftype_ldouble, 
6340                     BUILT_IN_COS, "cosl");
6341
6342   if (!flag_no_builtin)
6343     {
6344       builtin_function ("abs", int_ftype_int, BUILT_IN_ABS, NULL_PTR);
6345       builtin_function ("fabs", double_ftype_double, BUILT_IN_FABS, NULL_PTR);
6346       builtin_function ("labs", long_ftype_long, BUILT_IN_LABS, NULL_PTR);
6347       builtin_function ("fabsf", float_ftype_float, BUILT_IN_FABS, NULL_PTR);
6348       builtin_function ("fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
6349                         NULL_PTR);
6350       builtin_function ("memcpy", memcpy_ftype, BUILT_IN_MEMCPY, NULL_PTR);
6351       builtin_function ("memcmp", int_ftype_cptr_cptr_sizet, BUILT_IN_MEMCMP,
6352                         NULL_PTR);
6353       builtin_function ("strcmp", int_ftype_string_string, BUILT_IN_STRCMP,
6354                         NULL_PTR);
6355       builtin_function ("strcpy", string_ftype_ptr_ptr, BUILT_IN_STRCPY,
6356                         NULL_PTR);
6357       builtin_function ("strlen", strlen_ftype, BUILT_IN_STRLEN, NULL_PTR);
6358       builtin_function ("sqrtf", float_ftype_float, BUILT_IN_FSQRT, NULL_PTR);
6359       builtin_function ("sqrt", double_ftype_double, BUILT_IN_FSQRT, NULL_PTR);
6360       builtin_function ("sqrtl", ldouble_ftype_ldouble, BUILT_IN_FSQRT,
6361                         NULL_PTR);
6362       builtin_function ("sinf", float_ftype_float, BUILT_IN_SIN, NULL_PTR);
6363       builtin_function ("sin", double_ftype_double, BUILT_IN_SIN, NULL_PTR);
6364       builtin_function ("sinl", ldouble_ftype_ldouble, BUILT_IN_SIN, NULL_PTR);
6365       builtin_function ("cosf", float_ftype_float, BUILT_IN_COS, NULL_PTR);
6366       builtin_function ("cos", double_ftype_double, BUILT_IN_COS, NULL_PTR);
6367       builtin_function ("cosl", ldouble_ftype_ldouble, BUILT_IN_COS, NULL_PTR);
6368
6369       /* Declare these functions volatile
6370          to avoid spurious "control drops through" warnings.  */
6371       temp = builtin_function ("abort", void_ftype,
6372                                NOT_BUILT_IN, NULL_PTR);
6373       TREE_THIS_VOLATILE (temp) = 1;
6374       TREE_SIDE_EFFECTS (temp) = 1;
6375       /* Well, these are actually ANSI, but we can't set DECL_BUILT_IN on
6376          them...  */
6377       DECL_BUILT_IN_NONANSI (temp) = 1;
6378       temp = builtin_function ("exit", void_ftype_int,
6379                                NOT_BUILT_IN, NULL_PTR);
6380       TREE_THIS_VOLATILE (temp) = 1;
6381       TREE_SIDE_EFFECTS (temp) = 1;
6382       DECL_BUILT_IN_NONANSI (temp) = 1;
6383     }
6384
6385 #if 0
6386   /* Support for these has not been written in either expand_builtin
6387      or build_function_call.  */
6388   builtin_function ("__builtin_div", default_ftype, BUILT_IN_DIV, NULL_PTR);
6389   builtin_function ("__builtin_ldiv", default_ftype, BUILT_IN_LDIV, NULL_PTR);
6390   builtin_function ("__builtin_ffloor", double_ftype_double, BUILT_IN_FFLOOR,
6391                     NULL_PTR);
6392   builtin_function ("__builtin_fceil", double_ftype_double, BUILT_IN_FCEIL,
6393                     NULL_PTR);
6394   builtin_function ("__builtin_fmod", double_ftype_double_double,
6395                     BUILT_IN_FMOD, NULL_PTR);
6396   builtin_function ("__builtin_frem", double_ftype_double_double,
6397                     BUILT_IN_FREM, NULL_PTR);
6398   builtin_function ("__builtin_memset", ptr_ftype_ptr_int_int,
6399                     BUILT_IN_MEMSET, NULL_PTR);
6400   builtin_function ("__builtin_getexp", double_ftype_double, BUILT_IN_GETEXP,
6401                     NULL_PTR);
6402   builtin_function ("__builtin_getman", double_ftype_double, BUILT_IN_GETMAN,
6403                     NULL_PTR);
6404 #endif
6405
6406   /* C++ extensions */
6407
6408   unknown_type_node = make_node (UNKNOWN_TYPE);
6409   record_unknown_type (unknown_type_node, "unknown type");
6410
6411   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
6412   TREE_TYPE (unknown_type_node) = unknown_type_node;
6413
6414   TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
6415
6416   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6417      result.  */
6418   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6419   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6420
6421   /* This is for handling opaque types in signatures.  */
6422   opaque_type_node = copy_node (ptr_type_node);
6423   TYPE_MAIN_VARIANT (opaque_type_node) = opaque_type_node;
6424   record_builtin_type (RID_MAX, 0, opaque_type_node);
6425
6426   /* This is special for C++ so functions can be overloaded.  */
6427   wchar_type_node
6428     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (WCHAR_TYPE)));
6429   wchar_type_size = TYPE_PRECISION (wchar_type_node);
6430   signed_wchar_type_node = make_signed_type (wchar_type_size);
6431   unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
6432   wchar_type_node
6433     = TREE_UNSIGNED (wchar_type_node)
6434       ? unsigned_wchar_type_node
6435       : signed_wchar_type_node;
6436   record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
6437
6438   /* Artificial declaration of wchar_t -- can be bashed */
6439   wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
6440                                 wchar_type_node);
6441   pushdecl (wchar_decl_node);
6442
6443   /* This is for wide string constants.  */
6444   wchar_array_type_node
6445     = build_array_type (wchar_type_node, array_domain_type);
6446
6447   if (flag_vtable_thunks)
6448     {
6449       /* Make sure we get a unique function type, so we can give
6450          its pointer type a name.  (This wins for gdb.) */
6451       tree vfunc_type = make_node (FUNCTION_TYPE);
6452       TREE_TYPE (vfunc_type) = integer_type_node;
6453       TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6454       layout_type (vfunc_type);
6455
6456       vtable_entry_type = build_pointer_type (vfunc_type);
6457     }
6458   else
6459     {
6460       vtable_entry_type = make_lang_type (RECORD_TYPE);
6461       fields[0] = build_lang_field_decl (FIELD_DECL, delta_identifier,
6462                                          delta_type_node);
6463       fields[1] = build_lang_field_decl (FIELD_DECL, index_identifier,
6464                                          delta_type_node);
6465       fields[2] = build_lang_field_decl (FIELD_DECL, pfn_identifier,
6466                                          ptr_type_node);
6467       finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6468                            double_type_node);
6469
6470       /* Make this part of an invisible union.  */
6471       fields[3] = copy_node (fields[2]);
6472       TREE_TYPE (fields[3]) = delta_type_node;
6473       DECL_NAME (fields[3]) = delta2_identifier;
6474       DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6475       DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
6476       TREE_UNSIGNED (fields[3]) = 0;
6477       TREE_CHAIN (fields[2]) = fields[3];
6478       vtable_entry_type = build_qualified_type (vtable_entry_type,
6479                                                 TYPE_QUAL_CONST);
6480     }
6481   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
6482
6483   vtbl_type_node
6484     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
6485   layout_type (vtbl_type_node);
6486   vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
6487   record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
6488   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6489   layout_type (vtbl_ptr_type_node);
6490   record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
6491
6492   /* Simplify life by making a "sigtable_entry_type".  Give its
6493      fields names so that the debugger can use them.  */
6494
6495   if (flag_handle_signatures)
6496     {
6497       sigtable_entry_type = make_lang_type (RECORD_TYPE);
6498       fields[0] = build_lang_field_decl (FIELD_DECL, tag_identifier,
6499                                          delta_type_node);
6500       fields[1] = build_lang_field_decl (FIELD_DECL, vb_off_identifier,
6501                                          delta_type_node);
6502       fields[2] = build_lang_field_decl (FIELD_DECL, delta_identifier,
6503                                          delta_type_node);
6504       fields[3] = build_lang_field_decl (FIELD_DECL, index_identifier,
6505                                          delta_type_node);
6506       fields[4] = build_lang_field_decl (FIELD_DECL, pfn_identifier,
6507                                          ptr_type_node);
6508
6509       /* Set the alignment to the max of the alignment of ptr_type_node and
6510          delta_type_node.  Double alignment wastes a word on the Sparc.  */
6511       finish_builtin_type (sigtable_entry_type, SIGTABLE_PTR_TYPE, fields, 4,
6512                            (TYPE_ALIGN (ptr_type_node) > TYPE_ALIGN (delta_type_node))
6513                            ? ptr_type_node
6514                            : delta_type_node);
6515
6516       /* Make this part of an invisible union.  */
6517       fields[5] = copy_node (fields[4]);
6518       TREE_TYPE (fields[5]) = delta_type_node;
6519       DECL_NAME (fields[5]) = vt_off_identifier;
6520       DECL_MODE (fields[5]) = TYPE_MODE (delta_type_node);
6521       DECL_SIZE (fields[5]) = TYPE_SIZE (delta_type_node);
6522       TREE_UNSIGNED (fields[5]) = 0;
6523       TREE_CHAIN (fields[4]) = fields[5];
6524
6525       sigtable_entry_type = build_qualified_type (sigtable_entry_type, 
6526                                                   TYPE_QUAL_CONST);
6527       record_builtin_type (RID_MAX, SIGTABLE_PTR_TYPE, sigtable_entry_type);
6528     }
6529
6530   std_node = build_decl (NAMESPACE_DECL, 
6531                          get_identifier (flag_honor_std ? "fake std":"std"),
6532                          void_type_node);
6533   pushdecl (std_node);
6534
6535   global_type_node = make_node (LANG_TYPE);
6536   record_unknown_type (global_type_node, "global type");
6537
6538   /* Now, C++.  */
6539   current_lang_name = lang_name_cplusplus;
6540
6541   {
6542     tree bad_alloc_type_node, newtype, deltype;
6543     if (flag_honor_std)
6544       push_namespace (get_identifier ("std"));
6545     bad_alloc_type_node = xref_tag
6546       (class_type_node, get_identifier ("bad_alloc"), 1);
6547     if (flag_honor_std)
6548       pop_namespace ();
6549     newtype = build_exception_variant
6550       (ptr_ftype_sizetype, build_tree_list (NULL_TREE, bad_alloc_type_node));
6551     deltype = build_exception_variant
6552       (void_ftype_ptr, build_tree_list (NULL_TREE, NULL_TREE));
6553     auto_function (ansi_opname[(int) NEW_EXPR], newtype, NOT_BUILT_IN);
6554     auto_function (ansi_opname[(int) VEC_NEW_EXPR], newtype, NOT_BUILT_IN);
6555     global_delete_fndecl
6556       = auto_function (ansi_opname[(int) DELETE_EXPR], deltype, NOT_BUILT_IN);
6557     auto_function (ansi_opname[(int) VEC_DELETE_EXPR], deltype, NOT_BUILT_IN);
6558   }
6559
6560   abort_fndecl
6561     = define_function ("__pure_virtual", void_ftype,
6562                        NOT_BUILT_IN, 0, 0);
6563
6564   /* Perform other language dependent initializations.  */
6565   init_class_processing ();
6566   init_init_processing ();
6567   init_search_processing ();
6568   if (flag_rtti)
6569     init_rtti_processing ();
6570
6571   if (flag_exceptions)
6572     init_exception_processing ();
6573   if (flag_no_inline)
6574     {
6575       flag_inline_functions = 0;
6576     }
6577
6578   if (! supports_one_only ())
6579     flag_weak = 0;
6580
6581   /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__.  */
6582   declare_function_name ();
6583
6584   /* Prepare to check format strings against argument lists.  */
6585   init_function_format_info ();
6586
6587   /* Show we use EH for cleanups.  */
6588   using_eh_for_cleanups ();
6589
6590   print_error_function = lang_print_error_function;
6591   lang_get_alias_set = &c_get_alias_set;
6592
6593   /* Maintain consistency.  Perhaps we should just complain if they
6594      say -fwritable-strings?  */
6595   if (flag_writable_strings)
6596     flag_const_strings = 0;
6597 }
6598
6599 /* Function to print any language-specific context for an error message.  */
6600
6601 static void
6602 lang_print_error_function (file)
6603      char *file;
6604 {
6605   default_print_error_function (file);
6606   maybe_print_template_context ();
6607 }
6608
6609 /* Make a definition for a builtin function named NAME and whose data type
6610    is TYPE.  TYPE should be a function type with argument types.
6611    FUNCTION_CODE tells later passes how to compile calls to this function.
6612    See tree.h for its possible values.
6613
6614    If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6615    the name to be called if we can't opencode the function.  */
6616
6617 tree
6618 define_function (name, type, function_code, pfn, library_name)
6619      char *name;
6620      tree type;
6621      enum built_in_function function_code;
6622      void (*pfn) PROTO((tree));
6623      char *library_name;
6624 {
6625   tree decl = build_lang_decl (FUNCTION_DECL, get_identifier (name), type);
6626   DECL_EXTERNAL (decl) = 1;
6627   TREE_PUBLIC (decl) = 1;
6628   DECL_ARTIFICIAL (decl) = 1;
6629
6630   my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
6631   DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
6632
6633   /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6634      we cannot change DECL_ASSEMBLER_NAME until we have installed this
6635      function in the namespace.  */
6636   if (pfn) (*pfn) (decl);
6637   if (library_name)
6638     DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
6639   make_function_rtl (decl);
6640   if (function_code != NOT_BUILT_IN)
6641     {
6642       DECL_BUILT_IN (decl) = 1;
6643       DECL_FUNCTION_CODE (decl) = function_code;
6644     }
6645   return decl;
6646 }
6647 \f
6648 /* When we call finish_struct for an anonymous union, we create
6649    default copy constructors and such.  But, an anonymous union
6650    shouldn't have such things; this function undoes the damage to the
6651    anonymous union type T.
6652
6653    (The reason that we create the synthesized methods is that we don't
6654    distinguish `union { int i; }' from `typedef union { int i; } U'.
6655    The first is an anonymous union; the second is just an ordinary
6656    union type.)  */
6657
6658 void
6659 fixup_anonymous_union (t)
6660      tree t;
6661 {
6662   tree *q;
6663
6664   /* Wipe out memory of synthesized methods */
6665   TYPE_HAS_CONSTRUCTOR (t) = 0;
6666   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6667   TYPE_HAS_INIT_REF (t) = 0;
6668   TYPE_HAS_CONST_INIT_REF (t) = 0;
6669   TYPE_HAS_ASSIGN_REF (t) = 0;
6670   TYPE_HAS_ASSIGNMENT (t) = 0;
6671   TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6672
6673   /* Splice the implicitly generated functions out of the TYPE_METHODS
6674      list.  */
6675   q = &TYPE_METHODS (t);
6676   while (*q)
6677     {
6678       if (DECL_ARTIFICIAL (*q))
6679         *q = TREE_CHAIN (*q);
6680       else
6681         q = &TREE_CHAIN (*q);
6682     }
6683
6684   /* ANSI C++ June 5 1992 WP 9.5.3.  Anonymous unions may not have
6685      function members.  */
6686   if (TYPE_METHODS (t))
6687     error ("an anonymous union cannot have function members");
6688 }
6689
6690 /* Make sure that a declaration with no declarator is well-formed, i.e.
6691    just defines a tagged type or anonymous union.
6692
6693    Returns the type defined, if any.  */
6694
6695 tree
6696 check_tag_decl (declspecs)
6697      tree declspecs;
6698 {
6699   int found_type = 0;
6700   tree ob_modifier = NULL_TREE;
6701   register tree link;
6702   register tree t = NULL_TREE;
6703
6704   for (link = declspecs; link; link = TREE_CHAIN (link))
6705     {
6706       register tree value = TREE_VALUE (link);
6707
6708       if (TYPE_P (value))
6709         {
6710           ++found_type;
6711
6712           if (IS_AGGR_TYPE (value) || TREE_CODE (value) == ENUMERAL_TYPE)
6713             {
6714               my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
6715               t = value;
6716             }
6717         }
6718       else if (value == ridpointers[(int) RID_FRIEND])
6719         {
6720           if (current_class_type == NULL_TREE
6721               || current_scope () != current_class_type)
6722             ob_modifier = value;
6723         }
6724       else if (value == ridpointers[(int) RID_STATIC]
6725                || value == ridpointers[(int) RID_EXTERN]
6726                || value == ridpointers[(int) RID_AUTO]
6727                || value == ridpointers[(int) RID_REGISTER]
6728                || value == ridpointers[(int) RID_INLINE]
6729                || value == ridpointers[(int) RID_VIRTUAL]
6730                || value == ridpointers[(int) RID_CONST]
6731                || value == ridpointers[(int) RID_VOLATILE]
6732                || value == ridpointers[(int) RID_EXPLICIT])
6733         ob_modifier = value;
6734     }
6735
6736   if (found_type > 1)
6737     error ("multiple types in one declaration");
6738
6739   /* Inside a class, we might be in a friend or access declaration.
6740      Until we have a good way of detecting the latter, don't warn.  */
6741   if (t == NULL_TREE && ! current_class_type)
6742     pedwarn ("declaration does not declare anything");
6743   else if (t && ANON_UNION_TYPE_P (t))
6744     /* Anonymous unions are objects, so they can have specifiers.  */;
6745   else if (ob_modifier)
6746     {
6747       if (ob_modifier == ridpointers[(int) RID_INLINE]
6748           || ob_modifier == ridpointers[(int) RID_VIRTUAL])
6749         cp_error ("`%D' can only be specified for functions", ob_modifier);
6750       else if (ob_modifier == ridpointers[(int) RID_FRIEND])
6751         cp_error ("`%D' can only be specified inside a class", ob_modifier);
6752       else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
6753         cp_error ("`%D' can only be specified for constructors",
6754                   ob_modifier);
6755       else
6756         cp_error ("`%D' can only be specified for objects and functions",
6757                   ob_modifier);
6758     }
6759
6760   return t;
6761 }
6762
6763 /* Called when a declaration is seen that contains no names to declare.
6764    If its type is a reference to a structure, union or enum inherited
6765    from a containing scope, shadow that tag name for the current scope
6766    with a forward reference.
6767    If its type defines a new named structure or union
6768    or defines an enum, it is valid but we need not do anything here.
6769    Otherwise, it is an error.
6770
6771    C++: may have to grok the declspecs to learn about static,
6772    complain for anonymous unions.  */
6773
6774 void
6775 shadow_tag (declspecs)
6776      tree declspecs;
6777 {
6778   tree t = check_tag_decl (declspecs);
6779
6780   if (t)
6781     maybe_process_partial_specialization (t);
6782
6783   /* This is where the variables in an anonymous union are
6784      declared.  An anonymous union declaration looks like:
6785      union { ... } ;
6786      because there is no declarator after the union, the parser
6787      sends that declaration here.  */
6788   if (t && ANON_UNION_TYPE_P (t))
6789     {
6790       fixup_anonymous_union (t);
6791
6792       if (TYPE_FIELDS (t))
6793         {
6794           tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
6795                                       NULL_TREE);
6796           finish_anon_union (decl);
6797         }
6798     }
6799 }
6800 \f
6801 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
6802
6803 tree
6804 groktypename (typename)
6805      tree typename;
6806 {
6807   if (TREE_CODE (typename) != TREE_LIST)
6808     return typename;
6809   return grokdeclarator (TREE_VALUE (typename),
6810                          TREE_PURPOSE (typename),
6811                          TYPENAME, 0, NULL_TREE);
6812 }
6813
6814 /* Decode a declarator in an ordinary declaration or data definition.
6815    This is called as soon as the type information and variable name
6816    have been parsed, before parsing the initializer if any.
6817    Here we create the ..._DECL node, fill in its type,
6818    and put it on the list of decls for the current context.
6819    The ..._DECL node is returned as the value.
6820
6821    Exception: for arrays where the length is not specified,
6822    the type is left null, to be filled in by `cp_finish_decl'.
6823
6824    Function definitions do not come here; they go to start_function
6825    instead.  However, external and forward declarations of functions
6826    do go through here.  Structure field declarations are done by
6827    grokfield and not through here.  */
6828
6829 /* Set this to zero to debug not using the temporary obstack
6830    to parse initializers.  */
6831 int debug_temp_inits = 1;
6832
6833 tree
6834 start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
6835      tree declarator, declspecs;
6836      int initialized;
6837      tree attributes, prefix_attributes;
6838 {
6839   register tree decl;
6840   register tree type, tem;
6841   tree context;
6842   extern int have_extern_spec;
6843   extern int used_extern_spec;
6844
6845 #if 0
6846   /* See code below that used this.  */
6847   int init_written = initialized;
6848 #endif
6849
6850   /* This should only be done once on the top most decl.  */
6851   if (have_extern_spec && !used_extern_spec)
6852     {
6853       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
6854                                   declspecs);
6855       used_extern_spec = 1;
6856     }
6857
6858   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
6859                          NULL_TREE);
6860   if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
6861     return NULL_TREE;
6862
6863   type = TREE_TYPE (decl);
6864
6865   /* Don't lose if destructors must be executed at file-level.  */
6866   if (! processing_template_decl && TREE_STATIC (decl)
6867       && TYPE_NEEDS_DESTRUCTOR (complete_type (type))
6868       && !TREE_PERMANENT (decl))
6869     {
6870       push_obstacks (&permanent_obstack, &permanent_obstack);
6871       decl = copy_node (decl);
6872       if (TREE_CODE (type) == ARRAY_TYPE)
6873         {
6874           tree itype = TYPE_DOMAIN (type);
6875           if (itype && ! TREE_PERMANENT (itype))
6876             {
6877               itype = build_index_type (copy_to_permanent (TYPE_MAX_VALUE (itype)));
6878               type = build_cplus_array_type (TREE_TYPE (type), itype);
6879               TREE_TYPE (decl) = type;
6880             }
6881         }
6882       pop_obstacks ();
6883     }
6884
6885   context
6886     = (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
6887       ? DECL_CLASS_CONTEXT (decl)
6888       : DECL_CONTEXT (decl);
6889
6890   if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
6891       && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
6892     {
6893       /* When parsing the initializer, lookup should use the object's
6894          namespace. */
6895       push_decl_namespace (context);
6896     }
6897
6898   /* We are only interested in class contexts, later. */
6899   if (context && TREE_CODE (context) == NAMESPACE_DECL)
6900     context = NULL_TREE;
6901
6902   if (initialized)
6903     /* Is it valid for this decl to have an initializer at all?
6904        If not, set INITIALIZED to zero, which will indirectly
6905        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
6906     switch (TREE_CODE (decl))
6907       {
6908       case TYPE_DECL:
6909         /* typedef foo = bar  means give foo the same type as bar.
6910            We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
6911            Any other case of an initialization in a TYPE_DECL is an error.  */
6912         if (pedantic || list_length (declspecs) > 1)
6913           {
6914             cp_error ("typedef `%D' is initialized", decl);
6915             initialized = 0;
6916           }
6917         break;
6918
6919       case FUNCTION_DECL:
6920         cp_error ("function `%#D' is initialized like a variable", decl);
6921         initialized = 0;
6922         break;
6923
6924       default:
6925         if (! processing_template_decl)
6926           {
6927             if (type != error_mark_node)
6928               {
6929                 if (TYPE_SIZE (type) != NULL_TREE
6930                     && ! TREE_CONSTANT (TYPE_SIZE (type)))
6931                   {
6932                     cp_error
6933                       ("variable-sized object `%D' may not be initialized",
6934                        decl);
6935                     initialized = 0;
6936                   }
6937
6938                 if (TREE_CODE (type) == ARRAY_TYPE
6939                     && TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
6940                   {
6941                     cp_error
6942                       ("elements of array `%#D' have incomplete type", decl);
6943                     initialized = 0;
6944                   }
6945               }
6946           }
6947       }
6948
6949   if (initialized)
6950     {
6951       if (! toplevel_bindings_p ()
6952           && DECL_EXTERNAL (decl))
6953         cp_warning ("declaration of `%#D' has `extern' and is initialized",
6954                     decl);
6955       DECL_EXTERNAL (decl) = 0;
6956       if (toplevel_bindings_p ())
6957         TREE_STATIC (decl) = 1;
6958
6959       /* Tell `pushdecl' this is an initialized decl
6960          even though we don't yet have the initializer expression.
6961          Also tell `cp_finish_decl' it may store the real initializer.  */
6962       DECL_INITIAL (decl) = error_mark_node;
6963     }
6964
6965   if (context && TYPE_SIZE (complete_type (context)) != NULL_TREE)
6966     {
6967       pushclass (context, 2);
6968
6969       if (TREE_CODE (decl) == VAR_DECL)
6970         {
6971           tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
6972           if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
6973             cp_error ("`%#D' is not a static member of `%#T'", decl, context);
6974           else
6975             {
6976               if (DECL_CONTEXT (field) != context)
6977                 {
6978                   cp_pedwarn ("ANSI C++ does not permit `%T::%D' to be defined as `%T::%D'",
6979                               DECL_CONTEXT (field), DECL_NAME (decl),
6980                               context, DECL_NAME (decl));
6981                   DECL_CONTEXT (decl) = DECL_CONTEXT (field);
6982                 }
6983               /* Static data member are tricky; an in-class initialization
6984                  still doesn't provide a definition, so the in-class
6985                  declaration will have DECL_EXTERNAL set, but will have an
6986                  initialization.  Thus, duplicate_decls won't warn
6987                  about this situation, and so we check here.  */
6988               if (DECL_INITIAL (decl) && DECL_INITIAL (field))
6989                 cp_error ("duplicate initialization of %D", decl);
6990               if (duplicate_decls (decl, field))
6991                 decl = field;
6992             }
6993         }
6994       else
6995         {
6996           tree field = check_classfn (context, decl);
6997           if (field && duplicate_decls (decl, field))
6998             decl = field;
6999         }
7000
7001       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
7002       DECL_IN_AGGR_P (decl) = 0;
7003       if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl)) 
7004           || CLASSTYPE_USE_TEMPLATE (context))
7005         {
7006           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
7007           /* [temp.expl.spec] An explicit specialization of a static data
7008              member of a template is a definition if the declaration
7009              includes an initializer; otherwise, it is a declaration.
7010
7011              We check for processing_specialization so this only applies
7012              to the new specialization syntax.  */
7013           if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
7014             DECL_EXTERNAL (decl) = 1;
7015         }
7016
7017       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
7018         cp_pedwarn ("declaration of `%#D' outside of class is not definition",
7019                     decl);
7020     }
7021
7022 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
7023   SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
7024 #endif
7025   
7026   /* Set attributes here so if duplicate decl, will have proper attributes.  */
7027   cplus_decl_attributes (decl, attributes, prefix_attributes);
7028
7029   /* Add this decl to the current binding level, but not if it
7030      comes from another scope, e.g. a static member variable.
7031      TEM may equal DECL or it may be a previous decl of the same name.  */
7032   
7033   if ((TREE_CODE (decl) != PARM_DECL && DECL_CONTEXT (decl) != NULL_TREE 
7034        /* Definitions of namespace members outside their namespace are
7035           possible. */
7036        && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
7037       || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
7038       || TREE_CODE (type) == LANG_TYPE
7039       /* The declaration of template specializations does not affect
7040          the functions available for overload resolution, so we do not
7041          call pushdecl.  */
7042       || (TREE_CODE (decl) == FUNCTION_DECL
7043           && DECL_TEMPLATE_SPECIALIZATION (decl)))
7044     tem = decl;
7045   else
7046     tem = pushdecl (decl);
7047
7048   if (processing_template_decl)
7049     {
7050       if (! current_function_decl)
7051         tem = push_template_decl (tem);
7052       else if (minimal_parse_mode)
7053         DECL_VINDEX (tem)
7054             = build_min_nt (DECL_STMT, copy_to_permanent (declarator),
7055                             copy_to_permanent (declspecs),
7056                             NULL_TREE);
7057     }
7058
7059
7060 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7061   /* Tell the back-end to use or not use .common as appropriate.  If we say
7062      -fconserve-space, we want this to save .data space, at the expense of
7063      wrong semantics.  If we say -fno-conserve-space, we want this to
7064      produce errors about redefs; to do this we force variables into the
7065      data segment.  */
7066   DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
7067 #endif
7068   
7069   if (! processing_template_decl)
7070     start_decl_1 (tem);
7071
7072   /* Corresponding pop_obstacks is done in `cp_finish_decl'.  */
7073   push_obstacks_nochange ();
7074
7075 #if 0
7076   /* We have no way of knowing whether the initializer will need to be
7077      evaluated at run-time or not until we've parsed it, so let's just put
7078      it in the permanent obstack.  (jason) */
7079   if (init_written
7080       && ! (TREE_CODE (tem) == PARM_DECL
7081             || (TREE_READONLY (tem)
7082                 && (TREE_CODE (tem) == VAR_DECL
7083                     || TREE_CODE (tem) == FIELD_DECL))))
7084     {
7085       /* When parsing and digesting the initializer,
7086          use temporary storage.  Do this even if we will ignore the value.  */
7087       if (toplevel_bindings_p () && debug_temp_inits)
7088         {
7089           if (processing_template_decl
7090               || TYPE_NEEDS_CONSTRUCTING (type)
7091               || TREE_CODE (type) == REFERENCE_TYPE)
7092             /* In this case, the initializer must lay down in permanent
7093                storage, since it will be saved until `finish_file' is run.   */
7094             ;
7095           else
7096             temporary_allocation ();
7097         }
7098     }
7099 #endif
7100
7101   return tem;
7102 }
7103
7104 void
7105 start_decl_1 (decl)
7106      tree decl;
7107 {
7108   tree type = TREE_TYPE (decl);
7109   int initialized = (DECL_INITIAL (decl) != NULL_TREE);
7110
7111   /* If this type of object needs a cleanup, and control may
7112      jump past it, make a new binding level so that it is cleaned
7113      up only when it is initialized first.  */
7114   if (TYPE_NEEDS_DESTRUCTOR (type)
7115       && current_binding_level->more_cleanups_ok == 0)
7116     pushlevel_temporary (1);
7117
7118   if (initialized)
7119     /* Is it valid for this decl to have an initializer at all?
7120        If not, set INITIALIZED to zero, which will indirectly
7121        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
7122     {
7123       /* Don't allow initializations for incomplete types except for
7124          arrays which might be completed by the initialization.  */
7125       if (type == error_mark_node)
7126         ;                       /* Don't complain again.  */
7127       else if (TYPE_SIZE (complete_type (type)) != NULL_TREE)
7128         ;                       /* A complete type is ok.  */
7129       else if (TREE_CODE (type) != ARRAY_TYPE)
7130         {
7131           cp_error ("variable `%#D' has initializer but incomplete type",
7132                     decl);
7133           initialized = 0;
7134           type = TREE_TYPE (decl) = error_mark_node;
7135         }
7136       else if (TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
7137         {
7138           if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
7139             cp_error ("elements of array `%#D' have incomplete type", decl);
7140           /* else we already gave an error in start_decl.  */
7141           initialized = 0;
7142         }
7143     }
7144
7145   if (!initialized
7146       && TREE_CODE (decl) != TYPE_DECL
7147       && TREE_CODE (decl) != TEMPLATE_DECL
7148       && IS_AGGR_TYPE (type) && ! DECL_EXTERNAL (decl))
7149     {
7150       if ((! processing_template_decl || ! uses_template_parms (type))
7151           && TYPE_SIZE (complete_type (type)) == NULL_TREE)
7152         {
7153           cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
7154                  decl);
7155           /* Change the type so that assemble_variable will give
7156              DECL an rtl we can live with: (mem (const_int 0)).  */
7157           type = TREE_TYPE (decl) = error_mark_node;
7158         }
7159       else
7160         {
7161           /* If any base type in the hierarchy of TYPE needs a constructor,
7162              then we set initialized to 1.  This way any nodes which are
7163              created for the purposes of initializing this aggregate
7164              will live as long as it does.  This is necessary for global
7165              aggregates which do not have their initializers processed until
7166              the end of the file.  */
7167           initialized = TYPE_NEEDS_CONSTRUCTING (type);
7168         }
7169     }
7170
7171 #if 0
7172   /* We don't do this yet for GNU C++.  */
7173   /* For a local variable, define the RTL now.  */
7174   if (! toplevel_bindings_p ()
7175       /* But not if this is a duplicate decl
7176          and we preserved the rtl from the previous one
7177          (which may or may not happen).  */
7178       && DECL_RTL (tem) == NULL_RTX)
7179     {
7180       if (TYPE_SIZE (TREE_TYPE (tem)) != NULL_TREE)
7181         expand_decl (tem);
7182       else if (TREE_CODE (TREE_TYPE (tem)) == ARRAY_TYPE
7183                && DECL_INITIAL (tem) != NULL_TREE)
7184         expand_decl (tem);
7185     }
7186 #endif
7187
7188   if (! initialized)
7189     DECL_INITIAL (decl) = NULL_TREE;
7190 }
7191
7192 /* Handle initialization of references.
7193    These three arguments are from `cp_finish_decl', and have the
7194    same meaning here that they do there.
7195
7196    Quotes on semantics can be found in ARM 8.4.3.  */
7197
7198 static void
7199 grok_reference_init (decl, type, init)
7200      tree decl, type, init;
7201 {
7202   tree tmp;
7203
7204   if (init == NULL_TREE)
7205     {
7206       if ((DECL_LANG_SPECIFIC (decl) == 0
7207            || DECL_IN_AGGR_P (decl) == 0)
7208           && ! DECL_THIS_EXTERN (decl))
7209         {
7210           cp_error ("`%D' declared as reference but not initialized", decl);
7211           if (TREE_CODE (decl) == VAR_DECL)
7212             SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
7213         }
7214       return;
7215     }
7216
7217   if (init == error_mark_node)
7218     return;
7219
7220   if (TREE_CODE (type) == REFERENCE_TYPE
7221       && TREE_CODE (init) == CONSTRUCTOR)
7222     {
7223       cp_error ("ANSI C++ forbids use of initializer list to initialize reference `%D'", decl);
7224       return;
7225     }
7226
7227   if (TREE_CODE (init) == TREE_LIST)
7228     init = build_compound_expr (init);
7229
7230   if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
7231     init = convert_from_reference (init);
7232
7233   if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
7234       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
7235     {
7236       /* Note: default conversion is only called in very special cases.  */
7237       init = default_conversion (init);
7238     }
7239
7240   tmp = convert_to_reference
7241     (type, init, CONV_IMPLICIT,
7242      LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
7243
7244   if (tmp == error_mark_node)
7245     goto fail;
7246   else if (tmp != NULL_TREE)
7247     {
7248       init = tmp;
7249       DECL_INITIAL (decl) = save_expr (init);
7250     }
7251   else
7252     {
7253       cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
7254       goto fail;
7255     }
7256
7257   /* ?? Can this be optimized in some cases to
7258      hand back the DECL_INITIAL slot??  */
7259   if (TYPE_SIZE (TREE_TYPE (type)))
7260     {
7261       init = convert_from_reference (decl);
7262       if (TREE_PERMANENT (decl))
7263         init = copy_to_permanent (init);
7264       SET_DECL_REFERENCE_SLOT (decl, init);
7265     }
7266
7267   if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
7268     {
7269       expand_static_init (decl, DECL_INITIAL (decl));
7270       DECL_INITIAL (decl) = NULL_TREE;
7271     }
7272   return;
7273
7274  fail:
7275   if (TREE_CODE (decl) == VAR_DECL)
7276     SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
7277   return;
7278 }
7279
7280 /* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7281    mucking with forces it does not comprehend (i.e. initialization with a
7282    constructor).  If we are at global scope and won't go into COMMON, fill
7283    it in with a dummy CONSTRUCTOR to force the variable into .data;
7284    otherwise we can use error_mark_node.  */
7285
7286 static tree
7287 obscure_complex_init (decl, init)
7288      tree decl, init;
7289 {
7290   if (! flag_no_inline && TREE_STATIC (decl))
7291     {
7292       if (extract_init (decl, init))
7293         return NULL_TREE;
7294     }
7295
7296 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7297   if (toplevel_bindings_p () && ! DECL_COMMON (decl))
7298     DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7299                                  NULL_TREE);
7300   else
7301 #endif
7302     DECL_INITIAL (decl) = error_mark_node;
7303
7304   return init;
7305 }
7306
7307 /* Issue an error message if DECL is an uninitialized const variable.  */
7308
7309 static void
7310 check_for_uninitialized_const_var (decl)
7311      tree decl;
7312 {
7313   tree type = TREE_TYPE (decl);
7314
7315   /* ``Unless explicitly declared extern, a const object does not have
7316      external linkage and must be initialized. ($8.4; $12.1)'' ARM
7317      7.1.6 */
7318   if (TREE_CODE (decl) == VAR_DECL
7319       && TREE_CODE (type) != REFERENCE_TYPE
7320       && CP_TYPE_CONST_P (type)
7321       && !TYPE_NEEDS_CONSTRUCTING (type)
7322       && !DECL_INITIAL (decl))
7323     cp_error ("uninitialized const `%D'", decl);
7324 }
7325
7326 /* Finish processing of a declaration;
7327    install its line number and initial value.
7328    If the length of an array type is not known before,
7329    it must be determined now, from the initial value, or it is an error.
7330
7331    Call `pop_obstacks' iff NEED_POP is nonzero.
7332
7333    For C++, `cp_finish_decl' must be fairly evasive:  it must keep initializers
7334    for aggregates that have constructors alive on the permanent obstack,
7335    so that the global initializing functions can be written at the end.
7336
7337    INIT0 holds the value of an initializer that should be allowed to escape
7338    the normal rules.
7339
7340    FLAGS is LOOKUP_ONLYCONVERTING is the = init syntax was used, else 0
7341    if the (init) syntax was used.
7342
7343    For functions that take default parameters, DECL points to its
7344    "maximal" instantiation.  `cp_finish_decl' must then also declared its
7345    subsequently lower and lower forms of instantiation, checking for
7346    ambiguity as it goes.  This can be sped up later.  */
7347
7348 void
7349 cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
7350      tree decl, init;
7351      tree asmspec_tree;
7352      int need_pop;
7353      int flags;
7354 {
7355   register tree type;
7356   tree cleanup = NULL_TREE, ttype = NULL_TREE;
7357   int was_incomplete;
7358   int temporary = allocation_temporary_p ();
7359   char *asmspec = NULL;
7360   int was_readonly = 0;
7361   int already_used = 0;
7362
7363   /* If this is 0, then we did not change obstacks.  */
7364   if (! decl)
7365     {
7366       if (init)
7367         error ("assignment (not initialization) in declaration");
7368       return;
7369     }
7370
7371   /* If a name was specified, get the string.  */
7372   if (asmspec_tree)
7373       asmspec = TREE_STRING_POINTER (asmspec_tree);
7374
7375   if (init && TREE_CODE (init) == NAMESPACE_DECL)
7376     {
7377       cp_error ("Cannot initialize `%D' to namespace `%D'",
7378                 decl, init);
7379       init = NULL_TREE;
7380     }
7381
7382   if (current_class_type
7383       && DECL_REAL_CONTEXT (decl) == current_class_type
7384       && TYPE_BEING_DEFINED (current_class_type)
7385       && (DECL_INITIAL (decl) || init))
7386     DECL_DEFINED_IN_CLASS_P (decl) = 1;
7387
7388   if (TREE_CODE (decl) == VAR_DECL 
7389       && DECL_CONTEXT (decl)
7390       && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
7391       && DECL_CONTEXT (decl) != current_namespace
7392       && init)
7393     {
7394       /* Leave the namespace of the object. */
7395       pop_decl_namespace ();
7396     }
7397
7398   /* If the type of the thing we are declaring either has
7399      a constructor, or has a virtual function table pointer,
7400      AND its initialization was accepted by `start_decl',
7401      then we stayed on the permanent obstack through the
7402      declaration, otherwise, changed obstacks as GCC would.  */
7403
7404   type = TREE_TYPE (decl);
7405
7406   if (type == error_mark_node)
7407     {
7408       if (toplevel_bindings_p () && temporary)
7409         end_temporary_allocation ();
7410
7411       return;
7412     }
7413
7414   if (TYPE_HAS_MUTABLE_P (type))
7415     TREE_READONLY (decl) = 0;
7416   
7417   if (processing_template_decl)
7418     {
7419       if (init && DECL_INITIAL (decl))
7420         DECL_INITIAL (decl) = init;
7421       if (minimal_parse_mode && ! DECL_ARTIFICIAL (decl))
7422         {
7423           tree stmt = DECL_VINDEX (decl);
7424           /* If the decl is declaring a member of a local class (in a
7425              template function), the DECL_VINDEX will either be NULL,
7426              or it will be an actual virtual function index, not a
7427              DECL_STMT.  */
7428           if (stmt != NULL_TREE && TREE_CODE (stmt) == DECL_STMT)
7429             {
7430               DECL_VINDEX (decl) = NULL_TREE;
7431               TREE_OPERAND (stmt, 2) = copy_to_permanent (init);
7432               add_tree (stmt);
7433             }
7434         }
7435
7436       goto finish_end0;
7437     }
7438   /* Take care of TYPE_DECLs up front.  */
7439   if (TREE_CODE (decl) == TYPE_DECL)
7440     {
7441       if (init && DECL_INITIAL (decl))
7442         {
7443           /* typedef foo = bar; store the type of bar as the type of foo.  */
7444           TREE_TYPE (decl) = type = TREE_TYPE (init);
7445           DECL_INITIAL (decl) = init = NULL_TREE;
7446         }
7447       if (type != error_mark_node
7448           && IS_AGGR_TYPE (type) && DECL_NAME (decl))
7449         {
7450           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7451             cp_warning ("shadowing previous type declaration of `%#D'", decl);
7452           set_identifier_type_value (DECL_NAME (decl), type);
7453           CLASSTYPE_GOT_SEMICOLON (type) = 1;
7454         }
7455       GNU_xref_decl (current_function_decl, decl);
7456
7457       /* If we have installed this as the canonical typedef for this
7458          type, and that type has not been defined yet, delay emitting
7459          the debug information for it, as we will emit it later.  */
7460       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7461           && TYPE_SIZE (TREE_TYPE (decl)) == NULL_TREE)
7462         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7463
7464       rest_of_decl_compilation (decl, NULL_PTR,
7465                                 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
7466       goto finish_end;
7467     }
7468   if (TREE_CODE (decl) != FUNCTION_DECL)
7469     {
7470       ttype = target_type (type);
7471     }
7472
7473   if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
7474       && TYPE_NEEDS_CONSTRUCTING (type))
7475     {
7476
7477       /* Currently, GNU C++ puts constants in text space, making them
7478          impossible to initialize.  In the future, one would hope for
7479          an operating system which understood the difference between
7480          initialization and the running of a program.  */
7481       was_readonly = 1;
7482       TREE_READONLY (decl) = 0;
7483     }
7484
7485   if (TREE_CODE (decl) == FIELD_DECL)
7486     {
7487       if (init && init != error_mark_node)
7488         my_friendly_assert (TREE_PERMANENT (init), 147);
7489
7490       if (asmspec)
7491         {
7492           /* This must override the asm specifier which was placed
7493              by grokclassfn.  Lay this out fresh.  */
7494           DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
7495           DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7496           make_decl_rtl (decl, asmspec, 0);
7497         }
7498     }
7499   /* If `start_decl' didn't like having an initialization, ignore it now.  */
7500   else if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7501     init = NULL_TREE;
7502   else if (DECL_EXTERNAL (decl))
7503     ;
7504   else if (TREE_CODE (type) == REFERENCE_TYPE
7505            || (TYPE_LANG_SPECIFIC (type) && IS_SIGNATURE_REFERENCE (type)))
7506     {
7507       if (TREE_STATIC (decl))
7508         make_decl_rtl (decl, NULL_PTR,
7509                        toplevel_bindings_p ()
7510                        || pseudo_global_level_p ());
7511       grok_reference_init (decl, type, init);
7512       init = NULL_TREE;
7513     }
7514
7515   GNU_xref_decl (current_function_decl, decl);
7516
7517   if (TREE_CODE (decl) == FIELD_DECL)
7518     ;
7519   else if (TREE_CODE (decl) == CONST_DECL)
7520     {
7521       my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7522
7523       DECL_INITIAL (decl) = init;
7524
7525       /* This will keep us from needing to worry about our obstacks.  */
7526       my_friendly_assert (init != NULL_TREE, 149);
7527       init = NULL_TREE;
7528     }
7529   else if (init)
7530     {
7531       if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7532         {
7533           if (TREE_CODE (type) == ARRAY_TYPE)
7534             init = digest_init (type, init, (tree *) 0);
7535           else if (TREE_CODE (init) == CONSTRUCTOR
7536                    && TREE_HAS_CONSTRUCTOR (init))
7537             {
7538               if (TYPE_NON_AGGREGATE_CLASS (type))
7539                 {
7540                   cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7541                             decl);
7542                   init = error_mark_node;
7543                 }
7544               else
7545                 goto dont_use_constructor;
7546             }
7547         }
7548       else
7549         {
7550         dont_use_constructor:
7551           if (TREE_CODE (init) != TREE_VEC)
7552             init = store_init_value (decl, init);
7553         }
7554
7555       if (init)
7556         /* We must hide the initializer so that expand_decl
7557            won't try to do something it does not understand.  */
7558         init = obscure_complex_init (decl, init);
7559     }
7560   else if (DECL_EXTERNAL (decl))
7561     ;
7562   else if (TREE_CODE_CLASS (TREE_CODE (type)) == 't'
7563            && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7564     {
7565       tree ctype = type;
7566       while (TREE_CODE (ctype) == ARRAY_TYPE)
7567         ctype = TREE_TYPE (ctype);
7568       if (! TYPE_NEEDS_CONSTRUCTING (ctype))
7569         {
7570           if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (ctype))
7571             cp_error ("structure `%D' with uninitialized const members", decl);
7572           if (CLASSTYPE_REF_FIELDS_NEED_INIT (ctype))
7573             cp_error ("structure `%D' with uninitialized reference members",
7574                       decl);
7575         }
7576
7577       check_for_uninitialized_const_var (decl);
7578
7579       if (TYPE_SIZE (type) != NULL_TREE
7580           && TYPE_NEEDS_CONSTRUCTING (type))
7581         init = obscure_complex_init (decl, NULL_TREE);
7582
7583     }
7584   else
7585     check_for_uninitialized_const_var (decl);
7586   
7587   /* For top-level declaration, the initial value was read in
7588      the temporary obstack.  MAXINDEX, rtl, etc. to be made below
7589      must go in the permanent obstack; but don't discard the
7590      temporary data yet.  */
7591
7592   if (toplevel_bindings_p () && temporary)
7593     end_temporary_allocation ();
7594
7595   /* Deduce size of array from initialization, if not already known.  */
7596
7597   if (TREE_CODE (type) == ARRAY_TYPE
7598       && TYPE_DOMAIN (type) == NULL_TREE
7599       && TREE_CODE (decl) != TYPE_DECL)
7600     {
7601       int do_default
7602         = (TREE_STATIC (decl)
7603            /* Even if pedantic, an external linkage array
7604               may have incomplete type at first.  */
7605            ? pedantic && ! DECL_EXTERNAL (decl)
7606            : !DECL_EXTERNAL (decl));
7607       tree initializer = init ? init : DECL_INITIAL (decl);
7608       int failure = complete_array_type (type, initializer, do_default);
7609
7610       if (failure == 1)
7611         cp_error ("initializer fails to determine size of `%D'", decl);
7612
7613       if (failure == 2)
7614         {
7615           if (do_default)
7616             cp_error ("array size missing in `%D'", decl);
7617           /* If a `static' var's size isn't known, make it extern as
7618              well as static, so it does not get allocated.  If it's not
7619              `static', then don't mark it extern; finish_incomplete_decl
7620              will give it a default size and it will get allocated.  */
7621           else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7622             DECL_EXTERNAL (decl) = 1;
7623         }
7624
7625       if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7626           && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7627                               integer_zero_node))
7628         cp_error ("zero-size array `%D'", decl);
7629
7630       layout_decl (decl, 0);
7631     }
7632
7633   if (TREE_CODE (decl) == VAR_DECL)
7634     {
7635       if (DECL_SIZE (decl) == NULL_TREE
7636           && TYPE_SIZE (complete_type (TREE_TYPE (decl))) != NULL_TREE)
7637         layout_decl (decl, 0);
7638
7639       if (TREE_STATIC (decl) && DECL_SIZE (decl) == NULL_TREE)
7640         {
7641           /* A static variable with an incomplete type:
7642              that is an error if it is initialized.
7643              Otherwise, let it through, but if it is not `extern'
7644              then it may cause an error message later.  */
7645           if (DECL_INITIAL (decl) != NULL_TREE)
7646             cp_error ("storage size of `%D' isn't known", decl);
7647           init = NULL_TREE;
7648         }
7649       else if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
7650         {
7651           /* An automatic variable with an incomplete type: that is an error.
7652              Don't talk about array types here, since we took care of that
7653              message in grokdeclarator.  */
7654           cp_error ("storage size of `%D' isn't known", decl);
7655           TREE_TYPE (decl) = error_mark_node;
7656         }
7657       else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7658         /* Let debugger know it should output info for this type.  */
7659         note_debug_info_needed (ttype);
7660
7661       if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7662         note_debug_info_needed (DECL_CONTEXT (decl));
7663
7664       if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7665           && DECL_SIZE (decl) != NULL_TREE
7666           && ! TREE_CONSTANT (DECL_SIZE (decl)))
7667         {
7668           if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7669             constant_expression_warning (DECL_SIZE (decl));
7670           else
7671             cp_error ("storage size of `%D' isn't constant", decl);
7672         }
7673
7674       if (! DECL_EXTERNAL (decl) && TYPE_NEEDS_DESTRUCTOR (type)
7675           /* Cleanups for static variables are handled by `finish_file'.  */
7676           && ! TREE_STATIC (decl))
7677         {
7678           int yes = suspend_momentary ();
7679           cleanup = maybe_build_cleanup (decl);
7680           resume_momentary (yes);
7681         }
7682     }
7683   /* PARM_DECLs get cleanups, too.  */
7684   else if (TREE_CODE (decl) == PARM_DECL && TYPE_NEEDS_DESTRUCTOR (type))
7685     {
7686       if (temporary)
7687         end_temporary_allocation ();
7688       cleanup = maybe_build_cleanup (decl);
7689       if (temporary)
7690         resume_temporary_allocation ();
7691     }
7692
7693   /* Output the assembler code and/or RTL code for variables and functions,
7694      unless the type is an undefined structure or union.
7695      If not, it will get done when the type is completed.  */
7696
7697   was_incomplete = (DECL_SIZE (decl) == NULL_TREE);
7698
7699   if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
7700       || TREE_CODE (decl) == RESULT_DECL)
7701     {
7702       /* ??? FIXME: What about nested classes?  */
7703       int toplev = toplevel_bindings_p () || pseudo_global_level_p ();
7704       int was_temp
7705         = (TREE_STATIC (decl) && TYPE_NEEDS_DESTRUCTOR (type)
7706            && allocation_temporary_p ());
7707
7708       if (was_temp)
7709         end_temporary_allocation ();
7710
7711       /* Static data in a function with comdat linkage also has comdat
7712          linkage.  */
7713       if (TREE_CODE (decl) == VAR_DECL
7714           && TREE_STATIC (decl)
7715           /* Don't mess with __FUNCTION__.  */
7716           && ! TREE_ASM_WRITTEN (decl)
7717           && current_function_decl
7718           && DECL_CONTEXT (decl) == current_function_decl
7719           && (DECL_THIS_INLINE (current_function_decl)
7720               || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7721           && TREE_PUBLIC (current_function_decl))
7722         {
7723           /* Rather than try to get this right with inlining, we suppress
7724              inlining of such functions.  */
7725           current_function_cannot_inline
7726             = "function with static variable cannot be inline";
7727
7728           /* If flag_weak, we don't need to mess with this, as we can just
7729              make the function weak, and let it refer to its unique local
7730              copy.  This works because we don't allow the function to be
7731              inlined.  */
7732           if (! flag_weak)
7733             {
7734               if (DECL_INTERFACE_KNOWN (current_function_decl))
7735                 {
7736                   TREE_PUBLIC (decl) = 1;
7737                   DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7738                 }
7739               else if (DECL_INITIAL (decl) == NULL_TREE
7740                        || DECL_INITIAL (decl) == error_mark_node)
7741                 {
7742                   TREE_PUBLIC (decl) = 1;
7743                   DECL_COMMON (decl) = 1;
7744                 }
7745               /* else we lose. We can only do this if we can use common,
7746                  which we can't if it has been initialized.  */
7747
7748               if (TREE_PUBLIC (decl))
7749                 DECL_ASSEMBLER_NAME (decl)
7750                   = build_static_name (current_function_decl, DECL_NAME (decl));
7751               else if (! DECL_ARTIFICIAL (decl))
7752                 {
7753                   cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7754                   cp_warning_at ("  you can work around this by removing the initializer"), decl;
7755                 }
7756             }
7757         }
7758
7759       else if (TREE_CODE (decl) == VAR_DECL
7760                && DECL_LANG_SPECIFIC (decl)
7761                && DECL_COMDAT (decl))
7762         {
7763           /* Dynamically initialized vars go into common.  */
7764           if (DECL_INITIAL (decl) == NULL_TREE
7765               || DECL_INITIAL (decl) == error_mark_node)
7766             DECL_COMMON (decl) = 1;
7767           else if (EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
7768             {
7769               DECL_COMMON (decl) = 1;
7770               DECL_INITIAL (decl) = error_mark_node;
7771             }
7772           else
7773             {
7774               /* Statically initialized vars are weak or comdat, if
7775                  supported.  */
7776               if (flag_weak)
7777                 make_decl_one_only (decl);
7778               else
7779                 {
7780                   /* We can't do anything useful; leave vars for explicit
7781                      instantiation.  */
7782                   DECL_EXTERNAL (decl) = 1;
7783                   DECL_NOT_REALLY_EXTERN (decl) = 0;
7784                 }
7785             }
7786         }
7787
7788       if (TREE_CODE (decl) == VAR_DECL && DECL_VIRTUAL_P (decl))
7789         make_decl_rtl (decl, NULL_PTR, toplev);
7790       else if (TREE_CODE (decl) == VAR_DECL
7791                && TREE_READONLY (decl)
7792                && DECL_INITIAL (decl) != NULL_TREE
7793                && DECL_INITIAL (decl) != error_mark_node
7794                && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
7795         {
7796           DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
7797
7798           if (asmspec)
7799             DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7800
7801           if (! toplev
7802               && TREE_STATIC (decl)
7803               && ! TREE_SIDE_EFFECTS (decl)
7804               && ! TREE_PUBLIC (decl)
7805               && ! DECL_EXTERNAL (decl)
7806               && ! TYPE_NEEDS_DESTRUCTOR (type)
7807               && DECL_MODE (decl) != BLKmode)
7808             {
7809               /* If this variable is really a constant, then fill its DECL_RTL
7810                  slot with something which won't take up storage.
7811                  If something later should take its address, we can always give
7812                  it legitimate RTL at that time.  */
7813               DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
7814               store_expr (DECL_INITIAL (decl), DECL_RTL (decl), 0);
7815               TREE_ASM_WRITTEN (decl) = 1;
7816             }
7817           else if (toplev && ! TREE_PUBLIC (decl))
7818             {
7819               /* If this is a static const, change its apparent linkage
7820                  if it belongs to a #pragma interface.  */
7821               if (!interface_unknown)
7822                 {
7823                   TREE_PUBLIC (decl) = 1;
7824                   DECL_EXTERNAL (decl) = interface_only;
7825                 }
7826               make_decl_rtl (decl, asmspec, toplev);
7827             }
7828           else
7829             rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7830         }
7831       else if (TREE_CODE (decl) == VAR_DECL
7832                && DECL_LANG_SPECIFIC (decl)
7833                && DECL_IN_AGGR_P (decl))
7834         {
7835           if (TREE_STATIC (decl))
7836             {
7837               if (init == NULL_TREE
7838 #ifdef DEFAULT_STATIC_DEFS
7839                   /* If this code is dead, then users must
7840                      explicitly declare static member variables
7841                      outside the class def'n as well.  */
7842                   && TYPE_NEEDS_CONSTRUCTING (type)
7843 #endif
7844                   )
7845                 {
7846                   DECL_EXTERNAL (decl) = 1;
7847                   make_decl_rtl (decl, asmspec, 1);
7848                 }
7849               else
7850                 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7851             }
7852           else
7853             /* Just a constant field.  Should not need any rtl.  */
7854             goto finish_end0;
7855         }
7856       else
7857         rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7858
7859       if (was_temp)
7860         resume_temporary_allocation ();
7861
7862       if (type != error_mark_node
7863           && TYPE_LANG_SPECIFIC (type)
7864           && CLASSTYPE_ABSTRACT_VIRTUALS (type))
7865         abstract_virtuals_error (decl, type);
7866       else if ((TREE_CODE (type) == FUNCTION_TYPE
7867                 || TREE_CODE (type) == METHOD_TYPE)
7868                && TYPE_LANG_SPECIFIC (TREE_TYPE (type))
7869                && CLASSTYPE_ABSTRACT_VIRTUALS (TREE_TYPE (type)))
7870         abstract_virtuals_error (decl, TREE_TYPE (type));
7871
7872       if (TYPE_LANG_SPECIFIC (type) && IS_SIGNATURE (type))
7873         signature_error (decl, type);
7874       else if ((TREE_CODE (type) == FUNCTION_TYPE
7875                 || TREE_CODE (type) == METHOD_TYPE)
7876                && TYPE_LANG_SPECIFIC (TREE_TYPE (type))
7877                && IS_SIGNATURE (TREE_TYPE (type)))
7878         signature_error (decl, TREE_TYPE (type));
7879
7880       if (TREE_CODE (decl) == FUNCTION_DECL)
7881         ;
7882       else if (DECL_EXTERNAL (decl)
7883                && ! (DECL_LANG_SPECIFIC (decl)
7884                      && DECL_NOT_REALLY_EXTERN (decl)))
7885         {
7886           if (init)
7887             DECL_INITIAL (decl) = init;
7888         }
7889       else if (TREE_STATIC (decl) && type != error_mark_node)
7890         {
7891           /* Cleanups for static variables are handled by `finish_file'.  */
7892           if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
7893               || TYPE_NEEDS_DESTRUCTOR (type))
7894             expand_static_init (decl, init);
7895         }
7896       else if (! toplev)
7897         {
7898           /* This is a declared decl which must live until the
7899              end of the binding contour.  It may need a cleanup.  */
7900
7901           /* Recompute the RTL of a local array now
7902              if it used to be an incomplete type.  */
7903           if (was_incomplete && ! TREE_STATIC (decl))
7904             {
7905               /* If we used it already as memory, it must stay in memory.  */
7906               TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7907               /* If it's still incomplete now, no init will save it.  */
7908               if (DECL_SIZE (decl) == NULL_TREE)
7909                 DECL_INITIAL (decl) = NULL_TREE;
7910               expand_decl (decl);
7911             }
7912           else if (! TREE_ASM_WRITTEN (decl)
7913                    && (TYPE_SIZE (type) != NULL_TREE
7914                        || TREE_CODE (type) == ARRAY_TYPE))
7915             {
7916               /* Do this here, because we did not expand this decl's
7917                  rtl in start_decl.  */
7918               if (DECL_RTL (decl) == NULL_RTX)
7919                 expand_decl (decl);
7920               else if (cleanup)
7921                 {
7922                   /* XXX: Why don't we use decl here?  */
7923                   /* Ans: Because it was already expanded? */
7924                   if (! expand_decl_cleanup (NULL_TREE, cleanup))
7925                     cp_error ("parser lost in parsing declaration of `%D'",
7926                               decl);
7927                   /* Cleanup used up here.  */
7928                   cleanup = NULL_TREE;
7929                 }
7930             }
7931
7932           if (current_binding_level->is_for_scope)
7933             {
7934               struct binding_level *outer 
7935                 = current_binding_level->level_chain;
7936
7937               /* Check to see if the same name is already bound at
7938                  the outer level, either because it was directly declared,
7939                  or because a dead for-decl got preserved.  In either case,
7940                  the code would not have been valid under the ARM
7941                  scope rules, so clear is_for_scope for the
7942                  current_binding_level.
7943
7944                  Otherwise, we need to preserve the temp slot for decl
7945                  to last into the outer binding level.  */
7946
7947               tree outer_binding 
7948                 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
7949               
7950               if (outer_binding && BINDING_LEVEL (outer_binding) == outer
7951                   && (TREE_CODE (BINDING_VALUE (outer_binding)) 
7952                       == VAR_DECL)
7953                   && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
7954                 {
7955                   BINDING_VALUE (outer_binding)
7956                     = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
7957                   current_binding_level->is_for_scope = 0;
7958                 }
7959               else if (DECL_IN_MEMORY_P (decl))
7960                 preserve_temp_slots (DECL_RTL (decl));
7961             }
7962
7963           expand_start_target_temps ();
7964
7965           if (DECL_SIZE (decl) && type != error_mark_node)
7966             {
7967               /* Compute and store the initial value.  */
7968               expand_decl_init (decl);
7969               already_used = TREE_USED (decl) || TREE_USED (type);
7970
7971               if (init || TYPE_NEEDS_CONSTRUCTING (type))
7972                 {
7973                   emit_line_note (DECL_SOURCE_FILE (decl),
7974                                   DECL_SOURCE_LINE (decl));
7975                   expand_aggr_init (decl, init, flags);
7976                 }
7977
7978               /* Set this to 0 so we can tell whether an aggregate which
7979                  was initialized was ever used.  Don't do this if it has a
7980                  destructor, so we don't complain about the 'resource
7981                  allocation is initialization' idiom.  */
7982               /* Now set attribute((unused)) on types so decls of
7983                  that type will be marked used. (see TREE_USED, above.) 
7984                  This avoids the warning problems this particular code
7985                  tried to work around. */
7986
7987               if (TYPE_NEEDS_CONSTRUCTING (type)
7988                   && ! already_used
7989                   && cleanup == NULL_TREE
7990                   && DECL_NAME (decl))
7991                 TREE_USED (decl) = 0;
7992
7993               if (already_used)
7994                 TREE_USED (decl) = 1;
7995             }
7996
7997           /* Cleanup any temporaries needed for the initial value.  */
7998           expand_end_target_temps ();
7999
8000           if (DECL_SIZE (decl) && type != error_mark_node)
8001             {
8002               /* Store the cleanup, if there was one.  */
8003               if (cleanup)
8004                 {
8005                   if (! expand_decl_cleanup (decl, cleanup))
8006                     cp_error ("parser lost in parsing declaration of `%D'",
8007                               decl);
8008                 }
8009             }
8010         }
8011     finish_end0:
8012
8013       /* Undo call to `pushclass' that was done in `start_decl'
8014          due to initialization of qualified member variable.
8015          I.e., Foo::x = 10;  */
8016       {
8017         tree context = DECL_REAL_CONTEXT (decl);
8018         if (context
8019             && TREE_CODE_CLASS (TREE_CODE (context)) == 't'
8020             && (TREE_CODE (decl) == VAR_DECL
8021                 /* We also have a pushclass done that we need to undo here
8022                    if we're at top level and declare a method.  */
8023                 || TREE_CODE (decl) == FUNCTION_DECL)
8024             /* If size hasn't been set, we're still defining it,
8025                and therefore inside the class body; don't pop
8026                the binding level..  */
8027             && TYPE_SIZE (context) != NULL_TREE
8028             && context == current_class_type)
8029           popclass (1);
8030       }
8031     }
8032
8033  finish_end:
8034
8035   /* If requested, warn about definitions of large data objects.  */
8036
8037   if (warn_larger_than
8038       && ! processing_template_decl
8039       && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
8040       && !DECL_EXTERNAL (decl))
8041     {
8042       register tree decl_size = DECL_SIZE (decl);
8043
8044       if (decl_size && TREE_CODE (decl_size) == INTEGER_CST)
8045         {
8046           unsigned units = TREE_INT_CST_LOW (decl_size) / BITS_PER_UNIT;
8047
8048           if (units > larger_than_size)
8049             warning_with_decl (decl, "size of `%s' is %u bytes", units);
8050         }
8051     }
8052
8053   if (need_pop)
8054     {
8055       /* Resume permanent allocation, if not within a function.  */
8056       /* The corresponding push_obstacks_nochange is in start_decl,
8057          start_method, groktypename, and in grokfield.  */
8058       pop_obstacks ();
8059     }
8060
8061   if (was_readonly)
8062     TREE_READONLY (decl) = 1;
8063 }
8064
8065 /* This is here for a midend callback from c-common.c */
8066
8067 void
8068 finish_decl (decl, init, asmspec_tree)
8069      tree decl, init;
8070      tree asmspec_tree;
8071 {
8072   cp_finish_decl (decl, init, asmspec_tree, 1, 0);
8073 }
8074
8075 void
8076 expand_static_init (decl, init)
8077      tree decl;
8078      tree init;
8079 {
8080   tree oldstatic = value_member (decl, static_aggregates);
8081
8082   if (oldstatic)
8083     {
8084       if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
8085         cp_error ("multiple initializations given for `%D'", decl);
8086     }
8087   else if (! toplevel_bindings_p () && ! pseudo_global_level_p ())
8088     {
8089       /* Emit code to perform this initialization but once.  */
8090       tree temp;
8091
8092       /* Remember this information until end of file.  */
8093       push_obstacks (&permanent_obstack, &permanent_obstack);
8094
8095       /* Emit code to perform this initialization but once.  This code
8096          looks like:
8097
8098            static int temp = 0;
8099            if (!temp) {
8100              // Do initialization.
8101              temp = 1;
8102              // Register variable for destruction at end of program.
8103            }
8104
8105          Note that the `temp' variable is only set to 1 *after* the
8106          initialization is complete.  This ensures that an exception,
8107          thrown during the construction, will cause the variable to
8108          reinitialized when we pass through this code again, as per:
8109          
8110            [stmt.dcl]
8111
8112            If the initialization exits by throwing an exception, the
8113            initialization is not complete, so it will be tried again
8114            the next time control enters the declaration.
8115
8116          In theory, this process should be thread-safe, too; multiple
8117          threads should not be able to initialize the variable more
8118          than once.  We don't yet attempt to ensure thread-safety.  */
8119       temp = get_temp_name (integer_type_node, 1);
8120       rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
8121
8122       /* Begin the conditional initialization.  */
8123       expand_start_cond (build_binary_op (EQ_EXPR, temp,
8124                                           integer_zero_node, 1), 0);
8125       expand_start_target_temps ();
8126
8127       /* Do the initialization itself.  */
8128       if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
8129           || (init && TREE_CODE (init) == TREE_LIST))
8130         {
8131           expand_aggr_init (decl, init, 0);
8132           do_pending_stack_adjust ();
8133         }
8134       else if (init)
8135         expand_assignment (decl, init, 0, 0);
8136
8137       /* Set TEMP to 1.  */
8138       expand_assignment (temp, integer_one_node, 0, 0);
8139
8140       /* Cleanup any temporaries needed for the initial value.  If
8141          destroying one of the temporaries causes an exception to be
8142          thrown, then the object itself has still been fully
8143          constructed.  */
8144       expand_end_target_temps ();
8145
8146       /* Use atexit to register a function for destroying this static
8147          variable.  */
8148       if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
8149         {
8150           tree cleanup, fcall;
8151           static tree Atexit = 0;
8152           if (Atexit == 0)
8153             {
8154               tree atexit_fndecl, PFV, pfvlist;
8155               /* Remember this information until end of file.  */
8156               push_obstacks (&permanent_obstack, &permanent_obstack);
8157               PFV = build_pointer_type (build_function_type
8158                                         (void_type_node, void_list_node));
8159
8160               pfvlist = tree_cons (NULL_TREE, PFV, void_list_node);
8161
8162               push_lang_context (lang_name_c);
8163               atexit_fndecl
8164                 = builtin_function ("atexit",
8165                                     build_function_type (void_type_node,
8166                                                          pfvlist),
8167                                     NOT_BUILT_IN, NULL_PTR);
8168               mark_used (atexit_fndecl);
8169               Atexit = default_conversion (atexit_fndecl);
8170               pop_lang_context ();
8171               pop_obstacks ();
8172             }
8173               
8174           /* Call build_cleanup before we enter the anonymous function
8175              so that any access checks will be done relative to the
8176              current scope, rather than the scope of the anonymous
8177              function.  */
8178           fcall = build_cleanup (decl);
8179           cleanup = start_anon_func ();
8180           expand_expr_stmt (fcall);
8181           end_anon_func ();
8182           mark_addressable (cleanup);
8183           cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
8184           fcall = build_function_call (Atexit, expr_tree_cons (NULL_TREE, cleanup, NULL_TREE));
8185           expand_expr_stmt (fcall);
8186         }
8187
8188       expand_end_cond ();
8189       if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
8190         {
8191           static_aggregates = perm_tree_cons (temp, decl, static_aggregates);
8192           TREE_STATIC (static_aggregates) = 1;
8193         }
8194
8195       /* Resume old (possibly temporary) allocation.  */
8196       pop_obstacks ();
8197     }
8198   else
8199     {
8200       /* This code takes into account memory allocation
8201          policy of `start_decl'.  Namely, if TYPE_NEEDS_CONSTRUCTING
8202          does not hold for this object, then we must make permanent
8203          the storage currently in the temporary obstack.  */
8204       if (! TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
8205         preserve_initializer ();
8206       static_aggregates = perm_tree_cons (init, decl, static_aggregates);
8207     }
8208 }
8209 \f
8210 /* Make TYPE a complete type based on INITIAL_VALUE.
8211    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8212    2 if there was no information (in which case assume 1 if DO_DEFAULT).  */
8213
8214 int
8215 complete_array_type (type, initial_value, do_default)
8216      tree type, initial_value;
8217      int do_default;
8218 {
8219   register tree maxindex = NULL_TREE;
8220   int value = 0;
8221
8222   if (initial_value)
8223     {
8224       /* Note MAXINDEX  is really the maximum index,
8225          one less than the size.  */
8226       if (TREE_CODE (initial_value) == STRING_CST)
8227         {
8228           int eltsize
8229             = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8230           maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8231                                    / eltsize) - 1, 0);
8232         }
8233       else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8234         {
8235           tree elts = CONSTRUCTOR_ELTS (initial_value);
8236           maxindex = size_binop (MINUS_EXPR, integer_zero_node, size_one_node);
8237           for (; elts; elts = TREE_CHAIN (elts))
8238             {
8239               if (TREE_PURPOSE (elts))
8240                 maxindex = TREE_PURPOSE (elts);
8241               else
8242                 maxindex = size_binop (PLUS_EXPR, maxindex, size_one_node);
8243             }
8244           maxindex = copy_node (maxindex);
8245         }
8246       else
8247         {
8248           /* Make an error message unless that happened already.  */
8249           if (initial_value != error_mark_node)
8250             value = 1;
8251
8252           /* Prevent further error messages.  */
8253           maxindex = build_int_2 (0, 0);
8254         }
8255     }
8256
8257   if (!maxindex)
8258     {
8259       if (do_default)
8260         maxindex = build_int_2 (0, 0);
8261       value = 2;
8262     }
8263
8264   if (maxindex)
8265     {
8266       tree itype;
8267
8268       TYPE_DOMAIN (type) = build_index_type (maxindex);
8269       if (! TREE_TYPE (maxindex))
8270         TREE_TYPE (maxindex) = TYPE_DOMAIN (type);
8271       if (initial_value)
8272         itype = TREE_TYPE (initial_value);
8273       else
8274         itype = NULL;
8275       if (itype && !TYPE_DOMAIN (itype))
8276         TYPE_DOMAIN (itype) = TYPE_DOMAIN (type);
8277       /* The type of the main variant should never be used for arrays
8278          of different sizes.  It should only ever be completed with the
8279          size of the array.  */
8280       if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
8281         TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = TYPE_DOMAIN (type);
8282     }
8283
8284   /* Lay out the type now that we can get the real answer.  */
8285
8286   layout_type (type);
8287
8288   return value;
8289 }
8290 \f
8291 /* Return zero if something is declared to be a member of type
8292    CTYPE when in the context of CUR_TYPE.  STRING is the error
8293    message to print in that case.  Otherwise, quietly return 1.  */
8294
8295 static int
8296 member_function_or_else (ctype, cur_type, string)
8297      tree ctype, cur_type;
8298      char *string;
8299 {
8300   if (ctype && ctype != cur_type)
8301     {
8302       error (string, TYPE_NAME_STRING (ctype));
8303       return 0;
8304     }
8305   return 1;
8306 }
8307 \f
8308 /* Subroutine of `grokdeclarator'.  */
8309
8310 /* Generate errors possibly applicable for a given set of specifiers.
8311    This is for ARM $7.1.2.  */
8312
8313 static void
8314 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8315      tree object;
8316      char *type;
8317      int virtualp, quals, friendp, raises, inlinep;
8318 {
8319   if (virtualp)
8320     cp_error ("`%D' declared as a `virtual' %s", object, type);
8321   if (inlinep)
8322     cp_error ("`%D' declared as an `inline' %s", object, type);
8323   if (quals)
8324     cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
8325               object, type);
8326   if (friendp)
8327     cp_error_at ("invalid friend declaration", object);
8328   if (raises)
8329     cp_error_at ("invalid exception specifications", object);
8330 }
8331
8332 /* CTYPE is class type, or null if non-class.
8333    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8334    or METHOD_TYPE.
8335    DECLARATOR is the function's name.
8336    VIRTUALP is truthvalue of whether the function is virtual or not.
8337    FLAGS are to be passed through to `grokclassfn'.
8338    QUALS are qualifiers indicating whether the function is `const'
8339    or `volatile'.
8340    RAISES is a list of exceptions that this function can raise.
8341    CHECK is 1 if we must find this method in CTYPE, 0 if we should
8342    not look, and -1 if we should not call `grokclassfn' at all.  
8343
8344    Returns `NULL_TREE' if something goes wrong, after issuing
8345    applicable error messages.  */
8346
8347 static tree
8348 grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
8349             raises, attrlist, check, friendp, publicp, inlinep, funcdef_flag,
8350             template_count, in_namespace)
8351      tree ctype, type;
8352      tree declarator;
8353      tree orig_declarator;
8354      int virtualp;
8355      enum overload_flags flags;
8356      tree quals, raises, attrlist;
8357      int check, friendp, publicp, inlinep, funcdef_flag, template_count;
8358      tree in_namespace;
8359 {
8360   tree cname, decl;
8361   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8362   tree t;
8363
8364   if (ctype)
8365     cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8366       ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8367   else
8368     cname = NULL_TREE;
8369
8370   if (raises)
8371     {
8372       type = build_exception_variant (type, raises);
8373     }
8374
8375   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8376   /* Propagate volatile out from type to decl. */
8377   if (TYPE_VOLATILE (type))
8378     TREE_THIS_VOLATILE (decl) = 1;
8379
8380   /* If this decl has namespace scope, set that up.  */
8381   if (in_namespace)
8382     set_decl_namespace (decl, in_namespace, friendp);
8383   else if (publicp && ! ctype)
8384     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8385
8386   /* `main' and builtins have implicit 'C' linkage.  */
8387   if ((MAIN_NAME_P (declarator)
8388        || (IDENTIFIER_LENGTH (declarator) > 10
8389            && IDENTIFIER_POINTER (declarator)[0] == '_'
8390            && IDENTIFIER_POINTER (declarator)[1] == '_'
8391            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8392       && current_lang_name == lang_name_cplusplus
8393       && ctype == NULL_TREE
8394       /* NULL_TREE means global namespace.  */
8395       && DECL_CONTEXT (decl) == NULL_TREE)
8396     DECL_LANGUAGE (decl) = lang_c;
8397
8398   /* Should probably propagate const out from type to decl I bet (mrs).  */
8399   if (staticp)
8400     {
8401       DECL_STATIC_FUNCTION_P (decl) = 1;
8402       DECL_CONTEXT (decl) = ctype;
8403     }
8404
8405   if (ctype)
8406     DECL_CLASS_CONTEXT (decl) = ctype;
8407
8408   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8409     {
8410       if (processing_template_decl)
8411         error ("cannot declare `main' to be a template");
8412       if (inlinep)
8413         error ("cannot declare `main' to be inline");
8414       else if (! publicp)
8415         error ("cannot declare `main' to be static");
8416       inlinep = 0;
8417       publicp = 1;
8418     }
8419
8420   /* Members of anonymous types and local classes have no linkage; make
8421      them internal.  */
8422   if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
8423                 || hack_decl_function_context (TYPE_MAIN_DECL (ctype))))
8424     publicp = 0;
8425
8426   if (publicp)
8427     {
8428       /* [basic.link]: A name with no linkage (notably, the name of a class
8429          or enumeration declared in a local scope) shall not be used to
8430          declare an entity with linkage.
8431
8432          Only check this for public decls for now.  */
8433       t = no_linkage_check (TREE_TYPE (decl));
8434       if (t)
8435         {
8436           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8437             {
8438               if (DECL_LANGUAGE (decl) == lang_c)
8439                 /* Allow this; it's pretty common in C.  */;
8440               else
8441                 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8442                             decl);
8443             }
8444           else
8445             cp_pedwarn ("non-local function `%#D' uses local type `%T'",
8446                         decl, t);
8447         }
8448     }
8449
8450   TREE_PUBLIC (decl) = publicp;
8451   if (! publicp)
8452     {
8453       DECL_INTERFACE_KNOWN (decl) = 1;
8454       DECL_NOT_REALLY_EXTERN (decl) = 1;
8455     }
8456
8457   if (inlinep)
8458     DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8459
8460   DECL_EXTERNAL (decl) = 1;
8461   if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8462     {
8463       cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8464                 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8465       quals = NULL_TREE;
8466     }
8467
8468   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8469     grok_op_properties (decl, virtualp, check < 0);
8470
8471   if (ctype && hack_decl_function_context (decl))
8472     DECL_NO_STATIC_CHAIN (decl) = 1;
8473
8474   for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8475     if (TREE_PURPOSE (t)
8476         && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8477       {
8478         add_defarg_fn (decl);
8479         break;
8480       }
8481
8482   if (friendp
8483       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8484     {
8485       if (funcdef_flag)
8486         cp_error
8487           ("defining explicit specialization `%D' in friend declaration",
8488            orig_declarator);
8489       else
8490         {
8491           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8492             {
8493               /* Something like `template <class T> friend void f<T>()'.  */
8494               cp_error ("template-id `%D' in declaration of primary template", 
8495                         orig_declarator);
8496               return NULL_TREE;
8497             }
8498
8499           /* A friend declaration of the form friend void f<>().  Record
8500              the information in the TEMPLATE_ID_EXPR.  */
8501           SET_DECL_IMPLICIT_INSTANTIATION (decl);
8502           DECL_TEMPLATE_INFO (decl)
8503             = perm_tree_cons (TREE_OPERAND (orig_declarator, 0),
8504                               TREE_OPERAND (orig_declarator, 1),
8505                               NULL_TREE);
8506         }
8507     }
8508
8509   /* Plain overloading: will not be grok'd by grokclassfn.  */
8510   if (! ctype && ! processing_template_decl
8511       && DECL_LANGUAGE (decl) != lang_c
8512       && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
8513     set_mangled_name_for_decl (decl);
8514
8515   if (funcdef_flag)
8516     /* Make the init_value nonzero so pushdecl knows this is not
8517        tentative.  error_mark_node is replaced later with the BLOCK.  */
8518     DECL_INITIAL (decl) = error_mark_node;
8519
8520   /* Caller will do the rest of this.  */
8521   if (check < 0)
8522     return decl;
8523
8524   if (check && funcdef_flag)
8525     DECL_INITIAL (decl) = error_mark_node;
8526
8527   if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
8528     {
8529       tree tmp;
8530       /* Just handle constructors here.  We could do this
8531          inside the following if stmt, but I think
8532          that the code is more legible by breaking this
8533          case out.  See comments below for what each of
8534          the following calls is supposed to do.  */
8535       DECL_CONSTRUCTOR_P (decl) = 1;
8536
8537       grokclassfn (ctype, decl, flags, quals);
8538
8539       decl = check_explicit_specialization (orig_declarator, decl,
8540                                             template_count, 
8541                                             2 * (funcdef_flag != 0) + 
8542                                             4 * (friendp != 0));
8543       if (decl == error_mark_node)
8544         return NULL_TREE;
8545
8546       if ((! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8547           && check)
8548         {
8549           tmp = check_classfn (ctype, decl);
8550
8551           if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8552             tmp = DECL_TEMPLATE_RESULT(tmp);
8553
8554           if (tmp && DECL_ARTIFICIAL (tmp))
8555             cp_error ("definition of implicitly-declared `%D'", tmp);
8556           if (tmp && duplicate_decls (decl, tmp))
8557             return tmp;
8558         }
8559       if (! grok_ctor_properties (ctype, decl))
8560         return NULL_TREE;
8561     }
8562   else
8563     {
8564       tree tmp;
8565
8566       /* Function gets the ugly name, field gets the nice one.
8567          This call may change the type of the function (because
8568          of default parameters)!  */
8569       if (ctype != NULL_TREE)
8570         grokclassfn (ctype, decl, flags, quals);
8571
8572       decl = check_explicit_specialization (orig_declarator, decl,
8573                                             template_count, 
8574                                             2 * (funcdef_flag != 0) + 
8575                                             4 * (friendp != 0));
8576       if (decl == error_mark_node)
8577         return NULL_TREE;
8578
8579       if (ctype != NULL_TREE
8580           && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8581           && check)
8582         {
8583           tmp = check_classfn (ctype, decl);
8584
8585           if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8586             tmp = DECL_TEMPLATE_RESULT (tmp);
8587               
8588           if (tmp && DECL_STATIC_FUNCTION_P (tmp)
8589               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8590             {
8591               /* Remove the `this' parm added by grokclassfn.
8592                  XXX Isn't this done in start_function, too?  */
8593               revert_static_member_fn (&decl, NULL, NULL);
8594               last_function_parms = TREE_CHAIN (last_function_parms);
8595             }
8596           if (tmp && DECL_ARTIFICIAL (tmp))
8597             cp_error ("definition of implicitly-declared `%D'", tmp);
8598           if (tmp)
8599             {
8600               /* Attempt to merge the declarations.  This can fail, in
8601                  the case of some illegal specialization declarations.  */
8602               if (!duplicate_decls (decl, tmp))
8603                 cp_error ("no `%#D' member function declared in class `%T'",
8604                           decl, ctype);
8605               return tmp;
8606             }
8607         }
8608
8609       if (ctype == NULL_TREE || check)
8610         return decl;
8611
8612       if (attrlist)
8613         cplus_decl_attributes (decl, TREE_PURPOSE (attrlist), 
8614                                TREE_VALUE (attrlist));
8615       make_decl_rtl (decl, NULL_PTR, 1);
8616
8617       if (virtualp)
8618         {
8619           DECL_VIRTUAL_P (decl) = 1;
8620           if (DECL_VINDEX (decl) == NULL_TREE)
8621             DECL_VINDEX (decl) = error_mark_node;
8622           IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
8623         }
8624     }
8625   return decl;
8626 }
8627
8628 static tree
8629 grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
8630      tree type;
8631      tree declarator;
8632      RID_BIT_TYPE *specbits_in;
8633      int initialized;
8634      int constp;
8635      tree in_namespace;
8636 {
8637   tree decl;
8638   RID_BIT_TYPE specbits;
8639
8640   specbits = *specbits_in;
8641
8642   if (TREE_CODE (type) == OFFSET_TYPE)
8643     {
8644       /* If you declare a static member so that it
8645          can be initialized, the code will reach here.  */
8646       tree basetype = TYPE_OFFSET_BASETYPE (type);
8647       type = TREE_TYPE (type);
8648       decl = build_lang_field_decl (VAR_DECL, declarator, type);
8649       DECL_CONTEXT (decl) = basetype;
8650       DECL_CLASS_CONTEXT (decl) = basetype;
8651       DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
8652     }
8653   else
8654     {
8655       tree context;
8656
8657       if (in_namespace)
8658         context = in_namespace;
8659       else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
8660         context = current_namespace;
8661       else
8662         context = NULL_TREE;
8663
8664       decl = build_decl (VAR_DECL, declarator, complete_type (type));
8665
8666       if (context)
8667         set_decl_namespace (decl, context, 0);
8668
8669       context = DECL_CONTEXT (decl);
8670       if (declarator && context && current_lang_name != lang_name_c)
8671         DECL_ASSEMBLER_NAME (decl) = build_static_name (context, declarator);
8672     }
8673
8674   if (in_namespace)
8675     set_decl_namespace (decl, in_namespace, 0);
8676
8677   if (RIDBIT_SETP (RID_EXTERN, specbits))
8678     {
8679       DECL_THIS_EXTERN (decl) = 1;
8680       DECL_EXTERNAL (decl) = !initialized;
8681     }
8682
8683   /* In class context, static means one per class,
8684      public access, and static storage.  */
8685   if (DECL_CLASS_SCOPE_P (decl))
8686     {
8687       TREE_PUBLIC (decl) = 1;
8688       TREE_STATIC (decl) = 1;
8689       DECL_EXTERNAL (decl) = 0;
8690     }
8691   /* At top level, either `static' or no s.c. makes a definition
8692      (perhaps tentative), and absence of `static' makes it public.  */
8693   else if (toplevel_bindings_p ())
8694     {
8695       TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
8696                             && (DECL_THIS_EXTERN (decl) || ! constp));
8697       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8698     }
8699   /* Not at top level, only `static' makes a static definition.  */
8700   else
8701     {
8702       TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
8703       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8704     }
8705
8706   if (TREE_PUBLIC (decl))
8707     {
8708       /* [basic.link]: A name with no linkage (notably, the name of a class
8709          or enumeration declared in a local scope) shall not be used to
8710          declare an entity with linkage.
8711
8712          Only check this for public decls for now.  */
8713       tree t = no_linkage_check (TREE_TYPE (decl));
8714       if (t)
8715         {
8716           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8717             /* Ignore for now; `enum { foo } e' is pretty common.  */;
8718           else
8719             cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
8720                         decl, t);
8721         }
8722     }
8723
8724   return decl;
8725 }
8726
8727 /* Create and return a canonical pointer to member function type, for
8728    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
8729
8730 tree
8731 build_ptrmemfunc_type (type)
8732      tree type;
8733 {
8734   tree fields[4];
8735   tree t;
8736   tree u;
8737
8738   /* If a canonical type already exists for this type, use it.  We use
8739      this method instead of type_hash_canon, because it only does a
8740      simple equality check on the list of field members.  */
8741
8742   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
8743     return t;
8744
8745   push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8746
8747   u = make_lang_type (UNION_TYPE);
8748   SET_IS_AGGR_TYPE (u, 0);
8749   fields[0] = build_lang_field_decl (FIELD_DECL, pfn_identifier, type);
8750   fields[1] = build_lang_field_decl (FIELD_DECL, delta2_identifier,
8751                                      delta_type_node);
8752   finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
8753   TYPE_NAME (u) = NULL_TREE;
8754
8755   t = make_lang_type (RECORD_TYPE);
8756
8757   /* Let the front-end know this is a pointer to member function...  */
8758   TYPE_PTRMEMFUNC_FLAG (t) = 1;
8759   /* ... and not really an aggregate.  */
8760   SET_IS_AGGR_TYPE (t, 0);
8761
8762   fields[0] = build_lang_field_decl (FIELD_DECL, delta_identifier,
8763                                      delta_type_node);
8764   fields[1] = build_lang_field_decl (FIELD_DECL, index_identifier,
8765                                      delta_type_node);
8766   fields[2] = build_lang_field_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
8767   finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
8768
8769   pop_obstacks ();
8770
8771   /* Zap out the name so that the back-end will give us the debugging
8772      information for this anonymous RECORD_TYPE.  */
8773   TYPE_NAME (t) = NULL_TREE;
8774
8775   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
8776
8777   /* Seems to be wanted.  */
8778   CLASSTYPE_GOT_SEMICOLON (t) = 1;
8779   return t;
8780 }
8781
8782 /* Given declspecs and a declarator,
8783    determine the name and type of the object declared
8784    and construct a ..._DECL node for it.
8785    (In one case we can return a ..._TYPE node instead.
8786     For invalid input we sometimes return 0.)
8787
8788    DECLSPECS is a chain of tree_list nodes whose value fields
8789     are the storage classes and type specifiers.
8790
8791    DECL_CONTEXT says which syntactic context this declaration is in:
8792      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8793      FUNCDEF for a function definition.  Like NORMAL but a few different
8794       error messages in each case.  Return value may be zero meaning
8795       this definition is too screwy to try to parse.
8796      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
8797       handle member functions (which have FIELD context).
8798       Return value may be zero meaning this definition is too screwy to
8799       try to parse.
8800      PARM for a parameter declaration (either within a function prototype
8801       or before a function body).  Make a PARM_DECL, or return void_type_node.
8802      CATCHPARM for a parameter declaration before a catch clause.
8803      TYPENAME if for a typename (in a cast or sizeof).
8804       Don't make a DECL node; just return the ..._TYPE node.
8805      FIELD for a struct or union field; make a FIELD_DECL.
8806      BITFIELD for a field with specified width.
8807    INITIALIZED is 1 if the decl has an initializer.
8808
8809    In the TYPENAME case, DECLARATOR is really an absolute declarator.
8810    It may also be so in the PARM case, for a prototype where the
8811    argument type is specified but not the name.
8812
8813    This function is where the complicated C meanings of `static'
8814    and `extern' are interpreted.
8815
8816    For C++, if there is any monkey business to do, the function which
8817    calls this one must do it, i.e., prepending instance variables,
8818    renaming overloaded function names, etc.
8819
8820    Note that for this C++, it is an error to define a method within a class
8821    which does not belong to that class.
8822
8823    Except in the case where SCOPE_REFs are implicitly known (such as
8824    methods within a class being redundantly qualified),
8825    declarations which involve SCOPE_REFs are returned as SCOPE_REFs
8826    (class_name::decl_name).  The caller must also deal with this.
8827
8828    If a constructor or destructor is seen, and the context is FIELD,
8829    then the type gains the attribute TREE_HAS_x.  If such a declaration
8830    is erroneous, NULL_TREE is returned.
8831
8832    QUALS is used only for FUNCDEF and MEMFUNCDEF cases.  For a member
8833    function, these are the qualifiers to give to the `this' pointer.
8834
8835    May return void_type_node if the declarator turned out to be a friend.
8836    See grokfield for details.  */
8837
8838 enum return_types { return_normal, return_ctor, return_dtor, return_conversion };
8839
8840 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
8841    Check to see that the definition is valid.  Issue appropriate error
8842    messages.  Return 1 if the definition is particularly bad, or 0
8843    otherwise.  */
8844
8845 int
8846 check_static_variable_definition (decl, type)
8847      tree decl;
8848      tree type;
8849 {
8850   /* Motion 10 at San Diego: If a static const integral data member is
8851      initialized with an integral constant expression, the initializer
8852      may appear either in the declaration (within the class), or in
8853      the definition, but not both.  If it appears in the class, the
8854      member is a member constant.  The file-scope definition is always
8855      required.  */
8856   if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
8857     {
8858       cp_error ("in-class initialization of static data member of non-integral type `%T'", 
8859                 type);
8860       /* If we just return the declaration, crashes will sometimes
8861          occur.  We therefore return void_type_node, as if this was a
8862          friend declaration, to cause callers to completely ignore
8863          this declaration.  */
8864       return 1;
8865     }
8866   else if (!CP_TYPE_CONST_P (type))
8867     cp_error ("ANSI C++ forbids in-class initialization of non-const static member `%D'",
8868               decl);
8869   else if (pedantic && !INTEGRAL_TYPE_P (type))
8870     cp_pedwarn ("ANSI C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
8871
8872   return 0;
8873 }
8874
8875 tree
8876 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
8877      tree declspecs;
8878      tree declarator;
8879      enum decl_context decl_context;
8880      int initialized;
8881      tree attrlist;
8882 {
8883   RID_BIT_TYPE specbits;
8884   int nclasses = 0;
8885   tree spec;
8886   tree type = NULL_TREE;
8887   int longlong = 0;
8888   int constp;
8889   int restrictp;
8890   int volatilep;
8891   int type_quals;
8892   int virtualp, explicitp, friendp, inlinep, staticp;
8893   int explicit_int = 0;
8894   int explicit_char = 0;
8895   int defaulted_int = 0;
8896   int opaque_typedef = 0;
8897   tree typedef_decl = NULL_TREE;
8898   char *name;
8899   tree typedef_type = NULL_TREE;
8900   int funcdef_flag = 0;
8901   enum tree_code innermost_code = ERROR_MARK;
8902   int bitfield = 0;
8903 #if 0
8904   /* See the code below that used this.  */
8905   tree decl_machine_attr = NULL_TREE;
8906 #endif
8907   /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
8908      All FIELD_DECLs we build here have `init' put into their DECL_INITIAL.  */
8909   tree init = NULL_TREE;
8910
8911   /* Keep track of what sort of function is being processed
8912      so that we can warn about default return values, or explicit
8913      return values which do not match prescribed defaults.  */
8914   enum return_types return_type = return_normal;
8915
8916   tree dname = NULL_TREE;
8917   tree ctype = current_class_type;
8918   tree ctor_return_type = NULL_TREE;
8919   enum overload_flags flags = NO_SPECIAL;
8920   tree quals = NULL_TREE;
8921   tree raises = NULL_TREE;
8922   int template_count = 0;
8923   tree in_namespace = NULL_TREE;
8924   tree inner_attrs;
8925   int ignore_attrs;
8926
8927   RIDBIT_RESET_ALL (specbits);
8928   if (decl_context == FUNCDEF)
8929     funcdef_flag = 1, decl_context = NORMAL;
8930   else if (decl_context == MEMFUNCDEF)
8931     funcdef_flag = -1, decl_context = FIELD;
8932   else if (decl_context == BITFIELD)
8933     bitfield = 1, decl_context = FIELD;
8934
8935   /* Look inside a declarator for the name being declared
8936      and get it as a string, for an error message.  */
8937   {
8938     tree *next = &declarator;
8939     register tree decl;
8940     name = NULL;
8941
8942     while (next && *next)
8943       {
8944         decl = *next;
8945         switch (TREE_CODE (decl))
8946           {
8947           case TREE_LIST:
8948             /* For attributes.  */
8949             next = &TREE_VALUE (decl);
8950             break;
8951
8952           case COND_EXPR:
8953             ctype = NULL_TREE;
8954             next = &TREE_OPERAND (decl, 0);
8955             break;
8956
8957           case BIT_NOT_EXPR:    /* For C++ destructors!  */
8958             {
8959               tree name = TREE_OPERAND (decl, 0);
8960               tree rename = NULL_TREE;
8961
8962               my_friendly_assert (flags == NO_SPECIAL, 152);
8963               flags = DTOR_FLAG;
8964               return_type = return_dtor;
8965               if (TREE_CODE (name) == TYPE_DECL)
8966                 TREE_OPERAND (decl, 0) = name = constructor_name (name);
8967               my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
8968               if (ctype == NULL_TREE)
8969                 {
8970                   if (current_class_type == NULL_TREE)
8971                     {
8972                       error ("destructors must be member functions");
8973                       flags = NO_SPECIAL;
8974                     }
8975                   else
8976                     {
8977                       tree t = constructor_name (current_class_name);
8978                       if (t != name)
8979                         rename = t;
8980                     }
8981                 }
8982               else
8983                 {
8984                   tree t = constructor_name (ctype);
8985                   if (t != name)
8986                     rename = t;
8987                 }
8988
8989               if (rename)
8990                 {
8991                   cp_error ("destructor `%T' must match class name `%T'",
8992                             name, rename);
8993                   TREE_OPERAND (decl, 0) = rename;
8994                 }
8995               next = &name;
8996             }
8997             break;
8998
8999           case ADDR_EXPR:       /* C++ reference declaration */
9000             /* Fall through. */
9001           case ARRAY_REF:
9002           case INDIRECT_REF:
9003             ctype = NULL_TREE;
9004             innermost_code = TREE_CODE (decl);
9005             next = &TREE_OPERAND (decl, 0);
9006             break;
9007
9008           case CALL_EXPR:
9009             if (parmlist_is_exprlist (TREE_OPERAND (decl, 1)))
9010               {
9011                 /* This is actually a variable declaration using constructor
9012                    syntax.  We need to call start_decl and cp_finish_decl so we
9013                    can get the variable initialized...  */
9014
9015                 *next = TREE_OPERAND (decl, 0);
9016                 init = TREE_OPERAND (decl, 1);
9017
9018                 decl = start_decl (declarator, declspecs, 1, NULL_TREE, NULL_TREE);
9019                 if (decl)
9020                   {
9021                     /* Look for __unused__ attribute */
9022                     if (TREE_USED (TREE_TYPE (decl)))
9023                       TREE_USED (decl) = 1;
9024                     finish_decl (decl, init, NULL_TREE);
9025                   }
9026                 else
9027                   cp_error ("invalid declarator");
9028                 return 0;
9029               }
9030             innermost_code = TREE_CODE (decl);
9031             if (decl_context == FIELD && ctype == NULL_TREE)
9032               ctype = current_class_type;
9033             if (ctype
9034                 && TREE_OPERAND (decl, 0)
9035                 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
9036                     && ((DECL_NAME (TREE_OPERAND (decl, 0))
9037                          == constructor_name_full (ctype))
9038                         || (DECL_NAME (TREE_OPERAND (decl, 0))
9039                             == constructor_name (ctype)))))
9040               TREE_OPERAND (decl, 0) = constructor_name (ctype);
9041             next = &TREE_OPERAND (decl, 0);
9042             decl = *next;
9043             if (ctype != NULL_TREE
9044                 && decl != NULL_TREE && flags != DTOR_FLAG
9045                 && decl == constructor_name (ctype))
9046               {
9047                 return_type = return_ctor;
9048                 ctor_return_type = ctype;
9049               }
9050             ctype = NULL_TREE;
9051             break;
9052             
9053           case TEMPLATE_ID_EXPR:
9054               {
9055                 tree fns = TREE_OPERAND (decl, 0);
9056
9057                 if (TREE_CODE (fns) == LOOKUP_EXPR)
9058                   fns = TREE_OPERAND (fns, 0);
9059
9060                 if (TREE_CODE (fns) == IDENTIFIER_NODE)
9061                   dname = fns;
9062                 else if (is_overloaded_fn (fns))
9063                   dname = DECL_NAME (get_first_fn (fns));
9064                 else
9065                   my_friendly_abort (0);
9066               }
9067           /* Fall through. */
9068
9069           case IDENTIFIER_NODE:
9070             if (TREE_CODE (decl) == IDENTIFIER_NODE)
9071               dname = decl;
9072
9073             next = 0;
9074
9075             if (is_rid (dname))
9076               {
9077                 cp_error ("declarator-id missing; using reserved word `%D'",
9078                           dname);
9079                 name = IDENTIFIER_POINTER (dname);
9080               }
9081             if (! IDENTIFIER_OPNAME_P (dname)
9082                 /* GNU/Linux headers use '__op'.  Arrgh.  */
9083                 || (IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname)))
9084               name = IDENTIFIER_POINTER (dname);
9085             else
9086               {
9087                 if (IDENTIFIER_TYPENAME_P (dname))
9088                   {
9089                     my_friendly_assert (flags == NO_SPECIAL, 154);
9090                     flags = TYPENAME_FLAG;
9091                     ctor_return_type = TREE_TYPE (dname);
9092                     return_type = return_conversion;
9093                   }
9094                 name = operator_name_string (dname);
9095               }
9096             break;
9097
9098             /* C++ extension */
9099           case SCOPE_REF:
9100             {
9101               /* Perform error checking, and decide on a ctype.  */
9102               tree cname = TREE_OPERAND (decl, 0);
9103               if (cname == NULL_TREE)
9104                 ctype = NULL_TREE;
9105               else if (TREE_CODE (cname) == NAMESPACE_DECL)
9106                 {
9107                   ctype = NULL_TREE;
9108                   in_namespace = TREE_OPERAND (decl, 0);
9109                   TREE_OPERAND (decl, 0) = NULL_TREE;
9110                 }
9111               else if (! is_aggr_type (cname, 1))
9112                 TREE_OPERAND (decl, 0) = NULL_TREE;
9113               /* Must test TREE_OPERAND (decl, 1), in case user gives
9114                  us `typedef (class::memfunc)(int); memfunc *memfuncptr;'  */
9115               else if (TREE_OPERAND (decl, 1)
9116                        && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9117                 ctype = cname;
9118               else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
9119                        || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
9120                 {
9121                   cp_error ("`%T::%D' is not a valid declarator", cname,
9122                             TREE_OPERAND (decl, 1));
9123                   cp_error ("  perhaps you want `typename %T::%D' to make it a type",
9124                             cname, TREE_OPERAND (decl, 1));
9125                   return void_type_node;
9126                 }
9127               else if (ctype == NULL_TREE)
9128                 ctype = cname;
9129               else if (TREE_COMPLEXITY (decl) == current_class_depth)
9130                 TREE_OPERAND (decl, 0) = ctype;
9131               else
9132                 {
9133                   if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
9134                     {
9135                       cp_error ("type `%T' is not derived from type `%T'",
9136                                 cname, ctype);
9137                       TREE_OPERAND (decl, 0) = NULL_TREE;
9138                     }
9139                   else
9140                     ctype = cname;
9141                 }
9142
9143               if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
9144                   && ((DECL_NAME (TREE_OPERAND (decl, 1))
9145                        == constructor_name_full (ctype))
9146                       || (DECL_NAME (TREE_OPERAND (decl, 1))
9147                           == constructor_name (ctype))))
9148                 TREE_OPERAND (decl, 1) = constructor_name (ctype);
9149               next = &TREE_OPERAND (decl, 1);
9150               decl = *next;
9151               if (ctype)
9152                 {
9153                   if (TREE_CODE (decl) == IDENTIFIER_NODE
9154                       && constructor_name (ctype) == decl)
9155                     {
9156                       return_type = return_ctor;
9157                       ctor_return_type = ctype;
9158                     }
9159                   else if (TREE_CODE (decl) == BIT_NOT_EXPR
9160                            && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9161                            && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9162                                || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9163                     {
9164                       return_type = return_dtor;
9165                       ctor_return_type = ctype;
9166                       flags = DTOR_FLAG;
9167                       TREE_OPERAND (decl, 0) = constructor_name (ctype);
9168                       next = &TREE_OPERAND (decl, 0);
9169                     }
9170                 }
9171             }
9172             break;
9173
9174           case ERROR_MARK:
9175             next = 0;
9176             break;
9177
9178           case TYPE_DECL:
9179             /* Parse error puts this typespec where
9180                a declarator should go.  */
9181             cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
9182             if (TREE_TYPE (decl) == current_class_type)
9183               cp_error ("  perhaps you want `%T' for a constructor",
9184                         current_class_name);
9185             dname = DECL_NAME (decl);
9186             name = IDENTIFIER_POINTER (dname);
9187
9188             /* Avoid giving two errors for this.  */
9189             IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9190
9191             declspecs = temp_tree_cons (NULL_TREE, integer_type_node,
9192                                         declspecs);
9193             *next = dname;
9194             next = 0;
9195             break;
9196
9197           default:
9198             cp_compiler_error ("`%D' as declarator", decl);
9199             return 0; /* We used to do a 155 abort here.  */
9200           }
9201       }
9202     if (name == NULL)
9203       name = "type name";
9204   }
9205
9206   /* A function definition's declarator must have the form of
9207      a function declarator.  */
9208
9209   if (funcdef_flag && innermost_code != CALL_EXPR)
9210     return 0;
9211
9212   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9213       && innermost_code != CALL_EXPR
9214       && ! (ctype && declspecs == NULL_TREE))
9215     {
9216       cp_error ("declaration of `%D' as non-function", dname);
9217       return void_type_node;
9218     }
9219
9220   /* Anything declared one level down from the top level
9221      must be one of the parameters of a function
9222      (because the body is at least two levels down).  */
9223
9224   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9225      by not allowing C++ class definitions to specify their parameters
9226      with xdecls (must be spec.d in the parmlist).
9227
9228      Since we now wait to push a class scope until we are sure that
9229      we are in a legitimate method context, we must set oldcname
9230      explicitly (since current_class_name is not yet alive).
9231
9232      We also want to avoid calling this a PARM if it is in a namespace.  */
9233
9234   if (decl_context == NORMAL && ! namespace_bindings_p ()
9235       && ! pseudo_global_level_p ())
9236     {
9237       struct binding_level *b = current_binding_level;
9238       current_binding_level = b->level_chain;
9239       if (current_binding_level != 0 && toplevel_bindings_p ())
9240         decl_context = PARM;
9241       current_binding_level = b;
9242     }
9243
9244   /* Look through the decl specs and record which ones appear.
9245      Some typespecs are defined as built-in typenames.
9246      Others, the ones that are modifiers of other types,
9247      are represented by bits in SPECBITS: set the bits for
9248      the modifiers that appear.  Storage class keywords are also in SPECBITS.
9249
9250      If there is a typedef name or a type, store the type in TYPE.
9251      This includes builtin typedefs such as `int'.
9252
9253      Set EXPLICIT_INT if the type is `int' or `char' and did not
9254      come from a user typedef.
9255
9256      Set LONGLONG if `long' is mentioned twice.
9257
9258      For C++, constructors and destructors have their own fast treatment.  */
9259
9260   for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9261     {
9262       register int i;
9263       register tree id;
9264
9265       /* Certain parse errors slip through.  For example,
9266          `int class;' is not caught by the parser. Try
9267          weakly to recover here.  */
9268       if (TREE_CODE (spec) != TREE_LIST)
9269         return 0;
9270
9271       id = TREE_VALUE (spec);
9272
9273       if (TREE_CODE (id) == IDENTIFIER_NODE)
9274         {
9275           if (id == ridpointers[(int) RID_INT]
9276               || id == ridpointers[(int) RID_CHAR]
9277               || id == ridpointers[(int) RID_BOOL]
9278               || id == ridpointers[(int) RID_WCHAR])
9279             {
9280               if (type)
9281                 {
9282                   if (id == ridpointers[(int) RID_BOOL])
9283                     error ("`bool' is now a keyword");
9284                   else
9285                     cp_error ("extraneous `%T' ignored", id);
9286                 }
9287               else
9288                 {
9289                   if (id == ridpointers[(int) RID_INT])
9290                     explicit_int = 1;
9291                   else if (id == ridpointers[(int) RID_CHAR])
9292                     explicit_char = 1;
9293                   type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
9294                 }
9295               goto found;
9296             }
9297           /* C++ aggregate types.  */
9298           if (IDENTIFIER_HAS_TYPE_VALUE (id))
9299             {
9300               if (type)
9301                 cp_error ("multiple declarations `%T' and `%T'", type, id);
9302               else
9303                 type = IDENTIFIER_TYPE_VALUE (id);
9304               goto found;
9305             }
9306
9307           for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
9308             {
9309               if (ridpointers[i] == id)
9310                 {
9311                   if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
9312                     {
9313                       if (pedantic && ! in_system_header && warn_long_long)
9314                         pedwarn ("ANSI C++ does not support `long long'");
9315                       if (longlong)
9316                         error ("`long long long' is too long for GCC");
9317                       else
9318                         longlong = 1;
9319                     }
9320                   else if (RIDBIT_SETP (i, specbits))
9321                     pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
9322                   RIDBIT_SET (i, specbits);
9323                   goto found;
9324                 }
9325             }
9326         }
9327       /* C++ aggregate types.  */
9328       else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
9329         {
9330           if (type)
9331             cp_error ("multiple declarations `%T' and `%T'", type,
9332                       TREE_TYPE (id));
9333           else
9334             {
9335               type = TREE_TYPE (id);
9336               TREE_VALUE (spec) = type;
9337             }
9338           goto found;
9339         }
9340       if (type)
9341         error ("two or more data types in declaration of `%s'", name);
9342       else if (TREE_CODE (id) == IDENTIFIER_NODE)
9343         {
9344           register tree t = lookup_name (id, 1);
9345           if (!t || TREE_CODE (t) != TYPE_DECL)
9346             error ("`%s' fails to be a typedef or built in type",
9347                    IDENTIFIER_POINTER (id));
9348           else
9349             {
9350               type = TREE_TYPE (t);
9351 #if 0
9352               /* See the code below that used this.  */
9353               decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
9354 #endif
9355               typedef_decl = t;
9356             }
9357         }
9358       else if (id != error_mark_node)
9359         /* Can't change CLASS nodes into RECORD nodes here!  */
9360         type = id;
9361
9362     found: ;
9363     }
9364
9365   typedef_type = type;
9366
9367   /* No type at all: default to `int', and set DEFAULTED_INT
9368      because it was not a user-defined typedef.
9369      Except when we have a `typedef' inside a signature, in
9370      which case the type defaults to `unknown type' and is
9371      instantiated when assigning to a signature pointer or ref.  */
9372
9373   if (type == NULL_TREE
9374       && (RIDBIT_SETP (RID_SIGNED, specbits)
9375           || RIDBIT_SETP (RID_UNSIGNED, specbits)
9376           || RIDBIT_SETP (RID_LONG, specbits)
9377           || RIDBIT_SETP (RID_SHORT, specbits)))
9378     {
9379       /* These imply 'int'.  */
9380       type = integer_type_node;
9381       defaulted_int = 1;
9382     }
9383
9384   if (type == NULL_TREE)
9385     {
9386       explicit_int = -1;
9387       if (return_type == return_dtor)
9388         type = void_type_node;
9389       else if (return_type == return_ctor)
9390         type = build_pointer_type (ctor_return_type);
9391       else if (return_type == return_conversion)
9392         type = ctor_return_type;
9393       else if (current_class_type
9394                && IS_SIGNATURE (current_class_type)
9395                && RIDBIT_SETP (RID_TYPEDEF, specbits)
9396                && (decl_context == FIELD || decl_context == NORMAL))
9397         {
9398           explicit_int = 0;
9399           opaque_typedef = 1;
9400           type = copy_node (opaque_type_node);
9401         }
9402       else
9403         {
9404           /* We handle `main' specially here, because 'main () { }' is so
9405              common.  With no options, it is allowed.  With -Wreturn-type,
9406              it is a warning.  It is only an error with -pedantic-errors.  */
9407           int is_main = (funcdef_flag
9408                          && MAIN_NAME_P (dname)
9409                          && ctype == NULL_TREE
9410                          && in_namespace == NULL_TREE
9411                          && current_namespace == global_namespace);
9412
9413           if (in_system_header)
9414             /* Allow it, sigh.  */;
9415           else if (pedantic || ! is_main)
9416             cp_pedwarn ("ANSI C++ forbids declaration `%D' with no type",
9417                         dname);
9418           else if (warn_return_type)
9419             cp_warning ("ANSI C++ forbids declaration `%D' with no type",
9420                         dname);
9421
9422           type = integer_type_node;
9423         }
9424     }
9425   else if (return_type == return_dtor)
9426     {
9427       error ("return type specification for destructor invalid");
9428       type = void_type_node;
9429     }
9430   else if (return_type == return_ctor)
9431     {
9432       error ("return type specification for constructor invalid");
9433       type = build_pointer_type (ctor_return_type);
9434     }
9435   else if (return_type == return_conversion)
9436     {
9437       if (!same_type_p (type, ctor_return_type))
9438         cp_error ("operator `%T' declared to return `%T'",
9439                   ctor_return_type, type);
9440       else
9441         cp_pedwarn ("return type specified for `operator %T'",
9442                     ctor_return_type);
9443
9444       type = ctor_return_type;
9445     }
9446
9447   ctype = NULL_TREE;
9448
9449   /* Now process the modifiers that were specified
9450      and check for invalid combinations.  */
9451
9452   /* Long double is a special combination.  */
9453
9454   if (RIDBIT_SETP (RID_LONG, specbits)
9455       && TYPE_MAIN_VARIANT (type) == double_type_node)
9456     {
9457       RIDBIT_RESET (RID_LONG, specbits);
9458       type = build_qualified_type (long_double_type_node, 
9459                                    CP_TYPE_QUALS (type));
9460     }
9461
9462   /* Check all other uses of type modifiers.  */
9463
9464   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9465       || RIDBIT_SETP (RID_SIGNED, specbits)
9466       || RIDBIT_SETP (RID_LONG, specbits)
9467       || RIDBIT_SETP (RID_SHORT, specbits))
9468     {
9469       int ok = 0;
9470
9471       if (TREE_CODE (type) == REAL_TYPE)
9472         error ("short, signed or unsigned invalid for `%s'", name);
9473       else if (TREE_CODE (type) != INTEGER_TYPE)
9474         error ("long, short, signed or unsigned invalid for `%s'", name);
9475       else if (RIDBIT_SETP (RID_LONG, specbits)
9476                && RIDBIT_SETP (RID_SHORT, specbits))
9477         error ("long and short specified together for `%s'", name);
9478       else if ((RIDBIT_SETP (RID_LONG, specbits)
9479                 || RIDBIT_SETP (RID_SHORT, specbits))
9480                && explicit_char)
9481         error ("long or short specified with char for `%s'", name);
9482       else if ((RIDBIT_SETP (RID_LONG, specbits)
9483                 || RIDBIT_SETP (RID_SHORT, specbits))
9484                && TREE_CODE (type) == REAL_TYPE)
9485         error ("long or short specified with floating type for `%s'", name);
9486       else if (RIDBIT_SETP (RID_SIGNED, specbits)
9487                && RIDBIT_SETP (RID_UNSIGNED, specbits))
9488         error ("signed and unsigned given together for `%s'", name);
9489       else
9490         {
9491           ok = 1;
9492           if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
9493             {
9494               pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
9495                        name);
9496               if (flag_pedantic_errors)
9497                 ok = 0;
9498             }
9499         }
9500
9501       /* Discard the type modifiers if they are invalid.  */
9502       if (! ok)
9503         {
9504           RIDBIT_RESET (RID_UNSIGNED, specbits);
9505           RIDBIT_RESET (RID_SIGNED, specbits);
9506           RIDBIT_RESET (RID_LONG, specbits);
9507           RIDBIT_RESET (RID_SHORT, specbits);
9508           longlong = 0;
9509         }
9510     }
9511
9512   if (RIDBIT_SETP (RID_COMPLEX, specbits)
9513       && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9514     {
9515       error ("complex invalid for `%s'", name);
9516       RIDBIT_RESET (RID_COMPLEX, specbits);
9517     }
9518
9519   /* Decide whether an integer type is signed or not.
9520      Optionally treat bitfields as signed by default.  */
9521   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9522       || (bitfield && ! flag_signed_bitfields
9523           && (explicit_int || defaulted_int || explicit_char
9524               /* A typedef for plain `int' without `signed'
9525                  can be controlled just like plain `int'.  */
9526               || ! (typedef_decl != NULL_TREE
9527                     && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
9528           && TREE_CODE (type) != ENUMERAL_TYPE
9529           && RIDBIT_NOTSETP (RID_SIGNED, specbits)))
9530     {
9531       if (longlong)
9532         type = long_long_unsigned_type_node;
9533       else if (RIDBIT_SETP (RID_LONG, specbits))
9534         type = long_unsigned_type_node;
9535       else if (RIDBIT_SETP (RID_SHORT, specbits))
9536         type = short_unsigned_type_node;
9537       else if (type == char_type_node)
9538         type = unsigned_char_type_node;
9539       else if (typedef_decl)
9540         type = unsigned_type (type);
9541       else
9542         type = unsigned_type_node;
9543     }
9544   else if (RIDBIT_SETP (RID_SIGNED, specbits)
9545            && type == char_type_node)
9546     type = signed_char_type_node;
9547   else if (longlong)
9548     type = long_long_integer_type_node;
9549   else if (RIDBIT_SETP (RID_LONG, specbits))
9550     type = long_integer_type_node;
9551   else if (RIDBIT_SETP (RID_SHORT, specbits))
9552     type = short_integer_type_node;
9553
9554   if (RIDBIT_SETP (RID_COMPLEX, specbits))
9555     {
9556       /* If we just have "complex", it is equivalent to
9557          "complex double", but if any modifiers at all are specified it is
9558          the complex form of TYPE.  E.g, "complex short" is
9559          "complex short int".  */
9560
9561       if (defaulted_int && ! longlong
9562           && ! (RIDBIT_SETP (RID_LONG, specbits)
9563                 || RIDBIT_SETP (RID_SHORT, specbits)
9564                 || RIDBIT_SETP (RID_SIGNED, specbits)
9565                 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
9566         type = complex_double_type_node;
9567       else if (type == integer_type_node)
9568         type = complex_integer_type_node;
9569       else if (type == float_type_node)
9570         type = complex_float_type_node;
9571       else if (type == double_type_node)
9572         type = complex_double_type_node;
9573       else if (type == long_double_type_node)
9574         type = complex_long_double_type_node;
9575       else
9576         type = build_complex_type (type);
9577     }
9578
9579   if (return_type == return_conversion 
9580       && (RIDBIT_SETP (RID_CONST, specbits)
9581           || RIDBIT_SETP (RID_VOLATILE, specbits)
9582           || RIDBIT_SETP (RID_RESTRICT, specbits)))
9583     cp_error ("qualifiers are not allowed on declaration of `operator %T'",
9584               ctor_return_type);
9585
9586   /* Set CONSTP if this declaration is `const', whether by
9587      explicit specification or via a typedef.
9588      Likewise for VOLATILEP.  */
9589
9590   constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
9591   restrictp = 
9592     !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
9593   volatilep = 
9594     !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
9595   type_quals = ((constp ? TYPE_QUAL_CONST : 0)
9596                 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
9597                 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
9598   type = cp_build_qualified_type (type, type_quals);
9599   staticp = 0;
9600   inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
9601   virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
9602   RIDBIT_RESET (RID_VIRTUAL, specbits);
9603   explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
9604   RIDBIT_RESET (RID_EXPLICIT, specbits);
9605
9606   if (RIDBIT_SETP (RID_STATIC, specbits))
9607     staticp = 1 + (decl_context == FIELD);
9608
9609   if (virtualp && staticp == 2)
9610     {
9611       cp_error ("member `%D' cannot be declared both virtual and static",
9612                 dname);
9613       staticp = 0;
9614     }
9615   friendp = RIDBIT_SETP (RID_FRIEND, specbits);
9616   RIDBIT_RESET (RID_FRIEND, specbits);
9617
9618   /* $7.1.2, Function specifiers */
9619   if (friendp && explicitp)
9620     error ("only declarations of constructors can be `explicit'");
9621
9622   if (RIDBIT_SETP (RID_MUTABLE, specbits))
9623     {
9624       if (decl_context == PARM)
9625         {
9626           error ("non-member `%s' cannot be declared `mutable'", name);
9627           RIDBIT_RESET (RID_MUTABLE, specbits);
9628         }
9629       else if (friendp || decl_context == TYPENAME)
9630         {
9631           error ("non-object member `%s' cannot be declared `mutable'", name);
9632           RIDBIT_RESET (RID_MUTABLE, specbits);
9633         }
9634     }
9635
9636   /* Warn if two storage classes are given. Default to `auto'.  */
9637
9638   if (RIDBIT_ANY_SET (specbits))
9639     {
9640       if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
9641       if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
9642       if (decl_context == PARM && nclasses > 0)
9643         error ("storage class specifiers invalid in parameter declarations");
9644       if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9645         {
9646           if (decl_context == PARM)
9647             error ("typedef declaration invalid in parameter declaration");
9648           nclasses++;
9649         }
9650       if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
9651       if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
9652     }
9653
9654   /* Give error if `virtual' is used outside of class declaration.  */
9655   if (virtualp
9656       && (current_class_name == NULL_TREE || decl_context != FIELD))
9657     {
9658       error ("virtual outside class declaration");
9659       virtualp = 0;
9660     }
9661   if (current_class_name == NULL_TREE && RIDBIT_SETP (RID_MUTABLE, specbits))
9662     {
9663       error ("only members can be declared mutable");
9664       RIDBIT_RESET (RID_MUTABLE, specbits);
9665     }
9666
9667   /* Static anonymous unions are dealt with here.  */
9668   if (staticp && decl_context == TYPENAME
9669       && TREE_CODE (declspecs) == TREE_LIST
9670       && ANON_UNION_TYPE_P (TREE_VALUE (declspecs)))
9671     decl_context = FIELD;
9672
9673   /* Give error if `const,' `volatile,' `inline,' `friend,' or `virtual'
9674      is used in a signature member function declaration.  */
9675   if (decl_context == FIELD
9676       && IS_SIGNATURE (current_class_type)
9677       && RIDBIT_NOTSETP (RID_TYPEDEF, specbits))
9678     {
9679       if (type_quals != TYPE_UNQUALIFIED)
9680         {
9681           error ("type qualifiers specified for signature member function `%s'", name);
9682           type_quals = TYPE_UNQUALIFIED;
9683         }
9684       if (inlinep)
9685         {
9686           error ("`inline' specified for signature member function `%s'", name);
9687           /* Later, we'll make signature member functions inline.  */
9688           inlinep = 0;
9689         }
9690       if (friendp)
9691         {
9692           error ("`friend' declaration in signature definition");
9693           friendp = 0;
9694         }
9695       if (virtualp)
9696         {
9697           error ("`virtual' specified for signature member function `%s'",
9698                  name);
9699           /* Later, we'll make signature member functions virtual.  */
9700           virtualp = 0;
9701         }
9702     }
9703
9704   /* Warn about storage classes that are invalid for certain
9705      kinds of declarations (parameters, typenames, etc.).  */
9706
9707   if (nclasses > 1)
9708     error ("multiple storage classes in declaration of `%s'", name);
9709   else if (decl_context != NORMAL && nclasses > 0)
9710     {
9711       if ((decl_context == PARM || decl_context == CATCHPARM)
9712           && (RIDBIT_SETP (RID_REGISTER, specbits)
9713               || RIDBIT_SETP (RID_AUTO, specbits)))
9714         ;
9715       else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9716         ;
9717       else if (decl_context == FIELD
9718                && ! IS_SIGNATURE (current_class_type)
9719                /* C++ allows static class elements  */
9720                && RIDBIT_SETP (RID_STATIC, specbits))
9721         /* C++ also allows inlines and signed and unsigned elements,
9722            but in those cases we don't come in here.  */
9723         ;
9724       else
9725         {
9726           if (decl_context == FIELD)
9727             {
9728               tree tmp = NULL_TREE;
9729               register int op = 0;
9730
9731               if (declarator)
9732                 {
9733                   /* Avoid trying to get an operand off an identifier node.  */ 
9734                   if (TREE_CODE (declarator) == IDENTIFIER_NODE)
9735                     tmp = declarator;
9736                   else
9737                     tmp = TREE_OPERAND (declarator, 0);
9738                   op = IDENTIFIER_OPNAME_P (tmp);
9739                 }
9740               error ("storage class specified for %s `%s'",
9741                      IS_SIGNATURE (current_class_type)
9742                      ? (op
9743                         ? "signature member operator"
9744                         : "signature member function")
9745                      : (op ? "member operator" : "field"),
9746                      op ? operator_name_string (tmp) : name);
9747             }
9748           else
9749             error (((decl_context == PARM || decl_context == CATCHPARM)
9750                     ? "storage class specified for parameter `%s'"
9751                     : "storage class specified for typename"), name);
9752           RIDBIT_RESET (RID_REGISTER, specbits);
9753           RIDBIT_RESET (RID_AUTO, specbits);
9754           RIDBIT_RESET (RID_EXTERN, specbits);
9755
9756           if (decl_context == FIELD && IS_SIGNATURE (current_class_type))
9757             {
9758               RIDBIT_RESET (RID_STATIC, specbits);
9759               staticp = 0;
9760             }
9761         }
9762     }
9763   else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
9764     {
9765       if (toplevel_bindings_p ())
9766         {
9767           /* It's common practice (and completely valid) to have a const
9768              be initialized and declared extern.  */
9769           if (!(type_quals & TYPE_QUAL_CONST))
9770             warning ("`%s' initialized and declared `extern'", name);
9771         }
9772       else
9773         error ("`%s' has both `extern' and initializer", name);
9774     }
9775   else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
9776            && ! toplevel_bindings_p ())
9777     error ("nested function `%s' declared `extern'", name);
9778   else if (toplevel_bindings_p ())
9779     {
9780       if (RIDBIT_SETP (RID_AUTO, specbits))
9781         error ("top-level declaration of `%s' specifies `auto'", name);
9782     }
9783
9784   if (nclasses > 0 && friendp)
9785     error ("storage class specifiers invalid in friend function declarations");
9786
9787   /* Now figure out the structure of the declarator proper.
9788      Descend through it, creating more complex types, until we reach
9789      the declared identifier (or NULL_TREE, in an absolute declarator).  */
9790
9791   inner_attrs = NULL_TREE;
9792   ignore_attrs = 0;  
9793
9794   while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
9795          && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
9796     {
9797       /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
9798          an INDIRECT_REF (for *...),
9799          a CALL_EXPR (for ...(...)),
9800          an identifier (for the name being declared)
9801          or a null pointer (for the place in an absolute declarator
9802          where the name was omitted).
9803          For the last two cases, we have just exited the loop.
9804
9805          For C++ it could also be
9806          a SCOPE_REF (for class :: ...).  In this case, we have converted
9807          sensible names to types, and those are the values we use to
9808          qualify the member name.
9809          an ADDR_EXPR (for &...),
9810          a BIT_NOT_EXPR (for destructors)
9811
9812          At this point, TYPE is the type of elements of an array,
9813          or for a function to return, or for a pointer to point to.
9814          After this sequence of ifs, TYPE is the type of the
9815          array or function or pointer, and DECLARATOR has had its
9816          outermost layer removed.  */
9817
9818       if (type == error_mark_node)
9819         {
9820           if (TREE_CODE (declarator) == SCOPE_REF)
9821             declarator = TREE_OPERAND (declarator, 1);
9822           else
9823             declarator = TREE_OPERAND (declarator, 0);
9824           continue;
9825         }
9826       if (quals != NULL_TREE
9827           && (declarator == NULL_TREE
9828               || TREE_CODE (declarator) != SCOPE_REF))
9829         {
9830           if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
9831             ctype = TYPE_METHOD_BASETYPE (type);
9832           if (ctype != NULL_TREE)
9833             {
9834               tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
9835               ctype = grok_method_quals (ctype, dummy, quals);
9836               type = TREE_TYPE (dummy);
9837               quals = NULL_TREE;
9838             }
9839         }
9840
9841       /* See the comment for the TREE_LIST case, below.  */
9842       if (ignore_attrs)
9843         ignore_attrs = 0;
9844       else if (inner_attrs)
9845         {
9846           decl_attributes (type, inner_attrs, NULL_TREE);
9847           inner_attrs = NULL_TREE;
9848         }
9849
9850       switch (TREE_CODE (declarator))
9851         {
9852         case TREE_LIST:
9853           {
9854             /* We encode a declarator with embedded attributes using
9855                a TREE_LIST.  The attributes apply to the declarator
9856                directly inside them, so we have to skip an iteration
9857                before applying them to the type.  If the declarator just
9858                inside is the declarator-id, we apply the attrs to the
9859                decl itself.  */
9860             inner_attrs = TREE_PURPOSE (declarator);
9861             ignore_attrs = 1;
9862             declarator = TREE_VALUE (declarator);
9863           }
9864           break;
9865
9866         case ARRAY_REF:
9867           {
9868             register tree itype = NULL_TREE;
9869             register tree size = TREE_OPERAND (declarator, 1);
9870             /* The index is a signed object `sizetype' bits wide.  */
9871             tree index_type = signed_type (sizetype);
9872
9873             declarator = TREE_OPERAND (declarator, 0);
9874
9875             /* Check for some types that there cannot be arrays of.  */
9876
9877             if (TREE_CODE (type) == VOID_TYPE)
9878               {
9879                 cp_error ("declaration of `%D' as array of voids", dname);
9880                 type = error_mark_node;
9881               }
9882
9883             if (TREE_CODE (type) == FUNCTION_TYPE)
9884               {
9885                 cp_error ("declaration of `%D' as array of functions", dname);
9886                 type = error_mark_node;
9887               }
9888
9889             /* ARM $8.4.3: Since you can't have a pointer to a reference,
9890                you can't have arrays of references.  If we allowed them,
9891                then we'd be saying x[i] is valid for an array x, but
9892                then you'd have to ask: what does `*(x + i)' mean?  */
9893             if (TREE_CODE (type) == REFERENCE_TYPE)
9894               {
9895                 if (decl_context == TYPENAME)
9896                   cp_error ("cannot make arrays of references");
9897                 else
9898                   cp_error ("declaration of `%D' as array of references",
9899                             dname);
9900                 type = error_mark_node;
9901               }
9902
9903             if (TREE_CODE (type) == OFFSET_TYPE)
9904               {
9905                   cp_error ("declaration of `%D' as array of data members",
9906                             dname);
9907                 type = error_mark_node;
9908               }
9909
9910             if (TREE_CODE (type) == METHOD_TYPE)
9911               {
9912                 cp_error ("declaration of `%D' as array of function members",
9913                           dname);
9914                 type = error_mark_node;
9915               }
9916
9917             if (size == error_mark_node)
9918               type = error_mark_node;
9919             else if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9920               {
9921                 /* [dcl.array]
9922
9923                    the constant expressions that specify the bounds of
9924                    the arrays can be omitted only for the first member
9925                    of the sequence.  */
9926                 cp_error ("declaration of `%D' as multidimensional array",
9927                           dname);
9928                 cp_error ("must have bounds for all dimensions except the first");
9929                 type = error_mark_node;
9930               }
9931
9932             if (type == error_mark_node)
9933               continue;
9934
9935             if (size)
9936               {
9937                 /* Must suspend_momentary here because the index
9938                    type may need to live until the end of the function.
9939                    For example, it is used in the declaration of a
9940                    variable which requires destructing at the end of
9941                    the function; then build_vec_delete will need this
9942                    value.  */
9943                 int yes = suspend_momentary ();
9944                 /* Might be a cast. */
9945                 if (TREE_CODE (size) == NOP_EXPR
9946                     && TREE_TYPE (size) == TREE_TYPE (TREE_OPERAND (size, 0)))
9947                   size = TREE_OPERAND (size, 0);
9948
9949                 /* If this involves a template parameter, it will be a
9950                    constant at instantiation time, but we don't know
9951                    what the value is yet.  Even if no template
9952                    parameters are involved, we may an expression that
9953                    is not a constant; we don't even simplify `1 + 2'
9954                    when processing a template.  */
9955                 if (processing_template_decl)
9956                   {
9957                     /* Resolve a qualified reference to an enumerator or
9958                        static const data member of ours.  */
9959                     if (TREE_CODE (size) == SCOPE_REF
9960                         && TREE_OPERAND (size, 0) == current_class_type)
9961                       {
9962                         tree t = lookup_field (current_class_type,
9963                                                TREE_OPERAND (size, 1), 0, 0);
9964                         if (t)
9965                           size = t;
9966                       }
9967
9968                     itype = make_node (INTEGER_TYPE);
9969                     TYPE_MIN_VALUE (itype) = size_zero_node;
9970                     TYPE_MAX_VALUE (itype) = build_min
9971                       (MINUS_EXPR, sizetype, size, integer_one_node);
9972                     goto dont_grok_size;
9973                   }
9974
9975                 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
9976                     && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
9977                     && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
9978                   {
9979                     cp_error ("size of array `%D' has non-integer type",
9980                               dname);
9981                     size = integer_one_node;
9982                   }
9983                 if (TREE_READONLY_DECL_P (size))
9984                   size = decl_constant_value (size);
9985                 if (pedantic && integer_zerop (size))
9986                   cp_pedwarn ("ANSI C++ forbids zero-size array `%D'", dname);
9987                 if (TREE_CONSTANT (size))
9988                   {
9989                     int old_flag_pedantic_errors = flag_pedantic_errors;
9990                     int old_pedantic = pedantic;
9991                     pedantic = flag_pedantic_errors = 1;
9992                     /* Always give overflow errors on array subscripts.  */
9993                     constant_expression_warning (size);
9994                     pedantic = old_pedantic;
9995                     flag_pedantic_errors = old_flag_pedantic_errors;
9996                     if (INT_CST_LT (size, integer_zero_node))
9997                       {
9998                         cp_error ("size of array `%D' is negative", dname);
9999                         size = integer_one_node;
10000                       }
10001                   }
10002                 else
10003                   {
10004                     if (pedantic)
10005                       {
10006                         if (dname)
10007                           cp_pedwarn ("ANSI C++ forbids variable-size array `%D'",
10008                                       dname);
10009                         else
10010                           cp_pedwarn ("ANSI C++ forbids variable-size array");
10011                       }
10012                   }
10013
10014                 itype
10015                   = fold (build_binary_op (MINUS_EXPR,
10016                                            cp_convert (index_type, size),
10017                                            cp_convert (index_type,
10018                                                        integer_one_node), 1));
10019                 if (! TREE_CONSTANT (itype))
10020                   itype = variable_size (itype);
10021                 else if (TREE_OVERFLOW (itype))
10022                   {
10023                     error ("overflow in array dimension");
10024                     TREE_OVERFLOW (itype) = 0;
10025                   }
10026
10027                 /* If we're a parm, we need to have a permanent type so
10028                    mangling checks for re-use will work right.  If both the
10029                    element and index types are permanent, the array type
10030                    will be, too.  */
10031                 if (decl_context == PARM
10032                     && allocation_temporary_p () && TREE_PERMANENT (type))
10033                   {
10034                     push_obstacks (&permanent_obstack, &permanent_obstack);
10035                     itype = build_index_type (itype);
10036                     pop_obstacks ();
10037                   }
10038                 else
10039                   itype = build_index_type (itype);
10040
10041               dont_grok_size:
10042                 resume_momentary (yes);
10043               }
10044
10045             type = build_cplus_array_type (type, itype);
10046             ctype = NULL_TREE;
10047           }
10048           break;
10049
10050         case CALL_EXPR:
10051           {
10052             tree arg_types;
10053             int funcdecl_p;
10054             tree inner_parms = TREE_OPERAND (declarator, 1);
10055             tree inner_decl = TREE_OPERAND (declarator, 0);
10056
10057             /* Declaring a function type.
10058                Make sure we have a valid type for the function to return.  */
10059
10060             /* We now know that the TYPE_QUALS don't apply to the
10061                decl, but to its return type.  */
10062             type_quals = TYPE_UNQUALIFIED;
10063
10064             /* Warn about some types functions can't return.  */
10065
10066             if (TREE_CODE (type) == FUNCTION_TYPE)
10067               {
10068                 error ("`%s' declared as function returning a function", name);
10069                 type = integer_type_node;
10070               }
10071             if (TREE_CODE (type) == ARRAY_TYPE)
10072               {
10073                 error ("`%s' declared as function returning an array", name);
10074                 type = integer_type_node;
10075               }
10076
10077             if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
10078               inner_decl = TREE_OPERAND (inner_decl, 1);
10079
10080             if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR) 
10081               inner_decl = dname;
10082
10083             /* Pick up type qualifiers which should be applied to `this'.  */
10084             quals = TREE_OPERAND (declarator, 2);
10085
10086             /* Pick up the exception specifications.  */
10087             raises = TREE_TYPE (declarator);
10088
10089             /* Say it's a definition only for the CALL_EXPR
10090                closest to the identifier.  */
10091             funcdecl_p
10092               = inner_decl 
10093               && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
10094                   || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR 
10095                   || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
10096             
10097             if (ctype == NULL_TREE
10098                 && decl_context == FIELD
10099                 && funcdecl_p
10100                 && (friendp == 0 || dname == current_class_name))
10101               ctype = current_class_type;
10102
10103             if (ctype && return_type == return_conversion)
10104               TYPE_HAS_CONVERSION (ctype) = 1;
10105             if (ctype && constructor_name (ctype) == dname)
10106               {
10107                 /* We are within a class's scope. If our declarator name
10108                    is the same as the class name, and we are defining
10109                    a function, then it is a constructor/destructor, and
10110                    therefore returns a void type.  */
10111
10112                 if (flags == DTOR_FLAG)
10113                   {
10114                     /* ANSI C++ June 5 1992 WP 12.4.1.  A destructor may
10115                        not be declared const or volatile.  A destructor
10116                        may not be static.  */
10117                     if (staticp == 2)
10118                       error ("destructor cannot be static member function");
10119                     if (quals)
10120                       {
10121                         cp_error ("destructors may not be `%s'",
10122                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10123                         quals = NULL_TREE;
10124                       }
10125                     if (decl_context == FIELD)
10126                       {
10127                         if (! member_function_or_else (ctype, current_class_type,
10128                                                        "destructor for alien class `%s' cannot be a member"))
10129                           return void_type_node;
10130                       }
10131                   }
10132                 else            /* It's a constructor.  */
10133                   {
10134                     if (explicitp == 1)
10135                       explicitp = 2;
10136                     /* ANSI C++ June 5 1992 WP 12.1.2.  A constructor may
10137                        not be declared const or volatile.  A constructor may
10138                        not be virtual.  A constructor may not be static.  */
10139                     if (staticp == 2)
10140                       error ("constructor cannot be static member function");
10141                     if (virtualp)
10142                       {
10143                         pedwarn ("constructors cannot be declared virtual");
10144                         virtualp = 0;
10145                       }
10146                     if (quals)
10147                       {
10148                         cp_error ("constructors may not be `%s'",
10149                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10150                         quals = NULL_TREE;
10151                       }
10152                     {
10153                       RID_BIT_TYPE tmp_bits;
10154                       bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
10155                       RIDBIT_RESET (RID_INLINE, tmp_bits);
10156                       RIDBIT_RESET (RID_STATIC, tmp_bits);
10157                       if (RIDBIT_ANY_SET (tmp_bits))
10158                         error ("return value type specifier for constructor ignored");
10159                     }
10160                     type = build_pointer_type (ctype);
10161                     if (decl_context == FIELD
10162                         && IS_SIGNATURE (current_class_type))
10163                       {
10164                         error ("constructor not allowed in signature");
10165                         return void_type_node;
10166                       }                   
10167                     else if (decl_context == FIELD)
10168                       {
10169                         if (! member_function_or_else (ctype, current_class_type,
10170                                                        "constructor for alien class `%s' cannot be member"))
10171                           return void_type_node;
10172                         TYPE_HAS_CONSTRUCTOR (ctype) = 1;
10173                         if (return_type != return_ctor)
10174                           return NULL_TREE;
10175                       }
10176                   }
10177                 if (decl_context == FIELD)
10178                   staticp = 0;
10179               }
10180             else if (friendp)
10181               {
10182                 if (initialized)
10183                   error ("can't initialize friend function `%s'", name);
10184                 if (virtualp)
10185                   {
10186                     /* Cannot be both friend and virtual.  */
10187                     error ("virtual functions cannot be friends");
10188                     RIDBIT_RESET (RID_FRIEND, specbits);
10189                     friendp = 0;
10190                   }
10191                 if (decl_context == NORMAL)
10192                   error ("friend declaration not in class definition");
10193                 if (current_function_decl && funcdef_flag)
10194                   cp_error ("can't define friend function `%s' in a local class definition",
10195                             name);
10196               }
10197
10198             /* Construct the function type and go to the next
10199                inner layer of declarator.  */
10200
10201             declarator = TREE_OPERAND (declarator, 0);
10202
10203             /* FIXME: This is where default args should be fully
10204                processed.  */
10205
10206             arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
10207
10208             if (declarator && flags == DTOR_FLAG)
10209               {
10210                 /* A destructor declared in the body of a class will
10211                    be represented as a BIT_NOT_EXPR.  But, we just
10212                    want the underlying IDENTIFIER.  */
10213                 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
10214                   declarator = TREE_OPERAND (declarator, 0);
10215                 
10216                 if (strict_prototype == 0 && arg_types == NULL_TREE)
10217                   arg_types = void_list_node;
10218                 else if (arg_types == NULL_TREE
10219                          || arg_types != void_list_node)
10220                   {
10221                     cp_error ("destructors may not have parameters");
10222                     arg_types = void_list_node;
10223                     last_function_parms = NULL_TREE;
10224                   }
10225               }
10226
10227             /* ANSI says that `const int foo ();'
10228                does not make the function foo const.  */
10229             type = build_function_type (type, arg_types);
10230
10231             {
10232               tree t;
10233               for (t = arg_types; t; t = TREE_CHAIN (t))
10234                 if (TREE_PURPOSE (t)
10235                     && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10236                   {
10237                     add_defarg_fn (type);
10238                     break;
10239                   }
10240             }
10241           }
10242           break;
10243
10244         case ADDR_EXPR:
10245         case INDIRECT_REF:
10246           /* Filter out pointers-to-references and references-to-references.
10247              We can get these if a TYPE_DECL is used.  */
10248
10249           if (TREE_CODE (type) == REFERENCE_TYPE)
10250             {
10251               error ("cannot declare %s to references",
10252                      TREE_CODE (declarator) == ADDR_EXPR
10253                      ? "references" : "pointers");
10254               declarator = TREE_OPERAND (declarator, 0);
10255               continue;
10256             }
10257
10258           if (TREE_CODE (type) == OFFSET_TYPE
10259               && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10260                   || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10261             {
10262               cp_error ("cannot declare pointer to `%#T' member",
10263                         TREE_TYPE (type));
10264               type = TREE_TYPE (type);
10265             }
10266
10267           /* Merge any constancy or volatility into the target type
10268              for the pointer.  */
10269
10270           /* We now know that the TYPE_QUALS don't apply to the decl,
10271              but to the target of the pointer.  */
10272           type_quals = TYPE_UNQUALIFIED;
10273
10274           if (IS_SIGNATURE (type))
10275             {
10276               if (TREE_CODE (declarator) == ADDR_EXPR)
10277                 {
10278                   if (CLASSTYPE_METHOD_VEC (type) == NULL_TREE
10279                       && TYPE_SIZE (type))
10280                     cp_warning ("empty signature `%T' used in signature reference declaration",
10281                                 type);
10282 #if 0
10283                   type = build_signature_reference_type (type);
10284 #else
10285                   sorry ("signature reference");
10286                   return NULL_TREE;
10287 #endif
10288                 }
10289               else
10290                 {
10291                   if (CLASSTYPE_METHOD_VEC (type) == NULL_TREE
10292                       && TYPE_SIZE (type))
10293                     cp_warning ("empty signature `%T' used in signature pointer declaration",
10294                                 type);
10295                   type = build_signature_pointer_type (type);
10296                 }
10297             }
10298           else if (TREE_CODE (declarator) == ADDR_EXPR)
10299             {
10300               if (TREE_CODE (type) == VOID_TYPE)
10301                 error ("invalid type: `void &'");
10302               else
10303                 type = build_reference_type (type);
10304             }
10305           else if (TREE_CODE (type) == METHOD_TYPE)
10306             type = build_ptrmemfunc_type (build_pointer_type (type));
10307           else
10308             type = build_pointer_type (type);
10309
10310           /* Process a list of type modifier keywords (such as
10311              const or volatile) that were given inside the `*' or `&'.  */
10312
10313           if (TREE_TYPE (declarator))
10314             {
10315               register tree typemodlist;
10316               int erred = 0;
10317
10318               constp = 0;
10319               volatilep = 0;
10320               restrictp = 0;
10321               for (typemodlist = TREE_TYPE (declarator); typemodlist;
10322                    typemodlist = TREE_CHAIN (typemodlist))
10323                 {
10324                   tree qualifier = TREE_VALUE (typemodlist);
10325
10326                   if (qualifier == ridpointers[(int) RID_CONST])
10327                     constp++;
10328                   else if (qualifier == ridpointers[(int) RID_VOLATILE])
10329                     volatilep++;
10330                   else if (qualifier == ridpointers[(int) RID_RESTRICT])
10331                     restrictp++;
10332                   else if (!erred)
10333                     {
10334                       erred = 1;
10335                       error ("invalid type modifier within pointer declarator");
10336                     }
10337                 }
10338               if (constp > 1)
10339                 pedwarn ("duplicate `const'");
10340               if (volatilep > 1)
10341                 pedwarn ("duplicate `volatile'");
10342               if (restrictp > 1)
10343                 pedwarn ("duplicate `restrict'");
10344
10345               type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10346                             | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10347                             | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10348               if (TREE_CODE (declarator) == ADDR_EXPR
10349                   && (constp || volatilep))
10350                 {
10351                   if (constp)
10352                     pedwarn ("discarding `const' applied to a reference");
10353                   if (volatilep)
10354                     pedwarn ("discarding `volatile' applied to a reference");
10355                   type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
10356                 }
10357               type = cp_build_qualified_type (type, type_quals);
10358             }
10359           declarator = TREE_OPERAND (declarator, 0);
10360           ctype = NULL_TREE;
10361           break;
10362
10363         case SCOPE_REF:
10364           {
10365             /* We have converted type names to NULL_TREE if the
10366                name was bogus, or to a _TYPE node, if not.
10367
10368                The variable CTYPE holds the type we will ultimately
10369                resolve to.  The code here just needs to build
10370                up appropriate member types.  */
10371             tree sname = TREE_OPERAND (declarator, 1);
10372             tree t;
10373
10374             /* Destructors can have their visibilities changed as well.  */
10375             if (TREE_CODE (sname) == BIT_NOT_EXPR)
10376               sname = TREE_OPERAND (sname, 0);
10377
10378             if (TREE_COMPLEXITY (declarator) == 0)
10379               /* This needs to be here, in case we are called
10380                  multiple times.  */ ;
10381             else if (TREE_COMPLEXITY (declarator) == -1)
10382               /* Namespace member. */
10383               pop_decl_namespace ();
10384             else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
10385               /* Don't fall out into global scope. Hides real bug? --eichin */ ;
10386             else if (! IS_AGGR_TYPE_CODE
10387                      (TREE_CODE (TREE_OPERAND (declarator, 0))))
10388               ;
10389             else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10390               {
10391                 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10392                    that refer to ctype.  They couldn't be resolved earlier
10393                    because we hadn't pushed into the class yet.
10394                    Example: resolve 'B<T>::type' in
10395                    'B<typename B<T>::type> B<T>::f () { }'.  */
10396                 if (current_template_parms
10397                     && uses_template_parms (type)
10398                     && uses_template_parms (current_class_type))
10399                   {
10400                     tree args = current_template_args ();
10401                     type = tsubst (type, args, /*complain=*/1, NULL_TREE);
10402                   }
10403
10404                 /* This pop_nested_class corresponds to the
10405                    push_nested_class used to push into class scope for
10406                    parsing the argument list of a function decl, in
10407                    qualified_id.  */
10408                 pop_nested_class (1);
10409                 TREE_COMPLEXITY (declarator) = current_class_depth;
10410               }
10411             else
10412               my_friendly_abort (16);
10413
10414             if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10415               {
10416                 /* We had a reference to a global decl, or
10417                    perhaps we were given a non-aggregate typedef,
10418                    in which case we cleared this out, and should just
10419                    keep going as though it wasn't there.  */
10420                 declarator = sname;
10421                 continue;
10422               }
10423             ctype = TREE_OPERAND (declarator, 0);
10424
10425             t = ctype;
10426             while (t != NULL_TREE && CLASS_TYPE_P (t)) 
10427               {
10428                 if (CLASSTYPE_TEMPLATE_INFO (t) &&
10429                     !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
10430                   template_count += 1;
10431                 t = TYPE_MAIN_DECL (t);
10432                 if (DECL_LANG_SPECIFIC (t))
10433                   t = DECL_CLASS_CONTEXT (t);
10434                 else
10435                   t = NULL_TREE;
10436               }
10437
10438             if (sname == NULL_TREE)
10439               goto done_scoping;
10440
10441             if (TREE_CODE (sname) == IDENTIFIER_NODE)
10442               {
10443                 /* This is the `standard' use of the scoping operator:
10444                    basetype :: member .  */
10445
10446                 if (ctype == current_class_type)
10447                   {
10448                     /* class A {
10449                          void A::f ();
10450                        };
10451
10452                        Is this ill-formed?  */
10453
10454                     if (pedantic)
10455                       cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
10456                                   ctype, name);
10457                   }
10458                 else if (TREE_CODE (type) == FUNCTION_TYPE)
10459                   {
10460                     if (current_class_type == NULL_TREE
10461                         || friendp)
10462                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10463                                                       TYPE_ARG_TYPES (type));
10464                     else
10465                       {
10466                         cp_error ("cannot declare member function `%T::%s' within `%T'",
10467                                   ctype, name, current_class_type);
10468                         return void_type_node;
10469                       }
10470                   }
10471                 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
10472                          || TYPE_SIZE (complete_type (ctype)) != NULL_TREE)
10473                   {
10474                     /* Have to move this code elsewhere in this function.
10475                        this code is used for i.e., typedef int A::M; M *pm;
10476
10477                        It is?  How? jason 10/2/94 */
10478
10479                     if (current_class_type)
10480                       {
10481                         cp_error ("cannot declare member `%T::%s' within `%T'",
10482                                   ctype, name, current_class_type);
10483                         return void_type_node;
10484                       }
10485                     type = build_offset_type (ctype, type);
10486                   }
10487                 else if (uses_template_parms (ctype))
10488                   {
10489                     if (TREE_CODE (type) == FUNCTION_TYPE)
10490                       type
10491                         = build_cplus_method_type (ctype, TREE_TYPE (type),
10492                                                    TYPE_ARG_TYPES (type));
10493                   }
10494                 else
10495                   {
10496                     cp_error ("structure `%T' not yet defined", ctype);
10497                     return error_mark_node;
10498                   }
10499
10500                 declarator = sname;
10501               }
10502             else if (TREE_CODE (sname) == SCOPE_REF)
10503               my_friendly_abort (17);
10504             else
10505               {
10506               done_scoping:
10507                 declarator = TREE_OPERAND (declarator, 1);
10508                 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10509                   /* In this case, we will deal with it later.  */
10510                   ;
10511                 else
10512                   {
10513                     if (TREE_CODE (type) == FUNCTION_TYPE)
10514                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10515                                                       TYPE_ARG_TYPES (type));
10516                     else
10517                       type = build_offset_type (ctype, type);
10518                   }
10519               }
10520           }
10521           break;
10522
10523         case BIT_NOT_EXPR:
10524           declarator = TREE_OPERAND (declarator, 0);
10525           break;
10526
10527         case RECORD_TYPE:
10528         case UNION_TYPE:
10529         case ENUMERAL_TYPE:
10530           declarator = NULL_TREE;
10531           break;
10532
10533         case ERROR_MARK:
10534           declarator = NULL_TREE;
10535           break;
10536
10537         default:
10538           my_friendly_abort (158);
10539         }
10540     }
10541
10542   /* See the comment for the TREE_LIST case, above.  */
10543   if (inner_attrs)
10544     {
10545       if (! ignore_attrs)
10546         decl_attributes (type, inner_attrs, NULL_TREE);
10547       else if (attrlist)
10548         TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
10549       else
10550         attrlist = build_decl_list (NULL_TREE, inner_attrs);
10551     }
10552
10553   if (explicitp == 1)
10554     {
10555       error ("only constructors can be declared `explicit'");
10556       explicitp = 0;
10557     }
10558
10559   /* Now TYPE has the actual type.  */
10560
10561   /* If this is declaring a typedef name, return a TYPE_DECL.  */
10562
10563   if (RIDBIT_SETP (RID_MUTABLE, specbits))
10564     {
10565       if (type_quals & TYPE_QUAL_CONST)
10566         {
10567           error ("const `%s' cannot be declared `mutable'", name);
10568           RIDBIT_RESET (RID_MUTABLE, specbits);
10569         }
10570       else if (staticp)
10571         {
10572           error ("static `%s' cannot be declared `mutable'", name);
10573           RIDBIT_RESET (RID_MUTABLE, specbits);
10574         }
10575     }
10576
10577   if (declarator == NULL_TREE
10578       || TREE_CODE (declarator) == IDENTIFIER_NODE
10579       || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
10580           && (TREE_CODE (type) == FUNCTION_TYPE
10581               || TREE_CODE (type) == METHOD_TYPE)))
10582     /* OK */;
10583   else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10584     {
10585       cp_error ("template-id `%D' used as a declarator", declarator);
10586       declarator = dname;
10587     }
10588   else
10589     my_friendly_abort (990210);
10590
10591   if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
10592     {
10593       tree decl;
10594
10595       /* Note that the grammar rejects storage classes
10596          in typenames, fields or parameters.  */
10597       if (current_lang_name == lang_name_java)
10598         TYPE_FOR_JAVA (type) = 1;
10599
10600       if (decl_context == FIELD)
10601         {
10602           if (declarator == constructor_name (current_class_type))
10603             cp_pedwarn ("ANSI C++ forbids nested type `%D' with same name as enclosing class",
10604                         declarator);
10605           decl = build_lang_decl (TYPE_DECL, declarator, type);
10606           if (IS_SIGNATURE (current_class_type) && opaque_typedef)
10607             SIGNATURE_HAS_OPAQUE_TYPEDECLS (current_class_type) = 1;
10608         }
10609       else
10610         {
10611           /* Make sure this typedef lives as long as its type,
10612              since it might be used as a template parameter. */
10613           if (type != error_mark_node)
10614             push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
10615           decl = build_decl (TYPE_DECL, declarator, type);
10616           if (type != error_mark_node)
10617             pop_obstacks ();
10618         }
10619
10620       /* If the user declares "struct {...} foo" then `foo' will have
10621          an anonymous name.  Fill that name in now.  Nothing can
10622          refer to it, so nothing needs know about the name change.
10623          The TYPE_NAME field was filled in by build_struct_xref.  */
10624       if (type != error_mark_node
10625           && TYPE_NAME (type)
10626           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10627           && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type)))
10628         {
10629           /* FIXME: This is bogus; we should not be doing this for
10630                     cv-qualified types.  */
10631
10632           /* For anonymous structs that are cv-qualified, need to use
10633              TYPE_MAIN_VARIANT so that name will mangle correctly. As
10634              type not referenced after this block, don't bother
10635              resetting type to original type, ie. TREE_TYPE (decl). */
10636           type = TYPE_MAIN_VARIANT (type);
10637
10638           /* Replace the anonymous name with the real name everywhere.  */
10639           lookup_tag_reverse (type, declarator);
10640           TYPE_NAME (type) = decl;
10641
10642           if (TYPE_LANG_SPECIFIC (type))
10643             TYPE_WAS_ANONYMOUS (type) = 1;
10644
10645           /* If this is a typedef within a template class, the nested
10646              type is a (non-primary) template.  The name for the
10647              template needs updating as well.  */
10648           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10649             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)) 
10650               = TYPE_IDENTIFIER (type);
10651
10652           /* XXX Temporarily set the scope. 
10653              When returning, start_decl expects it as NULL_TREE,
10654              and will then then set it using pushdecl. */
10655           my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 980404);
10656           if (current_class_type)
10657             DECL_CONTEXT (decl) = current_class_type;
10658           else
10659             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10660
10661           DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
10662           DECL_ASSEMBLER_NAME (decl)
10663             = get_identifier (build_overload_name (type, 1, 1));
10664           DECL_CONTEXT (decl) = NULL_TREE;
10665
10666           /* FIXME remangle member functions; member functions of a
10667              type with external linkage have external linkage.  */
10668         }
10669
10670       if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
10671         {
10672           cp_error_at ("typedef name may not be class-qualified", decl);
10673           return NULL_TREE;
10674         }
10675       else if (quals)
10676         {
10677           if (ctype == NULL_TREE)
10678             {
10679               if (TREE_CODE (type) != METHOD_TYPE)
10680                 cp_error_at ("invalid type qualifier for non-method type", decl);
10681               else
10682                 ctype = TYPE_METHOD_BASETYPE (type);
10683             }
10684           if (ctype != NULL_TREE)
10685             grok_method_quals (ctype, decl, quals);
10686         }
10687
10688       if (RIDBIT_SETP (RID_SIGNED, specbits)
10689           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10690         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10691
10692       if (RIDBIT_SETP (RID_MUTABLE, specbits))
10693         error ("non-object member `%s' cannot be declared mutable", name);
10694
10695       bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
10696                       inlinep, friendp, raises != NULL_TREE);
10697
10698       if (initialized)
10699         error ("typedef declaration includes an initializer");
10700
10701       return decl;
10702     }
10703
10704   /* Detect the case of an array type of unspecified size
10705      which came, as such, direct from a typedef name.
10706      We must copy the type, so that each identifier gets
10707      a distinct type, so that each identifier's size can be
10708      controlled separately by its own initializer.  */
10709
10710   if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
10711       && TYPE_DOMAIN (type) == NULL_TREE)
10712     {
10713       type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
10714     }
10715
10716   /* If this is a type name (such as, in a cast or sizeof),
10717      compute the type and return it now.  */
10718
10719   if (decl_context == TYPENAME)
10720     {
10721       /* Note that the grammar rejects storage classes
10722          in typenames, fields or parameters.  */
10723       if (type_quals != TYPE_UNQUALIFIED)
10724         {
10725           if (IS_SIGNATURE (type))
10726             error ("type qualifiers specified for signature type");
10727           type_quals = TYPE_UNQUALIFIED;
10728         }
10729
10730       /* Special case: "friend class foo" looks like a TYPENAME context.  */
10731       if (friendp)
10732         {
10733           if (type_quals != TYPE_UNQUALIFIED)
10734             {
10735               cp_error ("type qualifiers specified for friend class declaration");
10736               type_quals = TYPE_UNQUALIFIED;
10737             }
10738           if (inlinep)
10739             {
10740               cp_error ("`inline' specified for friend class declaration");
10741               inlinep = 0;
10742             }
10743
10744           /* Only try to do this stuff if we didn't already give up.  */
10745           if (type != integer_type_node)
10746             {
10747               /* A friendly class?  */
10748               if (current_class_type)
10749                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
10750               else
10751                 error ("trying to make class `%s' a friend of global scope",
10752                        TYPE_NAME_STRING (type));
10753               type = void_type_node;
10754             }
10755         }
10756       else if (quals)
10757         {
10758           tree dummy = build_decl (TYPE_DECL, declarator, type);
10759           if (ctype == NULL_TREE)
10760             {
10761               my_friendly_assert (TREE_CODE (type) == METHOD_TYPE, 159);
10762               ctype = TYPE_METHOD_BASETYPE (type);
10763             }
10764           grok_method_quals (ctype, dummy, quals);
10765           type = TREE_TYPE (dummy);
10766         }
10767
10768       return type;
10769     }
10770   else if (declarator == NULL_TREE && decl_context != PARM
10771            && decl_context != CATCHPARM
10772            && TREE_CODE (type) != UNION_TYPE
10773            && ! bitfield)
10774     {
10775       cp_error ("abstract declarator `%T' used as declaration", type);
10776       declarator = make_anon_name ();
10777     }
10778
10779   /* `void' at top level (not within pointer)
10780      is allowed only in typedefs or type names.
10781      We don't complain about parms either, but that is because
10782      a better error message can be made later.  */
10783
10784   if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
10785     {
10786       if (! declarator)
10787         error ("unnamed variable or field declared void");
10788       else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10789         {
10790           if (IDENTIFIER_OPNAME_P (declarator))
10791             my_friendly_abort (356);
10792           else
10793             error ("variable or field `%s' declared void", name);
10794         }
10795       else
10796         error ("variable or field declared void");
10797       type = integer_type_node;
10798     }
10799
10800   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10801      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
10802
10803   if (decl_context == PARM || decl_context == CATCHPARM)
10804     {
10805       if (ctype || in_namespace)
10806         error ("cannot use `::' in parameter declaration");
10807
10808       /* A parameter declared as an array of T is really a pointer to T.
10809          One declared as a function is really a pointer to a function.
10810          One declared as a member is really a pointer to member.  */
10811
10812       if (TREE_CODE (type) == ARRAY_TYPE)
10813         {
10814           /* Transfer const-ness of array into that of type pointed to.  */
10815           type = build_pointer_type (TREE_TYPE (type));
10816           type_quals = TYPE_UNQUALIFIED;
10817         }
10818       else if (TREE_CODE (type) == FUNCTION_TYPE)
10819         type = build_pointer_type (type);
10820       else if (TREE_CODE (type) == OFFSET_TYPE)
10821         type = build_pointer_type (type);
10822       else if (TREE_CODE (type) == VOID_TYPE && declarator)
10823         {
10824           error ("declaration of `%s' as void", name);
10825           return NULL_TREE;
10826         }
10827     }
10828   
10829   {
10830     register tree decl;
10831
10832     if (decl_context == PARM)
10833       {
10834         decl = build_decl (PARM_DECL, declarator, type);
10835
10836         bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
10837                         inlinep, friendp, raises != NULL_TREE);
10838         if (current_class_type
10839             && IS_SIGNATURE (current_class_type))
10840           {
10841             if (inlinep)
10842               error ("parameter of signature member function declared `inline'");
10843             if (RIDBIT_SETP (RID_AUTO, specbits))
10844               error ("parameter of signature member function declared `auto'");
10845             if (RIDBIT_SETP (RID_REGISTER, specbits))
10846               error ("parameter of signature member function declared `register'");
10847           }
10848
10849         /* Compute the type actually passed in the parmlist,
10850            for the case where there is no prototype.
10851            (For example, shorts and chars are passed as ints.)
10852            When there is a prototype, this is overridden later.  */
10853
10854         DECL_ARG_TYPE (decl) = type_promotes_to (type);
10855       }
10856     else if (decl_context == FIELD)
10857       {
10858         if (type == error_mark_node)
10859           {
10860             /* Happens when declaring arrays of sizes which
10861                are error_mark_node, for example.  */
10862             decl = NULL_TREE;
10863           }
10864         else if (in_namespace && !friendp)
10865           {
10866             /* Something like struct S { int N::j; };  */
10867             cp_error ("invalid use of `::'");
10868             decl = NULL_TREE;
10869           }
10870         else if (TREE_CODE (type) == FUNCTION_TYPE)
10871           {
10872             int publicp = 0;
10873             tree function_context;
10874
10875             /* We catch the others as conflicts with the builtin
10876                typedefs.  */
10877             if (friendp && declarator == ridpointers[(int) RID_SIGNED])
10878               {
10879                 cp_error ("function `%D' cannot be declared friend",
10880                           declarator);
10881                 friendp = 0;
10882               }
10883
10884             if (friendp == 0)
10885               {
10886                 if (ctype == NULL_TREE)
10887                   ctype = current_class_type;
10888
10889                 if (ctype == NULL_TREE)
10890                   {
10891                     cp_error ("can't make `%D' into a method -- not in a class",
10892                               declarator);
10893                     return void_type_node;
10894                   }
10895
10896                 /* ``A union may [ ... ] not [ have ] virtual functions.''
10897                    ARM 9.5 */
10898                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10899                   {
10900                     cp_error ("function `%D' declared virtual inside a union",
10901                               declarator);
10902                     return void_type_node;
10903                   }
10904
10905                 if (declarator == ansi_opname[(int) NEW_EXPR]
10906                     || declarator == ansi_opname[(int) VEC_NEW_EXPR]
10907                     || declarator == ansi_opname[(int) DELETE_EXPR]
10908                     || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
10909                   {
10910                     if (virtualp)
10911                       {
10912                         cp_error ("`%D' cannot be declared virtual, since it is always static",
10913                                   declarator);
10914                         virtualp = 0;
10915                       }
10916                   }
10917                 else if (staticp < 2)
10918                   type = build_cplus_method_type (ctype, TREE_TYPE (type),
10919                                                   TYPE_ARG_TYPES (type));
10920               }
10921
10922             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
10923             function_context = (ctype != NULL_TREE) ? 
10924               hack_decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10925             publicp = (! friendp || ! staticp)
10926               && function_context == NULL_TREE;
10927             decl = grokfndecl (ctype, type, 
10928                                TREE_CODE (declarator) != TEMPLATE_ID_EXPR
10929                                ? declarator : dname,
10930                                declarator,
10931                                virtualp, flags, quals, raises, attrlist,
10932                                friendp ? -1 : 0, friendp, publicp, inlinep,
10933                                funcdef_flag, template_count, in_namespace);
10934             if (decl == NULL_TREE)
10935               return decl;
10936 #if 0
10937             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
10938             /* The decl and setting of decl_machine_attr is also turned off.  */
10939             decl = build_decl_attribute_variant (decl, decl_machine_attr);
10940 #endif
10941
10942             /* [class.conv.ctor]
10943
10944                A constructor declared without the function-specifier
10945                explicit that can be called with a single parameter
10946                specifies a conversion from the type of its first
10947                parameter to the type of its class.  Such a constructor
10948                is called a converting constructor.  */
10949             if (explicitp == 2)
10950               DECL_NONCONVERTING_P (decl) = 1;
10951             else if (DECL_CONSTRUCTOR_P (decl))
10952               {
10953                 /* The constructor can be called with exactly one
10954                    parameter if there is at least one parameter, and
10955                    any subsequent parameters have default arguments.
10956                    We don't look at the first parameter, which is
10957                    really just the `this' parameter for the new
10958                    object.  */
10959                 tree arg_types = 
10960                   TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)));
10961
10962                 /* Skip the `in_chrg' argument too, if present.  */
10963                 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (decl)))
10964                   arg_types = TREE_CHAIN (arg_types);
10965
10966                 if (arg_types == void_list_node
10967                     || (arg_types 
10968                         && TREE_CHAIN (arg_types) 
10969                         && TREE_CHAIN (arg_types) != void_list_node
10970                         && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
10971                   DECL_NONCONVERTING_P (decl) = 1;
10972               }
10973           }
10974         else if (TREE_CODE (type) == METHOD_TYPE)
10975           {
10976             /* We only get here for friend declarations of
10977                members of other classes.  */
10978             /* All method decls are public, so tell grokfndecl to set
10979                TREE_PUBLIC, also.  */
10980             decl = grokfndecl (ctype, type, declarator, declarator,
10981                                virtualp, flags, quals, raises, attrlist,
10982                                friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
10983                                template_count, in_namespace);
10984             if (decl == NULL_TREE)
10985               return NULL_TREE;
10986           }
10987         else if (!staticp && ! processing_template_decl
10988                  && TYPE_SIZE (complete_type (type)) == NULL_TREE
10989                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
10990           {
10991             if (declarator)
10992               cp_error ("field `%D' has incomplete type", declarator);
10993             else
10994               cp_error ("name `%T' has incomplete type", type);
10995
10996             /* If we're instantiating a template, tell them which
10997                instantiation made the field's type be incomplete.  */
10998             if (current_class_type
10999                 && TYPE_NAME (current_class_type)
11000                 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
11001                 && declspecs && TREE_VALUE (declspecs)
11002                 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
11003               cp_error ("  in instantiation of template `%T'",
11004                         current_class_type);
11005
11006             type = error_mark_node;
11007             decl = NULL_TREE;
11008           }
11009         else
11010           {
11011             if (friendp)
11012               {
11013                 error ("`%s' is neither function nor method; cannot be declared friend",
11014                        IDENTIFIER_POINTER (declarator));
11015                 friendp = 0;
11016               }
11017             decl = NULL_TREE;
11018           }
11019
11020         if (friendp)
11021           {
11022             /* Friends are treated specially.  */
11023             if (ctype == current_class_type)
11024               warning ("member functions are implicitly friends of their class");
11025             else
11026               {
11027                 tree t = NULL_TREE;
11028                 if (decl && DECL_NAME (decl))
11029                   {
11030                     if (template_class_depth (current_class_type) == 0)
11031                       {
11032                         decl 
11033                           = check_explicit_specialization 
11034                           (declarator, decl,
11035                            template_count, 2 * (funcdef_flag != 0) + 4);
11036                         if (decl == error_mark_node)
11037                           return error_mark_node;
11038                       }
11039
11040                     t = do_friend (ctype, declarator, decl,
11041                                    last_function_parms, flags, quals,
11042                                    funcdef_flag);
11043                   }
11044                 if (t && funcdef_flag)
11045                   return t;
11046                 
11047                 return void_type_node;
11048               }
11049           }
11050
11051         /* Structure field.  It may not be a function, except for C++ */
11052
11053         if (decl == NULL_TREE)
11054           {
11055             if (initialized)
11056               {
11057                 if (!staticp)
11058                   {
11059                     /* An attempt is being made to initialize a non-static
11060                        member.  But, from [class.mem]:
11061                        
11062                        4 A member-declarator can contain a
11063                        constant-initializer only if it declares a static
11064                        member (_class.static_) of integral or enumeration
11065                        type, see _class.static.data_.  
11066
11067                        This used to be relatively common practice, but
11068                        the rest of the compiler does not correctly
11069                        handle the initialization unless the member is
11070                        static so we make it static below.  */
11071                     cp_pedwarn ("ANSI C++ forbids initialization of member `%D'",
11072                                 declarator);
11073                     cp_pedwarn ("making `%D' static", declarator);
11074                     staticp = 1;
11075                   }
11076
11077                 if (uses_template_parms (type))
11078                   /* We'll check at instantiation time.  */
11079                   ;
11080                 else if (check_static_variable_definition (declarator,
11081                                                            type))
11082                   /* If we just return the declaration, crashes
11083                      will sometimes occur.  We therefore return
11084                      void_type_node, as if this was a friend
11085                      declaration, to cause callers to completely
11086                      ignore this declaration.  */
11087                   return void_type_node;
11088               }
11089
11090             /* 9.2p13 [class.mem] */
11091             if (declarator == constructor_name (current_class_type)
11092                 /* Divergence from the standard:  In extern "C", we
11093                    allow non-static data members here, because C does
11094                    and /usr/include/netinet/in.h uses that.  */
11095                 && (staticp || ! in_system_header))
11096               cp_pedwarn ("ANSI C++ forbids data member `%D' with same name as enclosing class",
11097                           declarator);
11098
11099             if (staticp)
11100               {
11101                 /* C++ allows static class members.
11102                    All other work for this is done by grokfield.
11103                    This VAR_DCL is built by build_lang_field_decl.
11104                    All other VAR_DECLs are built by build_decl.  */
11105                 decl = build_lang_field_decl (VAR_DECL, declarator, type);
11106                 TREE_STATIC (decl) = 1;
11107                 /* In class context, 'static' means public access.  */
11108                 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
11109               }
11110             else
11111               {
11112                 decl = build_lang_field_decl (FIELD_DECL, declarator, type);
11113                 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11114                   {
11115                     DECL_MUTABLE_P (decl) = 1;
11116                     RIDBIT_RESET (RID_MUTABLE, specbits);
11117                   }
11118               }
11119
11120             bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
11121                             inlinep, friendp, raises != NULL_TREE);
11122           }
11123       }
11124     else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
11125       {
11126         tree original_name;
11127         int publicp = 0;
11128
11129         if (! declarator)
11130           return NULL_TREE;
11131
11132         if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11133           original_name = dname;
11134         else
11135           original_name = declarator;
11136
11137         if (RIDBIT_SETP (RID_AUTO, specbits))
11138           error ("storage class `auto' invalid for function `%s'", name);
11139         else if (RIDBIT_SETP (RID_REGISTER, specbits))
11140           error ("storage class `register' invalid for function `%s'", name);
11141
11142         /* Function declaration not at top level.
11143            Storage classes other than `extern' are not allowed
11144            and `extern' makes no difference.  */
11145         if (! toplevel_bindings_p ()
11146             && (RIDBIT_SETP (RID_STATIC, specbits)
11147                 || RIDBIT_SETP (RID_INLINE, specbits))
11148             && pedantic)
11149           {
11150             if (RIDBIT_SETP (RID_STATIC, specbits))
11151               pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
11152             else
11153               pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
11154           }
11155         
11156         if (ctype == NULL_TREE)
11157           {
11158             if (virtualp)
11159               {
11160                 error ("virtual non-class function `%s'", name);
11161                 virtualp = 0;
11162               }
11163           }
11164         else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
11165           type = build_cplus_method_type (ctype, TREE_TYPE (type),
11166                                           TYPE_ARG_TYPES (type));
11167
11168         /* Record presence of `static'.  */
11169         publicp = (ctype != NULL_TREE
11170                    || RIDBIT_SETP (RID_EXTERN, specbits)
11171                    || !RIDBIT_SETP (RID_STATIC, specbits));
11172
11173         decl = grokfndecl (ctype, type, original_name, declarator,
11174                            virtualp, flags, quals, raises, attrlist,
11175                            1, friendp,
11176                            publicp, inlinep, funcdef_flag, 
11177                            template_count, in_namespace);
11178         if (decl == NULL_TREE)
11179           return NULL_TREE;
11180
11181         if (staticp == 1)
11182           {
11183             int illegal_static = 0;
11184
11185             /* Don't allow a static member function in a class, and forbid
11186                declaring main to be static.  */
11187             if (TREE_CODE (type) == METHOD_TYPE)
11188               {
11189                 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
11190                 illegal_static = 1;
11191               }
11192             else if (current_function_decl)
11193               {
11194                 /* FIXME need arm citation */
11195                 error ("cannot declare static function inside another function");
11196                 illegal_static = 1;
11197               }
11198
11199             if (illegal_static)
11200               {
11201                 staticp = 0;
11202                 RIDBIT_RESET (RID_STATIC, specbits);
11203               }
11204           }
11205       }
11206     else
11207       {
11208         /* It's a variable.  */
11209
11210         /* An uninitialized decl with `extern' is a reference.  */
11211         decl = grokvardecl (type, declarator, &specbits, 
11212                             initialized, 
11213                             (type_quals & TYPE_QUAL_CONST) != 0, 
11214                             in_namespace);
11215         bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11216                         inlinep, friendp, raises != NULL_TREE);
11217
11218         if (ctype)
11219           {
11220             DECL_CONTEXT (decl) = ctype;
11221             if (staticp == 1)
11222               {
11223                 cp_pedwarn ("static member `%D' re-declared as static", decl);
11224                 staticp = 0;
11225                 RIDBIT_RESET (RID_STATIC, specbits);
11226               }
11227             if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11228               {
11229                 cp_error ("static member `%D' declared `register'", decl);
11230                 RIDBIT_RESET (RID_REGISTER, specbits);
11231               }
11232             if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
11233               {
11234                 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
11235                             decl);
11236                 RIDBIT_RESET (RID_EXTERN, specbits);
11237               }
11238           }
11239       }
11240
11241     if (RIDBIT_SETP (RID_MUTABLE, specbits))
11242       {
11243         error ("`%s' cannot be declared mutable", name);
11244       }
11245
11246     /* Record `register' declaration for warnings on &
11247        and in case doing stupid register allocation.  */
11248
11249     if (RIDBIT_SETP (RID_REGISTER, specbits))
11250       DECL_REGISTER (decl) = 1;
11251
11252     if (RIDBIT_SETP (RID_EXTERN, specbits))
11253       DECL_THIS_EXTERN (decl) = 1;
11254
11255     if (RIDBIT_SETP (RID_STATIC, specbits))
11256       DECL_THIS_STATIC (decl) = 1;
11257
11258     /* Record constancy and volatility.  */
11259     /* FIXME: Disallow `restrict' pointer-to-member declarations.  */
11260     c_apply_type_quals_to_decl (type_quals, decl);
11261
11262     return decl;
11263   }
11264 }
11265 \f
11266 /* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11267    An empty exprlist is a parmlist.  An exprlist which
11268    contains only identifiers at the global level
11269    is a parmlist.  Otherwise, it is an exprlist.  */
11270
11271 int
11272 parmlist_is_exprlist (exprs)
11273      tree exprs;
11274 {
11275   if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11276     return 0;
11277
11278   if (toplevel_bindings_p ())
11279     {
11280       /* At the global level, if these are all identifiers,
11281          then it is a parmlist.  */
11282       while (exprs)
11283         {
11284           if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11285             return 1;
11286           exprs = TREE_CHAIN (exprs);
11287         }
11288       return 0;
11289     }
11290   return 1;
11291 }
11292
11293 /* Subroutine of start_function.  Ensure that each of the parameter
11294    types (as listed in PARMS) is complete, as is required for a
11295    function definition.  */
11296
11297 static void
11298 require_complete_types_for_parms (parms)
11299      tree parms;
11300 {
11301   while (parms)
11302     {
11303       tree type = TREE_TYPE (parms);
11304       if (TYPE_SIZE (complete_type (type)) == NULL_TREE)
11305         {
11306           if (DECL_NAME (parms))
11307             error ("parameter `%s' has incomplete type",
11308                    IDENTIFIER_POINTER (DECL_NAME (parms)));
11309           else
11310             error ("parameter has incomplete type");
11311           TREE_TYPE (parms) = error_mark_node;
11312         }
11313       else
11314         layout_decl (parms, 0);
11315
11316       parms = TREE_CHAIN (parms);
11317     }
11318 }
11319
11320 /* Returns DECL if DECL is a local variable (or parameter).  Returns
11321    NULL_TREE otherwise.  */
11322
11323 static tree
11324 local_variable_p (t)
11325      tree t;
11326 {
11327   if ((TREE_CODE (t) == VAR_DECL 
11328        /* A VAR_DECL with a context that is a _TYPE is a static data
11329           member.  */
11330        && !TYPE_P (CP_DECL_CONTEXT (t))
11331        /* Any other non-local variable must be at namespace scope.  */
11332        && TREE_CODE (CP_DECL_CONTEXT (t)) != NAMESPACE_DECL)
11333       || (TREE_CODE (t) == PARM_DECL))
11334     return t;
11335
11336   return NULL_TREE;
11337 }
11338
11339 /* Check that ARG, which is a default-argument expression for a
11340    parameter DECL, is legal.  Returns ARG, or ERROR_MARK_NODE, if
11341    something goes wrong.  DECL may also be a _TYPE node, rather than a
11342    DECL, if there is no DECL available.  */
11343
11344 tree
11345 check_default_argument (decl, arg)
11346      tree decl;
11347      tree arg;
11348 {
11349   tree var;
11350   tree decl_type;
11351
11352   if (TREE_CODE (arg) == DEFAULT_ARG)
11353     /* We get a DEFAULT_ARG when looking at an in-class declaration
11354        with a default argument.  Ignore the argument for now; we'll
11355        deal with it after the class is complete.  */
11356     return arg;
11357
11358   if (processing_template_decl || uses_template_parms (arg))
11359     /* We don't do anything checking until instantiation-time.  Note
11360        that there may be uninstantiated arguments even for an
11361        instantiated function, since default arguments are not
11362        instantiated until they are needed.  */
11363     return arg;
11364
11365   if (TYPE_P (decl))
11366     {
11367       decl_type = decl;
11368       decl = NULL_TREE;
11369     }
11370   else
11371     decl_type = TREE_TYPE (decl);
11372
11373   if (arg == error_mark_node 
11374       || decl == error_mark_node
11375       || TREE_TYPE (arg) == error_mark_node
11376       || decl_type == error_mark_node)
11377     /* Something already went wrong.  There's no need to check
11378        further.  */
11379     return error_mark_node;
11380
11381   /* [dcl.fct.default]
11382      
11383      A default argument expression is implicitly converted to the
11384      parameter type.  */
11385   if (!TREE_TYPE (arg)
11386       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
11387     {
11388       if (decl)
11389         cp_error ("default argument for `%#D' has type `%T'", 
11390                   decl, TREE_TYPE (arg));
11391       else
11392         cp_error ("default argument for paramter of type `%T' has type `%T'",
11393                   decl_type, TREE_TYPE (arg));
11394
11395       return error_mark_node;
11396     }
11397
11398   /* [dcl.fct.default]
11399
11400      Local variables shall not be used in default argument
11401      expressions. 
11402
11403      The keyword `this' shall not be used in a default argument of a
11404      member function.  */
11405   var = search_tree (arg, local_variable_p);
11406   if (var)
11407     {
11408       cp_error ("default argument `%E' uses local variable `%D'",
11409                 arg, var);
11410       return error_mark_node;
11411     }
11412
11413   /* All is well.  */
11414   return arg;
11415 }
11416
11417 /* Decode the list of parameter types for a function type.
11418    Given the list of things declared inside the parens,
11419    return a list of types.
11420
11421    The list we receive can have three kinds of elements:
11422    an IDENTIFIER_NODE for names given without types,
11423    a TREE_LIST node for arguments given as typespecs or names with typespecs,
11424    or void_type_node, to mark the end of an argument list
11425    when additional arguments are not permitted (... was not used).
11426
11427    FUNCDEF_FLAG is nonzero for a function definition, 0 for
11428    a mere declaration.  A nonempty identifier-list gets an error message
11429    when FUNCDEF_FLAG is zero.
11430    If FUNCDEF_FLAG is 1, then parameter types must be complete.
11431    If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
11432
11433    If all elements of the input list contain types,
11434    we return a list of the types.
11435    If all elements contain no type (except perhaps a void_type_node
11436    at the end), we return a null list.
11437    If some have types and some do not, it is an error, and we
11438    return a null list.
11439
11440    Also set last_function_parms to either
11441    a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
11442    A list of names is converted to a chain of PARM_DECLs
11443    by store_parm_decls so that ultimately it is always a chain of decls.
11444
11445    Note that in C++, parameters can take default values.  These default
11446    values are in the TREE_PURPOSE field of the TREE_LIST.  It is
11447    an error to specify default values which are followed by parameters
11448    that have no default values, or an ELLIPSES.  For simplicities sake,
11449    only parameters which are specified with their types can take on
11450    default values.  */
11451
11452 static tree
11453 grokparms (first_parm, funcdef_flag)
11454      tree first_parm;
11455      int funcdef_flag;
11456 {
11457   tree result = NULL_TREE;
11458   tree decls = NULL_TREE;
11459
11460   if (first_parm != NULL_TREE
11461       && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
11462     {
11463       if (! funcdef_flag)
11464         pedwarn ("parameter names (without types) in function declaration");
11465       last_function_parms = first_parm;
11466       return NULL_TREE;
11467     }
11468   else if (first_parm != NULL_TREE
11469            && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
11470            && TREE_CODE (TREE_VALUE (first_parm)) != VOID_TYPE)
11471     my_friendly_abort (145);
11472   else
11473     {
11474       /* Types were specified.  This is a list of declarators
11475          each represented as a TREE_LIST node.  */
11476       register tree parm, chain;
11477       int any_init = 0, any_error = 0;
11478
11479       if (first_parm != NULL_TREE)
11480         {
11481           tree last_result = NULL_TREE;
11482           tree last_decl = NULL_TREE;
11483
11484           for (parm = first_parm; parm != NULL_TREE; parm = chain)
11485             {
11486               tree type = NULL_TREE, list_node = parm;
11487               register tree decl = TREE_VALUE (parm);
11488               tree init = TREE_PURPOSE (parm);
11489
11490               chain = TREE_CHAIN (parm);
11491               /* @@ weak defense against parse errors.  */
11492               if (TREE_CODE (decl) != VOID_TYPE 
11493                   && TREE_CODE (decl) != TREE_LIST)
11494                 {
11495                   /* Give various messages as the need arises.  */
11496                   if (TREE_CODE (decl) == STRING_CST)
11497                     cp_error ("invalid string constant `%E'", decl);
11498                   else if (TREE_CODE (decl) == INTEGER_CST)
11499                     error ("invalid integer constant in parameter list, did you forget to give parameter name?");
11500                   continue;
11501                 }
11502
11503               if (TREE_CODE (decl) != VOID_TYPE)
11504                 {
11505                   decl = grokdeclarator (TREE_VALUE (decl),
11506                                          TREE_PURPOSE (decl),
11507                                          PARM, init != NULL_TREE,
11508                                          NULL_TREE);
11509                   if (! decl || TREE_TYPE (decl) == error_mark_node)
11510                     continue;
11511
11512                   /* Top-level qualifiers on the parameters are
11513                      ignored for function types.  */
11514                   type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
11515
11516                   if (TREE_CODE (type) == VOID_TYPE)
11517                     decl = void_type_node;
11518                   else if (TREE_CODE (type) == METHOD_TYPE)
11519                     {
11520                       if (DECL_NAME (decl))
11521                         /* Cannot use the decl here because
11522                            we don't have DECL_CONTEXT set up yet.  */
11523                         cp_error ("parameter `%D' invalidly declared method type",
11524                                   DECL_NAME (decl));
11525                       else
11526                         error ("parameter invalidly declared method type");
11527                       type = build_pointer_type (type);
11528                       TREE_TYPE (decl) = type;
11529                     }
11530                   else if (TREE_CODE (type) == OFFSET_TYPE)
11531                     {
11532                       if (DECL_NAME (decl))
11533                         cp_error ("parameter `%D' invalidly declared offset type",
11534                                   DECL_NAME (decl));
11535                       else
11536                         error ("parameter invalidly declared offset type");
11537                       type = build_pointer_type (type);
11538                       TREE_TYPE (decl) = type;
11539                     }
11540                   else if (TREE_CODE (type) == RECORD_TYPE
11541                            && TYPE_LANG_SPECIFIC (type)
11542                            && CLASSTYPE_ABSTRACT_VIRTUALS (type))
11543                     {
11544                       abstract_virtuals_error (decl, type);
11545                       any_error = 1;  /* Seems like a good idea. */
11546                     }
11547                   else if (TREE_CODE (type) == RECORD_TYPE
11548                            && TYPE_LANG_SPECIFIC (type)
11549                            && IS_SIGNATURE (type))
11550                     {
11551                       signature_error (decl, type);
11552                       any_error = 1;  /* Seems like a good idea. */
11553                     }
11554                   else if (POINTER_TYPE_P (type))
11555                     {
11556                       tree t = type;
11557                       while (POINTER_TYPE_P (t)
11558                              || (TREE_CODE (t) == ARRAY_TYPE
11559                                  && TYPE_DOMAIN (t) != NULL_TREE))
11560                         t = TREE_TYPE (t);
11561                       if (TREE_CODE (t) == ARRAY_TYPE)
11562                         cp_error ("parameter type `%T' includes %s to array of unknown bound",
11563                                   type,
11564                                   TYPE_PTR_P (type) ? "pointer" : "reference");
11565                     }
11566                 }
11567
11568               if (TREE_CODE (decl) == VOID_TYPE)
11569                 {
11570                   if (result == NULL_TREE)
11571                     {
11572                       result = void_list_node;
11573                       last_result = result;
11574                     }
11575                   else
11576                     {
11577                       TREE_CHAIN (last_result) = void_list_node;
11578                       last_result = void_list_node;
11579                     }
11580                   if (chain
11581                       && (chain != void_list_node || TREE_CHAIN (chain)))
11582                     error ("`void' in parameter list must be entire list");
11583                   break;
11584                 }
11585
11586               /* Since there is a prototype, args are passed in their own types.  */
11587               DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
11588 #ifdef PROMOTE_PROTOTYPES
11589               if ((TREE_CODE (type) == INTEGER_TYPE
11590                    || TREE_CODE (type) == ENUMERAL_TYPE)
11591                   && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
11592                 DECL_ARG_TYPE (decl) = integer_type_node;
11593 #endif
11594               if (!any_error && init)
11595                 {
11596                   any_init++;
11597                   init = check_default_argument (decl, init);
11598                 }
11599               else
11600                 init = NULL_TREE;
11601
11602               if (decls == NULL_TREE)
11603                 {
11604                   decls = decl;
11605                   last_decl = decls;
11606                 }
11607               else
11608                 {
11609                   TREE_CHAIN (last_decl) = decl;
11610                   last_decl = decl;
11611                 }
11612               if (! current_function_decl && TREE_PERMANENT (list_node))
11613                 {
11614                   TREE_PURPOSE (list_node) = init;
11615                   TREE_VALUE (list_node) = type;
11616                   TREE_CHAIN (list_node) = NULL_TREE;
11617                 }
11618               else
11619                 list_node = saveable_tree_cons (init, type, NULL_TREE);
11620               if (result == NULL_TREE)
11621                 {
11622                   result = list_node;
11623                   last_result = result;
11624                 }
11625               else
11626                 {
11627                   TREE_CHAIN (last_result) = list_node;
11628                   last_result = list_node;
11629                 }
11630             }
11631           if (last_result)
11632             TREE_CHAIN (last_result) = NULL_TREE;
11633           /* If there are no parameters, and the function does not end
11634              with `...', then last_decl will be NULL_TREE.  */
11635           if (last_decl != NULL_TREE)
11636             TREE_CHAIN (last_decl) = NULL_TREE;
11637         }
11638     }
11639
11640   last_function_parms = decls;
11641
11642   return result;
11643 }
11644
11645 /* Called from the parser to update an element of TYPE_ARG_TYPES for some
11646    FUNCTION_TYPE with the newly parsed version of its default argument, which
11647    was previously digested as text.  See snarf_defarg et al in lex.c.  */
11648
11649 void
11650 replace_defarg (arg, init)
11651      tree arg, init;
11652 {
11653   if (! processing_template_decl
11654       && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
11655     cp_pedwarn ("invalid type `%T' for default argument to `%T'",
11656                 TREE_TYPE (init), TREE_VALUE (arg));
11657   TREE_PURPOSE (arg) = init;
11658 }
11659 \f
11660 int
11661 copy_args_p (d)
11662      tree d;
11663 {
11664   tree t = FUNCTION_ARG_CHAIN (d);
11665   if (DECL_CONSTRUCTOR_P (d)
11666       && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (d)))
11667     t = TREE_CHAIN (t);
11668   if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
11669       && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
11670           == DECL_CLASS_CONTEXT (d))
11671       && (TREE_CHAIN (t) == NULL_TREE
11672           || TREE_CHAIN (t) == void_list_node
11673           || TREE_PURPOSE (TREE_CHAIN (t))))
11674     return 1;
11675   return 0;
11676 }
11677
11678 /* These memoizing functions keep track of special properties which
11679    a class may have.  `grok_ctor_properties' notices whether a class
11680    has a constructor of the form X(X&), and also complains
11681    if the class has a constructor of the form X(X).
11682    `grok_op_properties' takes notice of the various forms of
11683    operator= which are defined, as well as what sorts of type conversion
11684    may apply.  Both functions take a FUNCTION_DECL as an argument.  */
11685
11686 int
11687 grok_ctor_properties (ctype, decl)
11688      tree ctype, decl;
11689 {
11690   tree parmtypes = FUNCTION_ARG_CHAIN (decl);
11691   tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
11692
11693   /* When a type has virtual baseclasses, a magical first int argument is
11694      added to any ctor so we can tell if the class has been initialized
11695      yet.  This could screw things up in this function, so we deliberately
11696      ignore the leading int if we're in that situation.  */
11697   if (TYPE_USES_VIRTUAL_BASECLASSES (ctype))
11698     {
11699       my_friendly_assert (parmtypes
11700                           && TREE_VALUE (parmtypes) == integer_type_node,
11701                           980529);
11702       parmtypes = TREE_CHAIN (parmtypes);
11703       parmtype = TREE_VALUE (parmtypes);
11704     }
11705
11706   /* [class.copy]
11707
11708      A non-template constructor for class X is a copy constructor if
11709      its first parameter is of type X&, const X&, volatile X& or const
11710      volatile X&, and either there are no other parameters or else all
11711      other parameters have default arguments.  */
11712   if (TREE_CODE (parmtype) == REFERENCE_TYPE
11713       && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
11714       && (TREE_CHAIN (parmtypes) == NULL_TREE
11715           || TREE_CHAIN (parmtypes) == void_list_node
11716           || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11717       && !(DECL_TEMPLATE_INSTANTIATION (decl)
11718            && is_member_template (DECL_TI_TEMPLATE (decl))))
11719     {
11720       TYPE_HAS_INIT_REF (ctype) = 1;
11721       if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11722         TYPE_HAS_CONST_INIT_REF (ctype) = 1;
11723     }
11724   /* [class.copy]
11725
11726      A declaration of a constructor for a class X is ill-formed if its
11727      first parameter is of type (optionally cv-qualified) X and either
11728      there are no other parameters or else all other parameters have
11729      default arguments.  
11730
11731      We *don't* complain about member template instantiations that
11732      have this form, though; they can occur as we try to decide what
11733      constructor to use during overload resolution.  Since overload
11734      resolution will never prefer such a constructor to the
11735      non-template copy constructor (which is either explicitly or
11736      implicitly defined), there's no need to worry about their
11737      existence.  Theoretically, they should never even be
11738      instantiated, but that's hard to forestall.  */
11739   else if (TYPE_MAIN_VARIANT (parmtype) == ctype
11740            && (TREE_CHAIN (parmtypes) == NULL_TREE
11741                || TREE_CHAIN (parmtypes) == void_list_node
11742                || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11743            && !(DECL_TEMPLATE_INSTANTIATION (decl)
11744                 && is_member_template (DECL_TI_TEMPLATE (decl))))
11745     {
11746       cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
11747                 ctype, ctype);
11748       SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
11749       return 0;
11750     }
11751   else if (TREE_CODE (parmtype) == VOID_TYPE
11752            || TREE_PURPOSE (parmtypes) != NULL_TREE)
11753     TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
11754
11755   return 1;
11756 }
11757
11758 /* An operator with this name can be either unary or binary.  */
11759
11760 static int
11761 ambi_op_p (name)
11762      tree name;
11763 {
11764   return (name == ansi_opname [(int) INDIRECT_REF]
11765           || name == ansi_opname [(int) ADDR_EXPR]
11766           || name == ansi_opname [(int) NEGATE_EXPR]
11767           || name == ansi_opname[(int) POSTINCREMENT_EXPR]
11768           || name == ansi_opname[(int) POSTDECREMENT_EXPR]
11769           || name == ansi_opname [(int) CONVERT_EXPR]);
11770 }
11771
11772 /* An operator with this name can only be unary.  */
11773
11774 static int
11775 unary_op_p (name)
11776      tree name;
11777 {
11778   return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
11779           || name == ansi_opname [(int) BIT_NOT_EXPR]
11780           || name == ansi_opname [(int) COMPONENT_REF]
11781           || IDENTIFIER_TYPENAME_P (name));
11782 }
11783
11784 /* Do a little sanity-checking on how they declared their operator.  */
11785
11786 void
11787 grok_op_properties (decl, virtualp, friendp)
11788      tree decl;
11789      int virtualp, friendp;
11790 {
11791   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11792   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11793   tree name = DECL_NAME (decl);
11794
11795   if (current_class_type == NULL_TREE)
11796     friendp = 1;
11797
11798   if (! friendp)
11799     {
11800       /* [class.copy]
11801
11802          A user-declared copy assignment operator X::operator= is a
11803          non-static non-template member function of class X with
11804          exactly one parameter of type X, X&, const X&, volatile X& or
11805          const volatile X&.  */
11806       if (name == ansi_opname[(int) MODIFY_EXPR]
11807           && !(DECL_TEMPLATE_INSTANTIATION (decl)
11808                && is_member_template (DECL_TI_TEMPLATE (decl))))
11809         TYPE_HAS_ASSIGNMENT (current_class_type) = 1;
11810       else if (name == ansi_opname[(int) CALL_EXPR])
11811         TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
11812       else if (name == ansi_opname[(int) ARRAY_REF])
11813         TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
11814       else if (name == ansi_opname[(int) COMPONENT_REF]
11815                || name == ansi_opname[(int) MEMBER_REF])
11816         TYPE_OVERLOADS_ARROW (current_class_type) = 1;
11817       else if (name == ansi_opname[(int) NEW_EXPR])
11818         TYPE_GETS_NEW (current_class_type) |= 1;
11819       else if (name == ansi_opname[(int) DELETE_EXPR])
11820         TYPE_GETS_DELETE (current_class_type) |= 1;
11821       else if (name == ansi_opname[(int) VEC_NEW_EXPR])
11822         TYPE_GETS_NEW (current_class_type) |= 2;
11823       else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
11824         TYPE_GETS_DELETE (current_class_type) |= 2;
11825     }
11826
11827   if (name == ansi_opname[(int) NEW_EXPR]
11828       || name == ansi_opname[(int) VEC_NEW_EXPR])
11829     {
11830       /* When the compiler encounters the definition of A::operator new, it
11831          doesn't look at the class declaration to find out if it's static.  */
11832       if (methodp)
11833         revert_static_member_fn (&decl, NULL, NULL);
11834      
11835       /* Take care of function decl if we had syntax errors.  */
11836       if (argtypes == NULL_TREE)
11837         TREE_TYPE (decl)
11838           = build_function_type (ptr_type_node,
11839                                  hash_tree_chain (integer_type_node,
11840                                                   void_list_node));
11841       else
11842         TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11843     }
11844   else if (name == ansi_opname[(int) DELETE_EXPR]
11845            || name == ansi_opname[(int) VEC_DELETE_EXPR])
11846     {
11847       if (methodp)
11848         revert_static_member_fn (&decl, NULL, NULL);
11849      
11850       if (argtypes == NULL_TREE)
11851         TREE_TYPE (decl)
11852           = build_function_type (void_type_node,
11853                                  hash_tree_chain (ptr_type_node,
11854                                                   void_list_node));
11855       else
11856         {
11857           TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11858
11859           if (! friendp && name == ansi_opname[(int) VEC_DELETE_EXPR]
11860               && (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
11861                   != void_list_node))
11862             TYPE_VEC_DELETE_TAKES_SIZE (current_class_type) = 1;
11863         }
11864     }
11865   else
11866     {
11867       /* An operator function must either be a non-static member function
11868          or have at least one parameter of a class, a reference to a class,
11869          an enumeration, or a reference to an enumeration.  13.4.0.6 */
11870       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11871         {
11872           if (IDENTIFIER_TYPENAME_P (name)
11873               || name == ansi_opname[(int) CALL_EXPR]
11874               || name == ansi_opname[(int) MODIFY_EXPR]
11875               || name == ansi_opname[(int) COMPONENT_REF]
11876               || name == ansi_opname[(int) ARRAY_REF])
11877             cp_error ("`%D' must be a nonstatic member function", decl);
11878           else
11879             {
11880               tree p = argtypes;
11881
11882               if (DECL_STATIC_FUNCTION_P (decl))
11883                 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
11884
11885               if (p)
11886                 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
11887                   {
11888                     tree arg = TREE_VALUE (p);
11889                     if (TREE_CODE (arg) == REFERENCE_TYPE)
11890                       arg = TREE_TYPE (arg);
11891
11892                     /* This lets bad template code slip through.  */
11893                     if (IS_AGGR_TYPE (arg)
11894                         || TREE_CODE (arg) == ENUMERAL_TYPE
11895                         || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
11896                         || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11897                       goto foundaggr;
11898                   }
11899               cp_error
11900                 ("`%D' must have an argument of class or enumerated type",
11901                  decl);
11902             foundaggr:
11903               ;
11904             }
11905         }
11906       
11907       if (name == ansi_opname[(int) CALL_EXPR])
11908         return;                 /* No restrictions on args. */
11909
11910       if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
11911         {
11912           tree t = TREE_TYPE (name);
11913           if (TREE_CODE (t) == VOID_TYPE)
11914             pedwarn ("void is not a valid type conversion operator");
11915           else if (! friendp)
11916             {
11917               int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11918               char *what = 0;
11919               if (ref)
11920                 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11921
11922               if (t == current_class_type)
11923                 what = "the same type";
11924               /* Don't force t to be complete here.  */
11925               else if (IS_AGGR_TYPE (t)
11926                        && TYPE_SIZE (t)
11927                        && DERIVED_FROM_P (t, current_class_type))
11928                 what = "a base class";
11929
11930               if (what)
11931                 warning ("conversion to %s%s will never use a type conversion operator",
11932                          ref ? "a reference to " : "", what);
11933             }
11934         }
11935
11936       if (name == ansi_opname[(int) MODIFY_EXPR])
11937         {
11938           tree parmtype;
11939
11940           if (list_length (argtypes) != 3 && methodp)
11941             {
11942               cp_error ("`%D' must take exactly one argument", decl);
11943               return;
11944             }
11945           parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
11946
11947           if (copy_assignment_arg_p (parmtype, virtualp)
11948               && ! friendp)
11949             {
11950               TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
11951               if (TREE_CODE (parmtype) != REFERENCE_TYPE
11952                   || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11953                 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
11954             }
11955         }
11956       else if (name == ansi_opname[(int) COND_EXPR])
11957         {
11958           /* 13.4.0.3 */
11959           pedwarn ("ANSI C++ prohibits overloading operator ?:");
11960           if (list_length (argtypes) != 4)
11961             cp_error ("`%D' must take exactly three arguments", decl);
11962         }         
11963       else if (ambi_op_p (name))
11964         {
11965           if (list_length (argtypes) == 2)
11966             /* prefix */;
11967           else if (list_length (argtypes) == 3)
11968             {
11969               if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
11970                    || name == ansi_opname[(int) POSTDECREMENT_EXPR])
11971                   && ! processing_template_decl
11972                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11973                 {
11974                   if (methodp)
11975                     cp_error ("postfix `%D' must take `int' as its argument",
11976                               decl);
11977                   else
11978                     cp_error
11979                       ("postfix `%D' must take `int' as its second argument",
11980                        decl);
11981                 }
11982             }
11983           else
11984             {
11985               if (methodp)
11986                 cp_error ("`%D' must take either zero or one argument", decl);
11987               else
11988                 cp_error ("`%D' must take either one or two arguments", decl);
11989             }
11990
11991           /* More Effective C++ rule 6.  */
11992           if (warn_ecpp
11993               && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
11994                   || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
11995             {
11996               tree arg = TREE_VALUE (argtypes);
11997               tree ret = TREE_TYPE (TREE_TYPE (decl));
11998               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11999                 arg = TREE_TYPE (arg);
12000               arg = TYPE_MAIN_VARIANT (arg);
12001               if (list_length (argtypes) == 2)
12002                 {
12003                   if (TREE_CODE (ret) != REFERENCE_TYPE
12004                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
12005                                        arg))
12006                     cp_warning ("prefix `%D' should return `%T'", decl,
12007                                 build_reference_type (arg));
12008                 }
12009               else
12010                 {
12011                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
12012                     cp_warning ("postfix `%D' should return `%T'", decl, arg);
12013                 }
12014             }
12015         }
12016       else if (unary_op_p (name))
12017         {
12018           if (list_length (argtypes) != 2)
12019             {
12020               if (methodp)
12021                 cp_error ("`%D' must take `void'", decl);
12022               else
12023                 cp_error ("`%D' must take exactly one argument", decl);
12024             }
12025         }
12026       else /* if (binary_op_p (name)) */
12027         {
12028           if (list_length (argtypes) != 3)
12029             {
12030               if (methodp)
12031                 cp_error ("`%D' must take exactly one argument", decl);
12032               else
12033                 cp_error ("`%D' must take exactly two arguments", decl);
12034             }
12035
12036           /* More Effective C++ rule 7.  */
12037           if (warn_ecpp
12038               && (name == ansi_opname [TRUTH_ANDIF_EXPR]
12039                   || name == ansi_opname [TRUTH_ORIF_EXPR]
12040                   || name == ansi_opname [COMPOUND_EXPR]))
12041             cp_warning ("user-defined `%D' always evaluates both arguments",
12042                         decl);
12043         }
12044
12045       /* Effective C++ rule 23.  */
12046       if (warn_ecpp
12047           && list_length (argtypes) == 3
12048           && (name == ansi_opname [PLUS_EXPR]
12049               || name == ansi_opname [MINUS_EXPR]
12050               || name == ansi_opname [TRUNC_DIV_EXPR]
12051               || name == ansi_opname [MULT_EXPR])
12052           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
12053         cp_warning ("`%D' should return by value", decl);
12054
12055       /* 13.4.0.8 */
12056       if (argtypes)
12057         for (; argtypes != void_list_node ; argtypes = TREE_CHAIN (argtypes))
12058           if (TREE_PURPOSE (argtypes))
12059             {
12060               TREE_PURPOSE (argtypes) = NULL_TREE;
12061               if (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12062                   || name == ansi_opname[(int) POSTDECREMENT_EXPR])
12063                 {
12064                   if (pedantic)
12065                     cp_pedwarn ("`%D' cannot have default arguments", decl);
12066                 }
12067               else
12068                 cp_error ("`%D' cannot have default arguments", decl);
12069             }
12070     }
12071 }
12072 \f
12073 static char *
12074 tag_name (code)
12075      enum tag_types code;
12076 {
12077   switch (code)
12078     {
12079     case record_type:
12080       return "struct";
12081     case class_type:
12082       return "class";
12083     case union_type:
12084       return "union ";
12085     case enum_type:
12086       return "enum";
12087     case signature_type:
12088       return "signature";
12089     default:
12090       my_friendly_abort (981122);
12091     }
12092 }
12093
12094 /* Get the struct, enum or union (CODE says which) with tag NAME.
12095    Define the tag as a forward-reference if it is not defined.
12096
12097    C++: If a class derivation is given, process it here, and report
12098    an error if multiple derivation declarations are not identical.
12099
12100    If this is a definition, come in through xref_tag and only look in
12101    the current frame for the name (since C++ allows new names in any
12102    scope.)  */
12103
12104 tree
12105 xref_tag (code_type_node, name, globalize)
12106      tree code_type_node;
12107      tree name;
12108      int globalize;
12109 {
12110   enum tag_types tag_code;
12111   enum tree_code code;
12112   int temp = 0;
12113   register tree ref, t;
12114   struct binding_level *b = inner_binding_level;
12115   int got_type = 0;
12116   tree attributes = NULL_TREE;
12117
12118   /* If we are called from the parser, code_type_node will sometimes be a
12119      TREE_LIST.  This indicates that the user wrote
12120      "class __attribute__ ((foo)) bar".  Extract the attributes so we can
12121      use them later.  */
12122   if (TREE_CODE (code_type_node) == TREE_LIST)
12123     {
12124       attributes = TREE_PURPOSE (code_type_node);
12125       code_type_node = TREE_VALUE (code_type_node);
12126     }
12127
12128   tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12129   switch (tag_code)
12130     {
12131     case record_type:
12132     case class_type:
12133     case signature_type:
12134       code = RECORD_TYPE;
12135       break;
12136     case union_type:
12137       code = UNION_TYPE;
12138       break;
12139     case enum_type:
12140       code = ENUMERAL_TYPE;
12141       break;
12142     default:
12143       my_friendly_abort (18);
12144     }
12145
12146   /* If a cross reference is requested, look up the type
12147      already defined for this tag and return it.  */
12148   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
12149     {
12150       t = name;
12151       name = TYPE_IDENTIFIER (t);
12152       got_type = 1;
12153     }
12154   else
12155     t = IDENTIFIER_TYPE_VALUE (name);
12156
12157   if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
12158       && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
12159     t = NULL_TREE;
12160
12161   if (! globalize)
12162     {
12163       /* If we know we are defining this tag, only look it up in
12164          this scope and don't try to find it as a type.  */
12165       ref = lookup_tag (code, name, b, 1);
12166     }
12167   else
12168     {
12169       if (current_class_type 
12170           && template_class_depth (current_class_type) 
12171           && PROCESSING_REAL_TEMPLATE_DECL_P ())
12172       /* Since GLOBALIZE is non-zero, we are not looking at a
12173          definition of this tag.  Since, in addition, we are currently
12174          processing a (member) template declaration of a template
12175          class, we don't want to do any lookup at all; consider:
12176
12177            template <class X>
12178            struct S1
12179
12180            template <class U>
12181            struct S2
12182            { template <class V>
12183              friend struct S1; };
12184            
12185          Here, the S2::S1 declaration should not be confused with the
12186          outer declaration.  In particular, the inner version should
12187          have a template parameter of level 2, not level 1.  This
12188          would be particularly important if the member declaration
12189          were instead:
12190
12191            template <class V = U> friend struct S1;
12192
12193          say, when we should tsubst into `U' when instantiating S2.  */
12194         ref = NULL_TREE;
12195       else 
12196         {
12197           if (t)
12198             {
12199               if (t != TYPE_MAIN_VARIANT (t))
12200                 cp_pedwarn ("using typedef-name `%D' after `%s'",
12201                             TYPE_NAME (t), tag_name (tag_code));
12202               ref = t;
12203             }
12204           else
12205             ref = lookup_tag (code, name, b, 0);
12206           
12207           if (! ref)
12208             {
12209               /* Try finding it as a type declaration.  If that wins,
12210                  use it.  */ 
12211               ref = lookup_name (name, 1);
12212
12213               if (ref != NULL_TREE
12214                   && processing_template_decl
12215                   && DECL_CLASS_TEMPLATE_P (ref)
12216                   && template_class_depth (current_class_type) == 0)
12217                 /* Since GLOBALIZE is true, we're declaring a global
12218                template, so we want this type.  */
12219                 ref = DECL_RESULT (ref);
12220
12221               if (ref && TREE_CODE (ref) == TYPE_DECL
12222                   && TREE_CODE (TREE_TYPE (ref)) == code)
12223                 ref = TREE_TYPE (ref);
12224               else
12225                 ref = NULL_TREE;
12226             }
12227         }
12228     }
12229
12230   push_obstacks_nochange ();
12231
12232   if (! ref)
12233     {
12234       /* If no such tag is yet defined, create a forward-reference node
12235          and record it as the "definition".
12236          When a real declaration of this type is found,
12237          the forward-reference will be altered into a real type.  */
12238
12239       /* In C++, since these migrate into the global scope, we must
12240          build them on the permanent obstack.  */
12241
12242       temp = allocation_temporary_p ();
12243       if (temp)
12244         end_temporary_allocation ();
12245
12246       if (code == ENUMERAL_TYPE)
12247         {
12248           cp_error ("use of enum `%#D' without previous declaration", name);
12249
12250           ref = make_node (ENUMERAL_TYPE);
12251
12252           /* Give the type a default layout like unsigned int
12253              to avoid crashing if it does not get defined.  */
12254           TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12255           TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
12256           TREE_UNSIGNED (ref) = 1;
12257           TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12258           TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12259           TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12260
12261           /* Enable us to recognize when a type is created in class context.
12262              To do nested classes correctly, this should probably be cleared
12263              out when we leave this classes scope.  Currently this in only
12264              done in `start_enum'.  */
12265
12266           pushtag (name, ref, globalize);
12267         }
12268       else
12269         {
12270           struct binding_level *old_b = class_binding_level;
12271
12272           ref = make_lang_type (code);
12273
12274           if (tag_code == signature_type)
12275             {
12276               SET_SIGNATURE (ref);
12277               /* Since a signature type will be turned into the type
12278                  of signature tables, it's not only an interface.  */
12279               CLASSTYPE_INTERFACE_ONLY (ref) = 0;
12280               SET_CLASSTYPE_INTERFACE_KNOWN (ref);
12281               /* A signature doesn't have a vtable.  */
12282               CLASSTYPE_VTABLE_NEEDS_WRITING (ref) = 0;
12283             }
12284
12285 #ifdef NONNESTED_CLASSES
12286           /* Class types don't nest the way enums do.  */
12287           class_binding_level = (struct binding_level *)0;
12288 #endif
12289           pushtag (name, ref, globalize);
12290           class_binding_level = old_b;
12291         }
12292     }
12293   else
12294     {
12295       /* If it no longer looks like a nested type, make sure it's
12296          in global scope.  
12297          If it is not an IDENTIFIER, this is not a declaration */
12298       if (b->namespace_p && !class_binding_level
12299           && TREE_CODE (name) == IDENTIFIER_NODE)
12300         {
12301           if (IDENTIFIER_NAMESPACE_VALUE (name) == NULL_TREE)
12302             SET_IDENTIFIER_NAMESPACE_VALUE (name, TYPE_NAME (ref));
12303         }
12304
12305       if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
12306         redeclare_class_template (ref, current_template_parms);
12307     }
12308
12309   /* Until the type is defined, tentatively accept whatever
12310      structure tag the user hands us.  */
12311   if (TYPE_SIZE (ref) == NULL_TREE
12312       && ref != current_class_type
12313       /* Have to check this, in case we have contradictory tag info.  */
12314       && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12315     {
12316       if (tag_code == class_type)
12317         CLASSTYPE_DECLARED_CLASS (ref) = 1;
12318       else if (tag_code == record_type || tag_code == signature_type)
12319         CLASSTYPE_DECLARED_CLASS (ref) = 0;
12320     }
12321
12322   pop_obstacks ();
12323
12324   TREE_TYPE (ref) = attributes;
12325
12326   if (ref && TYPE_P (ref))
12327     {
12328       /* [dcl.type.elab]
12329              
12330          If the identifier resolves to a typedef-name or a template
12331          type-parameter, the elaborated-type-specifier is
12332          ill-formed.  */
12333       if (TYPE_LANG_SPECIFIC (ref) && TYPE_WAS_ANONYMOUS (ref))
12334         cp_error ("`%T' is a typedef name", ref);
12335       else if (TREE_CODE (ref) == TEMPLATE_TYPE_PARM)
12336         cp_error ("`%T' is a template type paramter", ref);
12337     }
12338
12339   return ref;
12340 }
12341
12342 tree
12343 xref_tag_from_type (old, id, globalize)
12344      tree old, id;
12345      int globalize;
12346 {
12347   tree code_type_node;
12348
12349   if (TREE_CODE (old) == RECORD_TYPE)
12350     code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12351                       ? class_type_node : record_type_node);
12352   else
12353     code_type_node = union_type_node;
12354
12355   if (id == NULL_TREE)
12356     id = TYPE_IDENTIFIER (old);
12357
12358   return xref_tag (code_type_node, id, globalize);
12359 }
12360
12361 /* REF is a type (named NAME), for which we have just seen some
12362    baseclasses.  BINFO is a list of those baseclasses; the
12363    TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
12364    the base-class.  CODE_TYPE_NODE indicates whether REF is a class,
12365    struct, or union.  */
12366
12367 void
12368 xref_basetypes (code_type_node, name, ref, binfo)
12369      tree code_type_node;
12370      tree name, ref;
12371      tree binfo;
12372 {
12373   /* In the declaration `A : X, Y, ... Z' we mark all the types
12374      (A, X, Y, ..., Z) so we can check for duplicates.  */
12375   tree binfos;
12376   int i, len;
12377   enum tag_types tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12378
12379   if (tag_code == union_type)
12380     {
12381       cp_error ("derived union `%T' invalid", ref);
12382       return;
12383     }
12384
12385   len = list_length (binfo);
12386   push_obstacks (TYPE_OBSTACK (ref), TYPE_OBSTACK (ref));
12387
12388   SET_CLASSTYPE_MARKED (ref);
12389   BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12390
12391   for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12392     {
12393       /* The base of a derived struct is public by default.  */
12394       int via_public
12395         = (TREE_PURPOSE (binfo) == access_public_node
12396            || TREE_PURPOSE (binfo) == access_public_virtual_node
12397            || (tag_code != class_type
12398                && (TREE_PURPOSE (binfo) == access_default_node
12399                    || TREE_PURPOSE (binfo) == access_default_virtual_node)));
12400       int via_protected
12401         = (TREE_PURPOSE (binfo) == access_protected_node
12402            || TREE_PURPOSE (binfo) == access_protected_virtual_node);
12403       int via_virtual
12404         = (TREE_PURPOSE (binfo) == access_private_virtual_node
12405            || TREE_PURPOSE (binfo) == access_protected_virtual_node
12406            || TREE_PURPOSE (binfo) == access_public_virtual_node
12407            || TREE_PURPOSE (binfo) == access_default_virtual_node);
12408       tree basetype = TREE_VALUE (binfo);
12409       tree base_binfo;
12410
12411       if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12412         basetype = TREE_TYPE (basetype);
12413       if (!basetype
12414           || (TREE_CODE (basetype) != RECORD_TYPE
12415               && TREE_CODE (basetype) != TYPENAME_TYPE
12416               && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
12417               && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
12418         {
12419           cp_error ("base type `%T' fails to be a struct or class type",
12420                     TREE_VALUE (binfo));
12421           continue;
12422         }
12423
12424       GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
12425
12426 #if 1
12427       /* This code replaces similar code in layout_basetypes.
12428          We put the complete_type first for implicit `typename'.  */
12429       if (TYPE_SIZE (complete_type (basetype)) == NULL_TREE
12430           && ! (current_template_parms && uses_template_parms (basetype)))
12431         {
12432           cp_error ("base class `%T' has incomplete type", basetype);
12433           continue;
12434         }
12435 #endif
12436       else
12437         {
12438           if (CLASSTYPE_MARKED (basetype))
12439             {
12440               if (basetype == ref)
12441                 cp_error ("recursive type `%T' undefined", basetype);
12442               else
12443                 cp_error ("duplicate base type `%T' invalid", basetype);
12444               continue;
12445             }
12446
12447           if (TYPE_FOR_JAVA (basetype)
12448               && current_lang_stack == current_lang_base)
12449             TYPE_FOR_JAVA (ref) = 1;
12450
12451           /* Note that the BINFO records which describe individual
12452              inheritances are *not* shared in the lattice!  They
12453              cannot be shared because a given baseclass may be
12454              inherited with different `accessibility' by different
12455              derived classes.  (Each BINFO record describing an
12456              individual inheritance contains flags which say what
12457              the `accessibility' of that particular inheritance is.)  */
12458   
12459           base_binfo 
12460             = make_binfo (integer_zero_node, basetype,
12461                           CLASS_TYPE_P (basetype)
12462                           ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12463                           CLASS_TYPE_P (basetype)
12464                           ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
12465  
12466           TREE_VEC_ELT (binfos, i) = base_binfo;
12467           TREE_VIA_PUBLIC (base_binfo) = via_public;
12468           TREE_VIA_PROTECTED (base_binfo) = via_protected;
12469           TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12470           BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12471
12472           /* We need to unshare the binfos now so that lookups during class
12473              definition work.  */
12474           unshare_base_binfos (base_binfo);
12475
12476           SET_CLASSTYPE_MARKED (basetype);
12477
12478           /* We are free to modify these bits because they are meaningless
12479              at top level, and BASETYPE is a top-level type.  */
12480           if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
12481             {
12482               TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
12483               TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12484             }
12485
12486           if (CLASS_TYPE_P (basetype))
12487             {
12488               TYPE_GETS_NEW (ref) |= TYPE_GETS_NEW (basetype);
12489               TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12490             }
12491
12492           i += 1;
12493         }
12494     }
12495   if (i)
12496     TREE_VEC_LENGTH (binfos) = i;
12497   else
12498     BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
12499
12500   if (i > 1)
12501     TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
12502   else if (i == 1)
12503     {
12504       tree basetype = BINFO_TYPE (TREE_VEC_ELT (binfos, 0));
12505       
12506       if (CLASS_TYPE_P (basetype))
12507         TYPE_USES_MULTIPLE_INHERITANCE (ref)
12508           = TYPE_USES_MULTIPLE_INHERITANCE (basetype);
12509     }
12510
12511   if (TYPE_USES_MULTIPLE_INHERITANCE (ref))
12512     TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12513
12514   /* Unmark all the types.  */
12515   while (--i >= 0)
12516     CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
12517   CLEAR_CLASSTYPE_MARKED (ref);
12518
12519   pop_obstacks ();
12520 }
12521   
12522 \f
12523 /* Begin compiling the definition of an enumeration type.
12524    NAME is its name (or null if anonymous).
12525    Returns the type object, as yet incomplete.
12526    Also records info about it so that build_enumerator
12527    may be used to declare the individual values as they are read.  */
12528
12529 tree
12530 start_enum (name)
12531      tree name;
12532 {
12533   register tree enumtype = NULL_TREE;
12534   struct binding_level *b = inner_binding_level;
12535
12536   /* We are wasting space here and putting these on the permanent_obstack so
12537      that typeid(local enum) will work correctly. */
12538   push_obstacks (&permanent_obstack, &permanent_obstack);
12539
12540   /* If this is the real definition for a previous forward reference,
12541      fill in the contents in the same object that used to be the
12542      forward reference.  */
12543
12544   if (name != NULL_TREE)
12545     enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
12546
12547   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12548     cp_error ("multiple definition of `%#T'", enumtype);
12549   else
12550     {
12551       enumtype = make_node (ENUMERAL_TYPE);
12552       pushtag (name, enumtype, 0);
12553     }
12554
12555   if (current_class_type)
12556     TREE_ADDRESSABLE (b->tags) = 1;
12557
12558   /* We don't copy this value because build_enumerator needs to do it.  */
12559   enum_next_value = integer_zero_node;
12560   enum_overflow = 0;
12561
12562   GNU_xref_decl (current_function_decl, enumtype);
12563   return enumtype;
12564 }
12565
12566 /* After processing and defining all the values of an enumeration type,
12567    install their decls in the enumeration type and finish it off.
12568    ENUMTYPE is the type object and VALUES a list of name-value pairs.
12569    Returns ENUMTYPE.  */
12570
12571 tree
12572 finish_enum (enumtype)
12573      tree enumtype;
12574 {
12575   register tree minnode = NULL_TREE, maxnode = NULL_TREE;
12576   /* Calculate the maximum value of any enumerator in this type.  */
12577
12578   tree values = TYPE_VALUES (enumtype);
12579   if (values)
12580     {
12581       tree pair;
12582
12583       for (pair = values; pair; pair = TREE_CHAIN (pair))
12584         {
12585           tree decl;
12586           tree value;
12587
12588           /* The TREE_VALUE is a CONST_DECL for this enumeration
12589              constant.  */
12590           decl = TREE_VALUE (pair);
12591
12592           /* The DECL_INITIAL will be NULL if we are processing a
12593              template declaration and this enumeration constant had no
12594              explicit initializer.  */
12595           value = DECL_INITIAL (decl);
12596           if (value && !processing_template_decl)
12597             {
12598               /* Set the TREE_TYPE for the VALUE as well.  That's so
12599                  that when we call decl_constant_value we get an
12600                  entity of the right type (but with the constant
12601                  value).  Since we shouldn't ever call
12602                  decl_constant_value on a template type, there's no
12603                  reason to do that when processing_template_decl.
12604                  And, if the expression is something like a
12605                  TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
12606                  wreak havoc on the intended type of the expression.  
12607
12608                  Of course, there's also no point in trying to compute
12609                  minimum or maximum values if we're in a template.  */
12610               TREE_TYPE (value) = enumtype;
12611
12612               if (!minnode)
12613                 minnode = maxnode = value;
12614               else if (tree_int_cst_lt (maxnode, value))
12615                 maxnode = value;
12616               else if (tree_int_cst_lt (value, minnode))
12617                 minnode = value;
12618             }
12619
12620           if (processing_template_decl) 
12621             /* If this is just a template, leave the CONST_DECL
12622                alone.  That way tsubst_copy will find CONST_DECLs for
12623                CONST_DECLs, and not INTEGER_CSTs.  */
12624             ;
12625           else
12626             /* In the list we're building up, we want the enumeration
12627                values, not the CONST_DECLs.  */
12628             TREE_VALUE (pair) = value;
12629         }
12630     }
12631   else
12632     maxnode = minnode = integer_zero_node;
12633
12634   TYPE_VALUES (enumtype) = nreverse (values);
12635
12636   if (processing_template_decl)
12637     {
12638       tree scope = current_scope ();
12639       if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12640         add_tree (build_min (TAG_DEFN, enumtype));
12641     }
12642   else
12643     {
12644       int unsignedp = tree_int_cst_sgn (minnode) >= 0;
12645       int lowprec = min_precision (minnode, unsignedp);
12646       int highprec = min_precision (maxnode, unsignedp);
12647       int precision = MAX (lowprec, highprec);
12648       tree tem;
12649
12650       TYPE_SIZE (enumtype) = NULL_TREE;
12651
12652       /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'.  */
12653
12654       TYPE_PRECISION (enumtype) = precision;
12655       if (unsignedp)
12656         fixup_unsigned_type (enumtype);
12657       else
12658         fixup_signed_type (enumtype);
12659
12660       if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
12661         /* Use the width of the narrowest normal C type which is wide
12662            enough.  */ 
12663         TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
12664                                                     (precision, 1));
12665       else
12666         TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
12667
12668       TYPE_SIZE (enumtype) = 0;
12669       layout_type (enumtype);
12670     
12671       /* Fix up all variant types of this enum type.  */
12672       for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
12673            tem = TYPE_NEXT_VARIANT (tem))
12674         {
12675           TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
12676           TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
12677           TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
12678           TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
12679           TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
12680           TYPE_MODE (tem) = TYPE_MODE (enumtype);
12681           TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
12682           TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
12683           TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
12684         }
12685
12686       /* Finish debugging output for this type.  */
12687       rest_of_type_compilation (enumtype, namespace_bindings_p ());
12688     }
12689
12690   /* In start_enum we pushed obstacks.  Here, we must pop them.  */
12691   pop_obstacks ();
12692
12693   return enumtype;
12694 }
12695
12696 /* Build and install a CONST_DECL for an enumeration constant of the
12697    enumeration type TYPE whose NAME and VALUE (if any) are provided.
12698    Assignment of sequential values by default is handled here.  */
12699
12700 tree
12701 build_enumerator (name, value, type)
12702      tree name;
12703      tree value;
12704      tree type;
12705 {
12706   tree decl, result;
12707   tree context;
12708
12709   /* Remove no-op casts from the value.  */
12710   if (value)
12711     STRIP_TYPE_NOPS (value);
12712
12713  if (! processing_template_decl)
12714    {
12715      /* Validate and default VALUE.  */
12716      if (value != NULL_TREE)
12717        {
12718          if (TREE_READONLY_DECL_P (value))
12719            value = decl_constant_value (value);
12720
12721          if (TREE_CODE (value) == INTEGER_CST)
12722            {
12723              value = default_conversion (value);
12724              constant_expression_warning (value);
12725            }
12726          else
12727            {
12728              cp_error ("enumerator value for `%D' not integer constant", name);
12729              value = NULL_TREE;
12730            }
12731        }
12732
12733      /* Default based on previous value.  */
12734      if (value == NULL_TREE && ! processing_template_decl)
12735        {
12736          value = enum_next_value;
12737          if (enum_overflow)
12738            cp_error ("overflow in enumeration values at `%D'", name);
12739        }
12740
12741      /* Remove no-op casts from the value.  */
12742      if (value)
12743        STRIP_TYPE_NOPS (value);
12744 #if 0
12745      /* To fix MAX_VAL enum consts. (bkoz)  */
12746      TREE_TYPE (value) = integer_type_node;
12747 #endif
12748    }
12749
12750  /* We always have to copy here; not all INTEGER_CSTs are unshared.
12751     Even in other cases, we will later (in finish_enum) be setting the
12752     type of VALUE.  */
12753  if (value != NULL_TREE)
12754    value = copy_node (value);
12755
12756   /* C++ associates enums with global, function, or class declarations.  */
12757  
12758  context = current_scope ();
12759  if (context && context == current_class_type)
12760    /* This enum declaration is local to the class.  */
12761    decl = build_lang_field_decl (CONST_DECL, name, type);
12762  else
12763    /* It's a global enum, or it's local to a function.  (Note local to
12764       a function could mean local to a class method.  */
12765    decl = build_decl (CONST_DECL, name, type);
12766
12767  DECL_CONTEXT (decl) = FROB_CONTEXT (context);
12768  DECL_INITIAL (decl) = value;
12769  TREE_READONLY (decl) = 1;
12770
12771  if (context && context == current_class_type)
12772    {
12773      pushdecl_class_level (decl);
12774      /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12775         on the TYPE_FIELDS list for `S'.  (That's so that you can say
12776         things like `S::i' later.)  */
12777      finish_member_declaration (decl);
12778    }
12779  else
12780    {
12781      pushdecl (decl);
12782      GNU_xref_decl (current_function_decl, decl);
12783    }
12784
12785  if (! processing_template_decl)
12786    {
12787      /* Set basis for default for next value.  */
12788      enum_next_value = build_binary_op_nodefault (PLUS_EXPR, value,
12789                                                   integer_one_node, PLUS_EXPR);
12790      enum_overflow = tree_int_cst_lt (enum_next_value, value);
12791    }
12792
12793   result = saveable_tree_cons (name, decl, NULL_TREE);
12794   return result;
12795 }
12796
12797 \f
12798 static int function_depth;
12799
12800 /* Create the FUNCTION_DECL for a function definition.
12801    DECLSPECS and DECLARATOR are the parts of the declaration;
12802    they describe the function's name and the type it returns,
12803    but twisted together in a fashion that parallels the syntax of C.
12804
12805    If PRE_PARSED_P is non-zero then DECLARATOR is really the DECL for
12806    the function we are about to process; DECLSPECS are ignored.  For
12807    example, we set PRE_PARSED_P when processing the definition of
12808    inline function that was defined in-class; the definition is
12809    actually processed when the class is complete.  In this case,
12810    PRE_PARSED_P is 2.  We also set PRE_PARSED_P when instanting the
12811    body of a template function, and when constructing thunk functions
12812    and such; in these cases PRE_PARSED_P is 1.
12813    
12814    This function creates a binding context for the function body
12815    as well as setting up the FUNCTION_DECL in current_function_decl.
12816
12817    Returns 1 on success.  If the DECLARATOR is not suitable for a function
12818    (it defines a datum instead), we return 0, which tells
12819    yyparse to report a parse error.
12820
12821    For C++, we must first check whether that datum makes any sense.
12822    For example, "class A local_a(1,2);" means that variable local_a
12823    is an aggregate of type A, which should have a constructor
12824    applied to it with the argument list [1, 2].
12825
12826    @@ There is currently no way to retrieve the storage
12827    @@ allocated to FUNCTION (or all of its parms) if we return
12828    @@ something we had previously.  */
12829
12830 int
12831 start_function (declspecs, declarator, attrs, pre_parsed_p)
12832      tree declspecs, declarator, attrs;
12833      int pre_parsed_p;
12834 {
12835   tree decl1;
12836   tree ctype = NULL_TREE;
12837   tree fntype;
12838   tree restype;
12839   extern int have_extern_spec;
12840   extern int used_extern_spec;
12841   int doing_friend = 0;
12842
12843   /* Sanity check.  */
12844   my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
12845   my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
12846
12847   /* Assume, until we see it does.  */
12848   current_function_returns_value = 0;
12849   current_function_returns_null = 0;
12850   named_labels = 0;
12851   shadowed_labels = 0;
12852   current_function_assigns_this = 0;
12853   current_function_just_assigned_this = 0;
12854   current_function_parms_stored = 0;
12855   original_result_rtx = NULL_RTX;
12856   base_init_expr = NULL_TREE;
12857   current_base_init_list = NULL_TREE;
12858   current_member_init_list = NULL_TREE;
12859   ctor_label = dtor_label = NULL_TREE;
12860   static_labelno = 0;
12861
12862   clear_temp_name ();
12863
12864   /* This should only be done once on the top most decl.  */
12865   if (have_extern_spec && !used_extern_spec)
12866     {
12867       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
12868       used_extern_spec = 1;
12869     }
12870
12871   if (pre_parsed_p)
12872     {
12873       decl1 = declarator;
12874
12875 #if 0
12876       /* What was this testing for, exactly?  */
12877       if (! DECL_ARGUMENTS (decl1)
12878           && !DECL_STATIC_FUNCTION_P (decl1)
12879           && !DECL_ARTIFICIAL (decl1)
12880           && DECL_CLASS_SCOPE_P (decl1)
12881           && TYPE_IDENTIFIER (DECL_CONTEXT (decl1))
12882           && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (DECL_CONTEXT (decl1))))
12883         {
12884           tree binding = binding_for_name (DECL_NAME (decl1), 
12885                                            current_namespace);
12886           cp_error ("redeclaration of `%#D'", decl1);
12887           if (IDENTIFIER_CLASS_VALUE (DECL_NAME (decl1)))
12888             cp_error_at ("previous declaration here", IDENTIFIER_CLASS_VALUE (DECL_NAME (decl1)));
12889           else if (BINDING_VALUE (binding))
12890             cp_error_at ("previous declaration here", BINDING_VALUE (binding));
12891         }
12892 #endif
12893
12894       fntype = TREE_TYPE (decl1);
12895       if (TREE_CODE (fntype) == METHOD_TYPE)
12896         ctype = TYPE_METHOD_BASETYPE (fntype);
12897
12898       /* ANSI C++ June 5 1992 WP 11.4.5.  A friend function defined in a
12899          class is in the (lexical) scope of the class in which it is
12900          defined.  */
12901       if (!ctype && DECL_FRIEND_P (decl1))
12902         {
12903           ctype = DECL_CLASS_CONTEXT (decl1);
12904
12905           /* CTYPE could be null here if we're dealing with a template;
12906              for example, `inline friend float foo()' inside a template
12907              will have no CTYPE set.  */
12908           if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
12909             ctype = NULL_TREE;
12910           else
12911             doing_friend = 1;
12912         }
12913
12914       last_function_parms = DECL_ARGUMENTS (decl1);
12915       last_function_parm_tags = NULL_TREE;
12916     }
12917   else
12918     {
12919       decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
12920       /* If the declarator is not suitable for a function definition,
12921          cause a syntax error.  */
12922       if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
12923
12924       fntype = TREE_TYPE (decl1);
12925
12926       restype = TREE_TYPE (fntype);
12927       if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
12928         {
12929           cp_error ("semicolon missing after declaration of `%#T'", restype);
12930           shadow_tag (build_expr_list (NULL_TREE, restype));
12931           CLASSTYPE_GOT_SEMICOLON (restype) = 1;
12932           if (TREE_CODE (fntype) == FUNCTION_TYPE)
12933             fntype = build_function_type (integer_type_node,
12934                                           TYPE_ARG_TYPES (fntype));
12935           else
12936             fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
12937                                               integer_type_node,
12938                                               TYPE_ARG_TYPES (fntype));
12939           TREE_TYPE (decl1) = fntype;
12940         }
12941
12942       if (TREE_CODE (fntype) == METHOD_TYPE)
12943         ctype = TYPE_METHOD_BASETYPE (fntype);
12944       else if (DECL_MAIN_P (decl1))
12945         {
12946           /* If this doesn't return integer_type, complain.  */
12947           if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
12948             {
12949               if (pedantic || warn_return_type)
12950                 pedwarn ("return type for `main' changed to `int'");
12951               TREE_TYPE (decl1) = fntype = default_function_type;
12952             }
12953         }
12954     }
12955
12956   /* Warn if function was previously implicitly declared
12957      (but not if we warned then).  */
12958   if (! warn_implicit
12959       && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
12960     cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
12961
12962   announce_function (decl1);
12963
12964   /* Set up current_class_type, and enter the scope of the class, if
12965      appropriate.  */
12966   if (ctype)
12967     push_nested_class (ctype, 1);
12968   else if (DECL_STATIC_FUNCTION_P (decl1))
12969     push_nested_class (DECL_CONTEXT (decl1), 2);
12970
12971   /* Now that we have entered the scope of the class, we must restore
12972      the bindings for any template parameters surrounding DECL1, if it
12973      is an inline member template.  (Order is important; consider the
12974      case where a template parameter has the same name as a field of
12975      the class.)  It is not until after this point that
12976      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
12977   if (pre_parsed_p == 2)
12978     maybe_begin_member_template_processing (decl1);
12979
12980   /* We are now in the scope of the function being defined.  */
12981   current_function_decl = decl1;
12982
12983   /* Save the parm names or decls from this function's declarator
12984      where store_parm_decls will find them.  */
12985   current_function_parms = last_function_parms;
12986   current_function_parm_tags = last_function_parm_tags;
12987
12988   if (! processing_template_decl)
12989     {
12990       /* In a function definition, arg types must be complete.  */
12991       require_complete_types_for_parms (current_function_parms);
12992
12993       if (TYPE_SIZE (complete_type (TREE_TYPE (fntype))) == NULL_TREE)
12994         {
12995           cp_error ("return-type `%#T' is an incomplete type",
12996                     TREE_TYPE (fntype));
12997
12998           /* Make it return void instead, but don't change the
12999              type of the DECL_RESULT, in case we have a named return value.  */
13000           if (ctype)
13001             TREE_TYPE (decl1)
13002               = build_cplus_method_type (build_type_variant (ctype,
13003                                                              TREE_READONLY (decl1),
13004                                                              TREE_SIDE_EFFECTS (decl1)),
13005                                          void_type_node,
13006                                          FUNCTION_ARG_CHAIN (decl1));
13007           else
13008             TREE_TYPE (decl1)
13009               = build_function_type (void_type_node,
13010                                      TYPE_ARG_TYPES (TREE_TYPE (decl1)));
13011           DECL_RESULT (decl1)
13012             = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (TREE_TYPE (fntype)));
13013           TREE_READONLY (DECL_RESULT (decl1))
13014             = CP_TYPE_CONST_P (TREE_TYPE (fntype));
13015           TREE_THIS_VOLATILE (DECL_RESULT (decl1))
13016             = CP_TYPE_VOLATILE_P (TREE_TYPE (fntype));
13017         }
13018
13019       if (TYPE_LANG_SPECIFIC (TREE_TYPE (fntype))
13020           && CLASSTYPE_ABSTRACT_VIRTUALS (TREE_TYPE (fntype)))
13021         abstract_virtuals_error (decl1, TREE_TYPE (fntype));
13022     }
13023
13024   /* Effective C++ rule 15.  See also c_expand_return.  */
13025   if (warn_ecpp
13026       && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
13027       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
13028     cp_warning ("`operator=' should return a reference to `*this'");
13029
13030   /* Make the init_value nonzero so pushdecl knows this is not tentative.
13031      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
13032   DECL_INITIAL (decl1) = error_mark_node;
13033
13034 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
13035   SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
13036 #endif
13037   
13038   /* This function exists in static storage.
13039      (This does not mean `static' in the C sense!)  */
13040   TREE_STATIC (decl1) = 1;
13041
13042   /* We must call push_template_decl after current_class_type is set
13043      up.  (If we are processing inline definitions after exiting a
13044      class scope, current_class_type will be NULL_TREE until set above
13045      by push_nested_class.)  */
13046   if (processing_template_decl)
13047     decl1 = push_template_decl (decl1);
13048
13049   /* Record the decl so that the function name is defined.
13050      If we already have a decl for this name, and it is a FUNCTION_DECL,
13051      use the old decl.  */
13052   if (!processing_template_decl && pre_parsed_p == 0)
13053     {
13054       /* A specialization is not used to guide overload resolution.  */
13055       if ((flag_guiding_decls 
13056            || !DECL_TEMPLATE_SPECIALIZATION (decl1))
13057           && ! DECL_FUNCTION_MEMBER_P (decl1))
13058         decl1 = pushdecl (decl1);
13059       else
13060         {
13061           /* We need to set the DECL_CONTEXT. */
13062           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13063             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13064           /* And make sure we have enough default args.  */
13065           check_default_args (decl1);
13066         }
13067       DECL_MAIN_VARIANT (decl1) = decl1;
13068       fntype = TREE_TYPE (decl1);
13069     }
13070
13071   current_function_decl = decl1;
13072
13073   if (DECL_INTERFACE_KNOWN (decl1))
13074     {
13075       tree ctx = hack_decl_function_context (decl1);
13076
13077       if (DECL_NOT_REALLY_EXTERN (decl1))
13078         DECL_EXTERNAL (decl1) = 0;
13079
13080       if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx) 
13081           && TREE_PUBLIC (ctx))
13082         /* This is a function in a local class in an extern inline
13083            function.  */
13084         comdat_linkage (decl1);
13085     }
13086   /* If this function belongs to an interface, it is public.
13087      If it belongs to someone else's interface, it is also external.
13088      This only affects inlines and template instantiations.  */
13089   else if (interface_unknown == 0
13090            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13091                || flag_alt_external_templates))
13092     {
13093       if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
13094           || processing_template_decl)
13095         {
13096           DECL_EXTERNAL (decl1)
13097             = (interface_only
13098                || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines));
13099
13100           /* For WIN32 we also want to put these in linkonce sections.  */
13101           maybe_make_one_only (decl1);
13102         }
13103       else
13104         DECL_EXTERNAL (decl1) = 0;
13105       DECL_NOT_REALLY_EXTERN (decl1) = 0;
13106       DECL_INTERFACE_KNOWN (decl1) = 1;
13107     }
13108   else
13109     {
13110       /* This is a definition, not a reference.
13111          So clear DECL_EXTERNAL.  */
13112       DECL_EXTERNAL (decl1) = 0;
13113
13114       if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
13115           && ! DECL_INTERFACE_KNOWN (decl1)
13116           /* Don't try to defer nested functions for now.  */
13117           && ! hack_decl_function_context (decl1))
13118         DECL_DEFER_OUTPUT (decl1) = 1;
13119       else
13120         DECL_INTERFACE_KNOWN (decl1) = 1;
13121     }
13122
13123   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1))
13124     {
13125       if (TREE_CODE (fntype) == METHOD_TYPE)
13126         TREE_TYPE (decl1) = fntype
13127           = build_function_type (TREE_TYPE (fntype),
13128                                  TREE_CHAIN (TYPE_ARG_TYPES (fntype)));
13129       current_function_parms = TREE_CHAIN (current_function_parms);
13130       DECL_ARGUMENTS (decl1) = current_function_parms;
13131       ctype = NULL_TREE;
13132     }
13133   restype = TREE_TYPE (fntype);
13134
13135   if (ctype)
13136     {
13137       /* If we're compiling a friend function, neither of the variables
13138          current_class_ptr nor current_class_type will have values.  */
13139       if (! doing_friend)
13140         {
13141           /* We know that this was set up by `grokclassfn'.
13142              We do not wait until `store_parm_decls', since evil
13143              parse errors may never get us to that point.  Here
13144              we keep the consistency between `current_class_type'
13145              and `current_class_ptr'.  */
13146           tree t = current_function_parms;
13147
13148           my_friendly_assert (t != NULL_TREE
13149                               && TREE_CODE (t) == PARM_DECL, 162);
13150
13151           if (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE)
13152             {
13153               int i;
13154
13155               if (! hack_decl_function_context (decl1))
13156                 temporary_allocation ();
13157               i = suspend_momentary ();
13158
13159               /* Normally, build_indirect_ref returns
13160                  current_class_ref whenever current_class_ptr is
13161                  dereferenced.  This time, however, we want it to
13162                  *create* current_class_ref, so we temporarily clear
13163                  current_class_ptr to fool it.  */
13164               current_class_ptr = NULL_TREE;
13165               current_class_ref = build_indirect_ref (t, NULL_PTR);
13166               current_class_ptr = t;
13167
13168               resume_momentary (i);
13169               if (! hack_decl_function_context (decl1))
13170                 end_temporary_allocation ();
13171             }
13172           else
13173             /* We're having a signature pointer here.  */
13174             current_class_ref = current_class_ptr = t;
13175
13176         }
13177     }
13178   else
13179     current_class_ptr = current_class_ref = NULL_TREE;
13180
13181   pushlevel (0);
13182   current_binding_level->parm_flag = 1;
13183
13184   GNU_xref_function (decl1, current_function_parms);
13185
13186   if (attrs)
13187     cplus_decl_attributes (decl1, NULL_TREE, attrs);
13188   
13189   make_function_rtl (decl1);
13190
13191   /* Promote the value to int before returning it.  */
13192   if (C_PROMOTING_INTEGER_TYPE_P (restype))
13193     restype = type_promotes_to (restype);
13194
13195   /* If this fcn was already referenced via a block-scope `extern' decl
13196      (or an implicit decl), propagate certain information about the usage.  */
13197   if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
13198     TREE_ADDRESSABLE (decl1) = 1;
13199
13200   if (DECL_RESULT (decl1) == NULL_TREE)
13201     {
13202       DECL_RESULT (decl1)
13203         = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13204       TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13205       TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
13206     }
13207
13208   /* Allocate further tree nodes temporarily during compilation
13209      of this function only.  Tiemann moved up here from bottom of fn.  */
13210   /* If this is a nested function, then we must continue to allocate RTL
13211      on the permanent obstack in case we need to inline it later.  */
13212   if (! hack_decl_function_context (decl1))
13213     temporary_allocation ();
13214
13215   if (processing_template_decl)
13216     {
13217       ++minimal_parse_mode;
13218       last_tree = DECL_SAVED_TREE (decl1)
13219         = build_nt (EXPR_STMT, void_zero_node);
13220     }
13221
13222   ++function_depth;
13223
13224   if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl1))
13225       && DECL_LANGUAGE (decl1) == lang_cplusplus)
13226     {
13227       dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13228       ctor_label = NULL_TREE;
13229     }
13230   else
13231     {
13232       dtor_label = NULL_TREE;
13233       if (DECL_CONSTRUCTOR_P (decl1))
13234         ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13235     }
13236
13237   return 1;
13238 }
13239 \f
13240 /* Called after store_parm_decls for a function-try-block.  We need to update
13241    last_parm_cleanup_insn so that the base initializers for a constructor
13242    are run within this block, not before it.  */
13243
13244 void
13245 expand_start_early_try_stmts ()
13246 {
13247   expand_start_try_stmts ();
13248   last_parm_cleanup_insn = get_last_insn ();
13249 }
13250
13251 /* Store the parameter declarations into the current function declaration.
13252    This is called after parsing the parameter declarations, before
13253    digesting the body of the function.
13254
13255    Also install to binding contour return value identifier, if any.  */
13256
13257 void
13258 store_parm_decls ()
13259 {
13260   register tree fndecl = current_function_decl;
13261   register tree parm;
13262   int parms_have_cleanups = 0;
13263   tree cleanups = NULL_TREE;
13264
13265   /* This is either a chain of PARM_DECLs (when a prototype is used).  */
13266   tree specparms = current_function_parms;
13267
13268   /* This is a list of types declared among parms in a prototype.  */
13269   tree parmtags = current_function_parm_tags;
13270
13271   /* This is a chain of any other decls that came in among the parm
13272      declarations.  If a parm is declared with  enum {foo, bar} x;
13273      then CONST_DECLs for foo and bar are put here.  */
13274   tree nonparms = NULL_TREE;
13275
13276   if (toplevel_bindings_p ())
13277     fatal ("parse errors have confused me too much");
13278
13279   /* Initialize RTL machinery.  */
13280   init_function_start (fndecl, input_filename, lineno);
13281
13282   /* Create a binding level for the parms.  */
13283   expand_start_bindings (0);
13284
13285   if (specparms != NULL_TREE)
13286     {
13287       /* This case is when the function was defined with an ANSI prototype.
13288          The parms already have decls, so we need not do anything here
13289          except record them as in effect
13290          and complain if any redundant old-style parm decls were written.  */
13291
13292       register tree next;
13293
13294       /* Must clear this because it might contain TYPE_DECLs declared
13295          at class level.  */
13296       storedecls (NULL_TREE);
13297
13298       for (parm = nreverse (specparms); parm; parm = next)
13299         {
13300           next = TREE_CHAIN (parm);
13301           if (TREE_CODE (parm) == PARM_DECL)
13302             {
13303               tree cleanup;
13304               if (DECL_NAME (parm) == NULL_TREE)
13305                 {
13306                   pushdecl (parm);
13307                 }
13308               else if (TREE_CODE (TREE_TYPE (parm)) == VOID_TYPE)
13309                 cp_error ("parameter `%D' declared void", parm);
13310               else
13311                 {
13312                   /* Now fill in DECL_REFERENCE_SLOT for any of the parm decls.
13313                      A parameter is assumed not to have any side effects.
13314                      If this should change for any reason, then this
13315                      will have to wrap the bashed reference type in a save_expr.
13316                      
13317                      Also, if the parameter type is declared to be an X
13318                      and there is an X(X&) constructor, we cannot lay it
13319                      into the stack (any more), so we make this parameter
13320                      look like it is really of reference type.  Functions
13321                      which pass parameters to this function will know to
13322                      create a temporary in their frame, and pass a reference
13323                      to that.  */
13324
13325                   if (TREE_CODE (TREE_TYPE (parm)) == REFERENCE_TYPE
13326                       && TYPE_SIZE (TREE_TYPE (TREE_TYPE (parm))))
13327                     SET_DECL_REFERENCE_SLOT (parm, convert_from_reference (parm));
13328
13329                   pushdecl (parm);
13330                 }
13331               if (! processing_template_decl
13332                   && (cleanup = maybe_build_cleanup (parm), cleanup))
13333                 {
13334                   expand_decl (parm);
13335                   parms_have_cleanups = 1;
13336
13337                   /* Keep track of the cleanups.  */
13338                   cleanups = tree_cons (parm, cleanup, cleanups);
13339                 }
13340             }
13341           else
13342             {
13343               /* If we find an enum constant or a type tag,
13344                  put it aside for the moment.  */
13345               TREE_CHAIN (parm) = NULL_TREE;
13346               nonparms = chainon (nonparms, parm);
13347             }
13348         }
13349
13350       /* Get the decls in their original chain order
13351          and record in the function.  This is all and only the
13352          PARM_DECLs that were pushed into scope by the loop above.  */
13353       DECL_ARGUMENTS (fndecl) = getdecls ();
13354
13355       storetags (chainon (parmtags, gettags ()));
13356     }
13357   else
13358     DECL_ARGUMENTS (fndecl) = NULL_TREE;
13359
13360   /* Now store the final chain of decls for the arguments
13361      as the decl-chain of the current lexical scope.
13362      Put the enumerators in as well, at the front so that
13363      DECL_ARGUMENTS is not modified.  */
13364
13365   storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
13366
13367   /* Declare __FUNCTION__ and __PRETTY_FUNCTION__ for this function.  */
13368   declare_function_name ();
13369
13370   /* Initialize the RTL code for the function.  */
13371   DECL_SAVED_INSNS (fndecl) = NULL_RTX;
13372   if (! processing_template_decl)
13373     expand_function_start (fndecl, parms_have_cleanups);
13374
13375   current_function_parms_stored = 1;
13376
13377   /* If this function is `main', emit a call to `__main'
13378      to run global initializers, etc.  */
13379   if (DECL_MAIN_P (fndecl))
13380     expand_main_function ();
13381
13382   /* Now that we have initialized the parms, we can start their
13383      cleanups.  We cannot do this before, since expand_decl_cleanup
13384      should not be called before the parm can be used.  */
13385   if (cleanups
13386       && ! processing_template_decl)      
13387     {
13388       for (cleanups = nreverse (cleanups); cleanups; cleanups = TREE_CHAIN (cleanups))
13389         {
13390           if (! expand_decl_cleanup (TREE_PURPOSE (cleanups), TREE_VALUE (cleanups)))
13391             cp_error ("parser lost in parsing declaration of `%D'",
13392                       TREE_PURPOSE (cleanups));
13393         }
13394     }
13395
13396   /* Create a binding contour which can be used to catch
13397      cleanup-generated temporaries.  Also, if the return value needs or
13398      has initialization, deal with that now.  */
13399   if (parms_have_cleanups)
13400     {
13401       pushlevel (0);
13402       expand_start_bindings (0);
13403     }
13404
13405   if (! processing_template_decl && flag_exceptions)
13406     {
13407       /* Do the starting of the exception specifications, if we have any.  */
13408       if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13409         expand_start_eh_spec ();
13410     }
13411
13412   last_parm_cleanup_insn = get_last_insn ();
13413   last_dtor_insn = get_last_insn ();
13414 }
13415
13416 /* Bind a name and initialization to the return value of
13417    the current function.  */
13418
13419 void
13420 store_return_init (return_id, init)
13421      tree return_id, init;
13422 {
13423   tree decl = DECL_RESULT (current_function_decl);
13424
13425   if (pedantic)
13426     /* Give this error as many times as there are occurrences,
13427        so that users can use Emacs compilation buffers to find
13428        and fix all such places.  */
13429     pedwarn ("ANSI C++ does not permit named return values");
13430
13431   if (return_id != NULL_TREE)
13432     {
13433       if (DECL_NAME (decl) == NULL_TREE)
13434         {
13435           DECL_NAME (decl) = return_id;
13436           DECL_ASSEMBLER_NAME (decl) = return_id;
13437         }
13438       else
13439         cp_error ("return identifier `%D' already in place", decl);
13440     }
13441
13442   /* Can't let this happen for constructors.  */
13443   if (DECL_CONSTRUCTOR_P (current_function_decl))
13444     {
13445       error ("can't redefine default return value for constructors");
13446       return;
13447     }
13448
13449   /* If we have a named return value, put that in our scope as well.  */
13450   if (DECL_NAME (decl) != NULL_TREE)
13451     {
13452       /* If this named return value comes in a register,
13453          put it in a pseudo-register.  */
13454       if (DECL_REGISTER (decl))
13455         {
13456           original_result_rtx = DECL_RTL (decl);
13457           DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
13458         }
13459
13460       /* Let `cp_finish_decl' know that this initializer is ok.  */
13461       DECL_INITIAL (decl) = init;
13462       pushdecl (decl);
13463
13464       if (minimal_parse_mode)
13465         add_tree (build_min_nt (RETURN_INIT, return_id,
13466                                 copy_to_permanent (init)));
13467       else
13468         cp_finish_decl (decl, init, NULL_TREE, 0, 0);
13469     }
13470 }
13471
13472 \f
13473 /* Finish up a function declaration and compile that function
13474    all the way to assembler language output.  The free the storage
13475    for the function definition.
13476
13477    This is called after parsing the body of the function definition.
13478    LINENO is the current line number.
13479
13480    FLAGS is a bitwise or of the following values: 
13481      1 - CALL_POPLEVEL 
13482        An extra call to poplevel (and expand_end_bindings) must be
13483        made to take care of the binding contour for the base
13484        initializers.  This is only relevant for constructors.
13485      2 - INCLASS_INLINE
13486        We just finished processing the body of an in-class inline
13487        function definition.  (This processing will have taken place
13488        after the class definition is complete.)
13489
13490    NESTED is nonzero if we were in the middle of compiling another function
13491    when we started on this one.  */
13492
13493 void
13494 finish_function (lineno, flags, nested)
13495      int lineno;
13496      int flags;
13497      int nested;
13498 {
13499   register tree fndecl = current_function_decl;
13500   tree fntype, ctype = NULL_TREE;
13501   rtx last_parm_insn, insns;
13502   /* Label to use if this function is supposed to return a value.  */
13503   tree no_return_label = NULL_TREE;
13504   tree decls = NULL_TREE;
13505   int call_poplevel = (flags & 1) != 0;
13506   int inclass_inline = (flags & 2) != 0;
13507   int in_template;
13508
13509   /* When we get some parse errors, we can end up without a
13510      current_function_decl, so cope.  */
13511   if (fndecl == NULL_TREE)
13512     return;
13513
13514   if (! nested && function_depth > 1)
13515     nested = 1;
13516
13517   fntype = TREE_TYPE (fndecl);
13518
13519 /*  TREE_READONLY (fndecl) = 1;
13520     This caused &foo to be of type ptr-to-const-function
13521     which then got a warning when stored in a ptr-to-function variable.  */
13522
13523   /* This happens on strange parse errors.  */
13524   if (! current_function_parms_stored)
13525     {
13526       call_poplevel = 0;
13527       store_parm_decls ();
13528     }
13529
13530   if (processing_template_decl)
13531     {
13532       if (DECL_CONSTRUCTOR_P (fndecl) && call_poplevel)
13533         {
13534           decls = getdecls ();
13535           expand_end_bindings (decls, decls != NULL_TREE, 0);
13536           poplevel (decls != NULL_TREE, 0, 0);
13537         }
13538     }
13539   else
13540     {
13541       if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
13542         {
13543           tree ttype = target_type (fntype);
13544           tree parmdecl;
13545
13546           if (IS_AGGR_TYPE (ttype))
13547             /* Let debugger know it should output info for this type.  */
13548             note_debug_info_needed (ttype);
13549
13550           for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
13551             {
13552               ttype = target_type (TREE_TYPE (parmdecl));
13553               if (IS_AGGR_TYPE (ttype))
13554                 /* Let debugger know it should output info for this type.  */
13555                 note_debug_info_needed (ttype);
13556             }
13557         }
13558
13559       /* Clean house because we will need to reorder insns here.  */
13560       do_pending_stack_adjust ();
13561
13562       if (dtor_label)
13563         {
13564           tree binfo = TYPE_BINFO (current_class_type);
13565           tree cond = integer_one_node;
13566           tree exprstmt;
13567           tree in_charge_node = lookup_name (in_charge_identifier, 0);
13568           tree virtual_size;
13569           int ok_to_optimize_dtor = 0;
13570           int empty_dtor = get_last_insn () == last_dtor_insn;
13571
13572           if (current_function_assigns_this)
13573             cond = build (NE_EXPR, boolean_type_node,
13574                           current_class_ptr, integer_zero_node);
13575           else
13576             {
13577               int n_baseclasses = CLASSTYPE_N_BASECLASSES (current_class_type);
13578
13579               /* If this destructor is empty, then we don't need to check
13580                  whether `this' is NULL in some cases.  */
13581               if ((flag_this_is_variable & 1) == 0)
13582                 ok_to_optimize_dtor = 1;
13583               else if (empty_dtor)
13584                 ok_to_optimize_dtor
13585                   = (n_baseclasses == 0
13586                      || (n_baseclasses == 1
13587                          && TYPE_HAS_DESTRUCTOR (TYPE_BINFO_BASETYPE (current_class_type, 0))));
13588             }
13589
13590           /* These initializations might go inline.  Protect
13591              the binding level of the parms.  */
13592           pushlevel (0);
13593           expand_start_bindings (0);
13594
13595           if (current_function_assigns_this)
13596             {
13597               current_function_assigns_this = 0;
13598               current_function_just_assigned_this = 0;
13599             }
13600
13601           /* Generate the code to call destructor on base class.
13602              If this destructor belongs to a class with virtual
13603              functions, then set the virtual function table
13604              pointer to represent the type of our base class.  */
13605
13606           /* This side-effect makes call to `build_delete' generate the
13607              code we have to have at the end of this destructor.
13608              `build_delete' will set the flag again.  */
13609           TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
13610
13611           /* These are two cases where we cannot delegate deletion.  */
13612           if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)
13613               || TYPE_GETS_REG_DELETE (current_class_type))
13614             exprstmt = build_delete (current_class_type, current_class_ref, integer_zero_node,
13615                                      LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
13616           else
13617             exprstmt = build_delete (current_class_type, current_class_ref, in_charge_node,
13618                                      LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
13619
13620           /* If we did not assign to this, then `this' is non-zero at
13621              the end of a destructor.  As a special optimization, don't
13622              emit test if this is an empty destructor.  If it does nothing,
13623              it does nothing.  If it calls a base destructor, the base
13624              destructor will perform the test.  */
13625
13626           if (exprstmt != error_mark_node
13627               && (TREE_CODE (exprstmt) != NOP_EXPR
13628                   || TREE_OPERAND (exprstmt, 0) != integer_zero_node
13629                   || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
13630             {
13631               expand_label (dtor_label);
13632               if (cond != integer_one_node)
13633                 expand_start_cond (cond, 0);
13634               if (exprstmt != void_zero_node)
13635                 /* Don't call `expand_expr_stmt' if we're not going to do
13636                    anything, since -Wall will give a diagnostic.  */
13637                 expand_expr_stmt (exprstmt);
13638
13639               /* Run destructor on all virtual baseclasses.  */
13640               if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13641                 {
13642                   tree vbases = nreverse (copy_list (CLASSTYPE_VBASECLASSES (current_class_type)));
13643                   expand_start_cond (build (BIT_AND_EXPR, integer_type_node,
13644                                             in_charge_node, integer_two_node), 0);
13645                   while (vbases)
13646                     {
13647                       if (TYPE_NEEDS_DESTRUCTOR (BINFO_TYPE (vbases)))
13648                         {
13649                           tree vb = get_vbase
13650                             (BINFO_TYPE (vbases),
13651                              TYPE_BINFO (current_class_type));
13652                           expand_expr_stmt
13653                             (build_scoped_method_call
13654                              (current_class_ref, vb, dtor_identifier,
13655                               build_expr_list (NULL_TREE, integer_zero_node)));
13656                         }
13657                       vbases = TREE_CHAIN (vbases);
13658                     }
13659                   expand_end_cond ();
13660                 }
13661
13662               do_pending_stack_adjust ();
13663               if (cond != integer_one_node)
13664                 expand_end_cond ();
13665             }
13666
13667           virtual_size = c_sizeof (current_class_type);
13668
13669           /* At the end, call delete if that's what's requested.  */
13670
13671           /* FDIS sez: At the point of definition of a virtual destructor
13672                (including an implicit definition), non-placement operator
13673                delete shall be looked up in the scope of the destructor's
13674                class and if found shall be accessible and unambiguous.
13675
13676              This is somewhat unclear, but I take it to mean that if the
13677              class only defines placement deletes we don't do anything here.
13678              So we pass LOOKUP_SPECULATIVELY; delete_sanity will complain
13679              for us if they ever try to delete one of these.  */
13680
13681           if (TYPE_GETS_REG_DELETE (current_class_type)
13682               || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13683             exprstmt = build_op_delete_call
13684               (DELETE_EXPR, current_class_ptr, virtual_size,
13685                LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
13686           else
13687             exprstmt = NULL_TREE;
13688
13689           if (exprstmt)
13690             {
13691               cond = build (BIT_AND_EXPR, integer_type_node,
13692                             in_charge_node, integer_one_node);
13693               expand_start_cond (cond, 0);
13694               expand_expr_stmt (exprstmt);
13695               expand_end_cond ();
13696             }
13697
13698           /* End of destructor.  */
13699           expand_end_bindings (NULL_TREE, getdecls () != NULL_TREE, 0);
13700           poplevel (getdecls () != NULL_TREE, 0, 0);
13701
13702           /* Back to the top of destructor.  */
13703           /* Don't execute destructor code if `this' is NULL.  */
13704
13705           start_sequence ();
13706
13707           /* If the dtor is empty, and we know there is not possible way we
13708              could use any vtable entries, before they are possibly set by
13709              a base class dtor, we don't have to setup the vtables, as we
13710              know that any base class dtoring will set up any vtables it
13711              needs.  We avoid MI, because one base class dtor can do a
13712              virtual dispatch to an overridden function that would need to
13713              have a non-related vtable set up, we cannot avoid setting up
13714              vtables in that case.  We could change this to see if there is
13715              just one vtable.  */
13716           if (! empty_dtor || TYPE_USES_COMPLEX_INHERITANCE (current_class_type))
13717             {
13718               /* Make all virtual function table pointers in non-virtual base
13719                  classes point to CURRENT_CLASS_TYPE's virtual function
13720                  tables.  */
13721               expand_direct_vtbls_init (binfo, binfo, 1, 0, current_class_ptr);
13722
13723               if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13724                 expand_indirect_vtbls_init (binfo, current_class_ref, current_class_ptr);
13725             }
13726           
13727           if (! ok_to_optimize_dtor)
13728             {
13729               cond = build_binary_op (NE_EXPR,
13730                                       current_class_ptr, integer_zero_node, 1);
13731               expand_start_cond (cond, 0);
13732             }
13733
13734           insns = get_insns ();
13735           end_sequence ();
13736
13737           last_parm_insn = get_first_nonparm_insn ();
13738           if (last_parm_insn == NULL_RTX)
13739             last_parm_insn = get_last_insn ();
13740           else
13741             last_parm_insn = previous_insn (last_parm_insn);
13742
13743           emit_insns_after (insns, last_parm_insn);
13744
13745           if (! ok_to_optimize_dtor)
13746             expand_end_cond ();
13747         }
13748       else if (current_function_assigns_this)
13749         {
13750           /* Does not need to call emit_base_init, because
13751              that is done (if needed) just after assignment to this
13752              is seen.  */
13753
13754           if (DECL_CONSTRUCTOR_P (current_function_decl))
13755             {
13756               end_protect_partials ();
13757               expand_label (ctor_label);
13758               ctor_label = NULL_TREE;
13759
13760               if (call_poplevel)
13761                 {
13762                   decls = getdecls ();
13763                   expand_end_bindings (decls, decls != NULL_TREE, 0);
13764                   poplevel (decls != NULL_TREE, 0, 0);
13765                 }
13766               /* c_expand_return knows to return 'this' from a constructor.  */
13767               c_expand_return (NULL_TREE);
13768             }
13769           else if (TREE_CODE (TREE_TYPE (DECL_RESULT (current_function_decl))) != VOID_TYPE
13770                    && return_label != NULL_RTX)
13771             no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13772
13773           current_function_assigns_this = 0;
13774           current_function_just_assigned_this = 0;
13775           base_init_expr = NULL_TREE;
13776         }
13777       else if (DECL_CONSTRUCTOR_P (fndecl))
13778         {
13779           tree cond = NULL_TREE, thenclause = NULL_TREE;
13780           /* Allow constructor for a type to get a new instance of the object
13781              using `build_new'.  */
13782           tree abstract_virtuals = CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type);
13783           CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = NULL_TREE;
13784
13785           DECL_RETURNS_FIRST_ARG (fndecl) = 1;
13786
13787           if (flag_this_is_variable > 0)
13788             {
13789               cond = build_binary_op (EQ_EXPR,
13790                                       current_class_ptr, integer_zero_node, 1);
13791               thenclause = build_modify_expr (current_class_ptr, NOP_EXPR,
13792                                               build_new (NULL_TREE, current_class_type, void_type_node, 0));
13793             }
13794
13795           CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = abstract_virtuals;
13796
13797           start_sequence ();
13798
13799           if (flag_this_is_variable > 0)
13800             {
13801               expand_start_cond (cond, 0);
13802               expand_expr_stmt (thenclause);
13803               expand_end_cond ();
13804             }
13805
13806           /* Emit insns from `emit_base_init' which sets up virtual
13807              function table pointer(s).  */
13808           if (base_init_expr)
13809             {
13810               expand_expr_stmt (base_init_expr);
13811               base_init_expr = NULL_TREE;
13812             }
13813
13814           insns = get_insns ();
13815           end_sequence ();
13816
13817           /* This is where the body of the constructor begins.  */
13818
13819           emit_insns_after (insns, last_parm_cleanup_insn);
13820
13821           end_protect_partials ();
13822
13823           /* This is where the body of the constructor ends.  */
13824           expand_label (ctor_label);
13825           ctor_label = NULL_TREE;
13826
13827           if (call_poplevel)
13828             {
13829               decls = getdecls ();
13830               expand_end_bindings (decls, decls != NULL_TREE, 0);
13831               poplevel (decls != NULL_TREE, 1, 0);
13832             }
13833
13834           /* c_expand_return knows to return 'this' from a constructor.  */
13835           c_expand_return (NULL_TREE);
13836
13837           current_function_assigns_this = 0;
13838           current_function_just_assigned_this = 0;
13839         }
13840       else if (DECL_MAIN_P (fndecl))
13841         {
13842           /* Make it so that `main' always returns 0 by default.  */
13843 #ifdef VMS
13844           c_expand_return (integer_one_node);
13845 #else
13846           c_expand_return (integer_zero_node);
13847 #endif
13848         }
13849       else if (return_label != NULL_RTX
13850                && current_function_return_value == NULL_TREE
13851                && ! DECL_NAME (DECL_RESULT (current_function_decl)))
13852         no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13853
13854       if (flag_exceptions)
13855         expand_exception_blocks ();
13856
13857       /* If this function is supposed to return a value, ensure that
13858          we do not fall into the cleanups by mistake.  The end of our
13859          function will look like this:
13860          
13861          user code (may have return stmt somewhere)
13862          goto no_return_label
13863          cleanup_label:
13864          cleanups
13865          goto return_label
13866          no_return_label:
13867          NOTE_INSN_FUNCTION_END
13868          return_label:
13869          things for return
13870          
13871          If the user omits a return stmt in the USER CODE section, we
13872          will have a control path which reaches NOTE_INSN_FUNCTION_END.
13873          Otherwise, we won't.  */
13874       if (no_return_label)
13875         {
13876           DECL_CONTEXT (no_return_label) = fndecl;
13877           DECL_INITIAL (no_return_label) = error_mark_node;
13878           DECL_SOURCE_FILE (no_return_label) = input_filename;
13879           DECL_SOURCE_LINE (no_return_label) = lineno;
13880           expand_goto (no_return_label);
13881         }
13882
13883       if (cleanup_label)
13884         {
13885           /* Remove the binding contour which is used
13886              to catch cleanup-generated temporaries.  */
13887           expand_end_bindings (0, 0, 0);
13888           poplevel (0, 0, 0);
13889
13890           /* Emit label at beginning of cleanup code for parameters.  */
13891           emit_label (cleanup_label);
13892         }
13893
13894       /* Get return value into register if that's where it's supposed to be.  */
13895       if (original_result_rtx)
13896         fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
13897
13898       /* Finish building code that will trigger warnings if users forget
13899          to make their functions return values.  */
13900       if (no_return_label || cleanup_label)
13901         emit_jump (return_label);
13902       if (no_return_label)
13903         {
13904           /* We don't need to call `expand_*_return' here because we
13905              don't need any cleanups here--this path of code is only
13906              for error checking purposes.  */
13907           expand_label (no_return_label);
13908         }
13909
13910       /* Generate rtl for function exit.  */
13911       expand_function_end (input_filename, lineno, 1);
13912     }
13913   
13914   /* If we're processing a template, squirrel away the definition
13915      until we do an instantiation.  */
13916   if (processing_template_decl)
13917     {
13918       --minimal_parse_mode;
13919       DECL_SAVED_TREE (fndecl) = TREE_CHAIN (DECL_SAVED_TREE (fndecl));
13920       /* We have to save this value here in case
13921          maybe_end_member_template_processing decides to pop all the
13922          template parameters.  */
13923       in_template = 1;
13924     }
13925   else
13926     in_template = 0;
13927
13928   /* This must come after expand_function_end because cleanups might
13929      have declarations (from inline functions) that need to go into
13930      this function's blocks.  */
13931   if (current_binding_level->parm_flag != 1)
13932     my_friendly_abort (122);
13933   poplevel (1, 0, 1);
13934
13935   /* If this is a in-class inline definition, we may have to pop the
13936      bindings for the template parameters that we added in
13937      maybe_begin_member_template_processing when start_function was
13938      called.  */
13939   if (inclass_inline)
13940     maybe_end_member_template_processing ();
13941
13942   /* Reset scope for C++: if we were in the scope of a class,
13943      then when we finish this function, we are not longer so.
13944      This cannot be done until we know for sure that no more
13945      class members will ever be referenced in this function
13946      (i.e., calls to destructors).  */
13947   if (current_class_name)
13948     {
13949       ctype = current_class_type;
13950       pop_nested_class (1);
13951     }
13952
13953   /* Must mark the RESULT_DECL as being in this function.  */
13954   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
13955
13956   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
13957      to the FUNCTION_DECL node itself.  */
13958   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
13959
13960   if (!in_template)
13961     {
13962       int saved_flag_keep_inline_functions =
13963         flag_keep_inline_functions;
13964
13965       /* So we can tell if jump_optimize sets it to 1.  */
13966       can_reach_end = 0;
13967
13968       if (DECL_CONTEXT (fndecl) != NULL_TREE
13969           && hack_decl_function_context (fndecl))
13970         /* Trick rest_of_compilation into not deferring output of this
13971            function, even if it is inline, since the rtl_obstack for
13972            this function is the function_obstack of the enclosing
13973            function and will be deallocated when the enclosing
13974            function is gone.  See save_tree_status.  */
13975         flag_keep_inline_functions = 1;
13976
13977       /* Run the optimizers and output the assembler code for this
13978          function.  */
13979
13980       if (DECL_ARTIFICIAL (fndecl))
13981         {
13982           /* Do we really *want* to inline this synthesized method?  */
13983
13984           int save_fif = flag_inline_functions;
13985           flag_inline_functions = 1;
13986
13987           /* Turn off DECL_INLINE for the moment so function_cannot_inline_p
13988              will check our size.  */
13989           DECL_INLINE (fndecl) = 0;
13990
13991           rest_of_compilation (fndecl);
13992           flag_inline_functions = save_fif;
13993         }
13994       else
13995         rest_of_compilation (fndecl);
13996
13997       flag_keep_inline_functions = saved_flag_keep_inline_functions;
13998
13999       if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
14000         {
14001           /* Set DECL_EXTERNAL so that assemble_external will be called as
14002              necessary.  We'll clear it again in finish_file.  */
14003           if (! DECL_EXTERNAL (fndecl))
14004             DECL_NOT_REALLY_EXTERN (fndecl) = 1;
14005           DECL_EXTERNAL (fndecl) = 1;
14006           mark_inline_for_output (fndecl);
14007         }
14008
14009       if (ctype && TREE_ASM_WRITTEN (fndecl))
14010         note_debug_info_needed (ctype);
14011
14012       current_function_returns_null |= can_reach_end;
14013
14014       /* Since we don't normally go through c_expand_return for constructors,
14015          this normally gets the wrong value.
14016          Also, named return values have their return codes emitted after
14017          NOTE_INSN_FUNCTION_END, confusing jump.c.  */
14018       if (DECL_CONSTRUCTOR_P (fndecl)
14019           || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
14020         current_function_returns_null = 0;
14021
14022       if (TREE_THIS_VOLATILE (fndecl) && current_function_returns_null)
14023         cp_warning ("`noreturn' function `%D' does return", fndecl);
14024       else if ((warn_return_type || pedantic)
14025                && current_function_returns_null
14026                && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE)
14027         {
14028           /* If this function returns non-void and control can drop through,
14029              complain.  */
14030           cp_warning ("control reaches end of non-void function `%D'", fndecl);
14031         }
14032       /* With just -W, complain only if function returns both with
14033          and without a value.  */
14034       else if (extra_warnings
14035                && current_function_returns_value && current_function_returns_null)
14036         warning ("this function may return with or without a value");
14037     }
14038
14039   --function_depth;
14040
14041   /* Free all the tree nodes making up this function.  */
14042   /* Switch back to allocating nodes permanently
14043      until we start another function.  */
14044   if (! nested)
14045     permanent_allocation (1);
14046
14047   if (DECL_SAVED_INSNS (fndecl) == NULL_RTX)
14048     {
14049       tree t;
14050
14051       /* Stop pointing to the local nodes about to be freed.  */
14052       /* But DECL_INITIAL must remain nonzero so we know this
14053          was an actual function definition.  */
14054       DECL_INITIAL (fndecl) = error_mark_node;
14055       for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
14056         DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
14057     }
14058
14059   if (DECL_STATIC_CONSTRUCTOR (fndecl))
14060     static_ctors = perm_tree_cons (NULL_TREE, fndecl, static_ctors);
14061   if (DECL_STATIC_DESTRUCTOR (fndecl))
14062     static_dtors = perm_tree_cons (NULL_TREE, fndecl, static_dtors);
14063
14064   if (! nested)
14065     {
14066       /* Let the error reporting routines know that we're outside a
14067          function.  For a nested function, this value is used in
14068          pop_cp_function_context and then reset via pop_function_context.  */
14069       current_function_decl = NULL_TREE;
14070     }
14071
14072   named_label_uses = NULL;
14073   current_class_ptr = NULL_TREE;
14074   current_class_ref = NULL_TREE;
14075 }
14076 \f
14077 /* Create the FUNCTION_DECL for a function definition.
14078    DECLSPECS and DECLARATOR are the parts of the declaration;
14079    they describe the return type and the name of the function,
14080    but twisted together in a fashion that parallels the syntax of C.
14081
14082    This function creates a binding context for the function body
14083    as well as setting up the FUNCTION_DECL in current_function_decl.
14084
14085    Returns a FUNCTION_DECL on success.
14086
14087    If the DECLARATOR is not suitable for a function (it defines a datum
14088    instead), we return 0, which tells yyparse to report a parse error.
14089
14090    May return void_type_node indicating that this method is actually
14091    a friend.  See grokfield for more details.
14092
14093    Came here with a `.pushlevel' .
14094
14095    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14096    CHANGES TO CODE IN `grokfield'.  */
14097
14098 tree
14099 start_method (declspecs, declarator, attrlist)
14100      tree declarator, declspecs, attrlist;
14101 {
14102   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
14103                                 attrlist);
14104
14105   /* Something too ugly to handle.  */
14106   if (fndecl == NULL_TREE)
14107     return NULL_TREE;
14108
14109   /* Pass friends other than inline friend functions back.  */
14110   if (fndecl == void_type_node)
14111     return fndecl;
14112
14113   if (TREE_CODE (fndecl) != FUNCTION_DECL)
14114     /* Not a function, tell parser to report parse error.  */
14115     return NULL_TREE;
14116
14117   if (IS_SIGNATURE (current_class_type))
14118     IS_DEFAULT_IMPLEMENTATION (fndecl) = 1;
14119
14120   if (DECL_IN_AGGR_P (fndecl))
14121     {
14122       if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
14123         {
14124           if (DECL_CONTEXT (fndecl) 
14125               && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
14126             cp_error ("`%D' is already defined in class %s", fndecl,
14127                              TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
14128         }
14129       return void_type_node;
14130     }
14131
14132   check_template_shadow (fndecl);
14133
14134   DECL_THIS_INLINE (fndecl) = 1;
14135
14136   if (flag_default_inline)
14137     DECL_INLINE (fndecl) = 1;
14138
14139   /* We process method specializations in finish_struct_1.  */
14140   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
14141     fndecl = push_template_decl (fndecl);
14142
14143   /* We read in the parameters on the maybepermanent_obstack,
14144      but we won't be getting back to them until after we
14145      may have clobbered them.  So the call to preserve_data
14146      will keep them safe.  */
14147   preserve_data ();
14148
14149   if (! DECL_FRIEND_P (fndecl))
14150     {
14151       if (TREE_CHAIN (fndecl))
14152         {
14153           fndecl = copy_node (fndecl);
14154           TREE_CHAIN (fndecl) = NULL_TREE;
14155         }
14156
14157       if (DECL_CONSTRUCTOR_P (fndecl))
14158         {
14159           if (! grok_ctor_properties (current_class_type, fndecl))
14160             return void_type_node;
14161         }
14162       else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
14163         grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
14164     }
14165
14166   cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0, 0);
14167
14168   /* Make a place for the parms */
14169   pushlevel (0);
14170   current_binding_level->parm_flag = 1;
14171   
14172   DECL_IN_AGGR_P (fndecl) = 1;
14173   return fndecl;
14174 }
14175
14176 /* Go through the motions of finishing a function definition.
14177    We don't compile this method until after the whole class has
14178    been processed.
14179
14180    FINISH_METHOD must return something that looks as though it
14181    came from GROKFIELD (since we are defining a method, after all).
14182
14183    This is called after parsing the body of the function definition.
14184    STMTS is the chain of statements that makes up the function body.
14185
14186    DECL is the ..._DECL that `start_method' provided.  */
14187
14188 tree
14189 finish_method (decl)
14190      tree decl;
14191 {
14192   register tree fndecl = decl;
14193   tree old_initial;
14194
14195   register tree link;
14196
14197   if (decl == void_type_node)
14198     return decl;
14199
14200   old_initial = DECL_INITIAL (fndecl);
14201
14202   /* Undo the level for the parms (from start_method).
14203      This is like poplevel, but it causes nothing to be
14204      saved.  Saving information here confuses symbol-table
14205      output routines.  Besides, this information will
14206      be correctly output when this method is actually
14207      compiled.  */
14208
14209   /* Clear out the meanings of the local variables of this level;
14210      also record in each decl which block it belongs to.  */
14211
14212   for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
14213     {
14214       if (DECL_NAME (link) != NULL_TREE)
14215         pop_binding (DECL_NAME (link), link);
14216       my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
14217       DECL_CONTEXT (link) = NULL_TREE;
14218     }
14219
14220   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
14221                       (HOST_WIDE_INT) current_binding_level->level_chain,
14222                       current_binding_level->parm_flag,
14223                       current_binding_level->keep);
14224
14225   poplevel (0, 0, 0);
14226
14227   DECL_INITIAL (fndecl) = old_initial;
14228
14229   /* We used to check if the context of FNDECL was different from
14230      current_class_type as another way to get inside here.  This didn't work
14231      for String.cc in libg++.  */
14232   if (DECL_FRIEND_P (fndecl))
14233     {
14234       CLASSTYPE_INLINE_FRIENDS (current_class_type)
14235         = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
14236       decl = void_type_node;
14237     }
14238
14239   return decl;
14240 }
14241 \f
14242 /* Called when a new struct TYPE is defined.
14243    If this structure or union completes the type of any previous
14244    variable declaration, lay it out and output its rtl.  */
14245
14246 void
14247 hack_incomplete_structures (type)
14248      tree type;
14249 {
14250   tree *list;
14251
14252   if (current_binding_level->incomplete == NULL_TREE)
14253     return;
14254
14255   if (!type) /* Don't do this for class templates.  */
14256     return;
14257
14258   for (list = &current_binding_level->incomplete; *list; )
14259     {
14260       tree decl = TREE_VALUE (*list);
14261       if ((decl && TREE_TYPE (decl) == type)
14262           || (TREE_TYPE (decl)
14263               && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14264               && TREE_TYPE (TREE_TYPE (decl)) == type))
14265         {
14266           int toplevel = toplevel_bindings_p ();
14267           if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14268               && TREE_TYPE (TREE_TYPE (decl)) == type)
14269             layout_type (TREE_TYPE (decl));
14270           layout_decl (decl, 0);
14271           rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
14272           if (! toplevel)
14273             {
14274               tree cleanup;
14275               expand_decl (decl);
14276               cleanup = maybe_build_cleanup (decl);
14277               expand_decl_init (decl);
14278               if (! expand_decl_cleanup (decl, cleanup))
14279                 cp_error ("parser lost in parsing declaration of `%D'",
14280                           decl);
14281             }
14282           *list = TREE_CHAIN (*list);
14283         }
14284       else
14285         list = &TREE_CHAIN (*list);
14286     }
14287 }
14288
14289 /* If DECL is of a type which needs a cleanup, build that cleanup here.
14290    See build_delete for information about AUTO_DELETE.
14291
14292    Don't build these on the momentary obstack; they must live
14293    the life of the binding contour.  */
14294
14295 static tree
14296 maybe_build_cleanup_1 (decl, auto_delete)
14297      tree decl, auto_delete;
14298 {
14299   tree type = TREE_TYPE (decl);
14300   if (TYPE_NEEDS_DESTRUCTOR (type))
14301     {
14302       int temp = 0, flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
14303       tree rval;
14304
14305       if (TREE_CODE (decl) != PARM_DECL)
14306         temp = suspend_momentary ();
14307
14308       if (TREE_CODE (type) == ARRAY_TYPE)
14309         rval = decl;
14310       else
14311         {
14312           mark_addressable (decl);
14313           rval = build_unary_op (ADDR_EXPR, decl, 0);
14314         }
14315
14316       /* Optimize for space over speed here.  */
14317       if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14318           || flag_expensive_optimizations)
14319         flags |= LOOKUP_NONVIRTUAL;
14320
14321       rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
14322
14323       if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14324           && ! TYPE_HAS_DESTRUCTOR (type))
14325         rval = build_compound_expr (expr_tree_cons (NULL_TREE, rval,
14326                                                build_expr_list (NULL_TREE, build_vbase_delete (type, decl))));
14327
14328       if (TREE_CODE (decl) != PARM_DECL)
14329         resume_momentary (temp);
14330
14331       return rval;
14332     }
14333   return 0;
14334 }
14335
14336 /* If DECL is of a type which needs a cleanup, build that cleanup
14337    here.  The cleanup does free the storage with a call to delete.  */
14338
14339 tree
14340 maybe_build_cleanup_and_delete (decl)
14341      tree decl;
14342 {
14343   return maybe_build_cleanup_1 (decl, integer_three_node);
14344 }
14345
14346 /* If DECL is of a type which needs a cleanup, build that cleanup
14347    here.  The cleanup does not free the storage with a call a delete.  */
14348
14349 tree
14350 maybe_build_cleanup (decl)
14351      tree decl;
14352 {
14353   return maybe_build_cleanup_1 (decl, integer_two_node);
14354 }
14355 \f
14356 /* Expand a C++ expression at the statement level.
14357    This is needed to ferret out nodes which have UNKNOWN_TYPE.
14358    The C++ type checker should get all of these out when
14359    expressions are combined with other, type-providing, expressions,
14360    leaving only orphan expressions, such as:
14361
14362    &class::bar;         / / takes its address, but does nothing with it.  */
14363
14364 void
14365 cplus_expand_expr_stmt (exp)
14366      tree exp;
14367 {
14368   if (processing_template_decl)
14369     {
14370       add_tree (build_min_nt (EXPR_STMT, exp));
14371       return;
14372     }
14373
14374   /* Arrange for all temps to disappear.  */
14375   expand_start_target_temps ();
14376
14377   exp = require_complete_type_in_void (exp);
14378   
14379   if (TREE_CODE (exp) == FUNCTION_DECL)
14380     {
14381       cp_warning ("reference, not call, to function `%D'", exp);
14382       warning ("at this point in file");
14383     }
14384
14385 #if 0
14386   /* We should do this eventually, but right now this causes regex.o from
14387      libg++ to miscompile, and tString to core dump.  */
14388   exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
14389 #endif
14390
14391   /* Strip unused implicit INDIRECT_REFs of references.  */
14392   if (TREE_CODE (exp) == INDIRECT_REF
14393       && TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 0))) == REFERENCE_TYPE)
14394     exp = TREE_OPERAND (exp, 0);
14395
14396   /* If we don't do this, we end up down inside expand_expr
14397      trying to do TYPE_MODE on the ERROR_MARK, and really
14398      go outside the bounds of the type.  */
14399   if (exp != error_mark_node)
14400     expand_expr_stmt (break_out_cleanups (exp));
14401
14402   /* Clean up any pending cleanups.  This happens when a function call
14403      returns a cleanup-needing value that nobody uses.  */
14404   expand_end_target_temps ();
14405 }
14406
14407 /* When a stmt has been parsed, this function is called.
14408
14409    Currently, this function only does something within a
14410    constructor's scope: if a stmt has just assigned to this,
14411    and we are in a derived class, we call `emit_base_init'.  */
14412
14413 void
14414 finish_stmt ()
14415 {
14416   extern struct nesting *cond_stack, *loop_stack, *case_stack;
14417
14418   
14419   if (current_function_assigns_this
14420       || ! current_function_just_assigned_this)
14421     return;
14422   if (DECL_CONSTRUCTOR_P (current_function_decl))
14423     {
14424       /* Constructors must wait until we are out of control
14425          zones before calling base constructors.  */
14426       if (cond_stack || loop_stack || case_stack)
14427         return;
14428       expand_expr_stmt (base_init_expr);
14429       check_base_init (current_class_type);
14430     }
14431   current_function_assigns_this = 1;
14432 }
14433
14434 /* Change a static member function definition into a FUNCTION_TYPE, instead
14435    of the METHOD_TYPE that we create when it's originally parsed.
14436
14437    WARNING: DO NOT pass &TREE_TYPE (decl) to FN or &TYPE_ARG_TYPES
14438    (TREE_TYPE (decl)) to ARGTYPES, as doing so will corrupt the types of
14439    other decls.  Either pass the addresses of local variables or NULL.  */
14440
14441 void
14442 revert_static_member_fn (decl, fn, argtypes)
14443      tree *decl, *fn, *argtypes;
14444 {
14445   tree tmp;
14446   tree function = fn ? *fn : TREE_TYPE (*decl);
14447   tree args = argtypes ? *argtypes : TYPE_ARG_TYPES (function);
14448
14449   if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args))) 
14450       != TYPE_UNQUALIFIED)
14451     cp_error ("static member function `%#D' declared with type qualifiers", 
14452               *decl);
14453
14454   args = TREE_CHAIN (args);
14455   tmp = build_function_type (TREE_TYPE (function), args);
14456   tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
14457   tmp = build_exception_variant (tmp,
14458                                  TYPE_RAISES_EXCEPTIONS (function));
14459   TREE_TYPE (*decl) = tmp;
14460   if (DECL_ARGUMENTS (*decl))
14461     DECL_ARGUMENTS (*decl) = TREE_CHAIN (DECL_ARGUMENTS (*decl));
14462   DECL_STATIC_FUNCTION_P (*decl) = 1;
14463   if (fn)
14464     *fn = tmp;
14465   if (argtypes)
14466     *argtypes = args;
14467 }
14468
14469 int
14470 id_in_current_class (id)
14471      tree id;
14472 {
14473   return !!purpose_member (id, class_binding_level->class_shadowed);
14474 }
14475
14476 struct cp_function
14477 {
14478   int returns_value;
14479   int returns_null;
14480   int assigns_this;
14481   int just_assigned_this;
14482   int parms_stored;
14483   int temp_name_counter;
14484   tree named_labels;
14485   struct named_label_list *named_label_uses;
14486   tree shadowed_labels;
14487   tree ctor_label;
14488   tree dtor_label;
14489   rtx last_dtor_insn;
14490   rtx last_parm_cleanup_insn;
14491   tree base_init_list;
14492   tree member_init_list;
14493   tree base_init_expr;
14494   tree current_class_ptr;
14495   tree current_class_ref;
14496   rtx result_rtx;
14497   struct cp_function *next;
14498   struct binding_level *binding_level;
14499   int static_labelno;
14500 };
14501
14502 static struct cp_function *cp_function_chain;
14503
14504 extern int temp_name_counter;
14505
14506 /* Save and reinitialize the variables
14507    used during compilation of a C++ function.  */
14508
14509 void
14510 push_cp_function_context (context)
14511      tree context;
14512 {
14513   struct cp_function *p
14514     = (struct cp_function *) xmalloc (sizeof (struct cp_function));
14515
14516   push_function_context_to (context);
14517
14518   p->next = cp_function_chain;
14519   cp_function_chain = p;
14520
14521   p->named_labels = named_labels;
14522   p->named_label_uses = named_label_uses;
14523   p->shadowed_labels = shadowed_labels;
14524   p->returns_value = current_function_returns_value;
14525   p->returns_null = current_function_returns_null;
14526   p->binding_level = current_binding_level;
14527   p->ctor_label = ctor_label;
14528   p->dtor_label = dtor_label;
14529   p->last_dtor_insn = last_dtor_insn;
14530   p->last_parm_cleanup_insn = last_parm_cleanup_insn;
14531   p->assigns_this = current_function_assigns_this;
14532   p->just_assigned_this = current_function_just_assigned_this;
14533   p->parms_stored = current_function_parms_stored;
14534   p->result_rtx = original_result_rtx;
14535   p->base_init_expr = base_init_expr;
14536   p->temp_name_counter = temp_name_counter;
14537   p->base_init_list = current_base_init_list;
14538   p->member_init_list = current_member_init_list;
14539   p->current_class_ptr = current_class_ptr;
14540   p->current_class_ref = current_class_ref;
14541   p->static_labelno = static_labelno;
14542 }
14543
14544 /* Restore the variables used during compilation of a C++ function.  */
14545
14546 void
14547 pop_cp_function_context (context)
14548      tree context;
14549 {
14550   struct cp_function *p = cp_function_chain;
14551   tree link;
14552
14553   /* Bring back all the labels that were shadowed.  */
14554   for (link = shadowed_labels; link; link = TREE_CHAIN (link))
14555     if (DECL_NAME (TREE_VALUE (link)) != 0)
14556       SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link)),
14557                                   TREE_VALUE (link));
14558
14559   pop_function_context_from (context);
14560
14561   cp_function_chain = p->next;
14562
14563   named_labels = p->named_labels;
14564   named_label_uses = p->named_label_uses;
14565   shadowed_labels = p->shadowed_labels;
14566   current_function_returns_value = p->returns_value;
14567   current_function_returns_null = p->returns_null;
14568   current_binding_level = p->binding_level;
14569   ctor_label = p->ctor_label;
14570   dtor_label = p->dtor_label;
14571   last_dtor_insn = p->last_dtor_insn;
14572   last_parm_cleanup_insn = p->last_parm_cleanup_insn;
14573   current_function_assigns_this = p->assigns_this;
14574   current_function_just_assigned_this = p->just_assigned_this;
14575   current_function_parms_stored = p->parms_stored;
14576   original_result_rtx = p->result_rtx;
14577   base_init_expr = p->base_init_expr;
14578   temp_name_counter = p->temp_name_counter;
14579   current_base_init_list = p->base_init_list;
14580   current_member_init_list = p->member_init_list;
14581   current_class_ptr = p->current_class_ptr;
14582   current_class_ref = p->current_class_ref;
14583   static_labelno = p->static_labelno;
14584
14585   free (p);
14586 }
14587
14588 int
14589 in_function_p ()
14590 {
14591   return function_depth != 0;
14592 }