OSDN Git Service

* decl.c (init_decl_processing): Add `signed' type as a synonym
[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 (! same_type_p (newtype, 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       /* Only functions have DECL_BEFRIENDING_CLASSES.  */
3331       if (TREE_CODE (newdecl) == FUNCTION_DECL
3332           || DECL_FUNCTION_TEMPLATE_P (newdecl))
3333         DECL_BEFRIENDING_CLASSES (newdecl)
3334           = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3335                      DECL_BEFRIENDING_CLASSES (olddecl));
3336     }
3337
3338   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3339     {
3340       if (DECL_TEMPLATE_INSTANTIATION (olddecl) 
3341           && !DECL_TEMPLATE_INSTANTIATION (newdecl)) 
3342         {
3343           /* If newdecl is not a specialization, then it is not a
3344              template-related function at all.  And that means that we
3345              shoud have exited above, returning 0.  */
3346           my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3347                               0);
3348
3349           if (TREE_USED (olddecl)) 
3350             /* From [temp.expl.spec]:
3351                
3352                If a template, a member template or the member of a class
3353                template is explicitly specialized then that
3354                specialization shall be declared before the first use of
3355                that specialization that would cause an implicit
3356                instantiation to take place, in every translation unit in
3357                which such a use occurs.  */
3358             cp_error ("explicit specialization of %D after first use", 
3359                       olddecl);
3360
3361           SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3362         }
3363       DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3364
3365       /* If either decl says `inline', this fn is inline, unless its
3366          definition was passed already.  */
3367       if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3368         DECL_INLINE (olddecl) = 1;
3369       DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3370
3371       if (! types_match)
3372         {
3373           DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3374           DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3375           DECL_RTL (olddecl) = DECL_RTL (newdecl);
3376         }
3377       if (! types_match || new_defines_function)
3378         {
3379           /* These need to be copied so that the names are available.  */
3380           DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3381           DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
3382         }
3383       if (new_defines_function)
3384         /* If defining a function declared with other language
3385            linkage, use the previously declared language linkage.  */
3386         DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3387       else
3388         {
3389           /* If redeclaring a builtin function, and not a definition,
3390              it stays built in.  */
3391           if (DECL_BUILT_IN (olddecl))
3392             {
3393               DECL_BUILT_IN (newdecl) = 1;
3394               DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
3395               /* If we're keeping the built-in definition, keep the rtl,
3396                  regardless of declaration matches.  */
3397               DECL_RTL (newdecl) = DECL_RTL (olddecl);
3398             }
3399           else
3400             DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
3401
3402           DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
3403           if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
3404             /* Previously saved insns go together with
3405                the function's previous definition.  */
3406             DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3407           /* Don't clear out the arguments if we're redefining a function.  */
3408           if (DECL_ARGUMENTS (olddecl))
3409             DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3410         }
3411       if (DECL_LANG_SPECIFIC (olddecl))
3412         DECL_MAIN_VARIANT (newdecl) = DECL_MAIN_VARIANT (olddecl);
3413     }
3414
3415   if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3416     {
3417       NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3418     }
3419
3420   /* Now preserve various other info from the definition.  */
3421   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3422   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3423   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
3424   DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
3425
3426   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3427     {
3428       int function_size;
3429       struct lang_decl *ol = DECL_LANG_SPECIFIC (olddecl);
3430       struct lang_decl *nl = DECL_LANG_SPECIFIC (newdecl);
3431
3432       function_size = sizeof (struct tree_decl);
3433
3434       bcopy ((char *) newdecl + sizeof (struct tree_common),
3435              (char *) olddecl + sizeof (struct tree_common),
3436              function_size - sizeof (struct tree_common));
3437
3438       /* Can we safely free the storage used by newdecl?  */
3439
3440 #define ROUND(x) ((x + obstack_alignment_mask (&permanent_obstack)) \
3441                   & ~ obstack_alignment_mask (&permanent_obstack))
3442
3443       if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3444         {
3445           /* If newdecl is a template instantiation, it is possible that
3446              the following sequence of events has occurred:
3447
3448              o A friend function was declared in a class template.  The
3449              class template was instantiated.  
3450
3451              o The instantiation of the friend declaration was 
3452              recorded on the instantiation list, and is newdecl.  
3453
3454              o Later, however, instantiate_class_template called pushdecl
3455              on the newdecl to perform name injection.  But, pushdecl in
3456              turn called duplicate_decls when it discovered that another
3457              declaration of a global function with the same name already
3458              existed. 
3459
3460              o Here, in duplicate_decls, we decided to clobber newdecl.
3461
3462              If we're going to do that, we'd better make sure that
3463              olddecl, and not newdecl, is on the list of
3464              instantiations so that if we try to do the instantiation
3465              again we won't get the clobbered declaration.  */
3466
3467           tree tmpl = DECL_TI_TEMPLATE (newdecl); 
3468           tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); 
3469
3470           for (; decls; decls = TREE_CHAIN (decls))
3471             if (TREE_VALUE (decls) == newdecl)
3472               TREE_VALUE (decls) = olddecl;
3473         }
3474
3475       if (((char *)newdecl + ROUND (function_size) == (char *)nl
3476            && ((char *)newdecl + ROUND (function_size)
3477                + ROUND (sizeof (struct lang_decl))
3478                == obstack_next_free (&permanent_obstack)))
3479           || ((char *)newdecl + ROUND (function_size)
3480               == obstack_next_free (&permanent_obstack)))
3481         {
3482           DECL_MAIN_VARIANT (newdecl) = olddecl;
3483           DECL_LANG_SPECIFIC (olddecl) = ol;
3484           bcopy ((char *)nl, (char *)ol, sizeof (struct lang_decl));
3485
3486           obstack_free (&permanent_obstack, newdecl);
3487         }
3488       else if (LANG_DECL_PERMANENT (ol) && ol != nl)
3489         {
3490           if (DECL_MAIN_VARIANT (olddecl) == olddecl)
3491             {
3492               /* Save these lang_decls that would otherwise be lost.  */
3493               extern tree free_lang_decl_chain;
3494               tree free_lang_decl = (tree) ol;
3495
3496               if (DECL_LANG_SPECIFIC (olddecl) == ol)
3497                 abort ();
3498
3499               TREE_CHAIN (free_lang_decl) = free_lang_decl_chain;
3500               free_lang_decl_chain = free_lang_decl;
3501             }
3502           else
3503             {
3504               /* Storage leak.  */;
3505             }
3506         }
3507     }
3508   else
3509     {
3510       bcopy ((char *) newdecl + sizeof (struct tree_common),
3511              (char *) olddecl + sizeof (struct tree_common),
3512              sizeof (struct tree_decl) - sizeof (struct tree_common)
3513              + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3514     }
3515
3516   DECL_UID (olddecl) = olddecl_uid;
3517   if (olddecl_friend)
3518     DECL_FRIEND_P (olddecl) = 1;
3519
3520   /* NEWDECL contains the merged attribute lists.
3521      Update OLDDECL to be the same.  */
3522   DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3523
3524   return 1;
3525 }
3526
3527 /* Record a decl-node X as belonging to the current lexical scope.
3528    Check for errors (such as an incompatible declaration for the same
3529    name already seen in the same scope).
3530
3531    Returns either X or an old decl for the same name.
3532    If an old decl is returned, it may have been smashed
3533    to agree with what X says.  */
3534
3535 tree
3536 pushdecl (x)
3537      tree x;
3538 {
3539   register tree t;
3540   register tree name = DECL_ASSEMBLER_NAME (x);
3541   int need_new_binding = 1;
3542
3543   if (DECL_TEMPLATE_PARM_P (x))
3544     /* Template parameters have no context; they are not X::T even
3545        when declared within a class or namespace.  */
3546     ;
3547   else
3548     {
3549       if (current_function_decl && x != current_function_decl
3550           /* A local declaration for a function doesn't constitute
3551              nesting.  */
3552           && (TREE_CODE (x) != FUNCTION_DECL || DECL_INITIAL (x))
3553           /* Don't change DECL_CONTEXT of virtual methods.  */
3554           && (TREE_CODE (x) != FUNCTION_DECL || !DECL_VIRTUAL_P (x))
3555           && !DECL_CONTEXT (x))
3556         DECL_CONTEXT (x) = current_function_decl;
3557       if (!DECL_CONTEXT (x))
3558         DECL_CONTEXT (x) = FROB_CONTEXT (current_namespace);
3559     }
3560
3561   /* Type are looked up using the DECL_NAME, as that is what the rest of the
3562      compiler wants to use.  */
3563   if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
3564       || TREE_CODE (x) == NAMESPACE_DECL)
3565     name = DECL_NAME (x);
3566
3567   if (name)
3568     {
3569 #if 0
3570       /* Not needed...see below.  */
3571       char *file;
3572       int line;
3573 #endif
3574       if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3575         name = TREE_OPERAND (name, 0);
3576       
3577       /* Namespace-scoped variables are not found in the current level. */
3578       if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x))
3579         t = namespace_binding (name, DECL_CONTEXT (x));
3580       else
3581         t = lookup_name_current_level (name);
3582       if (t == error_mark_node)
3583         {
3584           /* error_mark_node is 0 for a while during initialization!  */
3585           t = NULL_TREE;
3586           cp_error_at ("`%#D' used prior to declaration", x);
3587         }
3588
3589       else if (t != NULL_TREE)
3590         {
3591 #if 0
3592           /* This is turned off until I have time to do it right (bpk).  */
3593           /* With the code below that uses it...  */
3594           file = DECL_SOURCE_FILE (t);
3595           line = DECL_SOURCE_LINE (t);
3596 #endif
3597           if (TREE_CODE (t) == PARM_DECL)
3598             {
3599               if (DECL_CONTEXT (t) == NULL_TREE)
3600                 fatal ("parse errors have confused me too much");
3601
3602               /* Check for duplicate params.  */
3603               if (duplicate_decls (x, t))
3604                 return t;
3605             }
3606           else if (((TREE_CODE (x) == FUNCTION_DECL && DECL_LANGUAGE (x) == lang_c)
3607                     || DECL_FUNCTION_TEMPLATE_P (x))
3608                    && is_overloaded_fn (t))
3609             /* Don't do anything just yet. */;
3610           else if (t == wchar_decl_node)
3611             {
3612               if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
3613                 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
3614
3615               /* Throw away the redeclaration.  */
3616               return t;
3617             }
3618           else if (TREE_CODE (t) != TREE_CODE (x))
3619             {
3620               if (duplicate_decls (x, t))
3621                 return t;
3622             }
3623           else if (duplicate_decls (x, t))
3624             {
3625 #if 0
3626               /* This is turned off until I have time to do it right (bpk).  */
3627
3628               /* Also warn if they did a prototype with `static' on it, but
3629                  then later left the `static' off.  */
3630               if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
3631                 {
3632                   if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3633                     return t;
3634
3635                   if (extra_warnings)
3636                     {
3637                       cp_warning ("`static' missing from declaration of `%D'",
3638                                   t);
3639                       warning_with_file_and_line (file, line,
3640                                                   "previous declaration of `%s'",
3641                                                   decl_as_string (t, 0));
3642                     }
3643
3644                   /* Now fix things so it'll do what they expect.  */
3645                   if (current_function_decl)
3646                     TREE_PUBLIC (current_function_decl) = 0;
3647                 }
3648               /* Due to interference in memory reclamation (X may be
3649                  obstack-deallocated at this point), we must guard against
3650                  one really special case.  [jason: This should be handled
3651                  by start_function]  */
3652               if (current_function_decl == x)
3653                 current_function_decl = t;
3654 #endif
3655               if (TREE_CODE (t) == TYPE_DECL)
3656                 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
3657               else if (TREE_CODE (t) == FUNCTION_DECL)
3658                 check_default_args (t);
3659
3660               return t;
3661             }
3662           else if (DECL_MAIN_P (x))
3663             {
3664               /* A redeclaration of main, but not a duplicate of the
3665                  previous one. 
3666
3667                  [basic.start.main]
3668
3669                  This function shall not be overloaded.  */
3670               cp_error_at ("invalid redeclaration of `%D'", t);
3671               cp_error ("as `%D'", x);
3672               /* We don't try to push this declaration since that
3673                  causes a crash.  */
3674               return x;
3675             }
3676         }
3677
3678       check_template_shadow (x);
3679
3680       /* If this is a function conjured up by the backend, massage it
3681          so it looks friendly.  */
3682       if (TREE_CODE (x) == FUNCTION_DECL
3683           && ! DECL_LANG_SPECIFIC (x))
3684         {
3685           retrofit_lang_decl (x);
3686           DECL_LANGUAGE (x) = lang_c;
3687         }
3688
3689       if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_FUNCTION_MEMBER_P (x))
3690         {
3691           t = push_overloaded_decl (x, PUSH_LOCAL);
3692           if (t != x || DECL_LANGUAGE (x) == lang_c)
3693             return t;
3694           if (!namespace_bindings_p ())
3695             /* We do not need to create a binding for this name;
3696                push_overloaded_decl will have already done so if
3697                necessary.  */
3698             need_new_binding = 0;
3699         }
3700       else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
3701         return push_overloaded_decl (x, PUSH_GLOBAL);
3702
3703       /* If declaring a type as a typedef, copy the type (unless we're
3704          at line 0), and install this TYPE_DECL as the new type's typedef
3705          name.  See the extensive comment in ../c-decl.c (pushdecl). */
3706       if (TREE_CODE (x) == TYPE_DECL)
3707         {
3708           tree type = TREE_TYPE (x);
3709           if (DECL_SOURCE_LINE (x) == 0)
3710             {
3711               if (TYPE_NAME (type) == 0)
3712                 TYPE_NAME (type) = x;
3713             }
3714           else if (type != error_mark_node && TYPE_NAME (type) != x
3715                    /* We don't want to copy the type when all we're
3716                       doing is making a TYPE_DECL for the purposes of
3717                       inlining.  */
3718                    && (!TYPE_NAME (type) 
3719                        || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
3720             {
3721               push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
3722
3723               DECL_ORIGINAL_TYPE (x) = type;
3724               type = build_type_copy (type);
3725               TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
3726               TYPE_NAME (type) = x;
3727               TREE_TYPE (x) = type;
3728
3729               pop_obstacks ();
3730             }
3731
3732           if (type != error_mark_node
3733               && TYPE_NAME (type)
3734               && TYPE_IDENTIFIER (type))
3735             set_identifier_type_value_with_scope (DECL_NAME (x), type, 
3736                                                   current_binding_level);
3737
3738         }
3739
3740       /* Multiple external decls of the same identifier ought to match.
3741
3742          We get warnings about inline functions where they are defined.
3743          We get warnings about other functions from push_overloaded_decl.
3744          
3745          Avoid duplicate warnings where they are used.  */
3746       if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
3747         {
3748           tree decl;
3749
3750           if (IDENTIFIER_NAMESPACE_VALUE (name) != NULL_TREE
3751               && (DECL_EXTERNAL (IDENTIFIER_NAMESPACE_VALUE (name))
3752                   || TREE_PUBLIC (IDENTIFIER_NAMESPACE_VALUE (name))))
3753             decl = IDENTIFIER_NAMESPACE_VALUE (name);
3754           else
3755             decl = NULL_TREE;
3756
3757           if (decl
3758               /* If different sort of thing, we already gave an error.  */
3759               && TREE_CODE (decl) == TREE_CODE (x)
3760               && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
3761             {
3762               cp_pedwarn ("type mismatch with previous external decl", x);
3763               cp_pedwarn_at ("previous external decl of `%#D'", decl);
3764             }
3765         }
3766
3767       /* This name is new in its binding level.
3768          Install the new declaration and return it.  */
3769       if (namespace_bindings_p ())
3770         {
3771           /* Install a global value.  */
3772
3773           /* If the first global decl has external linkage,
3774              warn if we later see static one.  */
3775           if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
3776             TREE_PUBLIC (name) = 1;
3777
3778           if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
3779                 && t != NULL_TREE))
3780             {
3781               if (TREE_CODE (x) == FUNCTION_DECL)
3782                 my_friendly_assert 
3783                   ((IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
3784                   || (IDENTIFIER_GLOBAL_VALUE (name) == x), 378);
3785               SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
3786             }
3787
3788           /* Don't forget if the function was used via an implicit decl.  */
3789           if (IDENTIFIER_IMPLICIT_DECL (name)
3790               && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
3791             TREE_USED (x) = 1;
3792
3793           /* Don't forget if its address was taken in that way.  */
3794           if (IDENTIFIER_IMPLICIT_DECL (name)
3795               && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
3796             TREE_ADDRESSABLE (x) = 1;
3797
3798           /* Warn about mismatches against previous implicit decl.  */
3799           if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
3800               /* If this real decl matches the implicit, don't complain.  */
3801               && ! (TREE_CODE (x) == FUNCTION_DECL
3802                     && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
3803             cp_warning
3804               ("`%D' was previously implicitly declared to return `int'", x);
3805
3806           /* If new decl is `static' and an `extern' was seen previously,
3807              warn about it.  */
3808           if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
3809             warn_extern_redeclared_static (x, t);
3810         }
3811       else
3812         {
3813           /* Here to install a non-global value.  */
3814           tree oldlocal = IDENTIFIER_VALUE (name);
3815           tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
3816
3817           if (need_new_binding)
3818             {
3819               push_local_binding (name, x, 0);
3820               /* Because push_local_binding will hook X on to the
3821                  current_binding_level's name list, we don't want to
3822                  do that again below.  */
3823               need_new_binding = 0;
3824             }
3825
3826           /* If this is a TYPE_DECL, push it into the type value slot.  */
3827           if (TREE_CODE (x) == TYPE_DECL)
3828             set_identifier_type_value_with_scope (name, TREE_TYPE (x), 
3829                                                   current_binding_level);
3830
3831           /* Clear out any TYPE_DECL shadowed by a namespace so that
3832              we won't think this is a type.  The C struct hack doesn't
3833              go through namespaces.  */
3834           if (TREE_CODE (x) == NAMESPACE_DECL)
3835             set_identifier_type_value_with_scope (name, NULL_TREE, 
3836                                                   current_binding_level);
3837
3838           /* If this is an extern function declaration, see if we
3839              have a global definition or declaration for the function.  */
3840           if (oldlocal == NULL_TREE
3841               && DECL_EXTERNAL (x)
3842               && oldglobal != NULL_TREE
3843               && TREE_CODE (x) == FUNCTION_DECL
3844               && TREE_CODE (oldglobal) == FUNCTION_DECL)
3845             {
3846               /* We have one.  Their types must agree.  */
3847               if (decls_match (x, oldglobal))
3848                 /* OK */;
3849               else
3850                 {
3851                   cp_warning ("extern declaration of `%#D' doesn't match", x);
3852                   cp_warning_at ("global declaration `%#D'", oldglobal);
3853                 }
3854             }
3855           /* If we have a local external declaration,
3856              and no file-scope declaration has yet been seen,
3857              then if we later have a file-scope decl it must not be static.  */
3858           if (oldlocal == NULL_TREE
3859               && oldglobal == NULL_TREE
3860               && DECL_EXTERNAL (x)
3861               && TREE_PUBLIC (x))
3862             TREE_PUBLIC (name) = 1;
3863
3864           if (DECL_FROM_INLINE (x))
3865             /* Inline decls shadow nothing.  */;
3866
3867           /* Warn if shadowing an argument at the top level of the body.  */
3868           else if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
3869               && TREE_CODE (oldlocal) == PARM_DECL
3870               && TREE_CODE (x) != PARM_DECL)
3871             {
3872               /* Go to where the parms should be and see if we
3873                  find them there.  */
3874               struct binding_level *b = current_binding_level->level_chain;
3875
3876               if (cleanup_label)
3877                 b = b->level_chain;
3878
3879               /* ARM $8.3 */
3880               if (b->parm_flag == 1)
3881                 cp_error ("declaration of `%#D' shadows a parameter", name);
3882             }
3883           else if (warn_shadow && oldlocal != NULL_TREE
3884                    && current_binding_level->is_for_scope
3885                    && !DECL_DEAD_FOR_LOCAL (oldlocal))
3886             {
3887               warning ("variable `%s' shadows local",
3888                        IDENTIFIER_POINTER (name));
3889               cp_warning_at ("  this is the shadowed declaration", oldlocal);
3890             }              
3891           /* Maybe warn if shadowing something else.  */
3892           else if (warn_shadow && !DECL_EXTERNAL (x)
3893                    /* No shadow warnings for internally generated vars.  */
3894                    && ! DECL_ARTIFICIAL (x)
3895                    /* No shadow warnings for vars made for inlining.  */
3896                    && ! DECL_FROM_INLINE (x))
3897             {
3898               char *warnstring = NULL;
3899
3900               if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
3901                 warnstring = "declaration of `%s' shadows a parameter";
3902               else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
3903                        && current_class_ptr
3904                        && !TREE_STATIC (name))
3905                 warnstring = "declaration of `%s' shadows a member of `this'";
3906               else if (oldlocal != NULL_TREE)
3907                 warnstring = "declaration of `%s' shadows previous local";
3908               else if (oldglobal != NULL_TREE)
3909                 /* XXX shadow warnings in outer-more namespaces */
3910                 warnstring = "declaration of `%s' shadows global declaration";
3911
3912               if (warnstring)
3913                 warning (warnstring, IDENTIFIER_POINTER (name));
3914             }
3915         }
3916
3917       if (TREE_CODE (x) == FUNCTION_DECL)
3918         check_default_args (x);
3919
3920       /* Keep count of variables in this level with incomplete type.  */
3921       if (TREE_CODE (x) == VAR_DECL
3922           && TREE_TYPE (x) != error_mark_node
3923           && ((TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
3924                && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
3925               /* RTTI TD entries are created while defining the type_info.  */
3926               || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
3927                   && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
3928         current_binding_level->incomplete 
3929           = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
3930     }
3931
3932   if (need_new_binding)
3933     {
3934       /* Put decls on list in reverse order.
3935          We will reverse them later if necessary.  */
3936       TREE_CHAIN (x) = current_binding_level->names;
3937       current_binding_level->names = x;
3938       if (! (current_binding_level != global_binding_level 
3939              || TREE_PERMANENT (x)))
3940         my_friendly_abort (124);
3941     }
3942
3943   return x;
3944 }
3945
3946 /* Same as pushdecl, but define X in binding-level LEVEL.  We rely on the
3947    caller to set DECL_CONTEXT properly.  */
3948
3949 static tree
3950 pushdecl_with_scope (x, level)
3951      tree x;
3952      struct binding_level *level;
3953 {
3954   register struct binding_level *b;
3955   tree function_decl = current_function_decl;
3956
3957   current_function_decl = NULL_TREE;
3958   if (level->parm_flag == 2)
3959     {
3960       b = class_binding_level;
3961       class_binding_level = level;
3962       pushdecl_class_level (x);
3963       class_binding_level = b;
3964     }
3965   else
3966     {
3967       b = current_binding_level;
3968       current_binding_level = level;
3969       x = pushdecl (x);
3970       current_binding_level = b;
3971     }
3972   current_function_decl = function_decl;
3973   return x;
3974 }
3975
3976 /* Like pushdecl, only it places X in the current namespace,
3977    if appropriate.  */
3978
3979 tree
3980 pushdecl_namespace_level (x)
3981      tree x;
3982 {
3983   register struct binding_level *b = inner_binding_level;
3984   register tree t;
3985
3986   t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
3987
3988   /* Now, the type_shadowed stack may screw us.  Munge it so it does
3989      what we want.  */
3990   if (TREE_CODE (x) == TYPE_DECL)
3991     {
3992       tree name = DECL_NAME (x);
3993       tree newval;
3994       tree *ptr = (tree *)0;
3995       for (; b != global_binding_level; b = b->level_chain)
3996         {
3997           tree shadowed = b->type_shadowed;
3998           for (; shadowed; shadowed = TREE_CHAIN (shadowed))
3999             if (TREE_PURPOSE (shadowed) == name)
4000               {
4001                 ptr = &TREE_VALUE (shadowed);
4002                 /* Can't break out of the loop here because sometimes
4003                    a binding level will have duplicate bindings for
4004                    PT names.  It's gross, but I haven't time to fix it.  */
4005               }
4006         }
4007       newval = TREE_TYPE (x);
4008       if (ptr == (tree *)0)
4009         {
4010           /* @@ This shouldn't be needed.  My test case "zstring.cc" trips
4011              up here if this is changed to an assertion.  --KR  */
4012           SET_IDENTIFIER_TYPE_VALUE (name, newval);
4013         }
4014       else
4015         {
4016           *ptr = newval;
4017         }
4018     }
4019   return t;
4020 }
4021
4022 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4023    if appropriate.  */
4024
4025 tree
4026 pushdecl_top_level (x)
4027      tree x;
4028 {
4029   tree cur_namespace = current_namespace;
4030   current_namespace = global_namespace;
4031   x = pushdecl_namespace_level (x);
4032   current_namespace = cur_namespace;
4033   return x;
4034 }
4035
4036 /* Make the declaration of X appear in CLASS scope.  */
4037
4038 void
4039 pushdecl_class_level (x)
4040      tree x;
4041 {
4042   /* Don't use DECL_ASSEMBLER_NAME here!  Everything that looks in class
4043      scope looks for the pre-mangled name.  */
4044   register tree name = DECL_NAME (x);
4045
4046   if (name)
4047     {
4048       if (TYPE_BEING_DEFINED (current_class_type))
4049         {
4050           /* A name N used in a class S shall refer to the same declaration
4051              in its context and when re-evaluated in the completed scope of S.
4052              Types, enums, and static vars are checked here; other
4053              members are checked in finish_struct.  */
4054           tree icv = IDENTIFIER_CLASS_VALUE (name);
4055
4056           /* This should match check_member_decl_is_same_in_complete_scope.  */
4057           if (icv && icv != x
4058               && flag_optional_diags
4059               /* Don't complain about inherited names.  */
4060               && id_in_current_class (name)
4061               /* Or shadowed tags.  */
4062               && !(DECL_DECLARES_TYPE_P (icv)
4063                    && DECL_CONTEXT (icv) == current_class_type))
4064             {
4065               cp_pedwarn ("declaration of identifier `%D' as `%#D'", name, x);
4066               cp_pedwarn_at ("conflicts with previous use in class as `%#D'",
4067                              icv);
4068             }
4069
4070           check_template_shadow (x);
4071         }
4072
4073       push_class_level_binding (name, x);
4074       if (TREE_CODE (x) == TYPE_DECL)
4075         set_identifier_type_value (name, TREE_TYPE (x));
4076     }
4077 }
4078
4079 #if 0
4080 /* This function is used to push the mangled decls for nested types into
4081    the appropriate scope.  Previously pushdecl_top_level was used, but that
4082    is incorrect for members of local classes.  */
4083
4084 void
4085 pushdecl_nonclass_level (x)
4086      tree x;
4087 {
4088   struct binding_level *b = current_binding_level;
4089
4090   my_friendly_assert (b->parm_flag != 2, 180);
4091
4092 #if 0
4093   /* Get out of template binding levels */
4094   while (b->pseudo_global)
4095     b = b->level_chain;
4096 #endif
4097
4098   pushdecl_with_scope (x, b);
4099 }
4100 #endif
4101
4102 /* Make the declaration(s) of X appear in CLASS scope
4103    under the name NAME.  */
4104
4105 void
4106 push_class_level_binding (name, x)
4107      tree name;
4108      tree x;
4109 {
4110   /* The class_binding_level will be NULL if x is a template 
4111      parameter name in a member template.  */
4112   if (!class_binding_level)
4113     return;
4114
4115   /* If this declaration shadows a declaration from an enclosing
4116      class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4117      we leave this class.  Record the shadowed declaration here.  */
4118   maybe_push_cache_obstack ();
4119   class_binding_level->class_shadowed
4120     = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
4121                  class_binding_level->class_shadowed);
4122   TREE_TYPE (class_binding_level->class_shadowed)
4123     = x;
4124   pop_obstacks ();
4125
4126   /* Put the binding on the stack of bindings for the identifier, and
4127      update IDENTIFIER_CLASS_VALUE.  */
4128   push_class_binding (name, x);
4129
4130   obstack_ptr_grow (&decl_obstack, x);
4131 }
4132
4133 /* Insert another USING_DECL into the current binding level,
4134    returning this declaration. If this is a redeclaration,
4135    do nothing and return NULL_TREE.  */
4136
4137 tree
4138 push_using_decl (scope, name)
4139      tree scope;
4140      tree name;
4141 {
4142   tree decl;
4143   
4144   my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4145   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4146   for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4147     if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4148       break;
4149   if (decl)
4150     return NULL_TREE;
4151   decl = build_lang_decl (USING_DECL, name, void_type_node);
4152   DECL_INITIAL (decl) = scope;
4153   TREE_CHAIN (decl) = current_binding_level->usings;
4154   current_binding_level->usings = decl;
4155   return decl;
4156 }
4157
4158 /* Add namespace to using_directives. Return NULL_TREE if nothing was
4159    changed (i.e. there was already a directive), or the fresh
4160    TREE_LIST otherwise.  */
4161
4162 tree
4163 push_using_directive (used)
4164      tree used;
4165 {
4166   tree ud = current_binding_level->using_directives;
4167   tree iter, ancestor;
4168   
4169   /* Check if we already have this. */
4170   if (purpose_member (used, ud) != NULL_TREE)
4171     return NULL_TREE;
4172
4173   /* Recursively add all namespaces used. */
4174   for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4175     push_using_directive (TREE_PURPOSE (iter));
4176
4177   ancestor = namespace_ancestor (current_decl_namespace (), used);
4178   ud = current_binding_level->using_directives;
4179   ud = perm_tree_cons (used, ancestor, ud);
4180   current_binding_level->using_directives = ud;
4181   return ud;
4182 }
4183
4184 /* DECL is a FUNCTION_DECL for a non-member function, which may have
4185    other definitions already in place.  We get around this by making
4186    the value of the identifier point to a list of all the things that
4187    want to be referenced by that name.  It is then up to the users of
4188    that name to decide what to do with that list.
4189
4190    DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its DECL_RESULT
4191    slot.  It is dealt with the same way.
4192
4193    FLAGS is a bitwise-or of the following values:
4194      PUSH_LOCAL: Bind DECL in the current scope, rather than at
4195                  namespace scope.
4196      PUSH_USING: DECL is being pushed as the result of a using
4197                  declaration. 
4198
4199    The value returned may be a previous declaration if we guessed wrong
4200    about what language DECL should belong to (C or C++).  Otherwise,
4201    it's always DECL (and never something that's not a _DECL).  */
4202
4203 tree
4204 push_overloaded_decl (decl, flags)
4205      tree decl;
4206      int flags;
4207 {
4208   tree name = DECL_NAME (decl);
4209   tree old;
4210   tree new_binding;
4211   int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
4212
4213   if (doing_global)
4214     {
4215       old = namespace_binding (name, DECL_CONTEXT (decl));
4216       if (old && TREE_CODE (old) == FUNCTION_DECL
4217           && DECL_ARTIFICIAL (old)
4218           && (DECL_BUILT_IN (old) || DECL_BUILT_IN_NONANSI (old)))
4219         {
4220           if (duplicate_decls (decl, old))
4221             return old;
4222           old = NULL_TREE;
4223         }
4224     }
4225   else
4226     old = lookup_name_current_level (name);
4227
4228   if (old)
4229     {
4230       if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
4231         {
4232           tree t = TREE_TYPE (old);
4233           if (IS_AGGR_TYPE (t) && warn_shadow
4234               && (! DECL_IN_SYSTEM_HEADER (decl)
4235                   || ! DECL_IN_SYSTEM_HEADER (old)))
4236             cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
4237           old = NULL_TREE;
4238         }
4239       else if (is_overloaded_fn (old))
4240         {
4241           tree tmp;
4242           
4243           for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
4244             {
4245               tree fn = OVL_CURRENT (tmp);
4246
4247               if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4248                   && !(flags & PUSH_USING)
4249                   && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4250                                 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4251                 cp_error ("`%#D' conflicts with previous using declaration `%#D'",
4252                           decl, fn);
4253               
4254               if (duplicate_decls (decl, fn))
4255                 return fn;
4256             }
4257         }
4258       else
4259         {
4260           cp_error_at ("previous non-function declaration `%#D'", old);
4261           cp_error ("conflicts with function declaration `%#D'", decl);
4262           return decl;
4263         }
4264     }
4265
4266   if (old || TREE_CODE (decl) == TEMPLATE_DECL)
4267     {
4268       if (old && TREE_CODE (old) != OVERLOAD)
4269         new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4270       else
4271         new_binding = ovl_cons (decl, old);
4272       if (flags & PUSH_USING)
4273         OVL_USED (new_binding) = 1;
4274     }
4275   else
4276     /* NAME is not ambiguous.  */
4277     new_binding = decl;
4278
4279   if (doing_global)
4280     set_namespace_binding (name, current_namespace, new_binding);
4281   else
4282     {
4283       /* We only create an OVERLOAD if there was a previous binding at
4284          this level, or if decl is a template. In the former case, we
4285          need to remove the old binding and replace it with the new
4286          binding.  We must also run through the NAMES on the binding
4287          level where the name was bound to update the chain.  */
4288
4289       if (TREE_CODE (new_binding) == OVERLOAD && old)
4290         {
4291           tree *d;
4292           
4293           for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4294                *d;
4295                d = &TREE_CHAIN (*d))
4296             if (*d == old
4297                 || (TREE_CODE (*d) == TREE_LIST
4298                     && TREE_VALUE (*d) == old))
4299               {
4300                 if (TREE_CODE (*d) == TREE_LIST)
4301                   /* Just replace the old binding with the new.  */
4302                   TREE_VALUE (*d) = new_binding;
4303                 else
4304                   /* Build a TREE_LIST to wrap the OVERLOAD.  */
4305                   *d = build_tree_list (NULL_TREE, new_binding);
4306
4307                 /* And update the CPLUS_BINDING node.  */
4308                 BINDING_VALUE (IDENTIFIER_BINDING (name))
4309                   = new_binding;
4310                 return decl;
4311               }
4312
4313           /* We should always find a previous binding in this case.  */
4314           my_friendly_abort (0);
4315         }
4316
4317       /* Install the new binding.  */
4318       push_local_binding (name, new_binding, flags);
4319     }
4320
4321   return decl;
4322 }
4323 \f
4324 /* Generate an implicit declaration for identifier FUNCTIONID
4325    as a function of type int ().  Print a warning if appropriate.  */
4326
4327 tree
4328 implicitly_declare (functionid)
4329      tree functionid;
4330 {
4331   register tree decl;
4332   int temp = allocation_temporary_p ();
4333
4334   push_obstacks_nochange ();
4335
4336   /* Save the decl permanently so we can warn if definition follows.
4337      In ANSI C, warn_implicit is usually false, so the saves little space.
4338      But in C++, it's usually true, hence the extra code.  */
4339   if (temp && (! warn_implicit || toplevel_bindings_p ()))
4340     end_temporary_allocation ();
4341
4342   /* We used to reuse an old implicit decl here,
4343      but this loses with inline functions because it can clobber
4344      the saved decl chains.  */
4345   decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4346
4347   DECL_EXTERNAL (decl) = 1;
4348   TREE_PUBLIC (decl) = 1;
4349
4350   /* ANSI standard says implicit declarations are in the innermost block.
4351      So we record the decl in the standard fashion.  */
4352   pushdecl (decl);
4353   rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4354
4355   if (warn_implicit
4356       /* Only one warning per identifier.  */
4357       && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4358     {
4359       cp_pedwarn ("implicit declaration of function `%#D'", decl);
4360     }
4361
4362   SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4363
4364   pop_obstacks ();
4365
4366   return decl;
4367 }
4368
4369 /* Return zero if the declaration NEWDECL is valid
4370    when the declaration OLDDECL (assumed to be for the same name)
4371    has already been seen.
4372    Otherwise return an error message format string with a %s
4373    where the identifier should go.  */
4374
4375 static char *
4376 redeclaration_error_message (newdecl, olddecl)
4377      tree newdecl, olddecl;
4378 {
4379   if (TREE_CODE (newdecl) == TYPE_DECL)
4380     {
4381       /* Because C++ can put things into name space for free,
4382          constructs like "typedef struct foo { ... } foo"
4383          would look like an erroneous redeclaration.  */
4384       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
4385         return 0;
4386       else
4387         return "redefinition of `%#D'";
4388     }
4389   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4390     {
4391       /* If this is a pure function, its olddecl will actually be
4392          the original initialization to `0' (which we force to call
4393          abort()).  Don't complain about redefinition in this case.  */
4394       if (DECL_LANG_SPECIFIC (olddecl) && DECL_ABSTRACT_VIRTUAL_P (olddecl))
4395         return 0;
4396
4397       /* If both functions come from different namespaces, this is not
4398          a redeclaration - this is a conflict with a used function. */
4399       if (DECL_NAMESPACE_SCOPE_P (olddecl)
4400           && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
4401         return "`%D' conflicts with used function";
4402
4403       /* We'll complain about linkage mismatches in
4404          warn_extern_redeclared_static.  */
4405
4406       /* Defining the same name twice is no good.  */
4407       if (DECL_INITIAL (olddecl) != NULL_TREE
4408           && DECL_INITIAL (newdecl) != NULL_TREE)
4409         {
4410           if (DECL_NAME (olddecl) == NULL_TREE)
4411             return "`%#D' not declared in class";
4412           else
4413             return "redefinition of `%#D'";
4414         }
4415       return 0;
4416     }
4417   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4418     {
4419       if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
4420            && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4421            && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4422           || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
4423               && TYPE_SIZE (TREE_TYPE (newdecl))
4424               && TYPE_SIZE (TREE_TYPE (olddecl))))
4425         return "redefinition of `%#D'";
4426       return 0;
4427     }
4428   else if (toplevel_bindings_p ())
4429     {
4430       /* Objects declared at top level:  */
4431       /* If at least one is a reference, it's ok.  */
4432       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
4433         return 0;
4434       /* Reject two definitions.  */
4435       return "redefinition of `%#D'";
4436     }
4437   else
4438     {
4439       /* Objects declared with block scope:  */
4440       /* Reject two definitions, and reject a definition
4441          together with an external reference.  */
4442       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
4443         return "redeclaration of `%#D'";
4444       return 0;
4445     }
4446 }
4447 \f
4448 /* Get the LABEL_DECL corresponding to identifier ID as a label.
4449    Create one if none exists so far for the current function.
4450    This function is called for both label definitions and label references.  */
4451
4452 tree
4453 lookup_label (id)
4454      tree id;
4455 {
4456   register tree decl = IDENTIFIER_LABEL_VALUE (id);
4457
4458   if (current_function_decl == NULL_TREE)
4459     {
4460       error ("label `%s' referenced outside of any function",
4461              IDENTIFIER_POINTER (id));
4462       return NULL_TREE;
4463     }
4464
4465   if ((decl == NULL_TREE
4466       || DECL_SOURCE_LINE (decl) == 0)
4467       && (named_label_uses == NULL
4468           || named_label_uses->names_in_scope != current_binding_level->names
4469           || named_label_uses->label_decl != decl))
4470     {
4471       struct named_label_list *new_ent;
4472       new_ent
4473         = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
4474       new_ent->label_decl = decl;
4475       new_ent->names_in_scope = current_binding_level->names;
4476       new_ent->binding_level = current_binding_level;
4477       new_ent->lineno_o_goto = lineno;
4478       new_ent->filename_o_goto = input_filename;
4479       new_ent->next = named_label_uses;
4480       named_label_uses = new_ent;
4481     }
4482
4483   /* Use a label already defined or ref'd with this name.  */
4484   if (decl != NULL_TREE)
4485     {
4486       /* But not if it is inherited and wasn't declared to be inheritable.  */
4487       if (DECL_CONTEXT (decl) != current_function_decl
4488           && ! C_DECLARED_LABEL_FLAG (decl))
4489         return shadow_label (id);
4490       return decl;
4491     }
4492
4493   decl = build_decl (LABEL_DECL, id, void_type_node);
4494
4495   /* Make sure every label has an rtx.  */
4496   label_rtx (decl);
4497
4498   /* A label not explicitly declared must be local to where it's ref'd.  */
4499   DECL_CONTEXT (decl) = current_function_decl;
4500
4501   DECL_MODE (decl) = VOIDmode;
4502
4503   /* Say where one reference is to the label,
4504      for the sake of the error if it is not defined.  */
4505   DECL_SOURCE_LINE (decl) = lineno;
4506   DECL_SOURCE_FILE (decl) = input_filename;
4507
4508   SET_IDENTIFIER_LABEL_VALUE (id, decl);
4509
4510   named_labels = tree_cons (NULL_TREE, decl, named_labels);
4511   named_label_uses->label_decl = decl;
4512
4513   return decl;
4514 }
4515
4516 /* Make a label named NAME in the current function,
4517    shadowing silently any that may be inherited from containing functions
4518    or containing scopes.
4519
4520    Note that valid use, if the label being shadowed
4521    comes from another scope in the same function,
4522    requires calling declare_nonlocal_label right away.  */
4523
4524 tree
4525 shadow_label (name)
4526      tree name;
4527 {
4528   register tree decl = IDENTIFIER_LABEL_VALUE (name);
4529
4530   if (decl != NULL_TREE)
4531     {
4532       shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
4533       SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE);
4534     }
4535
4536   return lookup_label (name);
4537 }
4538
4539 /* Define a label, specifying the location in the source file.
4540    Return the LABEL_DECL node for the label, if the definition is valid.
4541    Otherwise return 0.  */
4542
4543 tree
4544 define_label (filename, line, name)
4545      char *filename;
4546      int line;
4547      tree name;
4548 {
4549   tree decl;
4550
4551   if (minimal_parse_mode)
4552     {
4553       push_obstacks (&permanent_obstack, &permanent_obstack);
4554       decl = build_decl (LABEL_DECL, name, void_type_node);
4555       pop_obstacks ();
4556       DECL_SOURCE_LINE (decl) = line;
4557       DECL_SOURCE_FILE (decl) = filename;
4558       add_tree (decl);
4559       return decl;
4560     }
4561
4562   decl = lookup_label (name);
4563
4564   /* After labels, make any new cleanups go into their
4565      own new (temporary) binding contour.  */
4566   current_binding_level->more_cleanups_ok = 0;
4567
4568   /* If label with this name is known from an outer context, shadow it.  */
4569   if (decl != NULL_TREE && DECL_CONTEXT (decl) != current_function_decl)
4570     {
4571       shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
4572       SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE);
4573       decl = lookup_label (name);
4574     }
4575
4576   if (name == get_identifier ("wchar_t"))
4577     cp_pedwarn ("label named wchar_t");
4578
4579   if (DECL_INITIAL (decl) != NULL_TREE)
4580     {
4581       cp_error ("duplicate label `%D'", decl);
4582       return 0;
4583     }
4584   else
4585     {
4586       struct named_label_list *uses, *prev;
4587       int identified = 0;
4588
4589       /* Mark label as having been defined.  */
4590       DECL_INITIAL (decl) = error_mark_node;
4591       /* Say where in the source.  */
4592       DECL_SOURCE_FILE (decl) = filename;
4593       DECL_SOURCE_LINE (decl) = line;
4594
4595       prev = NULL;
4596       uses = named_label_uses;
4597       while (uses != NULL)
4598         if (uses->label_decl == decl)
4599           {
4600             struct binding_level *b = current_binding_level;
4601             while (b)
4602               {
4603                 tree new_decls = b->names;
4604                 tree old_decls = (b == uses->binding_level)
4605                                   ? uses->names_in_scope : NULL_TREE;
4606                 while (new_decls != old_decls)
4607                   {
4608                     if (TREE_CODE (new_decls) == VAR_DECL
4609                         /* Don't complain about crossing initialization
4610                            of internal entities.  They can't be accessed,
4611                            and they should be cleaned up
4612                            by the time we get to the label.  */
4613                         && ! DECL_ARTIFICIAL (new_decls)
4614                         && !(DECL_INITIAL (new_decls) == NULL_TREE
4615                              && pod_type_p (TREE_TYPE (new_decls))))
4616                       {
4617                         if (! identified) 
4618                           {
4619                             cp_error ("jump to label `%D'", decl);
4620                             error_with_file_and_line (uses->filename_o_goto,
4621                                                       uses->lineno_o_goto,
4622                                                       "  from here");
4623                             identified = 1;
4624                         }
4625                         if (DECL_INITIAL (new_decls)
4626                             || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls)))
4627                           cp_error_at ("  crosses initialization of `%#D'",
4628                                        new_decls);
4629                         else
4630                           cp_error_at ("  enters scope of non-POD `%#D'",
4631                                          new_decls);
4632                       }
4633                     new_decls = TREE_CHAIN (new_decls);
4634                   }
4635                 if (b == uses->binding_level)
4636                   break;
4637                 b = b->level_chain;
4638               }
4639
4640             if (prev != NULL)
4641               prev->next = uses->next;
4642             else
4643               named_label_uses = uses->next;
4644
4645             uses = uses->next;
4646           }
4647         else
4648           {
4649             prev = uses;
4650             uses = uses->next;
4651           }
4652       current_function_return_value = NULL_TREE;
4653       return decl;
4654     }
4655 }
4656
4657 struct cp_switch
4658 {
4659   struct binding_level *level;
4660   struct cp_switch *next;
4661 };
4662
4663 static struct cp_switch *switch_stack;
4664
4665 void
4666 push_switch ()
4667 {
4668   struct cp_switch *p
4669     = (struct cp_switch *) oballoc (sizeof (struct cp_switch));
4670   p->level = current_binding_level;
4671   p->next = switch_stack;
4672   switch_stack = p;
4673 }
4674
4675 void
4676 pop_switch ()
4677 {
4678   switch_stack = switch_stack->next;
4679 }
4680
4681 /* Same, but for CASE labels.  If DECL is NULL_TREE, it's the default.  */
4682 /* XXX Note decl is never actually used. (bpk) */
4683
4684 void
4685 define_case_label ()
4686 {
4687   tree cleanup = last_cleanup_this_contour ();
4688   struct binding_level *b = current_binding_level;
4689   int identified = 0;
4690
4691   if (cleanup)
4692     {
4693       static int explained = 0;
4694       cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
4695       warning ("where case label appears here");
4696       if (!explained)
4697         {
4698           warning ("(enclose actions of previous case statements requiring");
4699           warning ("destructors in their own binding contours.)");
4700           explained = 1;
4701         }
4702     }
4703
4704   for (; b && b != switch_stack->level; b = b->level_chain)
4705     {
4706       tree new_decls = b->names;
4707       for (; new_decls; new_decls = TREE_CHAIN (new_decls))
4708         {
4709           if (TREE_CODE (new_decls) == VAR_DECL
4710               /* Don't complain about crossing initialization
4711                  of internal entities.  They can't be accessed,
4712                  and they should be cleaned up
4713                  by the time we get to the label.  */
4714               && ! DECL_ARTIFICIAL (new_decls)
4715               && ((DECL_INITIAL (new_decls) != NULL_TREE
4716                    && DECL_INITIAL (new_decls) != error_mark_node)
4717                   || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
4718             {
4719               if (! identified)
4720                 error ("jump to case label");
4721               identified = 1;
4722               cp_error_at ("  crosses initialization of `%#D'",
4723                            new_decls);
4724             }
4725         }
4726     }
4727
4728   /* After labels, make any new cleanups go into their
4729      own new (temporary) binding contour.  */
4730
4731   current_binding_level->more_cleanups_ok = 0;
4732   current_function_return_value = NULL_TREE;
4733 }
4734 \f
4735 /* Return the list of declarations of the current level.
4736    Note that this list is in reverse order unless/until
4737    you nreverse it; and when you do nreverse it, you must
4738    store the result back using `storedecls' or you will lose.  */
4739
4740 tree
4741 getdecls ()
4742 {
4743   return current_binding_level->names;
4744 }
4745
4746 /* Return the list of type-tags (for structs, etc) of the current level.  */
4747
4748 tree
4749 gettags ()
4750 {
4751   return current_binding_level->tags;
4752 }
4753
4754 /* Store the list of declarations of the current level.
4755    This is done for the parameter declarations of a function being defined,
4756    after they are modified in the light of any missing parameters.  */
4757
4758 static void
4759 storedecls (decls)
4760      tree decls;
4761 {
4762   current_binding_level->names = decls;
4763 }
4764
4765 /* Similarly, store the list of tags of the current level.  */
4766
4767 static void
4768 storetags (tags)
4769      tree tags;
4770 {
4771   current_binding_level->tags = tags;
4772 }
4773 \f
4774 /* Given NAME, an IDENTIFIER_NODE,
4775    return the structure (or union or enum) definition for that name.
4776    Searches binding levels from BINDING_LEVEL up to the global level.
4777    If THISLEVEL_ONLY is nonzero, searches only the specified context
4778    (but skips any tag-transparent contexts to find one that is
4779    meaningful for tags).
4780    FORM says which kind of type the caller wants;
4781    it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
4782    If the wrong kind of type is found, and it's not a template, an error is
4783    reported.  */
4784
4785 static tree
4786 lookup_tag (form, name, binding_level, thislevel_only)
4787      enum tree_code form;
4788      tree name;
4789      struct binding_level *binding_level;
4790      int thislevel_only;
4791 {
4792   register struct binding_level *level;
4793   /* Non-zero if, we should look past a pseudo-global level, even if
4794      THISLEVEL_ONLY.  */
4795   int allow_pseudo_global = 1;
4796
4797   for (level = binding_level; level; level = level->level_chain)
4798     {
4799       register tree tail;
4800       if (ANON_AGGRNAME_P (name))
4801         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4802           {
4803             /* There's no need for error checking here, because
4804                anon names are unique throughout the compilation.  */
4805             if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
4806               return TREE_VALUE (tail);
4807           }
4808       else if (level->namespace_p)
4809         /* Do namespace lookup. */
4810         for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
4811           {
4812             tree old = binding_for_name (name, tail);
4813
4814             /* If we just skipped past a pseudo global level, even
4815                though THISLEVEL_ONLY, and we find a template class
4816                declaration, then we use the _TYPE node for the
4817                template.  See the example below.  */
4818             if (thislevel_only && !allow_pseudo_global
4819                 && old && BINDING_VALUE (old) 
4820                 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
4821               old = TREE_TYPE (BINDING_VALUE (old));
4822             else 
4823               old = BINDING_TYPE (old);
4824
4825             /* If it has an original type, it is a typedef, and we
4826                should not return it.  */
4827             if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
4828               old = NULL_TREE;
4829             if (old && TREE_CODE (old) != form
4830                 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
4831               {
4832                 cp_error ("`%#D' redeclared as %C", old, form);
4833                 return NULL_TREE;
4834               }
4835             if (old)
4836               return old;
4837             if (thislevel_only || tail == global_namespace)
4838               return NULL_TREE;
4839           }
4840       else
4841         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4842           {
4843             if (TREE_PURPOSE (tail) == name)
4844               {
4845                 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
4846                 /* Should tighten this up; it'll probably permit
4847                    UNION_TYPE and a struct template, for example.  */
4848                 if (code != form
4849                     && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
4850                   {
4851                     /* Definition isn't the kind we were looking for.  */
4852                     cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
4853                               form);
4854                     return NULL_TREE;
4855                   }
4856                 return TREE_VALUE (tail);
4857               }
4858           }
4859       if (thislevel_only && ! level->tag_transparent)
4860         {
4861           if (level->pseudo_global && allow_pseudo_global)
4862             {
4863               /* We must deal with cases like this:
4864                  
4865                    template <class T> struct S;
4866                    template <class T> struct S {};
4867                    
4868                  When looking up `S', for the second declaration, we
4869                  would like to find the first declaration.  But, we
4870                  are in the pseudo-global level created for the
4871                  template parameters, rather than the (surrounding)
4872                  namespace level.  Thus, we keep going one more level,
4873                  even though THISLEVEL_ONLY is non-zero.  */
4874               allow_pseudo_global = 0;
4875               continue;
4876             }
4877           else
4878             return NULL_TREE;
4879         }
4880       if (current_class_type && level->level_chain->namespace_p)
4881         {
4882           /* Try looking in this class's tags before heading into
4883              global binding level.  */
4884           tree context = current_class_type;
4885           while (context)
4886             {
4887               switch (TREE_CODE_CLASS (TREE_CODE (context)))
4888                 {
4889                 tree these_tags;
4890                 case 't':
4891                     these_tags = CLASSTYPE_TAGS (context);
4892                     if (ANON_AGGRNAME_P (name))
4893                       while (these_tags)
4894                         {
4895                           if (TYPE_IDENTIFIER (TREE_VALUE (these_tags))
4896                               == name)
4897                             return TREE_VALUE (tail);
4898                           these_tags = TREE_CHAIN (these_tags);
4899                         }
4900                     else
4901                       while (these_tags)
4902                         {
4903                           if (TREE_PURPOSE (these_tags) == name)
4904                             {
4905                               if (TREE_CODE (TREE_VALUE (these_tags)) != form)
4906                                 {
4907                                   cp_error ("`%#D' redeclared as %C in class scope",
4908                                             TREE_VALUE (tail), form);
4909                                   return NULL_TREE;
4910                                 }
4911                               return TREE_VALUE (tail);
4912                             }
4913                           these_tags = TREE_CHAIN (these_tags);
4914                         }
4915                     /* If this type is not yet complete, then don't
4916                        look at its context.  */
4917                     if (TYPE_SIZE (context) == NULL_TREE)
4918                       goto no_context;
4919                     /* Go to next enclosing type, if any.  */
4920                     context = DECL_CONTEXT (TYPE_MAIN_DECL (context));
4921                     break;
4922                 case 'd':
4923                     context = DECL_CONTEXT (context);
4924                     break;
4925                 default:
4926                     my_friendly_abort (10);
4927                 }
4928               continue;
4929               no_context:
4930               break;
4931             }
4932         }
4933     }
4934   return NULL_TREE;
4935 }
4936
4937 #if 0
4938 void
4939 set_current_level_tags_transparency (tags_transparent)
4940      int tags_transparent;
4941 {
4942   current_binding_level->tag_transparent = tags_transparent;
4943 }
4944 #endif
4945
4946 /* Given a type, find the tag that was defined for it and return the tag name.
4947    Otherwise return 0.  However, the value can never be 0
4948    in the cases in which this is used.
4949
4950    C++: If NAME is non-zero, this is the new name to install.  This is
4951    done when replacing anonymous tags with real tag names.  */
4952
4953 static tree
4954 lookup_tag_reverse (type, name)
4955      tree type;
4956      tree name;
4957 {
4958   register struct binding_level *level;
4959
4960   for (level = current_binding_level; level; level = level->level_chain)
4961     {
4962       register tree tail;
4963       for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4964         {
4965           if (TREE_VALUE (tail) == type)
4966             {
4967               if (name)
4968                 TREE_PURPOSE (tail) = name;
4969               return TREE_PURPOSE (tail);
4970             }
4971         }
4972     }
4973   return NULL_TREE;
4974 }
4975 \f
4976 /* Lookup TYPE in CONTEXT (a chain of nested types or a FUNCTION_DECL).
4977    Return the type value, or NULL_TREE if not found.  */
4978
4979 static tree
4980 lookup_nested_type (type, context)
4981      tree type;
4982      tree context;
4983 {
4984   if (context == NULL_TREE)
4985     return NULL_TREE;
4986   while (context)
4987     {
4988       switch (TREE_CODE (context))
4989         {
4990         case TYPE_DECL:
4991           {
4992             tree ctype = TREE_TYPE (context);
4993             tree match = value_member (type, CLASSTYPE_TAGS (ctype));
4994             if (match)
4995               return TREE_VALUE (match);
4996             context = DECL_CONTEXT (context);
4997
4998             /* When we have a nested class whose member functions have
4999                local types (e.g., a set of enums), we'll arrive here
5000                with the DECL_CONTEXT as the actual RECORD_TYPE node for
5001                the enclosing class.  Instead, we want to make sure we
5002                come back in here with the TYPE_DECL, not the RECORD_TYPE.  */
5003             if (context && TREE_CODE (context) == RECORD_TYPE)
5004               context = TREE_CHAIN (context);
5005           }
5006           break;
5007         case FUNCTION_DECL:
5008           if (TYPE_NAME (type) && TYPE_IDENTIFIER (type))
5009             return lookup_name (TYPE_IDENTIFIER (type), 1);
5010           return NULL_TREE;
5011         default:
5012           my_friendly_abort (12);
5013         }
5014     }
5015   return NULL_TREE;
5016 }
5017
5018 /* Look up NAME in the NAMESPACE.  */
5019
5020 tree
5021 lookup_namespace_name (namespace, name)
5022      tree namespace, name;
5023 {
5024   struct tree_binding _b;
5025   tree val;
5026
5027   my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
5028
5029   if (TREE_CODE (name) == NAMESPACE_DECL)
5030     /* This happens for A::B<int> when B is a namespace. */
5031     return name;
5032   else if (TREE_CODE (name) == TEMPLATE_DECL)
5033     {
5034       /* This happens for A::B where B is a template, and there are no
5035          template arguments.  */
5036       cp_error ("invalid use of `%D'", name);
5037       return error_mark_node;
5038     }
5039
5040   namespace = ORIGINAL_NAMESPACE (namespace);
5041
5042   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
5043   
5044   val = binding_init (&_b);
5045   if (!qualified_lookup_using_namespace (name, namespace, val, 0))
5046     return error_mark_node;
5047
5048   if (BINDING_VALUE (val))
5049     {
5050       val = BINDING_VALUE (val);
5051
5052       /* If we have a single function from a using decl, pull it out.  */
5053       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5054         val = OVL_FUNCTION (val);
5055       return val;
5056     }
5057
5058   cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
5059   return error_mark_node;
5060 }
5061
5062 /* Hash a TYPENAME_TYPE.  K is really of type `tree'.  */
5063
5064 static unsigned long
5065 typename_hash (k)
5066      hash_table_key k;
5067 {
5068   unsigned long hash;
5069   tree t;
5070
5071   t = (tree) k;
5072   hash = (((unsigned long) TYPE_CONTEXT (t))
5073           ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5074
5075   return hash;
5076 }
5077
5078 /* Compare two TYPENAME_TYPEs.  K1 and K2 are really of type `tree'.  */
5079
5080 static boolean
5081 typename_compare (k1, k2)
5082      hash_table_key k1;
5083      hash_table_key k2;
5084 {
5085   tree t1;
5086   tree t2;
5087   tree d1;
5088   tree d2;
5089
5090   t1 = (tree) k1;
5091   t2 = (tree) k2;
5092   d1 = TYPE_NAME (t1);
5093   d2 = TYPE_NAME (t2);
5094   
5095   return (DECL_NAME (d1) == DECL_NAME (d2)
5096           && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
5097           && ((TREE_TYPE (t1) != NULL_TREE) 
5098               == (TREE_TYPE (t2) != NULL_TREE))
5099           && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5100           && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5101 }
5102
5103 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
5104    the type of `T', NAME is the IDENTIFIER_NODE for `t'.  If BASE_TYPE
5105    is non-NULL, this type is being created by the implicit typename
5106    extension, and BASE_TYPE is a type named `t' in some base class of
5107    `T' which depends on template parameters.  
5108
5109    Returns the new TYPENAME_TYPE.  */
5110
5111 tree
5112 build_typename_type (context, name, fullname, base_type)
5113      tree context;
5114      tree name;
5115      tree fullname;
5116      tree base_type;
5117 {
5118   tree t;
5119   tree d;
5120   struct hash_entry* e;
5121
5122   static struct hash_table ht;
5123
5124   push_obstacks (&permanent_obstack, &permanent_obstack);
5125
5126   if (!ht.table
5127       && !hash_table_init (&ht, &hash_newfunc, &typename_hash, 
5128                            &typename_compare))
5129     fatal ("virtual memory exhausted");
5130
5131   /* Build the TYPENAME_TYPE.  */
5132   t = make_lang_type (TYPENAME_TYPE);
5133   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5134   TYPENAME_TYPE_FULLNAME (t) = fullname;
5135   TREE_TYPE (t) = base_type;
5136
5137   /* Build the corresponding TYPE_DECL.  */
5138   d = build_decl (TYPE_DECL, name, t);
5139   TYPE_NAME (TREE_TYPE (d)) = d;
5140   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5141   DECL_CONTEXT (d) = FROB_CONTEXT (context);
5142   DECL_ARTIFICIAL (d) = 1;
5143
5144   /* See if we already have this type.  */
5145   e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5146   if (e)
5147     {
5148       /* This will free not only TREE_TYPE, but the lang-specific data
5149          and the TYPE_DECL as well.  */
5150       obstack_free (&permanent_obstack, t);
5151       t = (tree) e->key;
5152     }
5153   else
5154     /* Insert the type into the table.  */
5155     hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5156
5157   pop_obstacks ();
5158
5159   return t;
5160 }
5161
5162 tree
5163 make_typename_type (context, name)
5164      tree context, name;
5165 {
5166   tree t;
5167   tree fullname;
5168
5169   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
5170     name = TYPE_IDENTIFIER (name);
5171   else if (TREE_CODE (name) == TYPE_DECL)
5172     name = DECL_NAME (name);
5173
5174   fullname = name;
5175
5176   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5177     {
5178       name = TREE_OPERAND (name, 0);
5179       if (TREE_CODE (name) == TEMPLATE_DECL)
5180         name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5181     }
5182   if (TREE_CODE (name) != IDENTIFIER_NODE)
5183     my_friendly_abort (2000);
5184
5185   if (TREE_CODE (context) == NAMESPACE_DECL)
5186     {
5187       /* We can get here from typename_sub0 in the explicit_template_type
5188          expansion.  Just fail.  */
5189       cp_error ("no class template named `%#T' in `%#T'",
5190                 name, context);
5191       return error_mark_node;
5192     }
5193
5194   if (! uses_template_parms (context)
5195       || currently_open_class (context))
5196     {
5197       if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5198         {
5199           if (IS_AGGR_TYPE (context))
5200             t = lookup_field (context, name, 0, 0);
5201           else
5202             {
5203               cp_error ("no class template named `%#T' in `%#T'",
5204                         name, context);
5205               return error_mark_node;
5206             }
5207
5208           if (t && DECL_CLASS_TEMPLATE_P (t))
5209             return lookup_template_class (t, TREE_OPERAND (fullname, 1),
5210                                           NULL_TREE, context, 
5211                                           /*entering_scope=*/0);
5212         }
5213       else
5214         {
5215           if (IS_AGGR_TYPE (context))
5216             t = lookup_field (context, name, 0, 1);
5217           else
5218             {
5219               cp_error ("no type named `%#T' in `%#T'", name, context);
5220               return error_mark_node;
5221             }
5222
5223           if (t)
5224             return TREE_TYPE (t);
5225         }
5226     }
5227   
5228   return build_typename_type (context, name, fullname,  NULL_TREE);
5229 }
5230
5231 /* Select the right _DECL from multiple choices. */
5232
5233 static tree
5234 select_decl (binding, flags)
5235      tree binding;
5236      int flags;
5237 {
5238   tree val;
5239   val = BINDING_VALUE (binding);
5240   if (LOOKUP_NAMESPACES_ONLY (flags))
5241     {
5242       /* We are not interested in types. */
5243       if (val && TREE_CODE (val) == NAMESPACE_DECL)
5244         return val;
5245       return NULL_TREE;
5246     }
5247   
5248   /* If we could have a type and
5249      we have nothing or we need a type and have none.  */
5250   if (BINDING_TYPE (binding)
5251       && (!val || ((flags & LOOKUP_PREFER_TYPES)
5252                    && TREE_CODE (val) != TYPE_DECL)))
5253     val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5254   /* Don't return non-types if we really prefer types. */
5255   else if (val && LOOKUP_TYPES_ONLY (flags)  && TREE_CODE (val) != TYPE_DECL
5256            && (TREE_CODE (val) != TEMPLATE_DECL
5257                || !DECL_CLASS_TEMPLATE_P (val)))
5258     val = NULL_TREE;
5259
5260   return val;
5261 }
5262
5263 /* Unscoped lookup of a global, iterate over namespaces, considering
5264    using namespace statements. */
5265
5266 static tree
5267 unqualified_namespace_lookup (name, flags)
5268      tree name;
5269      int flags;
5270 {
5271   struct tree_binding _binding;
5272   tree b = binding_init (&_binding);
5273   tree initial = current_decl_namespace();
5274   tree scope = initial;
5275   tree siter;
5276   struct binding_level *level;
5277   tree val = NULL_TREE;
5278
5279   while (!val)
5280     {
5281       val = binding_for_name (name, scope);
5282
5283       /* Initialize binding for this context. */
5284       BINDING_VALUE (b) = BINDING_VALUE (val);
5285       BINDING_TYPE (b) = BINDING_TYPE (val);
5286
5287       /* Add all _DECLs seen through local using-directives. */
5288       for (level = current_binding_level; 
5289            !level->namespace_p;
5290            level = level->level_chain)
5291         if (!lookup_using_namespace (name, b, level->using_directives,
5292                                      scope, flags))
5293           /* Give up because of error. */
5294           return error_mark_node;
5295
5296       /* Add all _DECLs seen through global using-directives. */
5297       /* XXX local and global using lists should work equally. */
5298       siter = initial;
5299       while (1)
5300         {
5301           if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter), 
5302                                        scope, flags))
5303             /* Give up because of error. */
5304             return error_mark_node;
5305           if (siter == scope) break;
5306           siter = CP_DECL_CONTEXT (siter);
5307         }
5308
5309       val = select_decl (b, flags);
5310       if (scope == global_namespace)
5311         break;
5312       scope = CP_DECL_CONTEXT (scope);
5313     }
5314   return val;
5315 }
5316
5317 /* Combine prefer_type and namespaces_only into flags.  */
5318
5319 static int
5320 lookup_flags (prefer_type, namespaces_only)
5321   int prefer_type, namespaces_only;
5322 {
5323   if (namespaces_only)
5324     return LOOKUP_PREFER_NAMESPACES;
5325   if (prefer_type > 1)
5326     return LOOKUP_PREFER_TYPES;
5327   if (prefer_type > 0)
5328     return LOOKUP_PREFER_BOTH;
5329   return 0;
5330 }
5331
5332 /* Given a lookup that returned VAL, use FLAGS to decide if we want to
5333    ignore it or not.  Subroutine of lookup_name_real.  */
5334
5335 static tree
5336 qualify_lookup (val, flags)
5337      tree val;
5338      int flags;
5339 {
5340   if (val == NULL_TREE)
5341     return val;
5342   if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5343     return val;
5344   if ((flags & LOOKUP_PREFER_TYPES)
5345       && (TREE_CODE (val) == TYPE_DECL
5346           || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5347               && DECL_CLASS_TEMPLATE_P (val))))
5348     return val;
5349   if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
5350     return NULL_TREE;
5351   return val;
5352 }
5353
5354 /* Look up NAME in the current binding level and its superiors in the
5355    namespace of variables, functions and typedefs.  Return a ..._DECL
5356    node of some kind representing its definition if there is only one
5357    such declaration, or return a TREE_LIST with all the overloaded
5358    definitions if there are many, or return 0 if it is undefined.
5359
5360    If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5361    If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
5362    If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
5363    Otherwise we prefer non-TYPE_DECLs.  
5364
5365    If NONCLASS is non-zero, we don't look for the NAME in class scope,
5366    using IDENTIFIER_CLASS_VALUE.  */
5367
5368 static tree
5369 lookup_name_real (name, prefer_type, nonclass, namespaces_only)
5370      tree name;
5371      int prefer_type, nonclass, namespaces_only;
5372 {
5373   register tree val;
5374   int yylex = 0;
5375   tree from_obj = NULL_TREE;
5376   int flags;
5377
5378   /* Hack: copy flag set by parser, if set. */
5379   if (only_namespace_names)
5380     namespaces_only = 1;
5381
5382   if (prefer_type == -2)
5383     {
5384       extern int looking_for_typename;
5385       tree type = NULL_TREE;
5386
5387       yylex = 1;
5388       prefer_type = looking_for_typename;
5389
5390       flags = lookup_flags (prefer_type, namespaces_only);
5391       /* If the next thing is '<', class templates are types. */
5392       if (looking_for_template)
5393         flags |= LOOKUP_TEMPLATES_EXPECTED;
5394
5395       /* std:: becomes :: for now.  */
5396       if (got_scope == std_node)
5397         got_scope = void_type_node;
5398
5399       if (got_scope)
5400         type = got_scope;
5401       else if (got_object != error_mark_node)
5402         type = got_object;
5403       
5404       if (type)
5405         {
5406           if (type == error_mark_node)
5407             return error_mark_node;
5408           if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5409             type = TREE_TYPE (type);
5410
5411           if (TYPE_P (type))
5412             type = complete_type (type);
5413
5414           if (TREE_CODE (type) == VOID_TYPE)
5415             type = global_namespace;
5416           if (TREE_CODE (type) == NAMESPACE_DECL)
5417             {
5418               struct tree_binding b;
5419               val = binding_init (&b);
5420               if (!qualified_lookup_using_namespace (name, type, val, flags))
5421                 return NULL_TREE;
5422               val = select_decl (val, flags);
5423             }
5424           else if (! IS_AGGR_TYPE (type)
5425                    || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5426                    || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
5427                    || TREE_CODE (type) == TYPENAME_TYPE)
5428             /* Someone else will give an error about this if needed.  */
5429             val = NULL_TREE;
5430           else if (TYPE_BEING_DEFINED (type))
5431             {
5432               val = IDENTIFIER_CLASS_VALUE (name);
5433               if (val && DECL_CONTEXT (val) != type)
5434                 {
5435                   struct binding_level *b = class_binding_level;
5436                   for (val = NULL_TREE; b; b = b->level_chain)
5437                     {
5438                       tree t = purpose_member (name, b->class_shadowed);
5439                       if (t && TREE_VALUE (t)
5440                           && DECL_CONTEXT (TREE_VALUE (t)) == type)
5441                         {
5442                           val = TREE_VALUE (t);
5443                           break;
5444                         }
5445                     }
5446                 }
5447               if (val == NULL_TREE)
5448                 val = lookup_field (type, name, 0, 1);
5449             }
5450           else if (type == current_class_type)
5451             val = IDENTIFIER_CLASS_VALUE (name);
5452           else
5453             val = lookup_member (type, name, 0, prefer_type);
5454         }
5455       else
5456         val = NULL_TREE;
5457
5458       if (got_scope)
5459         goto done;
5460       else if (got_object && val)
5461         from_obj = val;
5462     }
5463   else
5464     {
5465       flags = lookup_flags (prefer_type, namespaces_only);
5466       /* If we're not parsing, we need to complain. */
5467       flags |= LOOKUP_COMPLAIN;
5468     }
5469
5470   /* First, look in non-namespace scopes.  */
5471   for (val = IDENTIFIER_BINDING (name); val; val = TREE_CHAIN (val))
5472     {
5473       if (!LOCAL_BINDING_P (val) && nonclass)
5474         /* We're not looking for class-scoped bindings, so keep going.  */
5475         continue;
5476       
5477       /* If this is the kind of thing we're looking for, we're done.  */
5478       if (qualify_lookup (BINDING_VALUE (val), flags))
5479         {
5480           val = BINDING_VALUE (val);
5481           break;
5482         }
5483       else if ((flags & LOOKUP_PREFER_TYPES) 
5484                && qualify_lookup (BINDING_TYPE (val), flags))
5485         {
5486           val = BINDING_TYPE (val);
5487           break;
5488         }
5489     }
5490
5491   /* If VAL is a type from a dependent base, we're not really supposed
5492      to be able to see it; the fact that we can is the "implicit
5493      typename" extension.  We call lookup_field here to turn VAL into
5494      a TYPE_DECL for a TYPENAME_TYPE.  */
5495   if (processing_template_decl && val
5496       && val == IDENTIFIER_CLASS_VALUE (name)
5497       && TREE_CODE (val) == TYPE_DECL
5498       && !currently_open_class (DECL_CONTEXT (val))
5499       && uses_template_parms (current_class_type))
5500     val = lookup_field (current_class_type, name, 0, 1);
5501
5502   /* We don't put names from baseclasses onto the IDENTIFIER_BINDING
5503      list when we're defining a type.  It would probably be simpler to
5504      do this, but we don't.  So, we must lookup names from base
5505      classes explicitly.  */
5506   if (!val && !nonclass 
5507       && current_class_type && TYPE_BEING_DEFINED (current_class_type))
5508     val = qualify_lookup (lookup_field (current_class_type, name, 0, 0),
5509                           flags);
5510
5511   /* The name might be from an enclosing class of the current scope.  */
5512   if (!val && !nonclass && current_class_type)
5513     val = qualify_lookup (lookup_nested_field (name, !yylex), flags);
5514   
5515   /* If we found a type from a dependent base class (using the
5516      implicit typename extension) make sure that there's not some
5517      global name which should be chosen instead.  */
5518   if (val && TREE_CODE (val) == TYPE_DECL
5519       && IMPLICIT_TYPENAME_P (TREE_TYPE (val)))
5520     {
5521       tree global_val;
5522
5523       /* Any other name takes precedence over an implicit typename.  Warn the
5524          user about this potentially confusing lookup.  */
5525       global_val = unqualified_namespace_lookup (name, flags);
5526
5527       if (global_val)
5528         {
5529           tree subtype;
5530
5531           /* Only warn when not lexing; we don't want to warn if they
5532              use this name as a declarator.  */
5533           subtype = TREE_TYPE (TREE_TYPE (val));
5534           if (! yylex
5535               && ! (TREE_CODE (global_val) == TEMPLATE_DECL
5536                     && CLASSTYPE_TEMPLATE_INFO (subtype)
5537                     && CLASSTYPE_TI_TEMPLATE (subtype) == global_val)
5538               && ! (TREE_CODE (global_val) == TYPE_DECL
5539                     && same_type_p (TREE_TYPE (global_val), subtype)))
5540             {
5541               cp_warning ("lookup of `%D' finds `%#D'", name, global_val);
5542               cp_warning ("  instead of `%D' from dependent base class",
5543                           val);
5544               cp_warning ("  (use `typename %T::%D' if that's what you meant)",
5545                           constructor_name (current_class_type), name);
5546             }
5547
5548           /* Use the global value instead of the implicit typename.  */
5549           val = global_val;
5550         }
5551     }
5552   else if (!val)
5553     /* No local, or class-scoped binding.  Look for a namespace-scope
5554        declaration.  */
5555     val = unqualified_namespace_lookup (name, flags);
5556
5557  done:
5558   if (val)
5559     {
5560       /* This should only warn about types used in qualified-ids.  */
5561       if (from_obj && from_obj != val)
5562         {
5563           if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
5564               && TREE_CODE (val) == TYPE_DECL
5565               && TREE_TYPE (from_obj) != TREE_TYPE (val))
5566             {
5567               cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
5568                           name, got_object, TREE_TYPE (from_obj));
5569               cp_pedwarn ("  does not match lookup in the current scope (`%#T')",
5570                           TREE_TYPE (val));
5571             }
5572
5573           /* We don't change val to from_obj if got_object depends on
5574              template parms because that breaks implicit typename for
5575              destructor calls.  */
5576           if (! uses_template_parms (got_object))
5577             val = from_obj;
5578         }
5579
5580       /* If we have a single function from a using decl, pull it out.  */
5581       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5582         val = OVL_FUNCTION (val);
5583     }
5584   else if (from_obj)
5585     val = from_obj;
5586
5587   return val;
5588 }
5589
5590 tree
5591 lookup_name_nonclass (name)
5592      tree name;
5593 {
5594   return lookup_name_real (name, 0, 1, 0);
5595 }
5596
5597 tree
5598 lookup_function_nonclass (name, args)
5599      tree name;
5600      tree args;
5601 {
5602   return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
5603 }
5604
5605 tree
5606 lookup_name_namespace_only (name)
5607      tree name;
5608 {
5609   /* type-or-namespace, nonclass, namespace_only */
5610   return lookup_name_real (name, 1, 1, 1);
5611 }
5612
5613 tree
5614 lookup_name (name, prefer_type)
5615      tree name;
5616      int prefer_type;
5617 {
5618   return lookup_name_real (name, prefer_type, 0, 0);
5619 }
5620
5621 /* Similar to `lookup_name' but look only at current binding level.  */
5622
5623 tree
5624 lookup_name_current_level (name)
5625      tree name;
5626 {
5627   register tree t = NULL_TREE;
5628
5629   if (current_binding_level->namespace_p)
5630     {
5631       t =  IDENTIFIER_NAMESPACE_VALUE (name);
5632
5633       /* extern "C" function() */
5634       if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
5635         t = TREE_VALUE (t);
5636     }
5637   else if (IDENTIFIER_BINDING (name) 
5638            && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
5639     {
5640       struct binding_level *b = current_binding_level;
5641
5642       while (1)
5643         {
5644           if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
5645             return IDENTIFIER_VALUE (name);
5646           
5647           if (b->keep == 2)
5648             b = b->level_chain;
5649           else
5650             break;
5651         }
5652     }
5653
5654   return t;
5655 }
5656
5657 /* Like lookup_name_current_level, but for types.  */
5658
5659 tree
5660 lookup_type_current_level (name)
5661      tree name;
5662 {
5663   register tree t = NULL_TREE;
5664
5665   my_friendly_assert (! current_binding_level->namespace_p, 980716);
5666
5667   if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
5668       && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
5669     {
5670       struct binding_level *b = current_binding_level;
5671       while (1)
5672         {
5673           if (purpose_member (name, b->type_shadowed))
5674             return REAL_IDENTIFIER_TYPE_VALUE (name);
5675           if (b->keep == 2)
5676             b = b->level_chain;
5677           else
5678             break;
5679         }
5680     }
5681
5682   return t;
5683 }
5684
5685 void
5686 begin_only_namespace_names ()
5687 {
5688   only_namespace_names = 1;
5689 }
5690
5691 void
5692 end_only_namespace_names ()
5693 {
5694   only_namespace_names = 0;
5695 }
5696 \f
5697 /* Arrange for the user to get a source line number, even when the
5698    compiler is going down in flames, so that she at least has a
5699    chance of working around problems in the compiler.  We used to
5700    call error(), but that let the segmentation fault continue
5701    through; now, it's much more passive by asking them to send the
5702    maintainers mail about the problem.  */
5703
5704 static void
5705 signal_catch (sig)
5706      int sig ATTRIBUTE_UNUSED;
5707 {
5708   signal (SIGSEGV, SIG_DFL);
5709 #ifdef SIGIOT
5710   signal (SIGIOT, SIG_DFL);
5711 #endif
5712 #ifdef SIGILL
5713   signal (SIGILL, SIG_DFL);
5714 #endif
5715 #ifdef SIGABRT
5716   signal (SIGABRT, SIG_DFL);
5717 #endif
5718 #ifdef SIGBUS
5719   signal (SIGBUS, SIG_DFL);
5720 #endif
5721   my_friendly_abort (0);
5722 }
5723
5724 #if 0
5725 /* Unused -- brendan 970107 */
5726 /* Array for holding types considered "built-in".  These types
5727    are output in the module in which `main' is defined.  */
5728 static tree *builtin_type_tdescs_arr;
5729 static int builtin_type_tdescs_len, builtin_type_tdescs_max;
5730 #endif
5731
5732 /* Push the declarations of builtin types into the namespace.
5733    RID_INDEX, if < RID_MAX is the index of the builtin type
5734    in the array RID_POINTERS.  NAME is the name used when looking
5735    up the builtin type.  TYPE is the _TYPE node for the builtin type.  */
5736
5737 static void
5738 record_builtin_type (rid_index, name, type)
5739      enum rid rid_index;
5740      char *name;
5741      tree type;
5742 {
5743   tree rname = NULL_TREE, tname = NULL_TREE;
5744   tree tdecl = NULL_TREE;
5745
5746   if ((int) rid_index < (int) RID_MAX)
5747     rname = ridpointers[(int) rid_index];
5748   if (name)
5749     tname = get_identifier (name);
5750
5751   TYPE_BUILT_IN (type) = 1;
5752   
5753   if (tname)
5754     {
5755       tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
5756       set_identifier_type_value (tname, NULL_TREE);
5757       if ((int) rid_index < (int) RID_MAX)
5758         /* Built-in types live in the global namespace. */
5759         SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
5760     }
5761   if (rname != NULL_TREE)
5762     {
5763       if (tname != NULL_TREE)
5764         {
5765           set_identifier_type_value (rname, NULL_TREE);
5766           SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
5767         }
5768       else
5769         {
5770           tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
5771           set_identifier_type_value (rname, NULL_TREE);
5772         }
5773     }
5774 }
5775
5776 /* Record one of the standard Java types.
5777  * Declare it as having the given NAME.
5778  * If SIZE > 0, it is the size of one of the integral types;
5779  * otherwise it is the negative of the size of one of the other types.  */
5780
5781 static tree
5782 record_builtin_java_type (name, size)
5783      char *name;
5784      int size;
5785 {
5786   tree type, decl;
5787   if (size > 0)
5788     type = make_signed_type (size);
5789   else if (size > -32)
5790     { /* "__java_char" or ""__java_boolean". */
5791       type = make_unsigned_type (-size);
5792       /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
5793     }
5794   else
5795     { /* "__java_float" or ""__java_double". */
5796       type = make_node (REAL_TYPE);
5797       TYPE_PRECISION (type) = - size;
5798       layout_type (type);
5799     }
5800   record_builtin_type (RID_MAX, name, type);
5801   decl = TYPE_NAME (type);
5802   DECL_IGNORED_P (decl) = 1;
5803   TYPE_FOR_JAVA (type) = 1;
5804   return type;
5805 }
5806
5807 /* Push a type into the namespace so that the back-ends ignore it. */
5808
5809 static void
5810 record_unknown_type (type, name)
5811      tree type;
5812      char *name;
5813 {
5814   tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
5815   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
5816   DECL_IGNORED_P (decl) = 1;
5817   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5818   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
5819   TYPE_ALIGN (type) = 1;
5820   TYPE_MODE (type) = TYPE_MODE (void_type_node);
5821
5822
5823 /* Push overloaded decl, in global scope, with one argument so it
5824    can be used as a callback from define_function.  */
5825
5826 static void
5827 push_overloaded_decl_1 (x)
5828      tree x;
5829 {
5830   push_overloaded_decl (x, PUSH_GLOBAL);
5831 }
5832
5833 #ifdef __GNUC__
5834 __inline
5835 #endif
5836 tree
5837 auto_function (name, type, code)
5838      tree name, type;
5839      enum built_in_function code;
5840 {
5841   return define_function
5842     (IDENTIFIER_POINTER (name), type, code, push_overloaded_decl_1,
5843      IDENTIFIER_POINTER (build_decl_overload (name, TYPE_ARG_TYPES (type),
5844                                               0)));
5845 }
5846
5847 /* Create the predefined scalar types of C,
5848    and some nodes representing standard constants (0, 1, (void *)0).
5849    Initialize the global binding level.
5850    Make definitions for built-in primitive functions.  */
5851
5852 void
5853 init_decl_processing ()
5854 {
5855   register tree endlink, int_endlink, double_endlink, unsigned_endlink;
5856   tree fields[20];
5857   /* Data type of memcpy.  */
5858   tree memcpy_ftype, strlen_ftype;
5859   int wchar_type_size;
5860   tree temp;
5861   tree array_domain_type;
5862   tree vb_off_identifier = NULL_TREE;
5863   /* Function type `char *(char *, char *)' and similar ones */
5864   tree string_ftype_ptr_ptr, int_ftype_string_string;
5865   tree sizetype_endlink;
5866   tree ptr_ftype, ptr_ftype_unsigned, ptr_ftype_sizetype;
5867   tree void_ftype, void_ftype_int, void_ftype_ptr;
5868
5869   /* Have to make these distinct before we try using them.  */
5870   lang_name_cplusplus = get_identifier ("C++");
5871   lang_name_c = get_identifier ("C");
5872   lang_name_java = get_identifier ("Java");
5873
5874   /* Enter the global namespace. */
5875   my_friendly_assert (global_namespace == NULL_TREE, 375);
5876   my_friendly_assert (current_lang_name == NULL_TREE, 375);
5877   current_lang_name = lang_name_cplusplus;
5878   push_namespace (get_identifier ("::"));
5879   global_namespace = current_namespace;
5880   current_lang_name = NULL_TREE;
5881
5882   if (flag_strict_prototype == 2)
5883     flag_strict_prototype = pedantic;
5884   if (! flag_permissive && ! pedantic)
5885     flag_pedantic_errors = 1;
5886
5887   strict_prototypes_lang_c = flag_strict_prototype;
5888
5889   /* Initially, C.  */
5890   current_lang_name = lang_name_c;
5891
5892   current_function_decl = NULL_TREE;
5893   named_labels = NULL_TREE;
5894   named_label_uses = NULL;
5895   current_binding_level = NULL_BINDING_LEVEL;
5896   free_binding_level = NULL_BINDING_LEVEL;
5897
5898   /* Because most segmentation signals can be traced back into user
5899      code, catch them and at least give the user a chance of working
5900      around compiler bugs.  */
5901   signal (SIGSEGV, signal_catch);
5902
5903   /* We will also catch aborts in the back-end through signal_catch and
5904      give the user a chance to see where the error might be, and to defeat
5905      aborts in the back-end when there have been errors previously in their
5906      code.  */
5907 #ifdef SIGIOT
5908   signal (SIGIOT, signal_catch);
5909 #endif
5910 #ifdef SIGILL
5911   signal (SIGILL, signal_catch);
5912 #endif
5913 #ifdef SIGABRT
5914   signal (SIGABRT, signal_catch);
5915 #endif
5916 #ifdef SIGBUS
5917   signal (SIGBUS, signal_catch);
5918 #endif
5919
5920   gcc_obstack_init (&decl_obstack);
5921
5922   /* Must lay these out before anything else gets laid out.  */
5923   error_mark_node = make_node (ERROR_MARK);
5924   TREE_PERMANENT (error_mark_node) = 1;
5925   TREE_TYPE (error_mark_node) = error_mark_node;
5926   error_mark_list = build_tree_list (error_mark_node, error_mark_node);
5927   TREE_TYPE (error_mark_list) = error_mark_node;
5928
5929   /* Make the binding_level structure for global names.  */
5930   pushlevel (0);
5931   global_binding_level = current_binding_level;
5932   /* The global level is the namespace level of ::.  */
5933   NAMESPACE_LEVEL (global_namespace) = global_binding_level;
5934   declare_namespace_level ();
5935
5936   this_identifier = get_identifier (THIS_NAME);
5937   in_charge_identifier = get_identifier (IN_CHARGE_NAME);
5938   ctor_identifier = get_identifier (CTOR_NAME);
5939   dtor_identifier = get_identifier (DTOR_NAME);
5940   pfn_identifier = get_identifier (VTABLE_PFN_NAME);
5941   index_identifier = get_identifier (VTABLE_INDEX_NAME);
5942   delta_identifier = get_identifier (VTABLE_DELTA_NAME);
5943   delta2_identifier = get_identifier (VTABLE_DELTA2_NAME);
5944   pfn_or_delta2_identifier = get_identifier ("__pfn_or_delta2");
5945   if (flag_handle_signatures)
5946     {
5947       tag_identifier = get_identifier (SIGTABLE_TAG_NAME);
5948       vb_off_identifier = get_identifier (SIGTABLE_VB_OFF_NAME);
5949       vt_off_identifier = get_identifier (SIGTABLE_VT_OFF_NAME);
5950     }
5951
5952   /* Define `int' and `char' first so that dbx will output them first.  */
5953
5954   integer_type_node = make_signed_type (INT_TYPE_SIZE);
5955   record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
5956
5957   /* Define `char', which is like either `signed char' or `unsigned char'
5958      but not the same as either.  */
5959
5960   char_type_node
5961     = (flag_signed_char
5962        ? make_signed_type (CHAR_TYPE_SIZE)
5963        : make_unsigned_type (CHAR_TYPE_SIZE));
5964   record_builtin_type (RID_CHAR, "char", char_type_node);
5965
5966   /* `signed' is the same as `int' */
5967   record_builtin_type (RID_SIGNED, NULL_PTR, integer_type_node);
5968   
5969   long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
5970   record_builtin_type (RID_LONG, "long int", long_integer_type_node);
5971
5972   unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
5973   record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
5974
5975   long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
5976   record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
5977   record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
5978
5979   long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
5980   record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
5981
5982   long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
5983   record_builtin_type (RID_MAX, "long long unsigned int",
5984                        long_long_unsigned_type_node);
5985   record_builtin_type (RID_MAX, "long long unsigned",
5986                        long_long_unsigned_type_node);
5987
5988   short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
5989   record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
5990   short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
5991   record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
5992   record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
5993
5994   /* `unsigned long' is the standard type for sizeof.
5995      Note that stddef.h uses `unsigned long',
5996      and this must agree, even if long and int are the same size.  */
5997   set_sizetype
5998     (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
5999
6000   ptrdiff_type_node
6001     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
6002
6003   /* Define both `signed char' and `unsigned char'.  */
6004   signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
6005   record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
6006   unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
6007   record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
6008
6009   /* These are types that type_for_size and type_for_mode use.  */
6010   intQI_type_node = make_signed_type (GET_MODE_BITSIZE (QImode));
6011   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
6012   intHI_type_node = make_signed_type (GET_MODE_BITSIZE (HImode));
6013   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
6014   intSI_type_node = make_signed_type (GET_MODE_BITSIZE (SImode));
6015   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
6016   intDI_type_node = make_signed_type (GET_MODE_BITSIZE (DImode));
6017   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
6018 #if HOST_BITS_PER_WIDE_INT >= 64
6019   intTI_type_node = make_signed_type (GET_MODE_BITSIZE (TImode));
6020   pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
6021 #endif
6022   unsigned_intQI_type_node = make_unsigned_type (GET_MODE_BITSIZE (QImode));
6023   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
6024   unsigned_intHI_type_node = make_unsigned_type (GET_MODE_BITSIZE (HImode));
6025   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
6026   unsigned_intSI_type_node = make_unsigned_type (GET_MODE_BITSIZE (SImode));
6027   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
6028   unsigned_intDI_type_node = make_unsigned_type (GET_MODE_BITSIZE (DImode));
6029   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
6030 #if HOST_BITS_PER_WIDE_INT >= 64
6031   unsigned_intTI_type_node = make_unsigned_type (GET_MODE_BITSIZE (TImode));
6032   pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
6033 #endif
6034
6035   float_type_node = make_node (REAL_TYPE);
6036   TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
6037   record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
6038   layout_type (float_type_node);
6039
6040   double_type_node = make_node (REAL_TYPE);
6041   if (flag_short_double)
6042     TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
6043   else
6044     TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
6045   record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
6046   layout_type (double_type_node);
6047
6048   long_double_type_node = make_node (REAL_TYPE);
6049   TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
6050   record_builtin_type (RID_MAX, "long double", long_double_type_node);
6051   layout_type (long_double_type_node);
6052
6053   complex_integer_type_node = make_node (COMPLEX_TYPE);
6054   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
6055                         complex_integer_type_node));
6056   TREE_TYPE (complex_integer_type_node) = integer_type_node;
6057   layout_type (complex_integer_type_node);
6058
6059   complex_float_type_node = make_node (COMPLEX_TYPE);
6060   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
6061                         complex_float_type_node));
6062   TREE_TYPE (complex_float_type_node) = float_type_node;
6063   layout_type (complex_float_type_node);
6064
6065   complex_double_type_node = make_node (COMPLEX_TYPE);
6066   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
6067                         complex_double_type_node));
6068   TREE_TYPE (complex_double_type_node) = double_type_node;
6069   layout_type (complex_double_type_node);
6070
6071   complex_long_double_type_node = make_node (COMPLEX_TYPE);
6072   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
6073                         complex_long_double_type_node));
6074   TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
6075   layout_type (complex_long_double_type_node);
6076
6077   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6078   java_short_type_node = record_builtin_java_type ("__java_short", 16);
6079   java_int_type_node = record_builtin_java_type ("__java_int", 32);
6080   java_long_type_node = record_builtin_java_type ("__java_long", 64);
6081   java_float_type_node = record_builtin_java_type ("__java_float", -32);
6082   java_double_type_node = record_builtin_java_type ("__java_double", -64);
6083   java_char_type_node = record_builtin_java_type ("__java_char", -16);
6084   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
6085
6086   integer_zero_node = build_int_2 (0, 0);
6087   TREE_TYPE (integer_zero_node) = integer_type_node;
6088   integer_one_node = build_int_2 (1, 0);
6089   TREE_TYPE (integer_one_node) = integer_type_node;
6090   integer_two_node = build_int_2 (2, 0);
6091   TREE_TYPE (integer_two_node) = integer_type_node;
6092   integer_three_node = build_int_2 (3, 0);
6093   TREE_TYPE (integer_three_node) = integer_type_node;
6094
6095   boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6096   TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
6097   TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6098   TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6099   TYPE_PRECISION (boolean_type_node) = 1;
6100   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6101   boolean_false_node = build_int_2 (0, 0);
6102   TREE_TYPE (boolean_false_node) = boolean_type_node;
6103   boolean_true_node = build_int_2 (1, 0);
6104   TREE_TYPE (boolean_true_node) = boolean_type_node;
6105
6106   /* These are needed by stor-layout.c.  */
6107   size_zero_node = size_int (0);
6108   size_one_node = size_int (1);
6109
6110   signed_size_zero_node = build_int_2 (0, 0);
6111   TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6112
6113   void_type_node = make_node (VOID_TYPE);
6114   record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
6115   layout_type (void_type_node); /* Uses integer_zero_node.  */
6116   void_list_node = build_tree_list (NULL_TREE, void_type_node);
6117   TREE_PARMLIST (void_list_node) = 1;
6118
6119   null_pointer_node = build_int_2 (0, 0);
6120   TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
6121   layout_type (TREE_TYPE (null_pointer_node));
6122      
6123   /* Used for expressions that do nothing, but are not errors.  */
6124   void_zero_node = build_int_2 (0, 0);
6125   TREE_TYPE (void_zero_node) = void_type_node;
6126
6127   string_type_node = build_pointer_type (char_type_node);
6128   const_string_type_node
6129     = build_pointer_type (build_qualified_type (char_type_node, 
6130                                                 TYPE_QUAL_CONST));
6131 #if 0
6132   record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6133 #endif
6134
6135   /* Make a type to be the domain of a few array types
6136      whose domains don't really matter.
6137      200 is small enough that it always fits in size_t
6138      and large enough that it can hold most function names for the
6139      initializations of __FUNCTION__ and __PRETTY_FUNCTION__.  */
6140   array_domain_type = build_index_type (build_int_2 (200, 0));
6141
6142   /* Make a type for arrays of characters.
6143      With luck nothing will ever really depend on the length of this
6144      array type.  */
6145   char_array_type_node
6146     = build_array_type (char_type_node, array_domain_type);
6147   /* Likewise for arrays of ints.  */
6148   int_array_type_node
6149     = build_array_type (integer_type_node, array_domain_type);
6150
6151   /* This is just some anonymous class type.  Nobody should ever
6152      need to look inside this envelope.  */
6153   class_star_type_node = build_pointer_type (make_lang_type (RECORD_TYPE));
6154
6155   default_function_type
6156     = build_function_type (integer_type_node, NULL_TREE);
6157
6158   ptr_type_node = build_pointer_type (void_type_node);
6159   const_ptr_type_node
6160     = build_pointer_type (build_qualified_type (void_type_node,
6161                                                 TYPE_QUAL_CONST)); 
6162 #if 0
6163   record_builtin_type (RID_MAX, NULL_PTR, ptr_type_node);
6164 #endif
6165   endlink = void_list_node;
6166   int_endlink = tree_cons (NULL_TREE, integer_type_node, endlink);
6167   double_endlink = tree_cons (NULL_TREE, double_type_node, endlink);
6168   unsigned_endlink = tree_cons (NULL_TREE, unsigned_type_node, endlink);
6169
6170   ptr_ftype = build_function_type (ptr_type_node, NULL_TREE);
6171   ptr_ftype_unsigned = build_function_type (ptr_type_node, unsigned_endlink);
6172   sizetype_endlink = tree_cons (NULL_TREE, sizetype, endlink);
6173   /* We realloc here because sizetype could be int or unsigned.  S'ok.  */
6174   ptr_ftype_sizetype = build_function_type (ptr_type_node, sizetype_endlink);
6175
6176   void_ftype = build_function_type (void_type_node, endlink);
6177   void_ftype_int = build_function_type (void_type_node, int_endlink);
6178   void_ftype_ptr
6179     = build_function_type (void_type_node,
6180                            tree_cons (NULL_TREE, ptr_type_node, endlink));
6181   void_ftype_ptr
6182     = build_exception_variant (void_ftype_ptr,
6183                                tree_cons (NULL_TREE, NULL_TREE, NULL_TREE));
6184
6185   float_ftype_float
6186     = build_function_type (float_type_node,
6187                            tree_cons (NULL_TREE, float_type_node, endlink));
6188
6189   double_ftype_double
6190     = build_function_type (double_type_node, double_endlink);
6191
6192   ldouble_ftype_ldouble
6193     = build_function_type (long_double_type_node,
6194                            tree_cons (NULL_TREE, long_double_type_node,
6195                                       endlink));
6196
6197   double_ftype_double_double
6198     = build_function_type (double_type_node,
6199                            tree_cons (NULL_TREE, double_type_node,
6200                                       double_endlink));
6201
6202   int_ftype_int
6203     = build_function_type (integer_type_node, int_endlink);
6204
6205   long_ftype_long
6206     = build_function_type (long_integer_type_node,
6207                            tree_cons (NULL_TREE, long_integer_type_node,
6208                                       endlink));
6209
6210   int_ftype_cptr_cptr_sizet
6211     = build_function_type (integer_type_node,
6212                            tree_cons (NULL_TREE, const_ptr_type_node,
6213                                       tree_cons (NULL_TREE, const_ptr_type_node,
6214                                                  tree_cons (NULL_TREE,
6215                                                             sizetype,
6216                                                             endlink))));
6217
6218   string_ftype_ptr_ptr          /* strcpy prototype */
6219     = build_function_type (string_type_node,
6220                            tree_cons (NULL_TREE, string_type_node,
6221                                       tree_cons (NULL_TREE,
6222                                                  const_string_type_node,
6223                                                  endlink)));
6224
6225   int_ftype_string_string       /* strcmp prototype */
6226     = build_function_type (integer_type_node,
6227                            tree_cons (NULL_TREE, const_string_type_node,
6228                                       tree_cons (NULL_TREE,
6229                                                  const_string_type_node,
6230                                                  endlink)));
6231
6232   strlen_ftype          /* strlen prototype */
6233     = build_function_type (sizetype,
6234                            tree_cons (NULL_TREE, const_string_type_node,
6235                                       endlink));
6236
6237   memcpy_ftype  /* memcpy prototype */
6238     = build_function_type (ptr_type_node,
6239                            tree_cons (NULL_TREE, ptr_type_node,
6240                                       tree_cons (NULL_TREE, const_ptr_type_node,
6241                                                  sizetype_endlink)));
6242
6243   if (flag_huge_objects)
6244     delta_type_node = long_integer_type_node;
6245   else
6246     delta_type_node = short_integer_type_node;
6247
6248   builtin_function ("__builtin_constant_p", default_function_type,
6249                     BUILT_IN_CONSTANT_P, NULL_PTR);
6250
6251   builtin_return_address_fndecl
6252     = builtin_function ("__builtin_return_address", ptr_ftype_unsigned,
6253                         BUILT_IN_RETURN_ADDRESS, NULL_PTR);
6254
6255   builtin_function ("__builtin_frame_address", ptr_ftype_unsigned,
6256                     BUILT_IN_FRAME_ADDRESS, NULL_PTR);
6257
6258   builtin_function ("__builtin_alloca", ptr_ftype_sizetype,
6259                     BUILT_IN_ALLOCA, "alloca");
6260   builtin_function ("__builtin_ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
6261   /* Define alloca, ffs as builtins.
6262      Declare _exit just to mark it as volatile.  */
6263   if (! flag_no_builtin && !flag_no_nonansi_builtin)
6264     {
6265       temp = builtin_function ("alloca", ptr_ftype_sizetype,
6266                                BUILT_IN_ALLOCA, NULL_PTR);
6267       /* Suppress error if redefined as a non-function.  */
6268       DECL_BUILT_IN_NONANSI (temp) = 1;
6269       temp = builtin_function ("ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
6270       /* Suppress error if redefined as a non-function.  */
6271       DECL_BUILT_IN_NONANSI (temp) = 1;
6272       temp = builtin_function ("_exit", void_ftype_int,
6273                                NOT_BUILT_IN, NULL_PTR);
6274       TREE_THIS_VOLATILE (temp) = 1;
6275       TREE_SIDE_EFFECTS (temp) = 1;
6276       /* Suppress error if redefined as a non-function.  */
6277       DECL_BUILT_IN_NONANSI (temp) = 1;
6278     }
6279
6280   builtin_function ("__builtin_abs", int_ftype_int, BUILT_IN_ABS, NULL_PTR);
6281   builtin_function ("__builtin_fabsf", float_ftype_float, BUILT_IN_FABS,
6282                     NULL_PTR);
6283   builtin_function ("__builtin_fabs", double_ftype_double, BUILT_IN_FABS,
6284                     NULL_PTR);
6285   builtin_function ("__builtin_fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
6286                     NULL_PTR);
6287   builtin_function ("__builtin_labs", long_ftype_long,
6288                     BUILT_IN_LABS, NULL_PTR);
6289   builtin_function ("__builtin_saveregs", ptr_ftype,
6290                     BUILT_IN_SAVEREGS, NULL_PTR);
6291   builtin_function ("__builtin_classify_type", default_function_type,
6292                     BUILT_IN_CLASSIFY_TYPE, NULL_PTR);
6293   builtin_function ("__builtin_next_arg", ptr_ftype,
6294                     BUILT_IN_NEXT_ARG, NULL_PTR);
6295   builtin_function ("__builtin_args_info", int_ftype_int,
6296                     BUILT_IN_ARGS_INFO, NULL_PTR);
6297   builtin_function ("__builtin_setjmp",
6298                     build_function_type (integer_type_node,
6299                                          tree_cons (NULL_TREE, ptr_type_node,
6300                                                     endlink)),
6301                     BUILT_IN_SETJMP, NULL_PTR);
6302   builtin_function ("__builtin_longjmp",
6303                     build_function_type (integer_type_node,
6304                                          tree_cons (NULL_TREE, ptr_type_node,
6305                                                     tree_cons (NULL_TREE,
6306                                                                integer_type_node,
6307                                                                endlink))),
6308                     BUILT_IN_LONGJMP, NULL_PTR);
6309
6310   /* Untyped call and return.  */
6311   builtin_function ("__builtin_apply_args", ptr_ftype,
6312                     BUILT_IN_APPLY_ARGS, NULL_PTR);
6313
6314   temp = tree_cons (NULL_TREE,
6315                     build_pointer_type (build_function_type (void_type_node,
6316                                                              NULL_TREE)),
6317                     tree_cons (NULL_TREE, ptr_ftype_sizetype, NULL_TREE));
6318   builtin_function ("__builtin_apply",
6319                     build_function_type (ptr_type_node, temp),
6320                     BUILT_IN_APPLY, NULL_PTR);
6321   builtin_function ("__builtin_return", void_ftype_ptr,
6322                     BUILT_IN_RETURN, NULL_PTR);
6323
6324   /* Currently under experimentation.  */
6325   builtin_function ("__builtin_memcpy", memcpy_ftype,
6326                     BUILT_IN_MEMCPY, "memcpy");
6327   builtin_function ("__builtin_memcmp", int_ftype_cptr_cptr_sizet,
6328                     BUILT_IN_MEMCMP, "memcmp");
6329   builtin_function ("__builtin_strcmp", int_ftype_string_string,
6330                     BUILT_IN_STRCMP, "strcmp");
6331   builtin_function ("__builtin_strcpy", string_ftype_ptr_ptr,
6332                     BUILT_IN_STRCPY, "strcpy");
6333   builtin_function ("__builtin_strlen", strlen_ftype,
6334                     BUILT_IN_STRLEN, "strlen");
6335   builtin_function ("__builtin_sqrtf", float_ftype_float, 
6336                     BUILT_IN_FSQRT, "sqrtf");
6337   builtin_function ("__builtin_fsqrt", double_ftype_double,
6338                     BUILT_IN_FSQRT, NULL_PTR);
6339   builtin_function ("__builtin_sqrtl", ldouble_ftype_ldouble, 
6340                     BUILT_IN_FSQRT, "sqrtl");
6341   builtin_function ("__builtin_sinf", float_ftype_float, 
6342                     BUILT_IN_SIN, "sinf");
6343   builtin_function ("__builtin_sin", double_ftype_double, 
6344                     BUILT_IN_SIN, "sin");
6345   builtin_function ("__builtin_sinl", ldouble_ftype_ldouble, 
6346                     BUILT_IN_SIN, "sinl");
6347   builtin_function ("__builtin_cosf", float_ftype_float, 
6348                     BUILT_IN_COS, "cosf");
6349   builtin_function ("__builtin_cos", double_ftype_double, 
6350                     BUILT_IN_COS, "cos");
6351   builtin_function ("__builtin_cosl", ldouble_ftype_ldouble, 
6352                     BUILT_IN_COS, "cosl");
6353
6354   if (!flag_no_builtin)
6355     {
6356       builtin_function ("abs", int_ftype_int, BUILT_IN_ABS, NULL_PTR);
6357       builtin_function ("fabs", double_ftype_double, BUILT_IN_FABS, NULL_PTR);
6358       builtin_function ("labs", long_ftype_long, BUILT_IN_LABS, NULL_PTR);
6359       builtin_function ("fabsf", float_ftype_float, BUILT_IN_FABS, NULL_PTR);
6360       builtin_function ("fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
6361                         NULL_PTR);
6362       builtin_function ("memcpy", memcpy_ftype, BUILT_IN_MEMCPY, NULL_PTR);
6363       builtin_function ("memcmp", int_ftype_cptr_cptr_sizet, BUILT_IN_MEMCMP,
6364                         NULL_PTR);
6365       builtin_function ("strcmp", int_ftype_string_string, BUILT_IN_STRCMP,
6366                         NULL_PTR);
6367       builtin_function ("strcpy", string_ftype_ptr_ptr, BUILT_IN_STRCPY,
6368                         NULL_PTR);
6369       builtin_function ("strlen", strlen_ftype, BUILT_IN_STRLEN, NULL_PTR);
6370       builtin_function ("sqrtf", float_ftype_float, BUILT_IN_FSQRT, NULL_PTR);
6371       builtin_function ("sqrt", double_ftype_double, BUILT_IN_FSQRT, NULL_PTR);
6372       builtin_function ("sqrtl", ldouble_ftype_ldouble, BUILT_IN_FSQRT,
6373                         NULL_PTR);
6374       builtin_function ("sinf", float_ftype_float, BUILT_IN_SIN, NULL_PTR);
6375       builtin_function ("sin", double_ftype_double, BUILT_IN_SIN, NULL_PTR);
6376       builtin_function ("sinl", ldouble_ftype_ldouble, BUILT_IN_SIN, NULL_PTR);
6377       builtin_function ("cosf", float_ftype_float, BUILT_IN_COS, NULL_PTR);
6378       builtin_function ("cos", double_ftype_double, BUILT_IN_COS, NULL_PTR);
6379       builtin_function ("cosl", ldouble_ftype_ldouble, BUILT_IN_COS, NULL_PTR);
6380
6381       /* Declare these functions volatile
6382          to avoid spurious "control drops through" warnings.  */
6383       temp = builtin_function ("abort", void_ftype,
6384                                NOT_BUILT_IN, NULL_PTR);
6385       TREE_THIS_VOLATILE (temp) = 1;
6386       TREE_SIDE_EFFECTS (temp) = 1;
6387       /* Well, these are actually ANSI, but we can't set DECL_BUILT_IN on
6388          them...  */
6389       DECL_BUILT_IN_NONANSI (temp) = 1;
6390       temp = builtin_function ("exit", void_ftype_int,
6391                                NOT_BUILT_IN, NULL_PTR);
6392       TREE_THIS_VOLATILE (temp) = 1;
6393       TREE_SIDE_EFFECTS (temp) = 1;
6394       DECL_BUILT_IN_NONANSI (temp) = 1;
6395     }
6396
6397 #if 0
6398   /* Support for these has not been written in either expand_builtin
6399      or build_function_call.  */
6400   builtin_function ("__builtin_div", default_ftype, BUILT_IN_DIV, NULL_PTR);
6401   builtin_function ("__builtin_ldiv", default_ftype, BUILT_IN_LDIV, NULL_PTR);
6402   builtin_function ("__builtin_ffloor", double_ftype_double, BUILT_IN_FFLOOR,
6403                     NULL_PTR);
6404   builtin_function ("__builtin_fceil", double_ftype_double, BUILT_IN_FCEIL,
6405                     NULL_PTR);
6406   builtin_function ("__builtin_fmod", double_ftype_double_double,
6407                     BUILT_IN_FMOD, NULL_PTR);
6408   builtin_function ("__builtin_frem", double_ftype_double_double,
6409                     BUILT_IN_FREM, NULL_PTR);
6410   builtin_function ("__builtin_memset", ptr_ftype_ptr_int_int,
6411                     BUILT_IN_MEMSET, NULL_PTR);
6412   builtin_function ("__builtin_getexp", double_ftype_double, BUILT_IN_GETEXP,
6413                     NULL_PTR);
6414   builtin_function ("__builtin_getman", double_ftype_double, BUILT_IN_GETMAN,
6415                     NULL_PTR);
6416 #endif
6417
6418   /* C++ extensions */
6419
6420   unknown_type_node = make_node (UNKNOWN_TYPE);
6421   record_unknown_type (unknown_type_node, "unknown type");
6422
6423   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
6424   TREE_TYPE (unknown_type_node) = unknown_type_node;
6425
6426   TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
6427
6428   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6429      result.  */
6430   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6431   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6432
6433   /* This is for handling opaque types in signatures.  */
6434   opaque_type_node = copy_node (ptr_type_node);
6435   TYPE_MAIN_VARIANT (opaque_type_node) = opaque_type_node;
6436   record_builtin_type (RID_MAX, 0, opaque_type_node);
6437
6438   /* This is special for C++ so functions can be overloaded.  */
6439   wchar_type_node
6440     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (WCHAR_TYPE)));
6441   wchar_type_size = TYPE_PRECISION (wchar_type_node);
6442   signed_wchar_type_node = make_signed_type (wchar_type_size);
6443   unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
6444   wchar_type_node
6445     = TREE_UNSIGNED (wchar_type_node)
6446       ? unsigned_wchar_type_node
6447       : signed_wchar_type_node;
6448   record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
6449
6450   /* Artificial declaration of wchar_t -- can be bashed */
6451   wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
6452                                 wchar_type_node);
6453   pushdecl (wchar_decl_node);
6454
6455   /* This is for wide string constants.  */
6456   wchar_array_type_node
6457     = build_array_type (wchar_type_node, array_domain_type);
6458
6459   if (flag_vtable_thunks)
6460     {
6461       /* Make sure we get a unique function type, so we can give
6462          its pointer type a name.  (This wins for gdb.) */
6463       tree vfunc_type = make_node (FUNCTION_TYPE);
6464       TREE_TYPE (vfunc_type) = integer_type_node;
6465       TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6466       layout_type (vfunc_type);
6467
6468       vtable_entry_type = build_pointer_type (vfunc_type);
6469     }
6470   else
6471     {
6472       vtable_entry_type = make_lang_type (RECORD_TYPE);
6473       fields[0] = build_lang_field_decl (FIELD_DECL, delta_identifier,
6474                                          delta_type_node);
6475       fields[1] = build_lang_field_decl (FIELD_DECL, index_identifier,
6476                                          delta_type_node);
6477       fields[2] = build_lang_field_decl (FIELD_DECL, pfn_identifier,
6478                                          ptr_type_node);
6479       finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6480                            double_type_node);
6481
6482       /* Make this part of an invisible union.  */
6483       fields[3] = copy_node (fields[2]);
6484       TREE_TYPE (fields[3]) = delta_type_node;
6485       DECL_NAME (fields[3]) = delta2_identifier;
6486       DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6487       DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
6488       TREE_UNSIGNED (fields[3]) = 0;
6489       TREE_CHAIN (fields[2]) = fields[3];
6490       vtable_entry_type = build_qualified_type (vtable_entry_type,
6491                                                 TYPE_QUAL_CONST);
6492     }
6493   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
6494
6495   vtbl_type_node
6496     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
6497   layout_type (vtbl_type_node);
6498   vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
6499   record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
6500   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6501   layout_type (vtbl_ptr_type_node);
6502   record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
6503
6504   /* Simplify life by making a "sigtable_entry_type".  Give its
6505      fields names so that the debugger can use them.  */
6506
6507   if (flag_handle_signatures)
6508     {
6509       sigtable_entry_type = make_lang_type (RECORD_TYPE);
6510       fields[0] = build_lang_field_decl (FIELD_DECL, tag_identifier,
6511                                          delta_type_node);
6512       fields[1] = build_lang_field_decl (FIELD_DECL, vb_off_identifier,
6513                                          delta_type_node);
6514       fields[2] = build_lang_field_decl (FIELD_DECL, delta_identifier,
6515                                          delta_type_node);
6516       fields[3] = build_lang_field_decl (FIELD_DECL, index_identifier,
6517                                          delta_type_node);
6518       fields[4] = build_lang_field_decl (FIELD_DECL, pfn_identifier,
6519                                          ptr_type_node);
6520
6521       /* Set the alignment to the max of the alignment of ptr_type_node and
6522          delta_type_node.  Double alignment wastes a word on the Sparc.  */
6523       finish_builtin_type (sigtable_entry_type, SIGTABLE_PTR_TYPE, fields, 4,
6524                            (TYPE_ALIGN (ptr_type_node) > TYPE_ALIGN (delta_type_node))
6525                            ? ptr_type_node
6526                            : delta_type_node);
6527
6528       /* Make this part of an invisible union.  */
6529       fields[5] = copy_node (fields[4]);
6530       TREE_TYPE (fields[5]) = delta_type_node;
6531       DECL_NAME (fields[5]) = vt_off_identifier;
6532       DECL_MODE (fields[5]) = TYPE_MODE (delta_type_node);
6533       DECL_SIZE (fields[5]) = TYPE_SIZE (delta_type_node);
6534       TREE_UNSIGNED (fields[5]) = 0;
6535       TREE_CHAIN (fields[4]) = fields[5];
6536
6537       sigtable_entry_type = build_qualified_type (sigtable_entry_type, 
6538                                                   TYPE_QUAL_CONST);
6539       record_builtin_type (RID_MAX, SIGTABLE_PTR_TYPE, sigtable_entry_type);
6540     }
6541
6542   std_node = build_decl (NAMESPACE_DECL, 
6543                          get_identifier (flag_honor_std ? "fake std":"std"),
6544                          void_type_node);
6545   pushdecl (std_node);
6546
6547   global_type_node = make_node (LANG_TYPE);
6548   record_unknown_type (global_type_node, "global type");
6549
6550   /* Now, C++.  */
6551   current_lang_name = lang_name_cplusplus;
6552
6553   {
6554     tree bad_alloc_type_node, newtype, deltype;
6555     if (flag_honor_std)
6556       push_namespace (get_identifier ("std"));
6557     bad_alloc_type_node = xref_tag
6558       (class_type_node, get_identifier ("bad_alloc"), 1);
6559     if (flag_honor_std)
6560       pop_namespace ();
6561     newtype = build_exception_variant
6562       (ptr_ftype_sizetype, build_tree_list (NULL_TREE, bad_alloc_type_node));
6563     deltype = build_exception_variant
6564       (void_ftype_ptr, build_tree_list (NULL_TREE, NULL_TREE));
6565     auto_function (ansi_opname[(int) NEW_EXPR], newtype, NOT_BUILT_IN);
6566     auto_function (ansi_opname[(int) VEC_NEW_EXPR], newtype, NOT_BUILT_IN);
6567     global_delete_fndecl
6568       = auto_function (ansi_opname[(int) DELETE_EXPR], deltype, NOT_BUILT_IN);
6569     auto_function (ansi_opname[(int) VEC_DELETE_EXPR], deltype, NOT_BUILT_IN);
6570   }
6571
6572   abort_fndecl
6573     = define_function ("__pure_virtual", void_ftype,
6574                        NOT_BUILT_IN, 0, 0);
6575
6576   /* Perform other language dependent initializations.  */
6577   init_class_processing ();
6578   init_init_processing ();
6579   init_search_processing ();
6580   if (flag_rtti)
6581     init_rtti_processing ();
6582
6583   if (flag_exceptions)
6584     init_exception_processing ();
6585   if (flag_no_inline)
6586     {
6587       flag_inline_functions = 0;
6588     }
6589
6590   if (! supports_one_only ())
6591     flag_weak = 0;
6592
6593   /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__.  */
6594   declare_function_name ();
6595
6596   /* Prepare to check format strings against argument lists.  */
6597   init_function_format_info ();
6598
6599   /* Show we use EH for cleanups.  */
6600   using_eh_for_cleanups ();
6601
6602   print_error_function = lang_print_error_function;
6603   lang_get_alias_set = &c_get_alias_set;
6604
6605   /* Maintain consistency.  Perhaps we should just complain if they
6606      say -fwritable-strings?  */
6607   if (flag_writable_strings)
6608     flag_const_strings = 0;
6609 }
6610
6611 /* Function to print any language-specific context for an error message.  */
6612
6613 static void
6614 lang_print_error_function (file)
6615      char *file;
6616 {
6617   default_print_error_function (file);
6618   maybe_print_template_context ();
6619 }
6620
6621 /* Make a definition for a builtin function named NAME and whose data type
6622    is TYPE.  TYPE should be a function type with argument types.
6623    FUNCTION_CODE tells later passes how to compile calls to this function.
6624    See tree.h for its possible values.
6625
6626    If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6627    the name to be called if we can't opencode the function.  */
6628
6629 tree
6630 define_function (name, type, function_code, pfn, library_name)
6631      char *name;
6632      tree type;
6633      enum built_in_function function_code;
6634      void (*pfn) PROTO((tree));
6635      char *library_name;
6636 {
6637   tree decl = build_lang_decl (FUNCTION_DECL, get_identifier (name), type);
6638   DECL_EXTERNAL (decl) = 1;
6639   TREE_PUBLIC (decl) = 1;
6640   DECL_ARTIFICIAL (decl) = 1;
6641
6642   my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
6643   DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
6644
6645   /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6646      we cannot change DECL_ASSEMBLER_NAME until we have installed this
6647      function in the namespace.  */
6648   if (pfn) (*pfn) (decl);
6649   if (library_name)
6650     DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
6651   make_function_rtl (decl);
6652   if (function_code != NOT_BUILT_IN)
6653     {
6654       DECL_BUILT_IN (decl) = 1;
6655       DECL_FUNCTION_CODE (decl) = function_code;
6656     }
6657   return decl;
6658 }
6659 \f
6660 /* When we call finish_struct for an anonymous union, we create
6661    default copy constructors and such.  But, an anonymous union
6662    shouldn't have such things; this function undoes the damage to the
6663    anonymous union type T.
6664
6665    (The reason that we create the synthesized methods is that we don't
6666    distinguish `union { int i; }' from `typedef union { int i; } U'.
6667    The first is an anonymous union; the second is just an ordinary
6668    union type.)  */
6669
6670 void
6671 fixup_anonymous_union (t)
6672      tree t;
6673 {
6674   tree *q;
6675
6676   /* Wipe out memory of synthesized methods */
6677   TYPE_HAS_CONSTRUCTOR (t) = 0;
6678   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6679   TYPE_HAS_INIT_REF (t) = 0;
6680   TYPE_HAS_CONST_INIT_REF (t) = 0;
6681   TYPE_HAS_ASSIGN_REF (t) = 0;
6682   TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6683
6684   /* Splice the implicitly generated functions out of the TYPE_METHODS
6685      list.  */
6686   q = &TYPE_METHODS (t);
6687   while (*q)
6688     {
6689       if (DECL_ARTIFICIAL (*q))
6690         *q = TREE_CHAIN (*q);
6691       else
6692         q = &TREE_CHAIN (*q);
6693     }
6694
6695   /* ANSI C++ June 5 1992 WP 9.5.3.  Anonymous unions may not have
6696      function members.  */
6697   if (TYPE_METHODS (t))
6698     error ("an anonymous union cannot have function members");
6699 }
6700
6701 /* Make sure that a declaration with no declarator is well-formed, i.e.
6702    just defines a tagged type or anonymous union.
6703
6704    Returns the type defined, if any.  */
6705
6706 tree
6707 check_tag_decl (declspecs)
6708      tree declspecs;
6709 {
6710   int found_type = 0;
6711   tree ob_modifier = NULL_TREE;
6712   register tree link;
6713   register tree t = NULL_TREE;
6714
6715   for (link = declspecs; link; link = TREE_CHAIN (link))
6716     {
6717       register tree value = TREE_VALUE (link);
6718
6719       if (TYPE_P (value))
6720         {
6721           ++found_type;
6722
6723           if (IS_AGGR_TYPE (value) || TREE_CODE (value) == ENUMERAL_TYPE)
6724             {
6725               my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
6726               t = value;
6727             }
6728         }
6729       else if (value == ridpointers[(int) RID_FRIEND])
6730         {
6731           if (current_class_type == NULL_TREE
6732               || current_scope () != current_class_type)
6733             ob_modifier = value;
6734         }
6735       else if (value == ridpointers[(int) RID_STATIC]
6736                || value == ridpointers[(int) RID_EXTERN]
6737                || value == ridpointers[(int) RID_AUTO]
6738                || value == ridpointers[(int) RID_REGISTER]
6739                || value == ridpointers[(int) RID_INLINE]
6740                || value == ridpointers[(int) RID_VIRTUAL]
6741                || value == ridpointers[(int) RID_CONST]
6742                || value == ridpointers[(int) RID_VOLATILE]
6743                || value == ridpointers[(int) RID_EXPLICIT])
6744         ob_modifier = value;
6745     }
6746
6747   if (found_type > 1)
6748     error ("multiple types in one declaration");
6749
6750   /* Inside a class, we might be in a friend or access declaration.
6751      Until we have a good way of detecting the latter, don't warn.  */
6752   if (t == NULL_TREE && ! current_class_type)
6753     pedwarn ("declaration does not declare anything");
6754
6755   /* Check for an anonymous union.  We're careful
6756      accessing TYPE_IDENTIFIER because some built-in types, like
6757      pointer-to-member types, do not have TYPE_NAME.  */
6758   else if (t && TREE_CODE (t) == UNION_TYPE
6759            && TYPE_NAME (t)
6760            && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
6761     {
6762       /* Anonymous unions are objects, so they can have specifiers.  */;
6763       SET_ANON_UNION_TYPE_P (t);
6764     }
6765
6766   else if (ob_modifier)
6767     {
6768       if (ob_modifier == ridpointers[(int) RID_INLINE]
6769           || ob_modifier == ridpointers[(int) RID_VIRTUAL])
6770         cp_error ("`%D' can only be specified for functions", ob_modifier);
6771       else if (ob_modifier == ridpointers[(int) RID_FRIEND])
6772         cp_error ("`%D' can only be specified inside a class", ob_modifier);
6773       else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
6774         cp_error ("`%D' can only be specified for constructors",
6775                   ob_modifier);
6776       else
6777         cp_error ("`%D' can only be specified for objects and functions",
6778                   ob_modifier);
6779     }
6780
6781   return t;
6782 }
6783
6784 /* Called when a declaration is seen that contains no names to declare.
6785    If its type is a reference to a structure, union or enum inherited
6786    from a containing scope, shadow that tag name for the current scope
6787    with a forward reference.
6788    If its type defines a new named structure or union
6789    or defines an enum, it is valid but we need not do anything here.
6790    Otherwise, it is an error.
6791
6792    C++: may have to grok the declspecs to learn about static,
6793    complain for anonymous unions.  */
6794
6795 void
6796 shadow_tag (declspecs)
6797      tree declspecs;
6798 {
6799   tree t = check_tag_decl (declspecs);
6800
6801   if (t)
6802     maybe_process_partial_specialization (t);
6803
6804   /* This is where the variables in an anonymous union are
6805      declared.  An anonymous union declaration looks like:
6806      union { ... } ;
6807      because there is no declarator after the union, the parser
6808      sends that declaration here.  */
6809   if (t && ANON_UNION_TYPE_P (t))
6810     {
6811       fixup_anonymous_union (t);
6812
6813       if (TYPE_FIELDS (t))
6814         {
6815           tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
6816                                       NULL_TREE);
6817           finish_anon_union (decl);
6818         }
6819     }
6820 }
6821 \f
6822 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
6823
6824 tree
6825 groktypename (typename)
6826      tree typename;
6827 {
6828   if (TREE_CODE (typename) != TREE_LIST)
6829     return typename;
6830   return grokdeclarator (TREE_VALUE (typename),
6831                          TREE_PURPOSE (typename),
6832                          TYPENAME, 0, NULL_TREE);
6833 }
6834
6835 /* Decode a declarator in an ordinary declaration or data definition.
6836    This is called as soon as the type information and variable name
6837    have been parsed, before parsing the initializer if any.
6838    Here we create the ..._DECL node, fill in its type,
6839    and put it on the list of decls for the current context.
6840    The ..._DECL node is returned as the value.
6841
6842    Exception: for arrays where the length is not specified,
6843    the type is left null, to be filled in by `cp_finish_decl'.
6844
6845    Function definitions do not come here; they go to start_function
6846    instead.  However, external and forward declarations of functions
6847    do go through here.  Structure field declarations are done by
6848    grokfield and not through here.  */
6849
6850 /* Set this to zero to debug not using the temporary obstack
6851    to parse initializers.  */
6852 int debug_temp_inits = 1;
6853
6854 tree
6855 start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
6856      tree declarator, declspecs;
6857      int initialized;
6858      tree attributes, prefix_attributes;
6859 {
6860   register tree decl;
6861   register tree type, tem;
6862   tree context;
6863   extern int have_extern_spec;
6864   extern int used_extern_spec;
6865
6866 #if 0
6867   /* See code below that used this.  */
6868   int init_written = initialized;
6869 #endif
6870
6871   /* This should only be done once on the top most decl.  */
6872   if (have_extern_spec && !used_extern_spec)
6873     {
6874       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
6875                                   declspecs);
6876       used_extern_spec = 1;
6877     }
6878
6879   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
6880                          NULL_TREE);
6881   if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
6882     return NULL_TREE;
6883
6884   type = TREE_TYPE (decl);
6885
6886   if (type == error_mark_node)
6887     return NULL_TREE;
6888
6889   /* Don't lose if destructors must be executed at file-level.  */
6890   if (! processing_template_decl && TREE_STATIC (decl)
6891       && TYPE_NEEDS_DESTRUCTOR (complete_type (type))
6892       && !TREE_PERMANENT (decl))
6893     {
6894       push_obstacks (&permanent_obstack, &permanent_obstack);
6895       decl = copy_node (decl);
6896       if (TREE_CODE (type) == ARRAY_TYPE)
6897         {
6898           tree itype = TYPE_DOMAIN (type);
6899           if (itype && ! TREE_PERMANENT (itype))
6900             {
6901               itype = build_index_type (copy_to_permanent (TYPE_MAX_VALUE (itype)));
6902               type = build_cplus_array_type (TREE_TYPE (type), itype);
6903               TREE_TYPE (decl) = type;
6904             }
6905         }
6906       pop_obstacks ();
6907     }
6908
6909   context
6910     = (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
6911       ? DECL_CLASS_CONTEXT (decl)
6912       : DECL_CONTEXT (decl);
6913
6914   if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
6915       && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
6916     {
6917       /* When parsing the initializer, lookup should use the object's
6918          namespace. */
6919       push_decl_namespace (context);
6920     }
6921
6922   /* We are only interested in class contexts, later. */
6923   if (context && TREE_CODE (context) == NAMESPACE_DECL)
6924     context = NULL_TREE;
6925
6926   if (initialized)
6927     /* Is it valid for this decl to have an initializer at all?
6928        If not, set INITIALIZED to zero, which will indirectly
6929        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
6930     switch (TREE_CODE (decl))
6931       {
6932       case TYPE_DECL:
6933         /* typedef foo = bar  means give foo the same type as bar.
6934            We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
6935            Any other case of an initialization in a TYPE_DECL is an error.  */
6936         if (pedantic || list_length (declspecs) > 1)
6937           {
6938             cp_error ("typedef `%D' is initialized", decl);
6939             initialized = 0;
6940           }
6941         break;
6942
6943       case FUNCTION_DECL:
6944         cp_error ("function `%#D' is initialized like a variable", decl);
6945         initialized = 0;
6946         break;
6947
6948       default:
6949         if (! processing_template_decl)
6950           {
6951             if (type != error_mark_node)
6952               {
6953                 if (TYPE_SIZE (type) != NULL_TREE
6954                     && ! TREE_CONSTANT (TYPE_SIZE (type)))
6955                   {
6956                     cp_error
6957                       ("variable-sized object `%D' may not be initialized",
6958                        decl);
6959                     initialized = 0;
6960                   }
6961
6962                 if (TREE_CODE (type) == ARRAY_TYPE
6963                     && TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
6964                   {
6965                     cp_error
6966                       ("elements of array `%#D' have incomplete type", decl);
6967                     initialized = 0;
6968                   }
6969               }
6970           }
6971       }
6972
6973   if (initialized)
6974     {
6975       if (! toplevel_bindings_p ()
6976           && DECL_EXTERNAL (decl))
6977         cp_warning ("declaration of `%#D' has `extern' and is initialized",
6978                     decl);
6979       DECL_EXTERNAL (decl) = 0;
6980       if (toplevel_bindings_p ())
6981         TREE_STATIC (decl) = 1;
6982
6983       /* Tell `pushdecl' this is an initialized decl
6984          even though we don't yet have the initializer expression.
6985          Also tell `cp_finish_decl' it may store the real initializer.  */
6986       DECL_INITIAL (decl) = error_mark_node;
6987     }
6988
6989   if (context && TYPE_SIZE (complete_type (context)) != NULL_TREE)
6990     {
6991       pushclass (context, 2);
6992
6993       if (TREE_CODE (decl) == VAR_DECL)
6994         {
6995           tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
6996           if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
6997             cp_error ("`%#D' is not a static member of `%#T'", decl, context);
6998           else
6999             {
7000               if (DECL_CONTEXT (field) != context)
7001                 {
7002                   cp_pedwarn ("ANSI C++ does not permit `%T::%D' to be defined as `%T::%D'",
7003                               DECL_CONTEXT (field), DECL_NAME (decl),
7004                               context, DECL_NAME (decl));
7005                   DECL_CONTEXT (decl) = DECL_CONTEXT (field);
7006                 }
7007               /* Static data member are tricky; an in-class initialization
7008                  still doesn't provide a definition, so the in-class
7009                  declaration will have DECL_EXTERNAL set, but will have an
7010                  initialization.  Thus, duplicate_decls won't warn
7011                  about this situation, and so we check here.  */
7012               if (DECL_INITIAL (decl) && DECL_INITIAL (field))
7013                 cp_error ("duplicate initialization of %D", decl);
7014               if (duplicate_decls (decl, field))
7015                 decl = field;
7016             }
7017         }
7018       else
7019         {
7020           tree field = check_classfn (context, decl);
7021           if (field && duplicate_decls (decl, field))
7022             decl = field;
7023         }
7024
7025       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
7026       DECL_IN_AGGR_P (decl) = 0;
7027       if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl)) 
7028           || CLASSTYPE_USE_TEMPLATE (context))
7029         {
7030           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
7031           /* [temp.expl.spec] An explicit specialization of a static data
7032              member of a template is a definition if the declaration
7033              includes an initializer; otherwise, it is a declaration.
7034
7035              We check for processing_specialization so this only applies
7036              to the new specialization syntax.  */
7037           if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
7038             DECL_EXTERNAL (decl) = 1;
7039         }
7040
7041       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
7042         cp_pedwarn ("declaration of `%#D' outside of class is not definition",
7043                     decl);
7044     }
7045
7046 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
7047   SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
7048 #endif
7049   
7050   /* Set attributes here so if duplicate decl, will have proper attributes.  */
7051   cplus_decl_attributes (decl, attributes, prefix_attributes);
7052
7053   /* Add this decl to the current binding level, but not if it
7054      comes from another scope, e.g. a static member variable.
7055      TEM may equal DECL or it may be a previous decl of the same name.  */
7056   
7057   if ((TREE_CODE (decl) != PARM_DECL && DECL_CONTEXT (decl) != NULL_TREE 
7058        /* Definitions of namespace members outside their namespace are
7059           possible. */
7060        && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
7061       || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
7062       || TREE_CODE (type) == LANG_TYPE
7063       /* The declaration of template specializations does not affect
7064          the functions available for overload resolution, so we do not
7065          call pushdecl.  */
7066       || (TREE_CODE (decl) == FUNCTION_DECL
7067           && DECL_TEMPLATE_SPECIALIZATION (decl)))
7068     tem = decl;
7069   else
7070     tem = pushdecl (decl);
7071
7072   if (processing_template_decl)
7073     {
7074       if (! current_function_decl)
7075         tem = push_template_decl (tem);
7076       else if (minimal_parse_mode)
7077         DECL_VINDEX (tem)
7078             = build_min_nt (DECL_STMT, copy_to_permanent (declarator),
7079                             copy_to_permanent (declspecs),
7080                             NULL_TREE);
7081     }
7082
7083
7084 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7085   /* Tell the back-end to use or not use .common as appropriate.  If we say
7086      -fconserve-space, we want this to save .data space, at the expense of
7087      wrong semantics.  If we say -fno-conserve-space, we want this to
7088      produce errors about redefs; to do this we force variables into the
7089      data segment.  */
7090   DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
7091 #endif
7092   
7093   if (! processing_template_decl)
7094     start_decl_1 (tem);
7095
7096   /* Corresponding pop_obstacks is done in `cp_finish_decl'.  */
7097   push_obstacks_nochange ();
7098
7099 #if 0
7100   /* We have no way of knowing whether the initializer will need to be
7101      evaluated at run-time or not until we've parsed it, so let's just put
7102      it in the permanent obstack.  (jason) */
7103   if (init_written
7104       && ! (TREE_CODE (tem) == PARM_DECL
7105             || (TREE_READONLY (tem)
7106                 && (TREE_CODE (tem) == VAR_DECL
7107                     || TREE_CODE (tem) == FIELD_DECL))))
7108     {
7109       /* When parsing and digesting the initializer,
7110          use temporary storage.  Do this even if we will ignore the value.  */
7111       if (toplevel_bindings_p () && debug_temp_inits)
7112         {
7113           if (processing_template_decl
7114               || TYPE_NEEDS_CONSTRUCTING (type)
7115               || TREE_CODE (type) == REFERENCE_TYPE)
7116             /* In this case, the initializer must lay down in permanent
7117                storage, since it will be saved until `finish_file' is run.   */
7118             ;
7119           else
7120             temporary_allocation ();
7121         }
7122     }
7123 #endif
7124
7125   return tem;
7126 }
7127
7128 void
7129 start_decl_1 (decl)
7130      tree decl;
7131 {
7132   tree type = TREE_TYPE (decl);
7133   int initialized = (DECL_INITIAL (decl) != NULL_TREE);
7134
7135   if (type == error_mark_node)
7136     return;
7137
7138   /* If this type of object needs a cleanup, and control may
7139      jump past it, make a new binding level so that it is cleaned
7140      up only when it is initialized first.  */
7141   if (TYPE_NEEDS_DESTRUCTOR (type)
7142       && current_binding_level->more_cleanups_ok == 0)
7143     pushlevel_temporary (1);
7144
7145   if (initialized)
7146     /* Is it valid for this decl to have an initializer at all?
7147        If not, set INITIALIZED to zero, which will indirectly
7148        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
7149     {
7150       /* Don't allow initializations for incomplete types except for
7151          arrays which might be completed by the initialization.  */
7152       if (TYPE_SIZE (complete_type (type)) != NULL_TREE)
7153         ;                       /* A complete type is ok.  */
7154       else if (TREE_CODE (type) != ARRAY_TYPE)
7155         {
7156           cp_error ("variable `%#D' has initializer but incomplete type",
7157                     decl);
7158           initialized = 0;
7159           type = TREE_TYPE (decl) = error_mark_node;
7160         }
7161       else if (TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
7162         {
7163           if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
7164             cp_error ("elements of array `%#D' have incomplete type", decl);
7165           /* else we already gave an error in start_decl.  */
7166           initialized = 0;
7167         }
7168     }
7169
7170   if (!initialized
7171       && TREE_CODE (decl) != TYPE_DECL
7172       && TREE_CODE (decl) != TEMPLATE_DECL
7173       && IS_AGGR_TYPE (type) && ! DECL_EXTERNAL (decl))
7174     {
7175       if ((! processing_template_decl || ! uses_template_parms (type))
7176           && TYPE_SIZE (complete_type (type)) == NULL_TREE)
7177         {
7178           cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
7179                  decl);
7180           /* Change the type so that assemble_variable will give
7181              DECL an rtl we can live with: (mem (const_int 0)).  */
7182           type = TREE_TYPE (decl) = error_mark_node;
7183         }
7184       else
7185         {
7186           /* If any base type in the hierarchy of TYPE needs a constructor,
7187              then we set initialized to 1.  This way any nodes which are
7188              created for the purposes of initializing this aggregate
7189              will live as long as it does.  This is necessary for global
7190              aggregates which do not have their initializers processed until
7191              the end of the file.  */
7192           initialized = TYPE_NEEDS_CONSTRUCTING (type);
7193         }
7194     }
7195
7196 #if 0
7197   /* We don't do this yet for GNU C++.  */
7198   /* For a local variable, define the RTL now.  */
7199   if (! toplevel_bindings_p ()
7200       /* But not if this is a duplicate decl
7201          and we preserved the rtl from the previous one
7202          (which may or may not happen).  */
7203       && DECL_RTL (tem) == NULL_RTX)
7204     {
7205       if (TYPE_SIZE (TREE_TYPE (tem)) != NULL_TREE)
7206         expand_decl (tem);
7207       else if (TREE_CODE (TREE_TYPE (tem)) == ARRAY_TYPE
7208                && DECL_INITIAL (tem) != NULL_TREE)
7209         expand_decl (tem);
7210     }
7211 #endif
7212
7213   if (! initialized)
7214     DECL_INITIAL (decl) = NULL_TREE;
7215 }
7216
7217 /* Handle initialization of references.
7218    These three arguments are from `cp_finish_decl', and have the
7219    same meaning here that they do there.
7220
7221    Quotes on semantics can be found in ARM 8.4.3.  */
7222
7223 static void
7224 grok_reference_init (decl, type, init)
7225      tree decl, type, init;
7226 {
7227   tree tmp;
7228
7229   if (init == NULL_TREE)
7230     {
7231       if ((DECL_LANG_SPECIFIC (decl) == 0
7232            || DECL_IN_AGGR_P (decl) == 0)
7233           && ! DECL_THIS_EXTERN (decl))
7234         {
7235           cp_error ("`%D' declared as reference but not initialized", decl);
7236           if (TREE_CODE (decl) == VAR_DECL)
7237             SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
7238         }
7239       return;
7240     }
7241
7242   if (init == error_mark_node)
7243     return;
7244
7245   if (TREE_CODE (type) == REFERENCE_TYPE
7246       && TREE_CODE (init) == CONSTRUCTOR)
7247     {
7248       cp_error ("ANSI C++ forbids use of initializer list to initialize reference `%D'", decl);
7249       return;
7250     }
7251
7252   if (TREE_CODE (init) == TREE_LIST)
7253     init = build_compound_expr (init);
7254
7255   if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
7256     init = convert_from_reference (init);
7257
7258   if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
7259       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
7260     {
7261       /* Note: default conversion is only called in very special cases.  */
7262       init = default_conversion (init);
7263     }
7264
7265   tmp = convert_to_reference
7266     (type, init, CONV_IMPLICIT,
7267      LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
7268
7269   if (tmp == error_mark_node)
7270     goto fail;
7271   else if (tmp != NULL_TREE)
7272     {
7273       init = tmp;
7274       DECL_INITIAL (decl) = save_expr (init);
7275     }
7276   else
7277     {
7278       cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
7279       goto fail;
7280     }
7281
7282   /* ?? Can this be optimized in some cases to
7283      hand back the DECL_INITIAL slot??  */
7284   if (TYPE_SIZE (TREE_TYPE (type)))
7285     {
7286       init = convert_from_reference (decl);
7287       if (TREE_PERMANENT (decl))
7288         init = copy_to_permanent (init);
7289       SET_DECL_REFERENCE_SLOT (decl, init);
7290     }
7291
7292   if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
7293     {
7294       expand_static_init (decl, DECL_INITIAL (decl));
7295       DECL_INITIAL (decl) = NULL_TREE;
7296     }
7297   return;
7298
7299  fail:
7300   if (TREE_CODE (decl) == VAR_DECL)
7301     SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
7302   return;
7303 }
7304
7305 /* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7306    mucking with forces it does not comprehend (i.e. initialization with a
7307    constructor).  If we are at global scope and won't go into COMMON, fill
7308    it in with a dummy CONSTRUCTOR to force the variable into .data;
7309    otherwise we can use error_mark_node.  */
7310
7311 static tree
7312 obscure_complex_init (decl, init)
7313      tree decl, init;
7314 {
7315   if (! flag_no_inline && TREE_STATIC (decl))
7316     {
7317       if (extract_init (decl, init))
7318         return NULL_TREE;
7319     }
7320
7321 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7322   if (toplevel_bindings_p () && ! DECL_COMMON (decl))
7323     DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7324                                  NULL_TREE);
7325   else
7326 #endif
7327     DECL_INITIAL (decl) = error_mark_node;
7328
7329   return init;
7330 }
7331
7332 /* Issue an error message if DECL is an uninitialized const variable.  */
7333
7334 static void
7335 check_for_uninitialized_const_var (decl)
7336      tree decl;
7337 {
7338   tree type = TREE_TYPE (decl);
7339
7340   /* ``Unless explicitly declared extern, a const object does not have
7341      external linkage and must be initialized. ($8.4; $12.1)'' ARM
7342      7.1.6 */
7343   if (TREE_CODE (decl) == VAR_DECL
7344       && TREE_CODE (type) != REFERENCE_TYPE
7345       && CP_TYPE_CONST_P (type)
7346       && !TYPE_NEEDS_CONSTRUCTING (type)
7347       && !DECL_INITIAL (decl))
7348     cp_error ("uninitialized const `%D'", decl);
7349 }
7350
7351 /* Finish processing of a declaration;
7352    install its line number and initial value.
7353    If the length of an array type is not known before,
7354    it must be determined now, from the initial value, or it is an error.
7355
7356    Call `pop_obstacks' iff NEED_POP is nonzero.
7357
7358    For C++, `cp_finish_decl' must be fairly evasive:  it must keep initializers
7359    for aggregates that have constructors alive on the permanent obstack,
7360    so that the global initializing functions can be written at the end.
7361
7362    INIT0 holds the value of an initializer that should be allowed to escape
7363    the normal rules.
7364
7365    FLAGS is LOOKUP_ONLYCONVERTING is the = init syntax was used, else 0
7366    if the (init) syntax was used.
7367
7368    For functions that take default parameters, DECL points to its
7369    "maximal" instantiation.  `cp_finish_decl' must then also declared its
7370    subsequently lower and lower forms of instantiation, checking for
7371    ambiguity as it goes.  This can be sped up later.  */
7372
7373 void
7374 cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
7375      tree decl, init;
7376      tree asmspec_tree;
7377      int need_pop;
7378      int flags;
7379 {
7380   register tree type;
7381   tree cleanup = NULL_TREE, ttype = NULL_TREE;
7382   int was_incomplete;
7383   int temporary = allocation_temporary_p ();
7384   char *asmspec = NULL;
7385   int was_readonly = 0;
7386   int already_used = 0;
7387
7388   /* If this is 0, then we did not change obstacks.  */
7389   if (! decl)
7390     {
7391       if (init)
7392         error ("assignment (not initialization) in declaration");
7393       return;
7394     }
7395
7396   /* If a name was specified, get the string.  */
7397   if (asmspec_tree)
7398       asmspec = TREE_STRING_POINTER (asmspec_tree);
7399
7400   if (init && TREE_CODE (init) == NAMESPACE_DECL)
7401     {
7402       cp_error ("Cannot initialize `%D' to namespace `%D'",
7403                 decl, init);
7404       init = NULL_TREE;
7405     }
7406
7407   if (current_class_type
7408       && DECL_REAL_CONTEXT (decl) == current_class_type
7409       && TYPE_BEING_DEFINED (current_class_type)
7410       && (DECL_INITIAL (decl) || init))
7411     DECL_DEFINED_IN_CLASS_P (decl) = 1;
7412
7413   if (TREE_CODE (decl) == VAR_DECL 
7414       && DECL_CONTEXT (decl)
7415       && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
7416       && DECL_CONTEXT (decl) != current_namespace
7417       && init)
7418     {
7419       /* Leave the namespace of the object. */
7420       pop_decl_namespace ();
7421     }
7422
7423   /* If the type of the thing we are declaring either has
7424      a constructor, or has a virtual function table pointer,
7425      AND its initialization was accepted by `start_decl',
7426      then we stayed on the permanent obstack through the
7427      declaration, otherwise, changed obstacks as GCC would.  */
7428
7429   type = TREE_TYPE (decl);
7430
7431   if (type == error_mark_node)
7432     {
7433       if (toplevel_bindings_p () && temporary)
7434         end_temporary_allocation ();
7435
7436       return;
7437     }
7438
7439   if (TYPE_HAS_MUTABLE_P (type))
7440     TREE_READONLY (decl) = 0;
7441   
7442   if (processing_template_decl)
7443     {
7444       if (init && DECL_INITIAL (decl))
7445         DECL_INITIAL (decl) = init;
7446       if (minimal_parse_mode && ! DECL_ARTIFICIAL (decl))
7447         {
7448           tree stmt = DECL_VINDEX (decl);
7449           /* If the decl is declaring a member of a local class (in a
7450              template function), the DECL_VINDEX will either be NULL,
7451              or it will be an actual virtual function index, not a
7452              DECL_STMT.  */
7453           if (stmt != NULL_TREE && TREE_CODE (stmt) == DECL_STMT)
7454             {
7455               DECL_VINDEX (decl) = NULL_TREE;
7456               TREE_OPERAND (stmt, 2) = copy_to_permanent (init);
7457               add_tree (stmt);
7458             }
7459         }
7460
7461       goto finish_end0;
7462     }
7463   /* Take care of TYPE_DECLs up front.  */
7464   if (TREE_CODE (decl) == TYPE_DECL)
7465     {
7466       if (init && DECL_INITIAL (decl))
7467         {
7468           /* typedef foo = bar; store the type of bar as the type of foo.  */
7469           TREE_TYPE (decl) = type = TREE_TYPE (init);
7470           DECL_INITIAL (decl) = init = NULL_TREE;
7471         }
7472       if (type != error_mark_node
7473           && IS_AGGR_TYPE (type) && DECL_NAME (decl))
7474         {
7475           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7476             cp_warning ("shadowing previous type declaration of `%#D'", decl);
7477           set_identifier_type_value (DECL_NAME (decl), type);
7478           CLASSTYPE_GOT_SEMICOLON (type) = 1;
7479         }
7480       GNU_xref_decl (current_function_decl, decl);
7481
7482       /* If we have installed this as the canonical typedef for this
7483          type, and that type has not been defined yet, delay emitting
7484          the debug information for it, as we will emit it later.  */
7485       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7486           && TYPE_SIZE (TREE_TYPE (decl)) == NULL_TREE)
7487         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7488
7489       rest_of_decl_compilation (decl, NULL_PTR,
7490                                 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
7491       goto finish_end;
7492     }
7493   if (TREE_CODE (decl) != FUNCTION_DECL)
7494     {
7495       ttype = target_type (type);
7496     }
7497
7498   if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
7499       && TYPE_NEEDS_CONSTRUCTING (type))
7500     {
7501
7502       /* Currently, GNU C++ puts constants in text space, making them
7503          impossible to initialize.  In the future, one would hope for
7504          an operating system which understood the difference between
7505          initialization and the running of a program.  */
7506       was_readonly = 1;
7507       TREE_READONLY (decl) = 0;
7508     }
7509
7510   if (TREE_CODE (decl) == FIELD_DECL)
7511     {
7512       if (init && init != error_mark_node)
7513         my_friendly_assert (TREE_PERMANENT (init), 147);
7514
7515       if (asmspec)
7516         {
7517           /* This must override the asm specifier which was placed
7518              by grokclassfn.  Lay this out fresh.  */
7519           DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
7520           DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7521           make_decl_rtl (decl, asmspec, 0);
7522         }
7523     }
7524   /* If `start_decl' didn't like having an initialization, ignore it now.  */
7525   else if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7526     init = NULL_TREE;
7527   else if (DECL_EXTERNAL (decl))
7528     ;
7529   else if (TREE_CODE (type) == REFERENCE_TYPE
7530            || (TYPE_LANG_SPECIFIC (type) && IS_SIGNATURE_REFERENCE (type)))
7531     {
7532       if (TREE_STATIC (decl))
7533         make_decl_rtl (decl, NULL_PTR,
7534                        toplevel_bindings_p ()
7535                        || pseudo_global_level_p ());
7536       grok_reference_init (decl, type, init);
7537       init = NULL_TREE;
7538     }
7539
7540   GNU_xref_decl (current_function_decl, decl);
7541
7542   if (TREE_CODE (decl) == FIELD_DECL)
7543     ;
7544   else if (TREE_CODE (decl) == CONST_DECL)
7545     {
7546       my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7547
7548       DECL_INITIAL (decl) = init;
7549
7550       /* This will keep us from needing to worry about our obstacks.  */
7551       my_friendly_assert (init != NULL_TREE, 149);
7552       init = NULL_TREE;
7553     }
7554   else if (init)
7555     {
7556       if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7557         {
7558           if (TREE_CODE (type) == ARRAY_TYPE)
7559             init = digest_init (type, init, (tree *) 0);
7560           else if (TREE_CODE (init) == CONSTRUCTOR
7561                    && TREE_HAS_CONSTRUCTOR (init))
7562             {
7563               if (TYPE_NON_AGGREGATE_CLASS (type))
7564                 {
7565                   cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7566                             decl);
7567                   init = error_mark_node;
7568                 }
7569               else
7570                 goto dont_use_constructor;
7571             }
7572         }
7573       else
7574         {
7575         dont_use_constructor:
7576           if (TREE_CODE (init) != TREE_VEC)
7577             init = store_init_value (decl, init);
7578         }
7579
7580       if (init)
7581         /* We must hide the initializer so that expand_decl
7582            won't try to do something it does not understand.  */
7583         init = obscure_complex_init (decl, init);
7584     }
7585   else if (DECL_EXTERNAL (decl))
7586     ;
7587   else if (TREE_CODE_CLASS (TREE_CODE (type)) == 't'
7588            && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7589     {
7590       tree ctype = type;
7591       while (TREE_CODE (ctype) == ARRAY_TYPE)
7592         ctype = TREE_TYPE (ctype);
7593       if (! TYPE_NEEDS_CONSTRUCTING (ctype))
7594         {
7595           if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (ctype))
7596             cp_error ("structure `%D' with uninitialized const members", decl);
7597           if (CLASSTYPE_REF_FIELDS_NEED_INIT (ctype))
7598             cp_error ("structure `%D' with uninitialized reference members",
7599                       decl);
7600         }
7601
7602       check_for_uninitialized_const_var (decl);
7603
7604       if (TYPE_SIZE (type) != NULL_TREE
7605           && TYPE_NEEDS_CONSTRUCTING (type))
7606         init = obscure_complex_init (decl, NULL_TREE);
7607
7608     }
7609   else
7610     check_for_uninitialized_const_var (decl);
7611   
7612   /* For top-level declaration, the initial value was read in
7613      the temporary obstack.  MAXINDEX, rtl, etc. to be made below
7614      must go in the permanent obstack; but don't discard the
7615      temporary data yet.  */
7616
7617   if (toplevel_bindings_p () && temporary)
7618     end_temporary_allocation ();
7619
7620   /* Deduce size of array from initialization, if not already known.  */
7621
7622   if (TREE_CODE (type) == ARRAY_TYPE
7623       && TYPE_DOMAIN (type) == NULL_TREE
7624       && TREE_CODE (decl) != TYPE_DECL)
7625     {
7626       int do_default
7627         = (TREE_STATIC (decl)
7628            /* Even if pedantic, an external linkage array
7629               may have incomplete type at first.  */
7630            ? pedantic && ! DECL_EXTERNAL (decl)
7631            : !DECL_EXTERNAL (decl));
7632       tree initializer = init ? init : DECL_INITIAL (decl);
7633       int failure = complete_array_type (type, initializer, do_default);
7634
7635       if (failure == 1)
7636         cp_error ("initializer fails to determine size of `%D'", decl);
7637
7638       if (failure == 2)
7639         {
7640           if (do_default)
7641             cp_error ("array size missing in `%D'", decl);
7642           /* If a `static' var's size isn't known, make it extern as
7643              well as static, so it does not get allocated.  If it's not
7644              `static', then don't mark it extern; finish_incomplete_decl
7645              will give it a default size and it will get allocated.  */
7646           else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7647             DECL_EXTERNAL (decl) = 1;
7648         }
7649
7650       if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7651           && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7652                               integer_zero_node))
7653         cp_error ("zero-size array `%D'", decl);
7654
7655       layout_decl (decl, 0);
7656     }
7657
7658   if (TREE_CODE (decl) == VAR_DECL)
7659     {
7660       if (DECL_SIZE (decl) == NULL_TREE
7661           && TYPE_SIZE (complete_type (TREE_TYPE (decl))) != NULL_TREE)
7662         layout_decl (decl, 0);
7663
7664       if (TREE_STATIC (decl) && DECL_SIZE (decl) == NULL_TREE)
7665         {
7666           /* A static variable with an incomplete type:
7667              that is an error if it is initialized.
7668              Otherwise, let it through, but if it is not `extern'
7669              then it may cause an error message later.  */
7670           if (DECL_INITIAL (decl) != NULL_TREE)
7671             cp_error ("storage size of `%D' isn't known", decl);
7672           init = NULL_TREE;
7673         }
7674       else if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
7675         {
7676           /* An automatic variable with an incomplete type: that is an error.
7677              Don't talk about array types here, since we took care of that
7678              message in grokdeclarator.  */
7679           cp_error ("storage size of `%D' isn't known", decl);
7680           TREE_TYPE (decl) = error_mark_node;
7681         }
7682       else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7683         /* Let debugger know it should output info for this type.  */
7684         note_debug_info_needed (ttype);
7685
7686       if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7687         note_debug_info_needed (DECL_CONTEXT (decl));
7688
7689       if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7690           && DECL_SIZE (decl) != NULL_TREE
7691           && ! TREE_CONSTANT (DECL_SIZE (decl)))
7692         {
7693           if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7694             constant_expression_warning (DECL_SIZE (decl));
7695           else
7696             cp_error ("storage size of `%D' isn't constant", decl);
7697         }
7698
7699       if (! DECL_EXTERNAL (decl) && TYPE_NEEDS_DESTRUCTOR (type)
7700           /* Cleanups for static variables are handled by `finish_file'.  */
7701           && ! TREE_STATIC (decl))
7702         {
7703           int yes = suspend_momentary ();
7704           cleanup = maybe_build_cleanup (decl);
7705           resume_momentary (yes);
7706         }
7707     }
7708   /* PARM_DECLs get cleanups, too.  */
7709   else if (TREE_CODE (decl) == PARM_DECL && TYPE_NEEDS_DESTRUCTOR (type))
7710     {
7711       if (temporary)
7712         end_temporary_allocation ();
7713       cleanup = maybe_build_cleanup (decl);
7714       if (temporary)
7715         resume_temporary_allocation ();
7716     }
7717
7718   /* Output the assembler code and/or RTL code for variables and functions,
7719      unless the type is an undefined structure or union.
7720      If not, it will get done when the type is completed.  */
7721
7722   was_incomplete = (DECL_SIZE (decl) == NULL_TREE);
7723
7724   if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
7725       || TREE_CODE (decl) == RESULT_DECL)
7726     {
7727       /* ??? FIXME: What about nested classes?  */
7728       int toplev = toplevel_bindings_p () || pseudo_global_level_p ();
7729       int was_temp
7730         = (TREE_STATIC (decl) && TYPE_NEEDS_DESTRUCTOR (type)
7731            && allocation_temporary_p ());
7732
7733       if (was_temp)
7734         end_temporary_allocation ();
7735
7736       /* Static data in a function with comdat linkage also has comdat
7737          linkage.  */
7738       if (TREE_CODE (decl) == VAR_DECL
7739           && TREE_STATIC (decl)
7740           /* Don't mess with __FUNCTION__.  */
7741           && ! TREE_ASM_WRITTEN (decl)
7742           && current_function_decl
7743           && DECL_CONTEXT (decl) == current_function_decl
7744           && (DECL_THIS_INLINE (current_function_decl)
7745               || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7746           && TREE_PUBLIC (current_function_decl))
7747         {
7748           /* Rather than try to get this right with inlining, we suppress
7749              inlining of such functions.  */
7750           current_function_cannot_inline
7751             = "function with static variable cannot be inline";
7752
7753           /* If flag_weak, we don't need to mess with this, as we can just
7754              make the function weak, and let it refer to its unique local
7755              copy.  This works because we don't allow the function to be
7756              inlined.  */
7757           if (! flag_weak)
7758             {
7759               if (DECL_INTERFACE_KNOWN (current_function_decl))
7760                 {
7761                   TREE_PUBLIC (decl) = 1;
7762                   DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7763                 }
7764               else if (DECL_INITIAL (decl) == NULL_TREE
7765                        || DECL_INITIAL (decl) == error_mark_node)
7766                 {
7767                   TREE_PUBLIC (decl) = 1;
7768                   DECL_COMMON (decl) = 1;
7769                 }
7770               /* else we lose. We can only do this if we can use common,
7771                  which we can't if it has been initialized.  */
7772
7773               if (TREE_PUBLIC (decl))
7774                 DECL_ASSEMBLER_NAME (decl)
7775                   = build_static_name (current_function_decl, DECL_NAME (decl));
7776               else if (! DECL_ARTIFICIAL (decl))
7777                 {
7778                   cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7779                   cp_warning_at ("  you can work around this by removing the initializer"), decl;
7780                 }
7781             }
7782         }
7783
7784       else if (TREE_CODE (decl) == VAR_DECL
7785                && DECL_LANG_SPECIFIC (decl)
7786                && DECL_COMDAT (decl))
7787         /* Set it up again; we might have set DECL_INITIAL since the
7788            last time.  */
7789         comdat_linkage (decl);
7790
7791       if (TREE_CODE (decl) == VAR_DECL && DECL_VIRTUAL_P (decl))
7792         make_decl_rtl (decl, NULL_PTR, toplev);
7793       else if (TREE_CODE (decl) == VAR_DECL
7794                && TREE_READONLY (decl)
7795                && DECL_INITIAL (decl) != NULL_TREE
7796                && DECL_INITIAL (decl) != error_mark_node
7797                && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
7798         {
7799           DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
7800
7801           if (asmspec)
7802             DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7803
7804           if (! toplev
7805               && TREE_STATIC (decl)
7806               && ! TREE_SIDE_EFFECTS (decl)
7807               && ! TREE_PUBLIC (decl)
7808               && ! DECL_EXTERNAL (decl)
7809               && ! TYPE_NEEDS_DESTRUCTOR (type)
7810               && DECL_MODE (decl) != BLKmode)
7811             {
7812               /* If this variable is really a constant, then fill its DECL_RTL
7813                  slot with something which won't take up storage.
7814                  If something later should take its address, we can always give
7815                  it legitimate RTL at that time.  */
7816               DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
7817               store_expr (DECL_INITIAL (decl), DECL_RTL (decl), 0);
7818               TREE_ASM_WRITTEN (decl) = 1;
7819             }
7820           else if (toplev && ! TREE_PUBLIC (decl))
7821             {
7822               /* If this is a static const, change its apparent linkage
7823                  if it belongs to a #pragma interface.  */
7824               if (!interface_unknown)
7825                 {
7826                   TREE_PUBLIC (decl) = 1;
7827                   DECL_EXTERNAL (decl) = interface_only;
7828                 }
7829               make_decl_rtl (decl, asmspec, toplev);
7830             }
7831           else
7832             rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7833         }
7834       else if (TREE_CODE (decl) == VAR_DECL
7835                && DECL_LANG_SPECIFIC (decl)
7836                && DECL_IN_AGGR_P (decl))
7837         {
7838           if (TREE_STATIC (decl))
7839             {
7840               if (init == NULL_TREE
7841 #ifdef DEFAULT_STATIC_DEFS
7842                   /* If this code is dead, then users must
7843                      explicitly declare static member variables
7844                      outside the class def'n as well.  */
7845                   && TYPE_NEEDS_CONSTRUCTING (type)
7846 #endif
7847                   )
7848                 {
7849                   DECL_EXTERNAL (decl) = 1;
7850                   make_decl_rtl (decl, asmspec, 1);
7851                 }
7852               else
7853                 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7854             }
7855           else
7856             /* Just a constant field.  Should not need any rtl.  */
7857             goto finish_end0;
7858         }
7859       else
7860         rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7861
7862       if (was_temp)
7863         resume_temporary_allocation ();
7864
7865       if (type != error_mark_node
7866           && TYPE_LANG_SPECIFIC (type)
7867           && CLASSTYPE_ABSTRACT_VIRTUALS (type))
7868         abstract_virtuals_error (decl, type);
7869       else if ((TREE_CODE (type) == FUNCTION_TYPE
7870                 || TREE_CODE (type) == METHOD_TYPE)
7871                && TYPE_LANG_SPECIFIC (TREE_TYPE (type))
7872                && CLASSTYPE_ABSTRACT_VIRTUALS (TREE_TYPE (type)))
7873         abstract_virtuals_error (decl, TREE_TYPE (type));
7874
7875       if (TYPE_LANG_SPECIFIC (type) && IS_SIGNATURE (type))
7876         signature_error (decl, type);
7877       else if ((TREE_CODE (type) == FUNCTION_TYPE
7878                 || TREE_CODE (type) == METHOD_TYPE)
7879                && TYPE_LANG_SPECIFIC (TREE_TYPE (type))
7880                && IS_SIGNATURE (TREE_TYPE (type)))
7881         signature_error (decl, TREE_TYPE (type));
7882
7883       if (TREE_CODE (decl) == FUNCTION_DECL)
7884         ;
7885       else if (DECL_EXTERNAL (decl)
7886                && ! (DECL_LANG_SPECIFIC (decl)
7887                      && DECL_NOT_REALLY_EXTERN (decl)))
7888         {
7889           if (init)
7890             DECL_INITIAL (decl) = init;
7891         }
7892       else if (TREE_STATIC (decl) && type != error_mark_node)
7893         {
7894           /* Cleanups for static variables are handled by `finish_file'.  */
7895           if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
7896               || TYPE_NEEDS_DESTRUCTOR (type))
7897             expand_static_init (decl, init);
7898         }
7899       else if (! toplev)
7900         {
7901           /* This is a declared decl which must live until the
7902              end of the binding contour.  It may need a cleanup.  */
7903
7904           /* Recompute the RTL of a local array now
7905              if it used to be an incomplete type.  */
7906           if (was_incomplete && ! TREE_STATIC (decl))
7907             {
7908               /* If we used it already as memory, it must stay in memory.  */
7909               TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7910               /* If it's still incomplete now, no init will save it.  */
7911               if (DECL_SIZE (decl) == NULL_TREE)
7912                 DECL_INITIAL (decl) = NULL_TREE;
7913               expand_decl (decl);
7914             }
7915           else if (! TREE_ASM_WRITTEN (decl)
7916                    && (TYPE_SIZE (type) != NULL_TREE
7917                        || TREE_CODE (type) == ARRAY_TYPE))
7918             {
7919               /* Do this here, because we did not expand this decl's
7920                  rtl in start_decl.  */
7921               if (DECL_RTL (decl) == NULL_RTX)
7922                 expand_decl (decl);
7923               else if (cleanup)
7924                 {
7925                   /* XXX: Why don't we use decl here?  */
7926                   /* Ans: Because it was already expanded? */
7927                   if (! expand_decl_cleanup (NULL_TREE, cleanup))
7928                     cp_error ("parser lost in parsing declaration of `%D'",
7929                               decl);
7930                   /* Cleanup used up here.  */
7931                   cleanup = NULL_TREE;
7932                 }
7933             }
7934
7935           if (current_binding_level->is_for_scope)
7936             {
7937               struct binding_level *outer 
7938                 = current_binding_level->level_chain;
7939
7940               /* Check to see if the same name is already bound at
7941                  the outer level, either because it was directly declared,
7942                  or because a dead for-decl got preserved.  In either case,
7943                  the code would not have been valid under the ARM
7944                  scope rules, so clear is_for_scope for the
7945                  current_binding_level.
7946
7947                  Otherwise, we need to preserve the temp slot for decl
7948                  to last into the outer binding level.  */
7949
7950               tree outer_binding 
7951                 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
7952               
7953               if (outer_binding && BINDING_LEVEL (outer_binding) == outer
7954                   && (TREE_CODE (BINDING_VALUE (outer_binding)) 
7955                       == VAR_DECL)
7956                   && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
7957                 {
7958                   BINDING_VALUE (outer_binding)
7959                     = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
7960                   current_binding_level->is_for_scope = 0;
7961                 }
7962               else if (DECL_IN_MEMORY_P (decl))
7963                 preserve_temp_slots (DECL_RTL (decl));
7964             }
7965
7966           expand_start_target_temps ();
7967
7968           if (DECL_SIZE (decl) && type != error_mark_node)
7969             {
7970               /* Compute and store the initial value.  */
7971               expand_decl_init (decl);
7972               already_used = TREE_USED (decl) || TREE_USED (type);
7973
7974               if (init || TYPE_NEEDS_CONSTRUCTING (type))
7975                 {
7976                   emit_line_note (DECL_SOURCE_FILE (decl),
7977                                   DECL_SOURCE_LINE (decl));
7978                   expand_aggr_init (decl, init, flags);
7979                 }
7980
7981               /* Set this to 0 so we can tell whether an aggregate which
7982                  was initialized was ever used.  Don't do this if it has a
7983                  destructor, so we don't complain about the 'resource
7984                  allocation is initialization' idiom.  */
7985               /* Now set attribute((unused)) on types so decls of
7986                  that type will be marked used. (see TREE_USED, above.) 
7987                  This avoids the warning problems this particular code
7988                  tried to work around. */
7989
7990               if (TYPE_NEEDS_CONSTRUCTING (type)
7991                   && ! already_used
7992                   && cleanup == NULL_TREE
7993                   && DECL_NAME (decl))
7994                 TREE_USED (decl) = 0;
7995
7996               if (already_used)
7997                 TREE_USED (decl) = 1;
7998             }
7999
8000           /* Cleanup any temporaries needed for the initial value.  */
8001           expand_end_target_temps ();
8002
8003           if (DECL_SIZE (decl) && type != error_mark_node)
8004             {
8005               /* Store the cleanup, if there was one.  */
8006               if (cleanup)
8007                 {
8008                   if (! expand_decl_cleanup (decl, cleanup))
8009                     cp_error ("parser lost in parsing declaration of `%D'",
8010                               decl);
8011                 }
8012             }
8013         }
8014     finish_end0:
8015
8016       /* Undo call to `pushclass' that was done in `start_decl'
8017          due to initialization of qualified member variable.
8018          I.e., Foo::x = 10;  */
8019       {
8020         tree context = DECL_REAL_CONTEXT (decl);
8021         if (context
8022             && TREE_CODE_CLASS (TREE_CODE (context)) == 't'
8023             && (TREE_CODE (decl) == VAR_DECL
8024                 /* We also have a pushclass done that we need to undo here
8025                    if we're at top level and declare a method.  */
8026                 || TREE_CODE (decl) == FUNCTION_DECL)
8027             /* If size hasn't been set, we're still defining it,
8028                and therefore inside the class body; don't pop
8029                the binding level..  */
8030             && TYPE_SIZE (context) != NULL_TREE
8031             && context == current_class_type)
8032           popclass (1);
8033       }
8034     }
8035
8036  finish_end:
8037
8038   /* If requested, warn about definitions of large data objects.  */
8039
8040   if (warn_larger_than
8041       && ! processing_template_decl
8042       && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
8043       && !DECL_EXTERNAL (decl))
8044     {
8045       register tree decl_size = DECL_SIZE (decl);
8046
8047       if (decl_size && TREE_CODE (decl_size) == INTEGER_CST)
8048         {
8049           unsigned units = TREE_INT_CST_LOW (decl_size) / BITS_PER_UNIT;
8050
8051           if (units > larger_than_size)
8052             warning_with_decl (decl, "size of `%s' is %u bytes", units);
8053         }
8054     }
8055
8056   if (need_pop)
8057     {
8058       /* Resume permanent allocation, if not within a function.  */
8059       /* The corresponding push_obstacks_nochange is in start_decl,
8060          start_method, groktypename, and in grokfield.  */
8061       pop_obstacks ();
8062     }
8063
8064   if (was_readonly)
8065     TREE_READONLY (decl) = 1;
8066 }
8067
8068 /* This is here for a midend callback from c-common.c */
8069
8070 void
8071 finish_decl (decl, init, asmspec_tree)
8072      tree decl, init;
8073      tree asmspec_tree;
8074 {
8075   cp_finish_decl (decl, init, asmspec_tree, 1, 0);
8076 }
8077
8078 void
8079 expand_static_init (decl, init)
8080      tree decl;
8081      tree init;
8082 {
8083   tree oldstatic = value_member (decl, static_aggregates);
8084
8085   /* If at_eof is 2, we're too late.  */
8086   my_friendly_assert (at_eof <= 1, 990323);
8087
8088   if (oldstatic)
8089     {
8090       if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
8091         cp_error ("multiple initializations given for `%D'", decl);
8092     }
8093   else if (! toplevel_bindings_p () && ! pseudo_global_level_p ())
8094     {
8095       /* Emit code to perform this initialization but once.  */
8096       tree temp;
8097
8098       /* Remember this information until end of file.  */
8099       push_obstacks (&permanent_obstack, &permanent_obstack);
8100
8101       /* Emit code to perform this initialization but once.  This code
8102          looks like:
8103
8104            static int temp = 0;
8105            if (!temp) {
8106              // Do initialization.
8107              temp = 1;
8108              // Register variable for destruction at end of program.
8109            }
8110
8111          Note that the `temp' variable is only set to 1 *after* the
8112          initialization is complete.  This ensures that an exception,
8113          thrown during the construction, will cause the variable to
8114          reinitialized when we pass through this code again, as per:
8115          
8116            [stmt.dcl]
8117
8118            If the initialization exits by throwing an exception, the
8119            initialization is not complete, so it will be tried again
8120            the next time control enters the declaration.
8121
8122          In theory, this process should be thread-safe, too; multiple
8123          threads should not be able to initialize the variable more
8124          than once.  We don't yet attempt to ensure thread-safety.  */
8125       temp = get_temp_name (integer_type_node, 1);
8126       rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
8127
8128       /* Begin the conditional initialization.  */
8129       expand_start_cond (build_binary_op (EQ_EXPR, temp,
8130                                           integer_zero_node, 1), 0);
8131       expand_start_target_temps ();
8132
8133       /* Do the initialization itself.  */
8134       if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
8135           || (init && TREE_CODE (init) == TREE_LIST))
8136         {
8137           expand_aggr_init (decl, init, 0);
8138           do_pending_stack_adjust ();
8139         }
8140       else if (init)
8141         expand_assignment (decl, init, 0, 0);
8142
8143       /* Set TEMP to 1.  */
8144       expand_assignment (temp, integer_one_node, 0, 0);
8145
8146       /* Cleanup any temporaries needed for the initial value.  If
8147          destroying one of the temporaries causes an exception to be
8148          thrown, then the object itself has still been fully
8149          constructed.  */
8150       expand_end_target_temps ();
8151
8152       /* Use atexit to register a function for destroying this static
8153          variable.  */
8154       if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
8155         {
8156           tree cleanup, fcall;
8157           static tree Atexit = 0;
8158           if (Atexit == 0)
8159             {
8160               tree atexit_fndecl, PFV, pfvlist;
8161               /* Remember this information until end of file.  */
8162               push_obstacks (&permanent_obstack, &permanent_obstack);
8163               PFV = build_pointer_type (build_function_type
8164                                         (void_type_node, void_list_node));
8165
8166               pfvlist = tree_cons (NULL_TREE, PFV, void_list_node);
8167
8168               push_lang_context (lang_name_c);
8169               atexit_fndecl
8170                 = builtin_function ("atexit",
8171                                     build_function_type (void_type_node,
8172                                                          pfvlist),
8173                                     NOT_BUILT_IN, NULL_PTR);
8174               mark_used (atexit_fndecl);
8175               Atexit = default_conversion (atexit_fndecl);
8176               pop_lang_context ();
8177               pop_obstacks ();
8178             }
8179               
8180           /* Call build_cleanup before we enter the anonymous function
8181              so that any access checks will be done relative to the
8182              current scope, rather than the scope of the anonymous
8183              function.  */
8184           fcall = build_cleanup (decl);
8185           cleanup = start_anon_func ();
8186           expand_expr_stmt (fcall);
8187           end_anon_func ();
8188           mark_addressable (cleanup);
8189           cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
8190           fcall = build_function_call (Atexit, expr_tree_cons (NULL_TREE, cleanup, NULL_TREE));
8191           expand_expr_stmt (fcall);
8192         }
8193
8194       expand_end_cond ();
8195       if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
8196         {
8197           static_aggregates = perm_tree_cons (temp, decl, static_aggregates);
8198           TREE_STATIC (static_aggregates) = 1;
8199         }
8200
8201       /* Resume old (possibly temporary) allocation.  */
8202       pop_obstacks ();
8203     }
8204   else
8205     {
8206       /* This code takes into account memory allocation
8207          policy of `start_decl'.  Namely, if TYPE_NEEDS_CONSTRUCTING
8208          does not hold for this object, then we must make permanent
8209          the storage currently in the temporary obstack.  */
8210       if (! TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
8211         preserve_initializer ();
8212       static_aggregates = perm_tree_cons (init, decl, static_aggregates);
8213     }
8214 }
8215 \f
8216 /* Make TYPE a complete type based on INITIAL_VALUE.
8217    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8218    2 if there was no information (in which case assume 1 if DO_DEFAULT).  */
8219
8220 int
8221 complete_array_type (type, initial_value, do_default)
8222      tree type, initial_value;
8223      int do_default;
8224 {
8225   register tree maxindex = NULL_TREE;
8226   int value = 0;
8227
8228   if (initial_value)
8229     {
8230       /* Note MAXINDEX  is really the maximum index,
8231          one less than the size.  */
8232       if (TREE_CODE (initial_value) == STRING_CST)
8233         {
8234           int eltsize
8235             = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8236           maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8237                                    / eltsize) - 1, 0);
8238         }
8239       else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8240         {
8241           tree elts = CONSTRUCTOR_ELTS (initial_value);
8242           maxindex = size_binop (MINUS_EXPR, integer_zero_node, size_one_node);
8243           for (; elts; elts = TREE_CHAIN (elts))
8244             {
8245               if (TREE_PURPOSE (elts))
8246                 maxindex = TREE_PURPOSE (elts);
8247               else
8248                 maxindex = size_binop (PLUS_EXPR, maxindex, size_one_node);
8249             }
8250           maxindex = copy_node (maxindex);
8251         }
8252       else
8253         {
8254           /* Make an error message unless that happened already.  */
8255           if (initial_value != error_mark_node)
8256             value = 1;
8257           else
8258             initial_value = NULL_TREE;
8259
8260           /* Prevent further error messages.  */
8261           maxindex = build_int_2 (0, 0);
8262         }
8263     }
8264
8265   if (!maxindex)
8266     {
8267       if (do_default)
8268         maxindex = build_int_2 (0, 0);
8269       value = 2;
8270     }
8271
8272   if (maxindex)
8273     {
8274       tree itype;
8275
8276       TYPE_DOMAIN (type) = build_index_type (maxindex);
8277       if (! TREE_TYPE (maxindex))
8278         TREE_TYPE (maxindex) = TYPE_DOMAIN (type);
8279       if (initial_value)
8280         itype = TREE_TYPE (initial_value);
8281       else
8282         itype = NULL;
8283       if (itype && !TYPE_DOMAIN (itype))
8284         TYPE_DOMAIN (itype) = TYPE_DOMAIN (type);
8285       /* The type of the main variant should never be used for arrays
8286          of different sizes.  It should only ever be completed with the
8287          size of the array.  */
8288       if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
8289         TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = TYPE_DOMAIN (type);
8290     }
8291
8292   /* Lay out the type now that we can get the real answer.  */
8293
8294   layout_type (type);
8295
8296   return value;
8297 }
8298 \f
8299 /* Return zero if something is declared to be a member of type
8300    CTYPE when in the context of CUR_TYPE.  STRING is the error
8301    message to print in that case.  Otherwise, quietly return 1.  */
8302
8303 static int
8304 member_function_or_else (ctype, cur_type, string)
8305      tree ctype, cur_type;
8306      char *string;
8307 {
8308   if (ctype && ctype != cur_type)
8309     {
8310       error (string, TYPE_NAME_STRING (ctype));
8311       return 0;
8312     }
8313   return 1;
8314 }
8315 \f
8316 /* Subroutine of `grokdeclarator'.  */
8317
8318 /* Generate errors possibly applicable for a given set of specifiers.
8319    This is for ARM $7.1.2.  */
8320
8321 static void
8322 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8323      tree object;
8324      char *type;
8325      int virtualp, quals, friendp, raises, inlinep;
8326 {
8327   if (virtualp)
8328     cp_error ("`%D' declared as a `virtual' %s", object, type);
8329   if (inlinep)
8330     cp_error ("`%D' declared as an `inline' %s", object, type);
8331   if (quals)
8332     cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
8333               object, type);
8334   if (friendp)
8335     cp_error_at ("invalid friend declaration", object);
8336   if (raises)
8337     cp_error_at ("invalid exception specifications", object);
8338 }
8339
8340 /* CTYPE is class type, or null if non-class.
8341    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8342    or METHOD_TYPE.
8343    DECLARATOR is the function's name.
8344    VIRTUALP is truthvalue of whether the function is virtual or not.
8345    FLAGS are to be passed through to `grokclassfn'.
8346    QUALS are qualifiers indicating whether the function is `const'
8347    or `volatile'.
8348    RAISES is a list of exceptions that this function can raise.
8349    CHECK is 1 if we must find this method in CTYPE, 0 if we should
8350    not look, and -1 if we should not call `grokclassfn' at all.  
8351
8352    Returns `NULL_TREE' if something goes wrong, after issuing
8353    applicable error messages.  */
8354
8355 static tree
8356 grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
8357             raises, attrlist, check, friendp, publicp, inlinep, funcdef_flag,
8358             template_count, in_namespace)
8359      tree ctype, type;
8360      tree declarator;
8361      tree orig_declarator;
8362      int virtualp;
8363      enum overload_flags flags;
8364      tree quals, raises, attrlist;
8365      int check, friendp, publicp, inlinep, funcdef_flag, template_count;
8366      tree in_namespace;
8367 {
8368   tree cname, decl;
8369   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8370   tree t;
8371
8372   if (ctype)
8373     cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8374       ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8375   else
8376     cname = NULL_TREE;
8377
8378   if (raises)
8379     {
8380       type = build_exception_variant (type, raises);
8381     }
8382
8383   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8384   /* Propagate volatile out from type to decl. */
8385   if (TYPE_VOLATILE (type))
8386     TREE_THIS_VOLATILE (decl) = 1;
8387
8388   /* If this decl has namespace scope, set that up.  */
8389   if (in_namespace)
8390     set_decl_namespace (decl, in_namespace, friendp);
8391   else if (publicp && ! ctype)
8392     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8393
8394   /* `main' and builtins have implicit 'C' linkage.  */
8395   if ((MAIN_NAME_P (declarator)
8396        || (IDENTIFIER_LENGTH (declarator) > 10
8397            && IDENTIFIER_POINTER (declarator)[0] == '_'
8398            && IDENTIFIER_POINTER (declarator)[1] == '_'
8399            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8400       && current_lang_name == lang_name_cplusplus
8401       && ctype == NULL_TREE
8402       /* NULL_TREE means global namespace.  */
8403       && DECL_CONTEXT (decl) == NULL_TREE)
8404     DECL_LANGUAGE (decl) = lang_c;
8405
8406   /* Should probably propagate const out from type to decl I bet (mrs).  */
8407   if (staticp)
8408     {
8409       DECL_STATIC_FUNCTION_P (decl) = 1;
8410       DECL_CONTEXT (decl) = ctype;
8411     }
8412
8413   if (ctype)
8414     DECL_CLASS_CONTEXT (decl) = ctype;
8415
8416   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8417     {
8418       if (processing_template_decl)
8419         error ("cannot declare `main' to be a template");
8420       if (inlinep)
8421         error ("cannot declare `main' to be inline");
8422       else if (! publicp)
8423         error ("cannot declare `main' to be static");
8424       inlinep = 0;
8425       publicp = 1;
8426     }
8427
8428   /* Members of anonymous types and local classes have no linkage; make
8429      them internal.  */
8430   if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
8431                 || hack_decl_function_context (TYPE_MAIN_DECL (ctype))))
8432     publicp = 0;
8433
8434   if (publicp)
8435     {
8436       /* [basic.link]: A name with no linkage (notably, the name of a class
8437          or enumeration declared in a local scope) shall not be used to
8438          declare an entity with linkage.
8439
8440          Only check this for public decls for now.  */
8441       t = no_linkage_check (TREE_TYPE (decl));
8442       if (t)
8443         {
8444           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8445             {
8446               if (DECL_LANGUAGE (decl) == lang_c)
8447                 /* Allow this; it's pretty common in C.  */;
8448               else
8449                 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8450                             decl);
8451             }
8452           else
8453             cp_pedwarn ("non-local function `%#D' uses local type `%T'",
8454                         decl, t);
8455         }
8456     }
8457
8458   TREE_PUBLIC (decl) = publicp;
8459   if (! publicp)
8460     {
8461       DECL_INTERFACE_KNOWN (decl) = 1;
8462       DECL_NOT_REALLY_EXTERN (decl) = 1;
8463     }
8464
8465   if (inlinep)
8466     DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8467
8468   DECL_EXTERNAL (decl) = 1;
8469   if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8470     {
8471       cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8472                 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8473       quals = NULL_TREE;
8474     }
8475
8476   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8477     grok_op_properties (decl, virtualp, check < 0);
8478
8479   if (ctype && hack_decl_function_context (decl))
8480     DECL_NO_STATIC_CHAIN (decl) = 1;
8481
8482   for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8483     if (TREE_PURPOSE (t)
8484         && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8485       {
8486         add_defarg_fn (decl);
8487         break;
8488       }
8489
8490   if (friendp
8491       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8492     {
8493       if (funcdef_flag)
8494         cp_error
8495           ("defining explicit specialization `%D' in friend declaration",
8496            orig_declarator);
8497       else
8498         {
8499           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8500             {
8501               /* Something like `template <class T> friend void f<T>()'.  */
8502               cp_error ("template-id `%D' in declaration of primary template", 
8503                         orig_declarator);
8504               return NULL_TREE;
8505             }
8506
8507           /* A friend declaration of the form friend void f<>().  Record
8508              the information in the TEMPLATE_ID_EXPR.  */
8509           SET_DECL_IMPLICIT_INSTANTIATION (decl);
8510           DECL_TEMPLATE_INFO (decl)
8511             = perm_tree_cons (TREE_OPERAND (orig_declarator, 0),
8512                               TREE_OPERAND (orig_declarator, 1),
8513                               NULL_TREE);
8514         }
8515     }
8516
8517   /* Plain overloading: will not be grok'd by grokclassfn.  */
8518   if (! ctype && ! processing_template_decl
8519       && DECL_LANGUAGE (decl) != lang_c
8520       && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
8521     set_mangled_name_for_decl (decl);
8522
8523   if (funcdef_flag)
8524     /* Make the init_value nonzero so pushdecl knows this is not
8525        tentative.  error_mark_node is replaced later with the BLOCK.  */
8526     DECL_INITIAL (decl) = error_mark_node;
8527
8528   /* Caller will do the rest of this.  */
8529   if (check < 0)
8530     return decl;
8531
8532   if (check && funcdef_flag)
8533     DECL_INITIAL (decl) = error_mark_node;
8534
8535   if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
8536     {
8537       tree tmp;
8538       /* Just handle constructors here.  We could do this
8539          inside the following if stmt, but I think
8540          that the code is more legible by breaking this
8541          case out.  See comments below for what each of
8542          the following calls is supposed to do.  */
8543       DECL_CONSTRUCTOR_P (decl) = 1;
8544
8545       grokclassfn (ctype, decl, flags, quals);
8546
8547       decl = check_explicit_specialization (orig_declarator, decl,
8548                                             template_count, 
8549                                             2 * (funcdef_flag != 0) + 
8550                                             4 * (friendp != 0));
8551       if (decl == error_mark_node)
8552         return NULL_TREE;
8553
8554       if ((! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8555           && check)
8556         {
8557           tmp = check_classfn (ctype, decl);
8558
8559           if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8560             tmp = DECL_TEMPLATE_RESULT(tmp);
8561
8562           if (tmp && DECL_ARTIFICIAL (tmp))
8563             cp_error ("definition of implicitly-declared `%D'", tmp);
8564           if (tmp && duplicate_decls (decl, tmp))
8565             return tmp;
8566         }
8567       if (! grok_ctor_properties (ctype, decl))
8568         return NULL_TREE;
8569     }
8570   else
8571     {
8572       tree tmp;
8573
8574       /* Function gets the ugly name, field gets the nice one.
8575          This call may change the type of the function (because
8576          of default parameters)!  */
8577       if (ctype != NULL_TREE)
8578         grokclassfn (ctype, decl, flags, quals);
8579
8580       decl = check_explicit_specialization (orig_declarator, decl,
8581                                             template_count, 
8582                                             2 * (funcdef_flag != 0) + 
8583                                             4 * (friendp != 0));
8584       if (decl == error_mark_node)
8585         return NULL_TREE;
8586
8587       if (ctype != NULL_TREE
8588           && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8589           && check)
8590         {
8591           tmp = check_classfn (ctype, decl);
8592
8593           if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8594             tmp = DECL_TEMPLATE_RESULT (tmp);
8595               
8596           if (tmp && DECL_STATIC_FUNCTION_P (tmp)
8597               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8598             {
8599               /* Remove the `this' parm added by grokclassfn.
8600                  XXX Isn't this done in start_function, too?  */
8601               revert_static_member_fn (&decl, NULL, NULL);
8602               last_function_parms = TREE_CHAIN (last_function_parms);
8603             }
8604           if (tmp && DECL_ARTIFICIAL (tmp))
8605             cp_error ("definition of implicitly-declared `%D'", tmp);
8606           if (tmp)
8607             {
8608               /* Attempt to merge the declarations.  This can fail, in
8609                  the case of some illegal specialization declarations.  */
8610               if (!duplicate_decls (decl, tmp))
8611                 cp_error ("no `%#D' member function declared in class `%T'",
8612                           decl, ctype);
8613               return tmp;
8614             }
8615         }
8616
8617       if (ctype == NULL_TREE || check)
8618         return decl;
8619
8620       if (attrlist)
8621         cplus_decl_attributes (decl, TREE_PURPOSE (attrlist), 
8622                                TREE_VALUE (attrlist));
8623       make_decl_rtl (decl, NULL_PTR, 1);
8624
8625       if (virtualp)
8626         {
8627           DECL_VIRTUAL_P (decl) = 1;
8628           if (DECL_VINDEX (decl) == NULL_TREE)
8629             DECL_VINDEX (decl) = error_mark_node;
8630           IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
8631         }
8632     }
8633   return decl;
8634 }
8635
8636 static tree
8637 grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
8638      tree type;
8639      tree declarator;
8640      RID_BIT_TYPE *specbits_in;
8641      int initialized;
8642      int constp;
8643      tree in_namespace;
8644 {
8645   tree decl;
8646   RID_BIT_TYPE specbits;
8647
8648   specbits = *specbits_in;
8649
8650   if (TREE_CODE (type) == OFFSET_TYPE)
8651     {
8652       /* If you declare a static member so that it
8653          can be initialized, the code will reach here.  */
8654       tree basetype = TYPE_OFFSET_BASETYPE (type);
8655       type = TREE_TYPE (type);
8656       decl = build_lang_field_decl (VAR_DECL, declarator, type);
8657       DECL_CONTEXT (decl) = basetype;
8658       DECL_CLASS_CONTEXT (decl) = basetype;
8659       DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
8660     }
8661   else
8662     {
8663       tree context;
8664
8665       if (in_namespace)
8666         context = in_namespace;
8667       else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
8668         context = current_namespace;
8669       else
8670         context = NULL_TREE;
8671
8672       decl = build_decl (VAR_DECL, declarator, complete_type (type));
8673
8674       if (context)
8675         set_decl_namespace (decl, context, 0);
8676
8677       context = DECL_CONTEXT (decl);
8678       if (declarator && context && current_lang_name != lang_name_c)
8679         DECL_ASSEMBLER_NAME (decl) = build_static_name (context, declarator);
8680     }
8681
8682   if (in_namespace)
8683     set_decl_namespace (decl, in_namespace, 0);
8684
8685   if (RIDBIT_SETP (RID_EXTERN, specbits))
8686     {
8687       DECL_THIS_EXTERN (decl) = 1;
8688       DECL_EXTERNAL (decl) = !initialized;
8689     }
8690
8691   /* In class context, static means one per class,
8692      public access, and static storage.  */
8693   if (DECL_CLASS_SCOPE_P (decl))
8694     {
8695       TREE_PUBLIC (decl) = 1;
8696       TREE_STATIC (decl) = 1;
8697       DECL_EXTERNAL (decl) = 0;
8698     }
8699   /* At top level, either `static' or no s.c. makes a definition
8700      (perhaps tentative), and absence of `static' makes it public.  */
8701   else if (toplevel_bindings_p ())
8702     {
8703       TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
8704                             && (DECL_THIS_EXTERN (decl) || ! constp));
8705       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8706     }
8707   /* Not at top level, only `static' makes a static definition.  */
8708   else
8709     {
8710       TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
8711       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8712     }
8713
8714   if (TREE_PUBLIC (decl))
8715     {
8716       /* [basic.link]: A name with no linkage (notably, the name of a class
8717          or enumeration declared in a local scope) shall not be used to
8718          declare an entity with linkage.
8719
8720          Only check this for public decls for now.  */
8721       tree t = no_linkage_check (TREE_TYPE (decl));
8722       if (t)
8723         {
8724           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8725             /* Ignore for now; `enum { foo } e' is pretty common.  */;
8726           else
8727             cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
8728                         decl, t);
8729         }
8730     }
8731
8732   return decl;
8733 }
8734
8735 /* Create and return a canonical pointer to member function type, for
8736    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
8737
8738 tree
8739 build_ptrmemfunc_type (type)
8740      tree type;
8741 {
8742   tree fields[4];
8743   tree t;
8744   tree u;
8745
8746   /* If a canonical type already exists for this type, use it.  We use
8747      this method instead of type_hash_canon, because it only does a
8748      simple equality check on the list of field members.  */
8749
8750   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
8751     return t;
8752
8753   push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8754
8755   u = make_lang_type (UNION_TYPE);
8756   SET_IS_AGGR_TYPE (u, 0);
8757   fields[0] = build_lang_field_decl (FIELD_DECL, pfn_identifier, type);
8758   fields[1] = build_lang_field_decl (FIELD_DECL, delta2_identifier,
8759                                      delta_type_node);
8760   finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
8761   TYPE_NAME (u) = NULL_TREE;
8762
8763   t = make_lang_type (RECORD_TYPE);
8764
8765   /* Let the front-end know this is a pointer to member function...  */
8766   TYPE_PTRMEMFUNC_FLAG (t) = 1;
8767   /* ... and not really an aggregate.  */
8768   SET_IS_AGGR_TYPE (t, 0);
8769
8770   fields[0] = build_lang_field_decl (FIELD_DECL, delta_identifier,
8771                                      delta_type_node);
8772   fields[1] = build_lang_field_decl (FIELD_DECL, index_identifier,
8773                                      delta_type_node);
8774   fields[2] = build_lang_field_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
8775   finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
8776
8777   pop_obstacks ();
8778
8779   /* Zap out the name so that the back-end will give us the debugging
8780      information for this anonymous RECORD_TYPE.  */
8781   TYPE_NAME (t) = NULL_TREE;
8782
8783   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
8784
8785   /* Seems to be wanted.  */
8786   CLASSTYPE_GOT_SEMICOLON (t) = 1;
8787   return t;
8788 }
8789
8790 /* Given declspecs and a declarator,
8791    determine the name and type of the object declared
8792    and construct a ..._DECL node for it.
8793    (In one case we can return a ..._TYPE node instead.
8794     For invalid input we sometimes return 0.)
8795
8796    DECLSPECS is a chain of tree_list nodes whose value fields
8797     are the storage classes and type specifiers.
8798
8799    DECL_CONTEXT says which syntactic context this declaration is in:
8800      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8801      FUNCDEF for a function definition.  Like NORMAL but a few different
8802       error messages in each case.  Return value may be zero meaning
8803       this definition is too screwy to try to parse.
8804      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
8805       handle member functions (which have FIELD context).
8806       Return value may be zero meaning this definition is too screwy to
8807       try to parse.
8808      PARM for a parameter declaration (either within a function prototype
8809       or before a function body).  Make a PARM_DECL, or return void_type_node.
8810      CATCHPARM for a parameter declaration before a catch clause.
8811      TYPENAME if for a typename (in a cast or sizeof).
8812       Don't make a DECL node; just return the ..._TYPE node.
8813      FIELD for a struct or union field; make a FIELD_DECL.
8814      BITFIELD for a field with specified width.
8815    INITIALIZED is 1 if the decl has an initializer.
8816
8817    In the TYPENAME case, DECLARATOR is really an absolute declarator.
8818    It may also be so in the PARM case, for a prototype where the
8819    argument type is specified but not the name.
8820
8821    This function is where the complicated C meanings of `static'
8822    and `extern' are interpreted.
8823
8824    For C++, if there is any monkey business to do, the function which
8825    calls this one must do it, i.e., prepending instance variables,
8826    renaming overloaded function names, etc.
8827
8828    Note that for this C++, it is an error to define a method within a class
8829    which does not belong to that class.
8830
8831    Except in the case where SCOPE_REFs are implicitly known (such as
8832    methods within a class being redundantly qualified),
8833    declarations which involve SCOPE_REFs are returned as SCOPE_REFs
8834    (class_name::decl_name).  The caller must also deal with this.
8835
8836    If a constructor or destructor is seen, and the context is FIELD,
8837    then the type gains the attribute TREE_HAS_x.  If such a declaration
8838    is erroneous, NULL_TREE is returned.
8839
8840    QUALS is used only for FUNCDEF and MEMFUNCDEF cases.  For a member
8841    function, these are the qualifiers to give to the `this' pointer.
8842
8843    May return void_type_node if the declarator turned out to be a friend.
8844    See grokfield for details.  */
8845
8846 enum return_types { return_normal, return_ctor, return_dtor, return_conversion };
8847
8848 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
8849    Check to see that the definition is valid.  Issue appropriate error
8850    messages.  Return 1 if the definition is particularly bad, or 0
8851    otherwise.  */
8852
8853 int
8854 check_static_variable_definition (decl, type)
8855      tree decl;
8856      tree type;
8857 {
8858   /* Motion 10 at San Diego: If a static const integral data member is
8859      initialized with an integral constant expression, the initializer
8860      may appear either in the declaration (within the class), or in
8861      the definition, but not both.  If it appears in the class, the
8862      member is a member constant.  The file-scope definition is always
8863      required.  */
8864   if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
8865     {
8866       cp_error ("in-class initialization of static data member of non-integral type `%T'", 
8867                 type);
8868       /* If we just return the declaration, crashes will sometimes
8869          occur.  We therefore return void_type_node, as if this was a
8870          friend declaration, to cause callers to completely ignore
8871          this declaration.  */
8872       return 1;
8873     }
8874   else if (!CP_TYPE_CONST_P (type))
8875     cp_error ("ANSI C++ forbids in-class initialization of non-const static member `%D'",
8876               decl);
8877   else if (pedantic && !INTEGRAL_TYPE_P (type))
8878     cp_pedwarn ("ANSI C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
8879
8880   return 0;
8881 }
8882
8883 tree
8884 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
8885      tree declspecs;
8886      tree declarator;
8887      enum decl_context decl_context;
8888      int initialized;
8889      tree attrlist;
8890 {
8891   RID_BIT_TYPE specbits;
8892   int nclasses = 0;
8893   tree spec;
8894   tree type = NULL_TREE;
8895   int longlong = 0;
8896   int constp;
8897   int restrictp;
8898   int volatilep;
8899   int type_quals;
8900   int virtualp, explicitp, friendp, inlinep, staticp;
8901   int explicit_int = 0;
8902   int explicit_char = 0;
8903   int defaulted_int = 0;
8904   int opaque_typedef = 0;
8905   tree typedef_decl = NULL_TREE;
8906   char *name;
8907   tree typedef_type = NULL_TREE;
8908   int funcdef_flag = 0;
8909   enum tree_code innermost_code = ERROR_MARK;
8910   int bitfield = 0;
8911 #if 0
8912   /* See the code below that used this.  */
8913   tree decl_machine_attr = NULL_TREE;
8914 #endif
8915   /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
8916      All FIELD_DECLs we build here have `init' put into their DECL_INITIAL.  */
8917   tree init = NULL_TREE;
8918
8919   /* Keep track of what sort of function is being processed
8920      so that we can warn about default return values, or explicit
8921      return values which do not match prescribed defaults.  */
8922   enum return_types return_type = return_normal;
8923
8924   tree dname = NULL_TREE;
8925   tree ctype = current_class_type;
8926   tree ctor_return_type = NULL_TREE;
8927   enum overload_flags flags = NO_SPECIAL;
8928   tree quals = NULL_TREE;
8929   tree raises = NULL_TREE;
8930   int template_count = 0;
8931   tree in_namespace = NULL_TREE;
8932   tree inner_attrs;
8933   int ignore_attrs;
8934
8935   RIDBIT_RESET_ALL (specbits);
8936   if (decl_context == FUNCDEF)
8937     funcdef_flag = 1, decl_context = NORMAL;
8938   else if (decl_context == MEMFUNCDEF)
8939     funcdef_flag = -1, decl_context = FIELD;
8940   else if (decl_context == BITFIELD)
8941     bitfield = 1, decl_context = FIELD;
8942
8943   /* Look inside a declarator for the name being declared
8944      and get it as a string, for an error message.  */
8945   {
8946     tree *next = &declarator;
8947     register tree decl;
8948     name = NULL;
8949
8950     while (next && *next)
8951       {
8952         decl = *next;
8953         switch (TREE_CODE (decl))
8954           {
8955           case TREE_LIST:
8956             /* For attributes.  */
8957             next = &TREE_VALUE (decl);
8958             break;
8959
8960           case COND_EXPR:
8961             ctype = NULL_TREE;
8962             next = &TREE_OPERAND (decl, 0);
8963             break;
8964
8965           case BIT_NOT_EXPR:    /* For C++ destructors!  */
8966             {
8967               tree name = TREE_OPERAND (decl, 0);
8968               tree rename = NULL_TREE;
8969
8970               my_friendly_assert (flags == NO_SPECIAL, 152);
8971               flags = DTOR_FLAG;
8972               return_type = return_dtor;
8973               if (TREE_CODE (name) == TYPE_DECL)
8974                 TREE_OPERAND (decl, 0) = name = constructor_name (name);
8975               my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
8976               if (ctype == NULL_TREE)
8977                 {
8978                   if (current_class_type == NULL_TREE)
8979                     {
8980                       error ("destructors must be member functions");
8981                       flags = NO_SPECIAL;
8982                     }
8983                   else
8984                     {
8985                       tree t = constructor_name (current_class_name);
8986                       if (t != name)
8987                         rename = t;
8988                     }
8989                 }
8990               else
8991                 {
8992                   tree t = constructor_name (ctype);
8993                   if (t != name)
8994                     rename = t;
8995                 }
8996
8997               if (rename)
8998                 {
8999                   cp_error ("destructor `%T' must match class name `%T'",
9000                             name, rename);
9001                   TREE_OPERAND (decl, 0) = rename;
9002                 }
9003               next = &name;
9004             }
9005             break;
9006
9007           case ADDR_EXPR:       /* C++ reference declaration */
9008             /* Fall through. */
9009           case ARRAY_REF:
9010           case INDIRECT_REF:
9011             ctype = NULL_TREE;
9012             innermost_code = TREE_CODE (decl);
9013             next = &TREE_OPERAND (decl, 0);
9014             break;
9015
9016           case CALL_EXPR:
9017             if (parmlist_is_exprlist (TREE_OPERAND (decl, 1)))
9018               {
9019                 /* This is actually a variable declaration using constructor
9020                    syntax.  We need to call start_decl and cp_finish_decl so we
9021                    can get the variable initialized...  */
9022
9023                 *next = TREE_OPERAND (decl, 0);
9024                 init = TREE_OPERAND (decl, 1);
9025
9026                 decl = start_decl (declarator, declspecs, 1, NULL_TREE, NULL_TREE);
9027                 if (decl)
9028                   {
9029                     /* Look for __unused__ attribute */
9030                     if (TREE_USED (TREE_TYPE (decl)))
9031                       TREE_USED (decl) = 1;
9032                     finish_decl (decl, init, NULL_TREE);
9033                   }
9034                 else
9035                   cp_error ("invalid declarator");
9036                 return 0;
9037               }
9038             innermost_code = TREE_CODE (decl);
9039             if (decl_context == FIELD && ctype == NULL_TREE)
9040               ctype = current_class_type;
9041             if (ctype
9042                 && TREE_OPERAND (decl, 0)
9043                 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
9044                     && ((DECL_NAME (TREE_OPERAND (decl, 0))
9045                          == constructor_name_full (ctype))
9046                         || (DECL_NAME (TREE_OPERAND (decl, 0))
9047                             == constructor_name (ctype)))))
9048               TREE_OPERAND (decl, 0) = constructor_name (ctype);
9049             next = &TREE_OPERAND (decl, 0);
9050             decl = *next;
9051             if (ctype != NULL_TREE
9052                 && decl != NULL_TREE && flags != DTOR_FLAG
9053                 && decl == constructor_name (ctype))
9054               {
9055                 return_type = return_ctor;
9056                 ctor_return_type = ctype;
9057               }
9058             ctype = NULL_TREE;
9059             break;
9060             
9061           case TEMPLATE_ID_EXPR:
9062               {
9063                 tree fns = TREE_OPERAND (decl, 0);
9064
9065                 if (TREE_CODE (fns) == LOOKUP_EXPR)
9066                   fns = TREE_OPERAND (fns, 0);
9067
9068                 if (TREE_CODE (fns) == IDENTIFIER_NODE)
9069                   dname = fns;
9070                 else if (is_overloaded_fn (fns))
9071                   dname = DECL_NAME (get_first_fn (fns));
9072                 else
9073                   my_friendly_abort (0);
9074               }
9075           /* Fall through. */
9076
9077           case IDENTIFIER_NODE:
9078             if (TREE_CODE (decl) == IDENTIFIER_NODE)
9079               dname = decl;
9080
9081             next = 0;
9082
9083             if (is_rid (dname))
9084               {
9085                 cp_error ("declarator-id missing; using reserved word `%D'",
9086                           dname);
9087                 name = IDENTIFIER_POINTER (dname);
9088               }
9089             if (! IDENTIFIER_OPNAME_P (dname)
9090                 /* GNU/Linux headers use '__op'.  Arrgh.  */
9091                 || (IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname)))
9092               name = IDENTIFIER_POINTER (dname);
9093             else
9094               {
9095                 if (IDENTIFIER_TYPENAME_P (dname))
9096                   {
9097                     my_friendly_assert (flags == NO_SPECIAL, 154);
9098                     flags = TYPENAME_FLAG;
9099                     ctor_return_type = TREE_TYPE (dname);
9100                     return_type = return_conversion;
9101                   }
9102                 name = operator_name_string (dname);
9103               }
9104             break;
9105
9106             /* C++ extension */
9107           case SCOPE_REF:
9108             {
9109               /* Perform error checking, and decide on a ctype.  */
9110               tree cname = TREE_OPERAND (decl, 0);
9111               if (cname == NULL_TREE)
9112                 ctype = NULL_TREE;
9113               else if (TREE_CODE (cname) == NAMESPACE_DECL)
9114                 {
9115                   ctype = NULL_TREE;
9116                   in_namespace = TREE_OPERAND (decl, 0);
9117                   TREE_OPERAND (decl, 0) = NULL_TREE;
9118                 }
9119               else if (! is_aggr_type (cname, 1))
9120                 TREE_OPERAND (decl, 0) = NULL_TREE;
9121               /* Must test TREE_OPERAND (decl, 1), in case user gives
9122                  us `typedef (class::memfunc)(int); memfunc *memfuncptr;'  */
9123               else if (TREE_OPERAND (decl, 1)
9124                        && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9125                 ctype = cname;
9126               else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
9127                        || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
9128                 {
9129                   cp_error ("`%T::%D' is not a valid declarator", cname,
9130                             TREE_OPERAND (decl, 1));
9131                   cp_error ("  perhaps you want `typename %T::%D' to make it a type",
9132                             cname, TREE_OPERAND (decl, 1));
9133                   return void_type_node;
9134                 }
9135               else if (ctype == NULL_TREE)
9136                 ctype = cname;
9137               else if (TREE_COMPLEXITY (decl) == current_class_depth)
9138                 TREE_OPERAND (decl, 0) = ctype;
9139               else
9140                 {
9141                   if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
9142                     {
9143                       cp_error ("type `%T' is not derived from type `%T'",
9144                                 cname, ctype);
9145                       TREE_OPERAND (decl, 0) = NULL_TREE;
9146                     }
9147                   else
9148                     ctype = cname;
9149                 }
9150
9151               if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
9152                   && ((DECL_NAME (TREE_OPERAND (decl, 1))
9153                        == constructor_name_full (ctype))
9154                       || (DECL_NAME (TREE_OPERAND (decl, 1))
9155                           == constructor_name (ctype))))
9156                 TREE_OPERAND (decl, 1) = constructor_name (ctype);
9157               next = &TREE_OPERAND (decl, 1);
9158               decl = *next;
9159               if (ctype)
9160                 {
9161                   if (TREE_CODE (decl) == IDENTIFIER_NODE
9162                       && constructor_name (ctype) == decl)
9163                     {
9164                       return_type = return_ctor;
9165                       ctor_return_type = ctype;
9166                     }
9167                   else if (TREE_CODE (decl) == BIT_NOT_EXPR
9168                            && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9169                            && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9170                                || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9171                     {
9172                       return_type = return_dtor;
9173                       ctor_return_type = ctype;
9174                       flags = DTOR_FLAG;
9175                       TREE_OPERAND (decl, 0) = constructor_name (ctype);
9176                       next = &TREE_OPERAND (decl, 0);
9177                     }
9178                 }
9179             }
9180             break;
9181
9182           case ERROR_MARK:
9183             next = 0;
9184             break;
9185
9186           case TYPE_DECL:
9187             /* Parse error puts this typespec where
9188                a declarator should go.  */
9189             cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
9190             if (TREE_TYPE (decl) == current_class_type)
9191               cp_error ("  perhaps you want `%T' for a constructor",
9192                         current_class_name);
9193             dname = DECL_NAME (decl);
9194             name = IDENTIFIER_POINTER (dname);
9195
9196             /* Avoid giving two errors for this.  */
9197             IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9198
9199             declspecs = temp_tree_cons (NULL_TREE, integer_type_node,
9200                                         declspecs);
9201             *next = dname;
9202             next = 0;
9203             break;
9204
9205           default:
9206             cp_compiler_error ("`%D' as declarator", decl);
9207             return 0; /* We used to do a 155 abort here.  */
9208           }
9209       }
9210     if (name == NULL)
9211       name = "type name";
9212   }
9213
9214   /* A function definition's declarator must have the form of
9215      a function declarator.  */
9216
9217   if (funcdef_flag && innermost_code != CALL_EXPR)
9218     return 0;
9219
9220   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9221       && innermost_code != CALL_EXPR
9222       && ! (ctype && declspecs == NULL_TREE))
9223     {
9224       cp_error ("declaration of `%D' as non-function", dname);
9225       return void_type_node;
9226     }
9227
9228   /* Anything declared one level down from the top level
9229      must be one of the parameters of a function
9230      (because the body is at least two levels down).  */
9231
9232   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9233      by not allowing C++ class definitions to specify their parameters
9234      with xdecls (must be spec.d in the parmlist).
9235
9236      Since we now wait to push a class scope until we are sure that
9237      we are in a legitimate method context, we must set oldcname
9238      explicitly (since current_class_name is not yet alive).
9239
9240      We also want to avoid calling this a PARM if it is in a namespace.  */
9241
9242   if (decl_context == NORMAL && ! namespace_bindings_p ()
9243       && ! pseudo_global_level_p ())
9244     {
9245       struct binding_level *b = current_binding_level;
9246       current_binding_level = b->level_chain;
9247       if (current_binding_level != 0 && toplevel_bindings_p ())
9248         decl_context = PARM;
9249       current_binding_level = b;
9250     }
9251
9252   /* Look through the decl specs and record which ones appear.
9253      Some typespecs are defined as built-in typenames.
9254      Others, the ones that are modifiers of other types,
9255      are represented by bits in SPECBITS: set the bits for
9256      the modifiers that appear.  Storage class keywords are also in SPECBITS.
9257
9258      If there is a typedef name or a type, store the type in TYPE.
9259      This includes builtin typedefs such as `int'.
9260
9261      Set EXPLICIT_INT if the type is `int' or `char' and did not
9262      come from a user typedef.
9263
9264      Set LONGLONG if `long' is mentioned twice.
9265
9266      For C++, constructors and destructors have their own fast treatment.  */
9267
9268   for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9269     {
9270       register int i;
9271       register tree id;
9272
9273       /* Certain parse errors slip through.  For example,
9274          `int class;' is not caught by the parser. Try
9275          weakly to recover here.  */
9276       if (TREE_CODE (spec) != TREE_LIST)
9277         return 0;
9278
9279       id = TREE_VALUE (spec);
9280
9281       if (TREE_CODE (id) == IDENTIFIER_NODE)
9282         {
9283           if (id == ridpointers[(int) RID_INT]
9284               || id == ridpointers[(int) RID_CHAR]
9285               || id == ridpointers[(int) RID_BOOL]
9286               || id == ridpointers[(int) RID_WCHAR])
9287             {
9288               if (type)
9289                 {
9290                   if (id == ridpointers[(int) RID_BOOL])
9291                     error ("`bool' is now a keyword");
9292                   else
9293                     cp_error ("extraneous `%T' ignored", id);
9294                 }
9295               else
9296                 {
9297                   if (id == ridpointers[(int) RID_INT])
9298                     explicit_int = 1;
9299                   else if (id == ridpointers[(int) RID_CHAR])
9300                     explicit_char = 1;
9301                   type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
9302                 }
9303               goto found;
9304             }
9305           /* C++ aggregate types.  */
9306           if (IDENTIFIER_HAS_TYPE_VALUE (id))
9307             {
9308               if (type)
9309                 cp_error ("multiple declarations `%T' and `%T'", type, id);
9310               else
9311                 type = IDENTIFIER_TYPE_VALUE (id);
9312               goto found;
9313             }
9314
9315           for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
9316             {
9317               if (ridpointers[i] == id)
9318                 {
9319                   if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
9320                     {
9321                       if (pedantic && ! in_system_header && warn_long_long)
9322                         pedwarn ("ANSI C++ does not support `long long'");
9323                       if (longlong)
9324                         error ("`long long long' is too long for GCC");
9325                       else
9326                         longlong = 1;
9327                     }
9328                   else if (RIDBIT_SETP (i, specbits))
9329                     pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
9330                   RIDBIT_SET (i, specbits);
9331                   goto found;
9332                 }
9333             }
9334         }
9335       /* C++ aggregate types.  */
9336       else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
9337         {
9338           if (type)
9339             cp_error ("multiple declarations `%T' and `%T'", type,
9340                       TREE_TYPE (id));
9341           else
9342             {
9343               type = TREE_TYPE (id);
9344               TREE_VALUE (spec) = type;
9345             }
9346           goto found;
9347         }
9348       if (type)
9349         error ("two or more data types in declaration of `%s'", name);
9350       else if (TREE_CODE (id) == IDENTIFIER_NODE)
9351         {
9352           register tree t = lookup_name (id, 1);
9353           if (!t || TREE_CODE (t) != TYPE_DECL)
9354             error ("`%s' fails to be a typedef or built in type",
9355                    IDENTIFIER_POINTER (id));
9356           else
9357             {
9358               type = TREE_TYPE (t);
9359 #if 0
9360               /* See the code below that used this.  */
9361               decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
9362 #endif
9363               typedef_decl = t;
9364             }
9365         }
9366       else if (id != error_mark_node)
9367         /* Can't change CLASS nodes into RECORD nodes here!  */
9368         type = id;
9369
9370     found: ;
9371     }
9372
9373   typedef_type = type;
9374
9375   /* No type at all: default to `int', and set DEFAULTED_INT
9376      because it was not a user-defined typedef.
9377      Except when we have a `typedef' inside a signature, in
9378      which case the type defaults to `unknown type' and is
9379      instantiated when assigning to a signature pointer or ref.  */
9380
9381   if (type == NULL_TREE
9382       && (RIDBIT_SETP (RID_SIGNED, specbits)
9383           || RIDBIT_SETP (RID_UNSIGNED, specbits)
9384           || RIDBIT_SETP (RID_LONG, specbits)
9385           || RIDBIT_SETP (RID_SHORT, specbits)))
9386     {
9387       /* These imply 'int'.  */
9388       type = integer_type_node;
9389       defaulted_int = 1;
9390     }
9391
9392   if (type == NULL_TREE)
9393     {
9394       explicit_int = -1;
9395       if (return_type == return_dtor)
9396         type = void_type_node;
9397       else if (return_type == return_ctor)
9398         type = build_pointer_type (ctor_return_type);
9399       else if (return_type == return_conversion)
9400         type = ctor_return_type;
9401       else if (current_class_type
9402                && IS_SIGNATURE (current_class_type)
9403                && RIDBIT_SETP (RID_TYPEDEF, specbits)
9404                && (decl_context == FIELD || decl_context == NORMAL))
9405         {
9406           explicit_int = 0;
9407           opaque_typedef = 1;
9408           type = copy_node (opaque_type_node);
9409         }
9410       else
9411         {
9412           /* We handle `main' specially here, because 'main () { }' is so
9413              common.  With no options, it is allowed.  With -Wreturn-type,
9414              it is a warning.  It is only an error with -pedantic-errors.  */
9415           int is_main = (funcdef_flag
9416                          && MAIN_NAME_P (dname)
9417                          && ctype == NULL_TREE
9418                          && in_namespace == NULL_TREE
9419                          && current_namespace == global_namespace);
9420
9421           if (in_system_header)
9422             /* Allow it, sigh.  */;
9423           else if (pedantic || ! is_main)
9424             cp_pedwarn ("ANSI C++ forbids declaration `%D' with no type",
9425                         dname);
9426           else if (warn_return_type)
9427             cp_warning ("ANSI C++ forbids declaration `%D' with no type",
9428                         dname);
9429
9430           type = integer_type_node;
9431         }
9432     }
9433   else if (return_type == return_dtor)
9434     {
9435       error ("return type specification for destructor invalid");
9436       type = void_type_node;
9437     }
9438   else if (return_type == return_ctor)
9439     {
9440       error ("return type specification for constructor invalid");
9441       type = build_pointer_type (ctor_return_type);
9442     }
9443   else if (return_type == return_conversion)
9444     {
9445       if (!same_type_p (type, ctor_return_type))
9446         cp_error ("operator `%T' declared to return `%T'",
9447                   ctor_return_type, type);
9448       else
9449         cp_pedwarn ("return type specified for `operator %T'",
9450                     ctor_return_type);
9451
9452       type = ctor_return_type;
9453     }
9454
9455   ctype = NULL_TREE;
9456
9457   /* Now process the modifiers that were specified
9458      and check for invalid combinations.  */
9459
9460   /* Long double is a special combination.  */
9461
9462   if (RIDBIT_SETP (RID_LONG, specbits)
9463       && TYPE_MAIN_VARIANT (type) == double_type_node)
9464     {
9465       RIDBIT_RESET (RID_LONG, specbits);
9466       type = build_qualified_type (long_double_type_node, 
9467                                    CP_TYPE_QUALS (type));
9468     }
9469
9470   /* Check all other uses of type modifiers.  */
9471
9472   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9473       || RIDBIT_SETP (RID_SIGNED, specbits)
9474       || RIDBIT_SETP (RID_LONG, specbits)
9475       || RIDBIT_SETP (RID_SHORT, specbits))
9476     {
9477       int ok = 0;
9478
9479       if (TREE_CODE (type) == REAL_TYPE)
9480         error ("short, signed or unsigned invalid for `%s'", name);
9481       else if (TREE_CODE (type) != INTEGER_TYPE)
9482         error ("long, short, signed or unsigned invalid for `%s'", name);
9483       else if (RIDBIT_SETP (RID_LONG, specbits)
9484                && RIDBIT_SETP (RID_SHORT, specbits))
9485         error ("long and short specified together for `%s'", name);
9486       else if ((RIDBIT_SETP (RID_LONG, specbits)
9487                 || RIDBIT_SETP (RID_SHORT, specbits))
9488                && explicit_char)
9489         error ("long or short specified with char for `%s'", name);
9490       else if ((RIDBIT_SETP (RID_LONG, specbits)
9491                 || RIDBIT_SETP (RID_SHORT, specbits))
9492                && TREE_CODE (type) == REAL_TYPE)
9493         error ("long or short specified with floating type for `%s'", name);
9494       else if (RIDBIT_SETP (RID_SIGNED, specbits)
9495                && RIDBIT_SETP (RID_UNSIGNED, specbits))
9496         error ("signed and unsigned given together for `%s'", name);
9497       else
9498         {
9499           ok = 1;
9500           if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
9501             {
9502               pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
9503                        name);
9504               if (flag_pedantic_errors)
9505                 ok = 0;
9506             }
9507         }
9508
9509       /* Discard the type modifiers if they are invalid.  */
9510       if (! ok)
9511         {
9512           RIDBIT_RESET (RID_UNSIGNED, specbits);
9513           RIDBIT_RESET (RID_SIGNED, specbits);
9514           RIDBIT_RESET (RID_LONG, specbits);
9515           RIDBIT_RESET (RID_SHORT, specbits);
9516           longlong = 0;
9517         }
9518     }
9519
9520   if (RIDBIT_SETP (RID_COMPLEX, specbits)
9521       && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9522     {
9523       error ("complex invalid for `%s'", name);
9524       RIDBIT_RESET (RID_COMPLEX, specbits);
9525     }
9526
9527   /* Decide whether an integer type is signed or not.
9528      Optionally treat bitfields as signed by default.  */
9529   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9530       || (bitfield && ! flag_signed_bitfields
9531           && (explicit_int || defaulted_int || explicit_char
9532               /* A typedef for plain `int' without `signed'
9533                  can be controlled just like plain `int'.  */
9534               || ! (typedef_decl != NULL_TREE
9535                     && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
9536           && TREE_CODE (type) != ENUMERAL_TYPE
9537           && RIDBIT_NOTSETP (RID_SIGNED, specbits)))
9538     {
9539       if (longlong)
9540         type = long_long_unsigned_type_node;
9541       else if (RIDBIT_SETP (RID_LONG, specbits))
9542         type = long_unsigned_type_node;
9543       else if (RIDBIT_SETP (RID_SHORT, specbits))
9544         type = short_unsigned_type_node;
9545       else if (type == char_type_node)
9546         type = unsigned_char_type_node;
9547       else if (typedef_decl)
9548         type = unsigned_type (type);
9549       else
9550         type = unsigned_type_node;
9551     }
9552   else if (RIDBIT_SETP (RID_SIGNED, specbits)
9553            && type == char_type_node)
9554     type = signed_char_type_node;
9555   else if (longlong)
9556     type = long_long_integer_type_node;
9557   else if (RIDBIT_SETP (RID_LONG, specbits))
9558     type = long_integer_type_node;
9559   else if (RIDBIT_SETP (RID_SHORT, specbits))
9560     type = short_integer_type_node;
9561
9562   if (RIDBIT_SETP (RID_COMPLEX, specbits))
9563     {
9564       /* If we just have "complex", it is equivalent to
9565          "complex double", but if any modifiers at all are specified it is
9566          the complex form of TYPE.  E.g, "complex short" is
9567          "complex short int".  */
9568
9569       if (defaulted_int && ! longlong
9570           && ! (RIDBIT_SETP (RID_LONG, specbits)
9571                 || RIDBIT_SETP (RID_SHORT, specbits)
9572                 || RIDBIT_SETP (RID_SIGNED, specbits)
9573                 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
9574         type = complex_double_type_node;
9575       else if (type == integer_type_node)
9576         type = complex_integer_type_node;
9577       else if (type == float_type_node)
9578         type = complex_float_type_node;
9579       else if (type == double_type_node)
9580         type = complex_double_type_node;
9581       else if (type == long_double_type_node)
9582         type = complex_long_double_type_node;
9583       else
9584         type = build_complex_type (type);
9585     }
9586
9587   if (return_type == return_conversion 
9588       && (RIDBIT_SETP (RID_CONST, specbits)
9589           || RIDBIT_SETP (RID_VOLATILE, specbits)
9590           || RIDBIT_SETP (RID_RESTRICT, specbits)))
9591     cp_error ("qualifiers are not allowed on declaration of `operator %T'",
9592               ctor_return_type);
9593
9594   /* Set CONSTP if this declaration is `const', whether by
9595      explicit specification or via a typedef.
9596      Likewise for VOLATILEP.  */
9597
9598   constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
9599   restrictp = 
9600     !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
9601   volatilep = 
9602     !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
9603   type_quals = ((constp ? TYPE_QUAL_CONST : 0)
9604                 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
9605                 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
9606   type = cp_build_qualified_type (type, type_quals);
9607   staticp = 0;
9608   inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
9609   virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
9610   RIDBIT_RESET (RID_VIRTUAL, specbits);
9611   explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
9612   RIDBIT_RESET (RID_EXPLICIT, specbits);
9613
9614   if (RIDBIT_SETP (RID_STATIC, specbits))
9615     staticp = 1 + (decl_context == FIELD);
9616
9617   if (virtualp && staticp == 2)
9618     {
9619       cp_error ("member `%D' cannot be declared both virtual and static",
9620                 dname);
9621       staticp = 0;
9622     }
9623   friendp = RIDBIT_SETP (RID_FRIEND, specbits);
9624   RIDBIT_RESET (RID_FRIEND, specbits);
9625
9626   /* $7.1.2, Function specifiers */
9627   if (friendp && explicitp)
9628     error ("only declarations of constructors can be `explicit'");
9629
9630   if (RIDBIT_SETP (RID_MUTABLE, specbits))
9631     {
9632       if (decl_context == PARM)
9633         {
9634           error ("non-member `%s' cannot be declared `mutable'", name);
9635           RIDBIT_RESET (RID_MUTABLE, specbits);
9636         }
9637       else if (friendp || decl_context == TYPENAME)
9638         {
9639           error ("non-object member `%s' cannot be declared `mutable'", name);
9640           RIDBIT_RESET (RID_MUTABLE, specbits);
9641         }
9642     }
9643
9644   /* Warn if two storage classes are given. Default to `auto'.  */
9645
9646   if (RIDBIT_ANY_SET (specbits))
9647     {
9648       if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
9649       if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
9650       if (decl_context == PARM && nclasses > 0)
9651         error ("storage class specifiers invalid in parameter declarations");
9652       if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9653         {
9654           if (decl_context == PARM)
9655             error ("typedef declaration invalid in parameter declaration");
9656           nclasses++;
9657         }
9658       if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
9659       if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
9660     }
9661
9662   /* Give error if `virtual' is used outside of class declaration.  */
9663   if (virtualp
9664       && (current_class_name == NULL_TREE || decl_context != FIELD))
9665     {
9666       error ("virtual outside class declaration");
9667       virtualp = 0;
9668     }
9669   if (current_class_name == NULL_TREE && RIDBIT_SETP (RID_MUTABLE, specbits))
9670     {
9671       error ("only members can be declared mutable");
9672       RIDBIT_RESET (RID_MUTABLE, specbits);
9673     }
9674
9675   /* Static anonymous unions are dealt with here.  */
9676   if (staticp && decl_context == TYPENAME
9677       && TREE_CODE (declspecs) == TREE_LIST
9678       && ANON_UNION_TYPE_P (TREE_VALUE (declspecs)))
9679     decl_context = FIELD;
9680
9681   /* Give error if `const,' `volatile,' `inline,' `friend,' or `virtual'
9682      is used in a signature member function declaration.  */
9683   if (decl_context == FIELD
9684       && IS_SIGNATURE (current_class_type)
9685       && RIDBIT_NOTSETP (RID_TYPEDEF, specbits))
9686     {
9687       if (type_quals != TYPE_UNQUALIFIED)
9688         {
9689           error ("type qualifiers specified for signature member function `%s'", name);
9690           type_quals = TYPE_UNQUALIFIED;
9691         }
9692       if (inlinep)
9693         {
9694           error ("`inline' specified for signature member function `%s'", name);
9695           /* Later, we'll make signature member functions inline.  */
9696           inlinep = 0;
9697         }
9698       if (friendp)
9699         {
9700           error ("`friend' declaration in signature definition");
9701           friendp = 0;
9702         }
9703       if (virtualp)
9704         {
9705           error ("`virtual' specified for signature member function `%s'",
9706                  name);
9707           /* Later, we'll make signature member functions virtual.  */
9708           virtualp = 0;
9709         }
9710     }
9711
9712   /* Warn about storage classes that are invalid for certain
9713      kinds of declarations (parameters, typenames, etc.).  */
9714
9715   if (nclasses > 1)
9716     error ("multiple storage classes in declaration of `%s'", name);
9717   else if (decl_context != NORMAL && nclasses > 0)
9718     {
9719       if ((decl_context == PARM || decl_context == CATCHPARM)
9720           && (RIDBIT_SETP (RID_REGISTER, specbits)
9721               || RIDBIT_SETP (RID_AUTO, specbits)))
9722         ;
9723       else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9724         ;
9725       else if (decl_context == FIELD
9726                && ! IS_SIGNATURE (current_class_type)
9727                /* C++ allows static class elements  */
9728                && RIDBIT_SETP (RID_STATIC, specbits))
9729         /* C++ also allows inlines and signed and unsigned elements,
9730            but in those cases we don't come in here.  */
9731         ;
9732       else
9733         {
9734           if (decl_context == FIELD)
9735             {
9736               tree tmp = NULL_TREE;
9737               register int op = 0;
9738
9739               if (declarator)
9740                 {
9741                   /* Avoid trying to get an operand off an identifier node.  */ 
9742                   if (TREE_CODE (declarator) == IDENTIFIER_NODE)
9743                     tmp = declarator;
9744                   else
9745                     tmp = TREE_OPERAND (declarator, 0);
9746                   op = IDENTIFIER_OPNAME_P (tmp);
9747                 }
9748               error ("storage class specified for %s `%s'",
9749                      IS_SIGNATURE (current_class_type)
9750                      ? (op
9751                         ? "signature member operator"
9752                         : "signature member function")
9753                      : (op ? "member operator" : "field"),
9754                      op ? operator_name_string (tmp) : name);
9755             }
9756           else
9757             error (((decl_context == PARM || decl_context == CATCHPARM)
9758                     ? "storage class specified for parameter `%s'"
9759                     : "storage class specified for typename"), name);
9760           RIDBIT_RESET (RID_REGISTER, specbits);
9761           RIDBIT_RESET (RID_AUTO, specbits);
9762           RIDBIT_RESET (RID_EXTERN, specbits);
9763
9764           if (decl_context == FIELD && IS_SIGNATURE (current_class_type))
9765             {
9766               RIDBIT_RESET (RID_STATIC, specbits);
9767               staticp = 0;
9768             }
9769         }
9770     }
9771   else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
9772     {
9773       if (toplevel_bindings_p ())
9774         {
9775           /* It's common practice (and completely valid) to have a const
9776              be initialized and declared extern.  */
9777           if (!(type_quals & TYPE_QUAL_CONST))
9778             warning ("`%s' initialized and declared `extern'", name);
9779         }
9780       else
9781         error ("`%s' has both `extern' and initializer", name);
9782     }
9783   else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
9784            && ! toplevel_bindings_p ())
9785     error ("nested function `%s' declared `extern'", name);
9786   else if (toplevel_bindings_p ())
9787     {
9788       if (RIDBIT_SETP (RID_AUTO, specbits))
9789         error ("top-level declaration of `%s' specifies `auto'", name);
9790     }
9791
9792   if (nclasses > 0 && friendp)
9793     error ("storage class specifiers invalid in friend function declarations");
9794
9795   /* Now figure out the structure of the declarator proper.
9796      Descend through it, creating more complex types, until we reach
9797      the declared identifier (or NULL_TREE, in an absolute declarator).  */
9798
9799   inner_attrs = NULL_TREE;
9800   ignore_attrs = 0;  
9801
9802   while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
9803          && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
9804     {
9805       /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
9806          an INDIRECT_REF (for *...),
9807          a CALL_EXPR (for ...(...)),
9808          an identifier (for the name being declared)
9809          or a null pointer (for the place in an absolute declarator
9810          where the name was omitted).
9811          For the last two cases, we have just exited the loop.
9812
9813          For C++ it could also be
9814          a SCOPE_REF (for class :: ...).  In this case, we have converted
9815          sensible names to types, and those are the values we use to
9816          qualify the member name.
9817          an ADDR_EXPR (for &...),
9818          a BIT_NOT_EXPR (for destructors)
9819
9820          At this point, TYPE is the type of elements of an array,
9821          or for a function to return, or for a pointer to point to.
9822          After this sequence of ifs, TYPE is the type of the
9823          array or function or pointer, and DECLARATOR has had its
9824          outermost layer removed.  */
9825
9826       if (type == error_mark_node)
9827         {
9828           if (TREE_CODE (declarator) == SCOPE_REF)
9829             declarator = TREE_OPERAND (declarator, 1);
9830           else
9831             declarator = TREE_OPERAND (declarator, 0);
9832           continue;
9833         }
9834       if (quals != NULL_TREE
9835           && (declarator == NULL_TREE
9836               || TREE_CODE (declarator) != SCOPE_REF))
9837         {
9838           if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
9839             ctype = TYPE_METHOD_BASETYPE (type);
9840           if (ctype != NULL_TREE)
9841             {
9842               tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
9843               ctype = grok_method_quals (ctype, dummy, quals);
9844               type = TREE_TYPE (dummy);
9845               quals = NULL_TREE;
9846             }
9847         }
9848
9849       /* See the comment for the TREE_LIST case, below.  */
9850       if (ignore_attrs)
9851         ignore_attrs = 0;
9852       else if (inner_attrs)
9853         {
9854           decl_attributes (type, inner_attrs, NULL_TREE);
9855           inner_attrs = NULL_TREE;
9856         }
9857
9858       switch (TREE_CODE (declarator))
9859         {
9860         case TREE_LIST:
9861           {
9862             /* We encode a declarator with embedded attributes using
9863                a TREE_LIST.  The attributes apply to the declarator
9864                directly inside them, so we have to skip an iteration
9865                before applying them to the type.  If the declarator just
9866                inside is the declarator-id, we apply the attrs to the
9867                decl itself.  */
9868             inner_attrs = TREE_PURPOSE (declarator);
9869             ignore_attrs = 1;
9870             declarator = TREE_VALUE (declarator);
9871           }
9872           break;
9873
9874         case ARRAY_REF:
9875           {
9876             register tree itype = NULL_TREE;
9877             register tree size = TREE_OPERAND (declarator, 1);
9878             /* The index is a signed object `sizetype' bits wide.  */
9879             tree index_type = signed_type (sizetype);
9880
9881             declarator = TREE_OPERAND (declarator, 0);
9882
9883             /* Check for some types that there cannot be arrays of.  */
9884
9885             if (TREE_CODE (type) == VOID_TYPE)
9886               {
9887                 cp_error ("declaration of `%D' as array of voids", dname);
9888                 type = error_mark_node;
9889               }
9890
9891             if (TREE_CODE (type) == FUNCTION_TYPE)
9892               {
9893                 cp_error ("declaration of `%D' as array of functions", dname);
9894                 type = error_mark_node;
9895               }
9896
9897             /* ARM $8.4.3: Since you can't have a pointer to a reference,
9898                you can't have arrays of references.  If we allowed them,
9899                then we'd be saying x[i] is valid for an array x, but
9900                then you'd have to ask: what does `*(x + i)' mean?  */
9901             if (TREE_CODE (type) == REFERENCE_TYPE)
9902               {
9903                 if (decl_context == TYPENAME)
9904                   cp_error ("cannot make arrays of references");
9905                 else
9906                   cp_error ("declaration of `%D' as array of references",
9907                             dname);
9908                 type = error_mark_node;
9909               }
9910
9911             if (TREE_CODE (type) == OFFSET_TYPE)
9912               {
9913                   cp_error ("declaration of `%D' as array of data members",
9914                             dname);
9915                 type = error_mark_node;
9916               }
9917
9918             if (TREE_CODE (type) == METHOD_TYPE)
9919               {
9920                 cp_error ("declaration of `%D' as array of function members",
9921                           dname);
9922                 type = error_mark_node;
9923               }
9924
9925             if (size == error_mark_node)
9926               type = error_mark_node;
9927             else if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9928               {
9929                 /* [dcl.array]
9930
9931                    the constant expressions that specify the bounds of
9932                    the arrays can be omitted only for the first member
9933                    of the sequence.  */
9934                 cp_error ("declaration of `%D' as multidimensional array",
9935                           dname);
9936                 cp_error ("must have bounds for all dimensions except the first");
9937                 type = error_mark_node;
9938               }
9939
9940             if (type == error_mark_node)
9941               continue;
9942
9943             if (size)
9944               {
9945                 /* Must suspend_momentary here because the index
9946                    type may need to live until the end of the function.
9947                    For example, it is used in the declaration of a
9948                    variable which requires destructing at the end of
9949                    the function; then build_vec_delete will need this
9950                    value.  */
9951                 int yes = suspend_momentary ();
9952                 /* Might be a cast. */
9953                 if (TREE_CODE (size) == NOP_EXPR
9954                     && TREE_TYPE (size) == TREE_TYPE (TREE_OPERAND (size, 0)))
9955                   size = TREE_OPERAND (size, 0);
9956
9957                 /* If this involves a template parameter, it will be a
9958                    constant at instantiation time, but we don't know
9959                    what the value is yet.  Even if no template
9960                    parameters are involved, we may an expression that
9961                    is not a constant; we don't even simplify `1 + 2'
9962                    when processing a template.  */
9963                 if (processing_template_decl)
9964                   {
9965                     /* Resolve a qualified reference to an enumerator or
9966                        static const data member of ours.  */
9967                     if (TREE_CODE (size) == SCOPE_REF
9968                         && TREE_OPERAND (size, 0) == current_class_type)
9969                       {
9970                         tree t = lookup_field (current_class_type,
9971                                                TREE_OPERAND (size, 1), 0, 0);
9972                         if (t)
9973                           size = t;
9974                       }
9975
9976                     itype = make_node (INTEGER_TYPE);
9977                     TYPE_MIN_VALUE (itype) = size_zero_node;
9978                     TYPE_MAX_VALUE (itype) = build_min
9979                       (MINUS_EXPR, sizetype, size, integer_one_node);
9980                     goto dont_grok_size;
9981                   }
9982
9983                 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
9984                     && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
9985                     && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
9986                   {
9987                     cp_error ("size of array `%D' has non-integer type",
9988                               dname);
9989                     size = integer_one_node;
9990                   }
9991                 if (TREE_READONLY_DECL_P (size))
9992                   size = decl_constant_value (size);
9993                 if (pedantic && integer_zerop (size))
9994                   cp_pedwarn ("ANSI C++ forbids zero-size array `%D'", dname);
9995                 if (TREE_CONSTANT (size))
9996                   {
9997                     int old_flag_pedantic_errors = flag_pedantic_errors;
9998                     int old_pedantic = pedantic;
9999                     pedantic = flag_pedantic_errors = 1;
10000                     /* Always give overflow errors on array subscripts.  */
10001                     constant_expression_warning (size);
10002                     pedantic = old_pedantic;
10003                     flag_pedantic_errors = old_flag_pedantic_errors;
10004                     if (INT_CST_LT (size, integer_zero_node))
10005                       {
10006                         cp_error ("size of array `%D' is negative", dname);
10007                         size = integer_one_node;
10008                       }
10009                   }
10010                 else
10011                   {
10012                     if (pedantic)
10013                       {
10014                         if (dname)
10015                           cp_pedwarn ("ANSI C++ forbids variable-size array `%D'",
10016                                       dname);
10017                         else
10018                           cp_pedwarn ("ANSI C++ forbids variable-size array");
10019                       }
10020                   }
10021
10022                 itype
10023                   = fold (build_binary_op (MINUS_EXPR,
10024                                            cp_convert (index_type, size),
10025                                            cp_convert (index_type,
10026                                                        integer_one_node), 1));
10027                 if (! TREE_CONSTANT (itype))
10028                   itype = variable_size (itype);
10029                 else if (TREE_OVERFLOW (itype))
10030                   {
10031                     error ("overflow in array dimension");
10032                     TREE_OVERFLOW (itype) = 0;
10033                   }
10034
10035                 /* If we're a parm, we need to have a permanent type so
10036                    mangling checks for re-use will work right.  If both the
10037                    element and index types are permanent, the array type
10038                    will be, too.  */
10039                 if (decl_context == PARM
10040                     && allocation_temporary_p () && TREE_PERMANENT (type))
10041                   {
10042                     push_obstacks (&permanent_obstack, &permanent_obstack);
10043                     itype = build_index_type (itype);
10044                     pop_obstacks ();
10045                   }
10046                 else
10047                   itype = build_index_type (itype);
10048
10049               dont_grok_size:
10050                 resume_momentary (yes);
10051               }
10052
10053             type = build_cplus_array_type (type, itype);
10054             ctype = NULL_TREE;
10055           }
10056           break;
10057
10058         case CALL_EXPR:
10059           {
10060             tree arg_types;
10061             int funcdecl_p;
10062             tree inner_parms = TREE_OPERAND (declarator, 1);
10063             tree inner_decl = TREE_OPERAND (declarator, 0);
10064
10065             /* Declaring a function type.
10066                Make sure we have a valid type for the function to return.  */
10067
10068             /* We now know that the TYPE_QUALS don't apply to the
10069                decl, but to its return type.  */
10070             type_quals = TYPE_UNQUALIFIED;
10071
10072             /* Warn about some types functions can't return.  */
10073
10074             if (TREE_CODE (type) == FUNCTION_TYPE)
10075               {
10076                 error ("`%s' declared as function returning a function", name);
10077                 type = integer_type_node;
10078               }
10079             if (TREE_CODE (type) == ARRAY_TYPE)
10080               {
10081                 error ("`%s' declared as function returning an array", name);
10082                 type = integer_type_node;
10083               }
10084
10085             if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
10086               inner_decl = TREE_OPERAND (inner_decl, 1);
10087
10088             if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR) 
10089               inner_decl = dname;
10090
10091             /* Pick up type qualifiers which should be applied to `this'.  */
10092             quals = TREE_OPERAND (declarator, 2);
10093
10094             /* Pick up the exception specifications.  */
10095             raises = TREE_TYPE (declarator);
10096
10097             /* Say it's a definition only for the CALL_EXPR
10098                closest to the identifier.  */
10099             funcdecl_p
10100               = inner_decl 
10101               && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
10102                   || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR 
10103                   || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
10104             
10105             if (ctype == NULL_TREE
10106                 && decl_context == FIELD
10107                 && funcdecl_p
10108                 && (friendp == 0 || dname == current_class_name))
10109               ctype = current_class_type;
10110
10111             if (ctype && return_type == return_conversion)
10112               TYPE_HAS_CONVERSION (ctype) = 1;
10113             if (ctype && constructor_name (ctype) == dname)
10114               {
10115                 /* We are within a class's scope. If our declarator name
10116                    is the same as the class name, and we are defining
10117                    a function, then it is a constructor/destructor, and
10118                    therefore returns a void type.  */
10119
10120                 if (flags == DTOR_FLAG)
10121                   {
10122                     /* ANSI C++ June 5 1992 WP 12.4.1.  A destructor may
10123                        not be declared const or volatile.  A destructor
10124                        may not be static.  */
10125                     if (staticp == 2)
10126                       error ("destructor cannot be static member function");
10127                     if (quals)
10128                       {
10129                         cp_error ("destructors may not be `%s'",
10130                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10131                         quals = NULL_TREE;
10132                       }
10133                     if (decl_context == FIELD)
10134                       {
10135                         if (! member_function_or_else (ctype, current_class_type,
10136                                                        "destructor for alien class `%s' cannot be a member"))
10137                           return void_type_node;
10138                       }
10139                   }
10140                 else            /* It's a constructor.  */
10141                   {
10142                     if (explicitp == 1)
10143                       explicitp = 2;
10144                     /* ANSI C++ June 5 1992 WP 12.1.2.  A constructor may
10145                        not be declared const or volatile.  A constructor may
10146                        not be virtual.  A constructor may not be static.  */
10147                     if (staticp == 2)
10148                       error ("constructor cannot be static member function");
10149                     if (virtualp)
10150                       {
10151                         pedwarn ("constructors cannot be declared virtual");
10152                         virtualp = 0;
10153                       }
10154                     if (quals)
10155                       {
10156                         cp_error ("constructors may not be `%s'",
10157                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10158                         quals = NULL_TREE;
10159                       }
10160                     {
10161                       RID_BIT_TYPE tmp_bits;
10162                       bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
10163                       RIDBIT_RESET (RID_INLINE, tmp_bits);
10164                       RIDBIT_RESET (RID_STATIC, tmp_bits);
10165                       if (RIDBIT_ANY_SET (tmp_bits))
10166                         error ("return value type specifier for constructor ignored");
10167                     }
10168                     type = build_pointer_type (ctype);
10169                     if (decl_context == FIELD
10170                         && IS_SIGNATURE (current_class_type))
10171                       {
10172                         error ("constructor not allowed in signature");
10173                         return void_type_node;
10174                       }                   
10175                     else if (decl_context == FIELD)
10176                       {
10177                         if (! member_function_or_else (ctype, current_class_type,
10178                                                        "constructor for alien class `%s' cannot be member"))
10179                           return void_type_node;
10180                         TYPE_HAS_CONSTRUCTOR (ctype) = 1;
10181                         if (return_type != return_ctor)
10182                           return NULL_TREE;
10183                       }
10184                   }
10185                 if (decl_context == FIELD)
10186                   staticp = 0;
10187               }
10188             else if (friendp)
10189               {
10190                 if (initialized)
10191                   error ("can't initialize friend function `%s'", name);
10192                 if (virtualp)
10193                   {
10194                     /* Cannot be both friend and virtual.  */
10195                     error ("virtual functions cannot be friends");
10196                     RIDBIT_RESET (RID_FRIEND, specbits);
10197                     friendp = 0;
10198                   }
10199                 if (decl_context == NORMAL)
10200                   error ("friend declaration not in class definition");
10201                 if (current_function_decl && funcdef_flag)
10202                   cp_error ("can't define friend function `%s' in a local class definition",
10203                             name);
10204               }
10205
10206             /* Construct the function type and go to the next
10207                inner layer of declarator.  */
10208
10209             declarator = TREE_OPERAND (declarator, 0);
10210
10211             /* FIXME: This is where default args should be fully
10212                processed.  */
10213
10214             arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
10215
10216             if (declarator && flags == DTOR_FLAG)
10217               {
10218                 /* A destructor declared in the body of a class will
10219                    be represented as a BIT_NOT_EXPR.  But, we just
10220                    want the underlying IDENTIFIER.  */
10221                 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
10222                   declarator = TREE_OPERAND (declarator, 0);
10223                 
10224                 if (strict_prototype == 0 && arg_types == NULL_TREE)
10225                   arg_types = void_list_node;
10226                 else if (arg_types == NULL_TREE
10227                          || arg_types != void_list_node)
10228                   {
10229                     cp_error ("destructors may not have parameters");
10230                     arg_types = void_list_node;
10231                     last_function_parms = NULL_TREE;
10232                   }
10233               }
10234
10235             /* ANSI says that `const int foo ();'
10236                does not make the function foo const.  */
10237             type = build_function_type (type, arg_types);
10238
10239             {
10240               tree t;
10241               for (t = arg_types; t; t = TREE_CHAIN (t))
10242                 if (TREE_PURPOSE (t)
10243                     && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10244                   {
10245                     add_defarg_fn (type);
10246                     break;
10247                   }
10248             }
10249           }
10250           break;
10251
10252         case ADDR_EXPR:
10253         case INDIRECT_REF:
10254           /* Filter out pointers-to-references and references-to-references.
10255              We can get these if a TYPE_DECL is used.  */
10256
10257           if (TREE_CODE (type) == REFERENCE_TYPE)
10258             {
10259               error ("cannot declare %s to references",
10260                      TREE_CODE (declarator) == ADDR_EXPR
10261                      ? "references" : "pointers");
10262               declarator = TREE_OPERAND (declarator, 0);
10263               continue;
10264             }
10265
10266           if (TREE_CODE (type) == OFFSET_TYPE
10267               && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10268                   || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10269             {
10270               cp_error ("cannot declare pointer to `%#T' member",
10271                         TREE_TYPE (type));
10272               type = TREE_TYPE (type);
10273             }
10274
10275           /* Merge any constancy or volatility into the target type
10276              for the pointer.  */
10277
10278           /* We now know that the TYPE_QUALS don't apply to the decl,
10279              but to the target of the pointer.  */
10280           type_quals = TYPE_UNQUALIFIED;
10281
10282           if (IS_SIGNATURE (type))
10283             {
10284               if (TREE_CODE (declarator) == ADDR_EXPR)
10285                 {
10286                   if (CLASSTYPE_METHOD_VEC (type) == NULL_TREE
10287                       && TYPE_SIZE (type))
10288                     cp_warning ("empty signature `%T' used in signature reference declaration",
10289                                 type);
10290 #if 0
10291                   type = build_signature_reference_type (type);
10292 #else
10293                   sorry ("signature reference");
10294                   return NULL_TREE;
10295 #endif
10296                 }
10297               else
10298                 {
10299                   if (CLASSTYPE_METHOD_VEC (type) == NULL_TREE
10300                       && TYPE_SIZE (type))
10301                     cp_warning ("empty signature `%T' used in signature pointer declaration",
10302                                 type);
10303                   type = build_signature_pointer_type (type);
10304                 }
10305             }
10306           else if (TREE_CODE (declarator) == ADDR_EXPR)
10307             {
10308               if (TREE_CODE (type) == VOID_TYPE)
10309                 error ("invalid type: `void &'");
10310               else
10311                 type = build_reference_type (type);
10312             }
10313           else if (TREE_CODE (type) == METHOD_TYPE)
10314             type = build_ptrmemfunc_type (build_pointer_type (type));
10315           else
10316             type = build_pointer_type (type);
10317
10318           /* Process a list of type modifier keywords (such as
10319              const or volatile) that were given inside the `*' or `&'.  */
10320
10321           if (TREE_TYPE (declarator))
10322             {
10323               register tree typemodlist;
10324               int erred = 0;
10325
10326               constp = 0;
10327               volatilep = 0;
10328               restrictp = 0;
10329               for (typemodlist = TREE_TYPE (declarator); typemodlist;
10330                    typemodlist = TREE_CHAIN (typemodlist))
10331                 {
10332                   tree qualifier = TREE_VALUE (typemodlist);
10333
10334                   if (qualifier == ridpointers[(int) RID_CONST])
10335                     constp++;
10336                   else if (qualifier == ridpointers[(int) RID_VOLATILE])
10337                     volatilep++;
10338                   else if (qualifier == ridpointers[(int) RID_RESTRICT])
10339                     restrictp++;
10340                   else if (!erred)
10341                     {
10342                       erred = 1;
10343                       error ("invalid type modifier within pointer declarator");
10344                     }
10345                 }
10346               if (constp > 1)
10347                 pedwarn ("duplicate `const'");
10348               if (volatilep > 1)
10349                 pedwarn ("duplicate `volatile'");
10350               if (restrictp > 1)
10351                 pedwarn ("duplicate `restrict'");
10352
10353               type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10354                             | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10355                             | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10356               if (TREE_CODE (declarator) == ADDR_EXPR
10357                   && (constp || volatilep))
10358                 {
10359                   if (constp)
10360                     pedwarn ("discarding `const' applied to a reference");
10361                   if (volatilep)
10362                     pedwarn ("discarding `volatile' applied to a reference");
10363                   type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
10364                 }
10365               type = cp_build_qualified_type (type, type_quals);
10366             }
10367           declarator = TREE_OPERAND (declarator, 0);
10368           ctype = NULL_TREE;
10369           break;
10370
10371         case SCOPE_REF:
10372           {
10373             /* We have converted type names to NULL_TREE if the
10374                name was bogus, or to a _TYPE node, if not.
10375
10376                The variable CTYPE holds the type we will ultimately
10377                resolve to.  The code here just needs to build
10378                up appropriate member types.  */
10379             tree sname = TREE_OPERAND (declarator, 1);
10380             tree t;
10381
10382             /* Destructors can have their visibilities changed as well.  */
10383             if (TREE_CODE (sname) == BIT_NOT_EXPR)
10384               sname = TREE_OPERAND (sname, 0);
10385
10386             if (TREE_COMPLEXITY (declarator) == 0)
10387               /* This needs to be here, in case we are called
10388                  multiple times.  */ ;
10389             else if (TREE_COMPLEXITY (declarator) == -1)
10390               /* Namespace member. */
10391               pop_decl_namespace ();
10392             else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
10393               /* Don't fall out into global scope. Hides real bug? --eichin */ ;
10394             else if (! IS_AGGR_TYPE_CODE
10395                      (TREE_CODE (TREE_OPERAND (declarator, 0))))
10396               ;
10397             else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10398               {
10399                 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10400                    that refer to ctype.  They couldn't be resolved earlier
10401                    because we hadn't pushed into the class yet.
10402                    Example: resolve 'B<T>::type' in
10403                    'B<typename B<T>::type> B<T>::f () { }'.  */
10404                 if (current_template_parms
10405                     && uses_template_parms (type)
10406                     && uses_template_parms (current_class_type))
10407                   {
10408                     tree args = current_template_args ();
10409                     type = tsubst (type, args, /*complain=*/1, NULL_TREE);
10410                   }
10411
10412                 /* This pop_nested_class corresponds to the
10413                    push_nested_class used to push into class scope for
10414                    parsing the argument list of a function decl, in
10415                    qualified_id.  */
10416                 pop_nested_class (1);
10417                 TREE_COMPLEXITY (declarator) = current_class_depth;
10418               }
10419             else
10420               my_friendly_abort (16);
10421
10422             if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10423               {
10424                 /* We had a reference to a global decl, or
10425                    perhaps we were given a non-aggregate typedef,
10426                    in which case we cleared this out, and should just
10427                    keep going as though it wasn't there.  */
10428                 declarator = sname;
10429                 continue;
10430               }
10431             ctype = TREE_OPERAND (declarator, 0);
10432
10433             t = ctype;
10434             while (t != NULL_TREE && CLASS_TYPE_P (t)) 
10435               {
10436                 if (CLASSTYPE_TEMPLATE_INFO (t) &&
10437                     !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
10438                   template_count += 1;
10439                 t = TYPE_MAIN_DECL (t);
10440                 if (DECL_LANG_SPECIFIC (t))
10441                   t = DECL_CLASS_CONTEXT (t);
10442                 else
10443                   t = NULL_TREE;
10444               }
10445
10446             if (sname == NULL_TREE)
10447               goto done_scoping;
10448
10449             if (TREE_CODE (sname) == IDENTIFIER_NODE)
10450               {
10451                 /* This is the `standard' use of the scoping operator:
10452                    basetype :: member .  */
10453
10454                 if (ctype == current_class_type)
10455                   {
10456                     /* class A {
10457                          void A::f ();
10458                        };
10459
10460                        Is this ill-formed?  */
10461
10462                     if (pedantic)
10463                       cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
10464                                   ctype, name);
10465                   }
10466                 else if (TREE_CODE (type) == FUNCTION_TYPE)
10467                   {
10468                     if (current_class_type == NULL_TREE
10469                         || friendp)
10470                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10471                                                       TYPE_ARG_TYPES (type));
10472                     else
10473                       {
10474                         cp_error ("cannot declare member function `%T::%s' within `%T'",
10475                                   ctype, name, current_class_type);
10476                         return void_type_node;
10477                       }
10478                   }
10479                 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
10480                          || TYPE_SIZE (complete_type (ctype)) != NULL_TREE)
10481                   {
10482                     /* Have to move this code elsewhere in this function.
10483                        this code is used for i.e., typedef int A::M; M *pm;
10484
10485                        It is?  How? jason 10/2/94 */
10486
10487                     if (current_class_type)
10488                       {
10489                         cp_error ("cannot declare member `%T::%s' within `%T'",
10490                                   ctype, name, current_class_type);
10491                         return void_type_node;
10492                       }
10493                     type = build_offset_type (ctype, type);
10494                   }
10495                 else if (uses_template_parms (ctype))
10496                   {
10497                     if (TREE_CODE (type) == FUNCTION_TYPE)
10498                       type
10499                         = build_cplus_method_type (ctype, TREE_TYPE (type),
10500                                                    TYPE_ARG_TYPES (type));
10501                   }
10502                 else
10503                   {
10504                     cp_error ("structure `%T' not yet defined", ctype);
10505                     return error_mark_node;
10506                   }
10507
10508                 declarator = sname;
10509               }
10510             else if (TREE_CODE (sname) == SCOPE_REF)
10511               my_friendly_abort (17);
10512             else
10513               {
10514               done_scoping:
10515                 declarator = TREE_OPERAND (declarator, 1);
10516                 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10517                   /* In this case, we will deal with it later.  */
10518                   ;
10519                 else
10520                   {
10521                     if (TREE_CODE (type) == FUNCTION_TYPE)
10522                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10523                                                       TYPE_ARG_TYPES (type));
10524                     else
10525                       type = build_offset_type (ctype, type);
10526                   }
10527               }
10528           }
10529           break;
10530
10531         case BIT_NOT_EXPR:
10532           declarator = TREE_OPERAND (declarator, 0);
10533           break;
10534
10535         case RECORD_TYPE:
10536         case UNION_TYPE:
10537         case ENUMERAL_TYPE:
10538           declarator = NULL_TREE;
10539           break;
10540
10541         case ERROR_MARK:
10542           declarator = NULL_TREE;
10543           break;
10544
10545         default:
10546           my_friendly_abort (158);
10547         }
10548     }
10549
10550   /* See the comment for the TREE_LIST case, above.  */
10551   if (inner_attrs)
10552     {
10553       if (! ignore_attrs)
10554         decl_attributes (type, inner_attrs, NULL_TREE);
10555       else if (attrlist)
10556         TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
10557       else
10558         attrlist = build_decl_list (NULL_TREE, inner_attrs);
10559     }
10560
10561   if (explicitp == 1)
10562     {
10563       error ("only constructors can be declared `explicit'");
10564       explicitp = 0;
10565     }
10566
10567   /* Now TYPE has the actual type.  */
10568
10569   /* If this is declaring a typedef name, return a TYPE_DECL.  */
10570
10571   if (RIDBIT_SETP (RID_MUTABLE, specbits))
10572     {
10573       if (type_quals & TYPE_QUAL_CONST)
10574         {
10575           error ("const `%s' cannot be declared `mutable'", name);
10576           RIDBIT_RESET (RID_MUTABLE, specbits);
10577         }
10578       else if (staticp)
10579         {
10580           error ("static `%s' cannot be declared `mutable'", name);
10581           RIDBIT_RESET (RID_MUTABLE, specbits);
10582         }
10583     }
10584
10585   if (declarator == NULL_TREE
10586       || TREE_CODE (declarator) == IDENTIFIER_NODE
10587       || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
10588           && (TREE_CODE (type) == FUNCTION_TYPE
10589               || TREE_CODE (type) == METHOD_TYPE)))
10590     /* OK */;
10591   else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10592     {
10593       cp_error ("template-id `%D' used as a declarator", declarator);
10594       declarator = dname;
10595     }
10596   else
10597     my_friendly_abort (990210);
10598
10599   if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
10600     {
10601       tree decl;
10602
10603       /* Note that the grammar rejects storage classes
10604          in typenames, fields or parameters.  */
10605       if (current_lang_name == lang_name_java)
10606         TYPE_FOR_JAVA (type) = 1;
10607
10608       if (decl_context == FIELD)
10609         {
10610           if (declarator == constructor_name (current_class_type))
10611             cp_pedwarn ("ANSI C++ forbids nested type `%D' with same name as enclosing class",
10612                         declarator);
10613           decl = build_lang_decl (TYPE_DECL, declarator, type);
10614           if (IS_SIGNATURE (current_class_type) && opaque_typedef)
10615             SIGNATURE_HAS_OPAQUE_TYPEDECLS (current_class_type) = 1;
10616         }
10617       else
10618         {
10619           /* Make sure this typedef lives as long as its type,
10620              since it might be used as a template parameter. */
10621           if (type != error_mark_node)
10622             push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
10623           decl = build_decl (TYPE_DECL, declarator, type);
10624           if (type != error_mark_node)
10625             pop_obstacks ();
10626         }
10627
10628       /* If the user declares "struct {...} foo" then `foo' will have
10629          an anonymous name.  Fill that name in now.  Nothing can
10630          refer to it, so nothing needs know about the name change.
10631          The TYPE_NAME field was filled in by build_struct_xref.  */
10632       if (type != error_mark_node
10633           && TYPE_NAME (type)
10634           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10635           && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type)))
10636         {
10637           /* FIXME: This is bogus; we should not be doing this for
10638                     cv-qualified types.  */
10639
10640           /* For anonymous structs that are cv-qualified, need to use
10641              TYPE_MAIN_VARIANT so that name will mangle correctly. As
10642              type not referenced after this block, don't bother
10643              resetting type to original type, ie. TREE_TYPE (decl). */
10644           type = TYPE_MAIN_VARIANT (type);
10645
10646           /* Replace the anonymous name with the real name everywhere.  */
10647           lookup_tag_reverse (type, declarator);
10648           TYPE_NAME (type) = decl;
10649
10650           if (TYPE_LANG_SPECIFIC (type))
10651             TYPE_WAS_ANONYMOUS (type) = 1;
10652
10653           /* If this is a typedef within a template class, the nested
10654              type is a (non-primary) template.  The name for the
10655              template needs updating as well.  */
10656           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10657             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)) 
10658               = TYPE_IDENTIFIER (type);
10659
10660           /* XXX Temporarily set the scope. 
10661              When returning, start_decl expects it as NULL_TREE,
10662              and will then then set it using pushdecl. */
10663           my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 980404);
10664           if (current_class_type)
10665             DECL_CONTEXT (decl) = current_class_type;
10666           else
10667             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10668
10669           DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
10670           DECL_ASSEMBLER_NAME (decl)
10671             = get_identifier (build_overload_name (type, 1, 1));
10672           DECL_CONTEXT (decl) = NULL_TREE;
10673
10674           /* FIXME remangle member functions; member functions of a
10675              type with external linkage have external linkage.  */
10676         }
10677
10678       if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
10679         {
10680           cp_error_at ("typedef name may not be class-qualified", decl);
10681           return NULL_TREE;
10682         }
10683       else if (quals)
10684         {
10685           if (ctype == NULL_TREE)
10686             {
10687               if (TREE_CODE (type) != METHOD_TYPE)
10688                 cp_error_at ("invalid type qualifier for non-method type", decl);
10689               else
10690                 ctype = TYPE_METHOD_BASETYPE (type);
10691             }
10692           if (ctype != NULL_TREE)
10693             grok_method_quals (ctype, decl, quals);
10694         }
10695
10696       if (RIDBIT_SETP (RID_SIGNED, specbits)
10697           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10698         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10699
10700       if (RIDBIT_SETP (RID_MUTABLE, specbits))
10701         error ("non-object member `%s' cannot be declared mutable", name);
10702
10703       bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
10704                       inlinep, friendp, raises != NULL_TREE);
10705
10706       if (initialized)
10707         error ("typedef declaration includes an initializer");
10708
10709       return decl;
10710     }
10711
10712   /* Detect the case of an array type of unspecified size
10713      which came, as such, direct from a typedef name.
10714      We must copy the type, so that each identifier gets
10715      a distinct type, so that each identifier's size can be
10716      controlled separately by its own initializer.  */
10717
10718   if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
10719       && TYPE_DOMAIN (type) == NULL_TREE)
10720     {
10721       type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
10722     }
10723
10724   /* If this is a type name (such as, in a cast or sizeof),
10725      compute the type and return it now.  */
10726
10727   if (decl_context == TYPENAME)
10728     {
10729       /* Note that the grammar rejects storage classes
10730          in typenames, fields or parameters.  */
10731       if (type_quals != TYPE_UNQUALIFIED)
10732         {
10733           if (IS_SIGNATURE (type))
10734             error ("type qualifiers specified for signature type");
10735           type_quals = TYPE_UNQUALIFIED;
10736         }
10737
10738       /* Special case: "friend class foo" looks like a TYPENAME context.  */
10739       if (friendp)
10740         {
10741           if (type_quals != TYPE_UNQUALIFIED)
10742             {
10743               cp_error ("type qualifiers specified for friend class declaration");
10744               type_quals = TYPE_UNQUALIFIED;
10745             }
10746           if (inlinep)
10747             {
10748               cp_error ("`inline' specified for friend class declaration");
10749               inlinep = 0;
10750             }
10751
10752           /* Only try to do this stuff if we didn't already give up.  */
10753           if (type != integer_type_node)
10754             {
10755               /* A friendly class?  */
10756               if (current_class_type)
10757                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
10758               else
10759                 error ("trying to make class `%s' a friend of global scope",
10760                        TYPE_NAME_STRING (type));
10761               type = void_type_node;
10762             }
10763         }
10764       else if (quals)
10765         {
10766           tree dummy = build_decl (TYPE_DECL, declarator, type);
10767           if (ctype == NULL_TREE)
10768             {
10769               my_friendly_assert (TREE_CODE (type) == METHOD_TYPE, 159);
10770               ctype = TYPE_METHOD_BASETYPE (type);
10771             }
10772           grok_method_quals (ctype, dummy, quals);
10773           type = TREE_TYPE (dummy);
10774         }
10775
10776       return type;
10777     }
10778   else if (declarator == NULL_TREE && decl_context != PARM
10779            && decl_context != CATCHPARM
10780            && TREE_CODE (type) != UNION_TYPE
10781            && ! bitfield)
10782     {
10783       cp_error ("abstract declarator `%T' used as declaration", type);
10784       declarator = make_anon_name ();
10785     }
10786
10787   /* `void' at top level (not within pointer)
10788      is allowed only in typedefs or type names.
10789      We don't complain about parms either, but that is because
10790      a better error message can be made later.  */
10791
10792   if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
10793     {
10794       if (! declarator)
10795         error ("unnamed variable or field declared void");
10796       else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10797         {
10798           if (IDENTIFIER_OPNAME_P (declarator))
10799             my_friendly_abort (356);
10800           else
10801             error ("variable or field `%s' declared void", name);
10802         }
10803       else
10804         error ("variable or field declared void");
10805       type = integer_type_node;
10806     }
10807
10808   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10809      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
10810
10811   if (decl_context == PARM || decl_context == CATCHPARM)
10812     {
10813       if (ctype || in_namespace)
10814         error ("cannot use `::' in parameter declaration");
10815
10816       /* A parameter declared as an array of T is really a pointer to T.
10817          One declared as a function is really a pointer to a function.
10818          One declared as a member is really a pointer to member.  */
10819
10820       if (TREE_CODE (type) == ARRAY_TYPE)
10821         {
10822           /* Transfer const-ness of array into that of type pointed to.  */
10823           type = build_pointer_type (TREE_TYPE (type));
10824           type_quals = TYPE_UNQUALIFIED;
10825         }
10826       else if (TREE_CODE (type) == FUNCTION_TYPE)
10827         type = build_pointer_type (type);
10828       else if (TREE_CODE (type) == OFFSET_TYPE)
10829         type = build_pointer_type (type);
10830       else if (TREE_CODE (type) == VOID_TYPE && declarator)
10831         {
10832           error ("declaration of `%s' as void", name);
10833           return NULL_TREE;
10834         }
10835     }
10836   
10837   {
10838     register tree decl;
10839
10840     if (decl_context == PARM)
10841       {
10842         decl = build_decl (PARM_DECL, declarator, type);
10843
10844         bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
10845                         inlinep, friendp, raises != NULL_TREE);
10846         if (current_class_type
10847             && IS_SIGNATURE (current_class_type))
10848           {
10849             if (inlinep)
10850               error ("parameter of signature member function declared `inline'");
10851             if (RIDBIT_SETP (RID_AUTO, specbits))
10852               error ("parameter of signature member function declared `auto'");
10853             if (RIDBIT_SETP (RID_REGISTER, specbits))
10854               error ("parameter of signature member function declared `register'");
10855           }
10856
10857         /* Compute the type actually passed in the parmlist,
10858            for the case where there is no prototype.
10859            (For example, shorts and chars are passed as ints.)
10860            When there is a prototype, this is overridden later.  */
10861
10862         DECL_ARG_TYPE (decl) = type_promotes_to (type);
10863       }
10864     else if (decl_context == FIELD)
10865       {
10866         if (type == error_mark_node)
10867           {
10868             /* Happens when declaring arrays of sizes which
10869                are error_mark_node, for example.  */
10870             decl = NULL_TREE;
10871           }
10872         else if (in_namespace && !friendp)
10873           {
10874             /* Something like struct S { int N::j; };  */
10875             cp_error ("invalid use of `::'");
10876             decl = NULL_TREE;
10877           }
10878         else if (TREE_CODE (type) == FUNCTION_TYPE)
10879           {
10880             int publicp = 0;
10881             tree function_context;
10882
10883             /* We catch the others as conflicts with the builtin
10884                typedefs.  */
10885             if (friendp && declarator == ridpointers[(int) RID_SIGNED])
10886               {
10887                 cp_error ("function `%D' cannot be declared friend",
10888                           declarator);
10889                 friendp = 0;
10890               }
10891
10892             if (friendp == 0)
10893               {
10894                 if (ctype == NULL_TREE)
10895                   ctype = current_class_type;
10896
10897                 if (ctype == NULL_TREE)
10898                   {
10899                     cp_error ("can't make `%D' into a method -- not in a class",
10900                               declarator);
10901                     return void_type_node;
10902                   }
10903
10904                 /* ``A union may [ ... ] not [ have ] virtual functions.''
10905                    ARM 9.5 */
10906                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10907                   {
10908                     cp_error ("function `%D' declared virtual inside a union",
10909                               declarator);
10910                     return void_type_node;
10911                   }
10912
10913                 if (declarator == ansi_opname[(int) NEW_EXPR]
10914                     || declarator == ansi_opname[(int) VEC_NEW_EXPR]
10915                     || declarator == ansi_opname[(int) DELETE_EXPR]
10916                     || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
10917                   {
10918                     if (virtualp)
10919                       {
10920                         cp_error ("`%D' cannot be declared virtual, since it is always static",
10921                                   declarator);
10922                         virtualp = 0;
10923                       }
10924                   }
10925                 else if (staticp < 2)
10926                   type = build_cplus_method_type (ctype, TREE_TYPE (type),
10927                                                   TYPE_ARG_TYPES (type));
10928               }
10929
10930             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
10931             function_context = (ctype != NULL_TREE) ? 
10932               hack_decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10933             publicp = (! friendp || ! staticp)
10934               && function_context == NULL_TREE;
10935             decl = grokfndecl (ctype, type, 
10936                                TREE_CODE (declarator) != TEMPLATE_ID_EXPR
10937                                ? declarator : dname,
10938                                declarator,
10939                                virtualp, flags, quals, raises, attrlist,
10940                                friendp ? -1 : 0, friendp, publicp, inlinep,
10941                                funcdef_flag, template_count, in_namespace);
10942             if (decl == NULL_TREE)
10943               return decl;
10944 #if 0
10945             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
10946             /* The decl and setting of decl_machine_attr is also turned off.  */
10947             decl = build_decl_attribute_variant (decl, decl_machine_attr);
10948 #endif
10949
10950             /* [class.conv.ctor]
10951
10952                A constructor declared without the function-specifier
10953                explicit that can be called with a single parameter
10954                specifies a conversion from the type of its first
10955                parameter to the type of its class.  Such a constructor
10956                is called a converting constructor.  */
10957             if (explicitp == 2)
10958               DECL_NONCONVERTING_P (decl) = 1;
10959             else if (DECL_CONSTRUCTOR_P (decl))
10960               {
10961                 /* The constructor can be called with exactly one
10962                    parameter if there is at least one parameter, and
10963                    any subsequent parameters have default arguments.
10964                    We don't look at the first parameter, which is
10965                    really just the `this' parameter for the new
10966                    object.  */
10967                 tree arg_types = 
10968                   TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)));
10969
10970                 /* Skip the `in_chrg' argument too, if present.  */
10971                 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (decl)))
10972                   arg_types = TREE_CHAIN (arg_types);
10973
10974                 if (arg_types == void_list_node
10975                     || (arg_types 
10976                         && TREE_CHAIN (arg_types) 
10977                         && TREE_CHAIN (arg_types) != void_list_node
10978                         && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
10979                   DECL_NONCONVERTING_P (decl) = 1;
10980               }
10981           }
10982         else if (TREE_CODE (type) == METHOD_TYPE)
10983           {
10984             /* We only get here for friend declarations of
10985                members of other classes.  */
10986             /* All method decls are public, so tell grokfndecl to set
10987                TREE_PUBLIC, also.  */
10988             decl = grokfndecl (ctype, type, declarator, declarator,
10989                                virtualp, flags, quals, raises, attrlist,
10990                                friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
10991                                template_count, in_namespace);
10992             if (decl == NULL_TREE)
10993               return NULL_TREE;
10994           }
10995         else if (!staticp && ! processing_template_decl
10996                  && TYPE_SIZE (complete_type (type)) == NULL_TREE
10997                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
10998           {
10999             if (declarator)
11000               cp_error ("field `%D' has incomplete type", declarator);
11001             else
11002               cp_error ("name `%T' has incomplete type", type);
11003
11004             /* If we're instantiating a template, tell them which
11005                instantiation made the field's type be incomplete.  */
11006             if (current_class_type
11007                 && TYPE_NAME (current_class_type)
11008                 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
11009                 && declspecs && TREE_VALUE (declspecs)
11010                 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
11011               cp_error ("  in instantiation of template `%T'",
11012                         current_class_type);
11013
11014             type = error_mark_node;
11015             decl = NULL_TREE;
11016           }
11017         else
11018           {
11019             if (friendp)
11020               {
11021                 error ("`%s' is neither function nor method; cannot be declared friend",
11022                        IDENTIFIER_POINTER (declarator));
11023                 friendp = 0;
11024               }
11025             decl = NULL_TREE;
11026           }
11027
11028         if (friendp)
11029           {
11030             /* Friends are treated specially.  */
11031             if (ctype == current_class_type)
11032               warning ("member functions are implicitly friends of their class");
11033             else
11034               {
11035                 tree t = NULL_TREE;
11036                 if (decl && DECL_NAME (decl))
11037                   {
11038                     if (template_class_depth (current_class_type) == 0)
11039                       {
11040                         decl 
11041                           = check_explicit_specialization 
11042                           (declarator, decl,
11043                            template_count, 2 * (funcdef_flag != 0) + 4);
11044                         if (decl == error_mark_node)
11045                           return error_mark_node;
11046                       }
11047
11048                     t = do_friend (ctype, declarator, decl,
11049                                    last_function_parms, flags, quals,
11050                                    funcdef_flag);
11051                   }
11052                 if (t && funcdef_flag)
11053                   return t;
11054                 
11055                 return void_type_node;
11056               }
11057           }
11058
11059         /* Structure field.  It may not be a function, except for C++ */
11060
11061         if (decl == NULL_TREE)
11062           {
11063             if (initialized)
11064               {
11065                 if (!staticp)
11066                   {
11067                     /* An attempt is being made to initialize a non-static
11068                        member.  But, from [class.mem]:
11069                        
11070                        4 A member-declarator can contain a
11071                        constant-initializer only if it declares a static
11072                        member (_class.static_) of integral or enumeration
11073                        type, see _class.static.data_.  
11074
11075                        This used to be relatively common practice, but
11076                        the rest of the compiler does not correctly
11077                        handle the initialization unless the member is
11078                        static so we make it static below.  */
11079                     cp_pedwarn ("ANSI C++ forbids initialization of member `%D'",
11080                                 declarator);
11081                     cp_pedwarn ("making `%D' static", declarator);
11082                     staticp = 1;
11083                   }
11084
11085                 if (uses_template_parms (type))
11086                   /* We'll check at instantiation time.  */
11087                   ;
11088                 else if (check_static_variable_definition (declarator,
11089                                                            type))
11090                   /* If we just return the declaration, crashes
11091                      will sometimes occur.  We therefore return
11092                      void_type_node, as if this was a friend
11093                      declaration, to cause callers to completely
11094                      ignore this declaration.  */
11095                   return void_type_node;
11096               }
11097
11098             /* 9.2p13 [class.mem] */
11099             if (declarator == constructor_name (current_class_type)
11100                 /* Divergence from the standard:  In extern "C", we
11101                    allow non-static data members here, because C does
11102                    and /usr/include/netinet/in.h uses that.  */
11103                 && (staticp || ! in_system_header))
11104               cp_pedwarn ("ANSI C++ forbids data member `%D' with same name as enclosing class",
11105                           declarator);
11106
11107             if (staticp)
11108               {
11109                 /* C++ allows static class members.
11110                    All other work for this is done by grokfield.
11111                    This VAR_DCL is built by build_lang_field_decl.
11112                    All other VAR_DECLs are built by build_decl.  */
11113                 decl = build_lang_field_decl (VAR_DECL, declarator, type);
11114                 TREE_STATIC (decl) = 1;
11115                 /* In class context, 'static' means public access.  */
11116                 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
11117               }
11118             else
11119               {
11120                 decl = build_lang_field_decl (FIELD_DECL, declarator, type);
11121                 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11122                   {
11123                     DECL_MUTABLE_P (decl) = 1;
11124                     RIDBIT_RESET (RID_MUTABLE, specbits);
11125                   }
11126               }
11127
11128             bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
11129                             inlinep, friendp, raises != NULL_TREE);
11130           }
11131       }
11132     else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
11133       {
11134         tree original_name;
11135         int publicp = 0;
11136
11137         if (! declarator)
11138           return NULL_TREE;
11139
11140         if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11141           original_name = dname;
11142         else
11143           original_name = declarator;
11144
11145         if (RIDBIT_SETP (RID_AUTO, specbits))
11146           error ("storage class `auto' invalid for function `%s'", name);
11147         else if (RIDBIT_SETP (RID_REGISTER, specbits))
11148           error ("storage class `register' invalid for function `%s'", name);
11149
11150         /* Function declaration not at top level.
11151            Storage classes other than `extern' are not allowed
11152            and `extern' makes no difference.  */
11153         if (! toplevel_bindings_p ()
11154             && (RIDBIT_SETP (RID_STATIC, specbits)
11155                 || RIDBIT_SETP (RID_INLINE, specbits))
11156             && pedantic)
11157           {
11158             if (RIDBIT_SETP (RID_STATIC, specbits))
11159               pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
11160             else
11161               pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
11162           }
11163         
11164         if (ctype == NULL_TREE)
11165           {
11166             if (virtualp)
11167               {
11168                 error ("virtual non-class function `%s'", name);
11169                 virtualp = 0;
11170               }
11171           }
11172         else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
11173           type = build_cplus_method_type (ctype, TREE_TYPE (type),
11174                                           TYPE_ARG_TYPES (type));
11175
11176         /* Record presence of `static'.  */
11177         publicp = (ctype != NULL_TREE
11178                    || RIDBIT_SETP (RID_EXTERN, specbits)
11179                    || !RIDBIT_SETP (RID_STATIC, specbits));
11180
11181         decl = grokfndecl (ctype, type, original_name, declarator,
11182                            virtualp, flags, quals, raises, attrlist,
11183                            1, friendp,
11184                            publicp, inlinep, funcdef_flag, 
11185                            template_count, in_namespace);
11186         if (decl == NULL_TREE)
11187           return NULL_TREE;
11188
11189         if (staticp == 1)
11190           {
11191             int illegal_static = 0;
11192
11193             /* Don't allow a static member function in a class, and forbid
11194                declaring main to be static.  */
11195             if (TREE_CODE (type) == METHOD_TYPE)
11196               {
11197                 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
11198                 illegal_static = 1;
11199               }
11200             else if (current_function_decl)
11201               {
11202                 /* FIXME need arm citation */
11203                 error ("cannot declare static function inside another function");
11204                 illegal_static = 1;
11205               }
11206
11207             if (illegal_static)
11208               {
11209                 staticp = 0;
11210                 RIDBIT_RESET (RID_STATIC, specbits);
11211               }
11212           }
11213       }
11214     else
11215       {
11216         /* It's a variable.  */
11217
11218         /* An uninitialized decl with `extern' is a reference.  */
11219         decl = grokvardecl (type, declarator, &specbits, 
11220                             initialized, 
11221                             (type_quals & TYPE_QUAL_CONST) != 0, 
11222                             in_namespace);
11223         bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11224                         inlinep, friendp, raises != NULL_TREE);
11225
11226         if (ctype)
11227           {
11228             DECL_CONTEXT (decl) = ctype;
11229             if (staticp == 1)
11230               {
11231                 cp_pedwarn ("static member `%D' re-declared as static", decl);
11232                 staticp = 0;
11233                 RIDBIT_RESET (RID_STATIC, specbits);
11234               }
11235             if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11236               {
11237                 cp_error ("static member `%D' declared `register'", decl);
11238                 RIDBIT_RESET (RID_REGISTER, specbits);
11239               }
11240             if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
11241               {
11242                 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
11243                             decl);
11244                 RIDBIT_RESET (RID_EXTERN, specbits);
11245               }
11246           }
11247       }
11248
11249     if (RIDBIT_SETP (RID_MUTABLE, specbits))
11250       {
11251         error ("`%s' cannot be declared mutable", name);
11252       }
11253
11254     /* Record `register' declaration for warnings on &
11255        and in case doing stupid register allocation.  */
11256
11257     if (RIDBIT_SETP (RID_REGISTER, specbits))
11258       DECL_REGISTER (decl) = 1;
11259
11260     if (RIDBIT_SETP (RID_EXTERN, specbits))
11261       DECL_THIS_EXTERN (decl) = 1;
11262
11263     if (RIDBIT_SETP (RID_STATIC, specbits))
11264       DECL_THIS_STATIC (decl) = 1;
11265
11266     /* Record constancy and volatility.  */
11267     /* FIXME: Disallow `restrict' pointer-to-member declarations.  */
11268     c_apply_type_quals_to_decl (type_quals, decl);
11269
11270     return decl;
11271   }
11272 }
11273 \f
11274 /* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11275    An empty exprlist is a parmlist.  An exprlist which
11276    contains only identifiers at the global level
11277    is a parmlist.  Otherwise, it is an exprlist.  */
11278
11279 int
11280 parmlist_is_exprlist (exprs)
11281      tree exprs;
11282 {
11283   if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11284     return 0;
11285
11286   if (toplevel_bindings_p ())
11287     {
11288       /* At the global level, if these are all identifiers,
11289          then it is a parmlist.  */
11290       while (exprs)
11291         {
11292           if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11293             return 1;
11294           exprs = TREE_CHAIN (exprs);
11295         }
11296       return 0;
11297     }
11298   return 1;
11299 }
11300
11301 /* Subroutine of start_function.  Ensure that each of the parameter
11302    types (as listed in PARMS) is complete, as is required for a
11303    function definition.  */
11304
11305 static void
11306 require_complete_types_for_parms (parms)
11307      tree parms;
11308 {
11309   while (parms)
11310     {
11311       tree type = TREE_TYPE (parms);
11312       if (TYPE_SIZE (complete_type (type)) == NULL_TREE)
11313         {
11314           if (DECL_NAME (parms))
11315             error ("parameter `%s' has incomplete type",
11316                    IDENTIFIER_POINTER (DECL_NAME (parms)));
11317           else
11318             error ("parameter has incomplete type");
11319           TREE_TYPE (parms) = error_mark_node;
11320         }
11321       else
11322         layout_decl (parms, 0);
11323
11324       parms = TREE_CHAIN (parms);
11325     }
11326 }
11327
11328 /* Returns DECL if DECL is a local variable (or parameter).  Returns
11329    NULL_TREE otherwise.  */
11330
11331 static tree
11332 local_variable_p (t)
11333      tree t;
11334 {
11335   if ((TREE_CODE (t) == VAR_DECL 
11336        /* A VAR_DECL with a context that is a _TYPE is a static data
11337           member.  */
11338        && !TYPE_P (CP_DECL_CONTEXT (t))
11339        /* Any other non-local variable must be at namespace scope.  */
11340        && TREE_CODE (CP_DECL_CONTEXT (t)) != NAMESPACE_DECL)
11341       || (TREE_CODE (t) == PARM_DECL))
11342     return t;
11343
11344   return NULL_TREE;
11345 }
11346
11347 /* Check that ARG, which is a default-argument expression for a
11348    parameter DECL, is legal.  Returns ARG, or ERROR_MARK_NODE, if
11349    something goes wrong.  DECL may also be a _TYPE node, rather than a
11350    DECL, if there is no DECL available.  */
11351
11352 tree
11353 check_default_argument (decl, arg)
11354      tree decl;
11355      tree arg;
11356 {
11357   tree var;
11358   tree decl_type;
11359
11360   if (TREE_CODE (arg) == DEFAULT_ARG)
11361     /* We get a DEFAULT_ARG when looking at an in-class declaration
11362        with a default argument.  Ignore the argument for now; we'll
11363        deal with it after the class is complete.  */
11364     return arg;
11365
11366   if (processing_template_decl || uses_template_parms (arg))
11367     /* We don't do anything checking until instantiation-time.  Note
11368        that there may be uninstantiated arguments even for an
11369        instantiated function, since default arguments are not
11370        instantiated until they are needed.  */
11371     return arg;
11372
11373   if (TYPE_P (decl))
11374     {
11375       decl_type = decl;
11376       decl = NULL_TREE;
11377     }
11378   else
11379     decl_type = TREE_TYPE (decl);
11380
11381   if (arg == error_mark_node 
11382       || decl == error_mark_node
11383       || TREE_TYPE (arg) == error_mark_node
11384       || decl_type == error_mark_node)
11385     /* Something already went wrong.  There's no need to check
11386        further.  */
11387     return error_mark_node;
11388
11389   /* [dcl.fct.default]
11390      
11391      A default argument expression is implicitly converted to the
11392      parameter type.  */
11393   if (!TREE_TYPE (arg)
11394       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
11395     {
11396       if (decl)
11397         cp_error ("default argument for `%#D' has type `%T'", 
11398                   decl, TREE_TYPE (arg));
11399       else
11400         cp_error ("default argument for paramter of type `%T' has type `%T'",
11401                   decl_type, TREE_TYPE (arg));
11402
11403       return error_mark_node;
11404     }
11405
11406   /* [dcl.fct.default]
11407
11408      Local variables shall not be used in default argument
11409      expressions. 
11410
11411      The keyword `this' shall not be used in a default argument of a
11412      member function.  */
11413   var = search_tree (arg, local_variable_p);
11414   if (var)
11415     {
11416       cp_error ("default argument `%E' uses local variable `%D'",
11417                 arg, var);
11418       return error_mark_node;
11419     }
11420
11421   /* All is well.  */
11422   return arg;
11423 }
11424
11425 /* Decode the list of parameter types for a function type.
11426    Given the list of things declared inside the parens,
11427    return a list of types.
11428
11429    The list we receive can have three kinds of elements:
11430    an IDENTIFIER_NODE for names given without types,
11431    a TREE_LIST node for arguments given as typespecs or names with typespecs,
11432    or void_type_node, to mark the end of an argument list
11433    when additional arguments are not permitted (... was not used).
11434
11435    FUNCDEF_FLAG is nonzero for a function definition, 0 for
11436    a mere declaration.  A nonempty identifier-list gets an error message
11437    when FUNCDEF_FLAG is zero.
11438    If FUNCDEF_FLAG is 1, then parameter types must be complete.
11439    If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
11440
11441    If all elements of the input list contain types,
11442    we return a list of the types.
11443    If all elements contain no type (except perhaps a void_type_node
11444    at the end), we return a null list.
11445    If some have types and some do not, it is an error, and we
11446    return a null list.
11447
11448    Also set last_function_parms to either
11449    a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
11450    A list of names is converted to a chain of PARM_DECLs
11451    by store_parm_decls so that ultimately it is always a chain of decls.
11452
11453    Note that in C++, parameters can take default values.  These default
11454    values are in the TREE_PURPOSE field of the TREE_LIST.  It is
11455    an error to specify default values which are followed by parameters
11456    that have no default values, or an ELLIPSES.  For simplicities sake,
11457    only parameters which are specified with their types can take on
11458    default values.  */
11459
11460 static tree
11461 grokparms (first_parm, funcdef_flag)
11462      tree first_parm;
11463      int funcdef_flag;
11464 {
11465   tree result = NULL_TREE;
11466   tree decls = NULL_TREE;
11467
11468   if (first_parm != NULL_TREE
11469       && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
11470     {
11471       if (! funcdef_flag)
11472         pedwarn ("parameter names (without types) in function declaration");
11473       last_function_parms = first_parm;
11474       return NULL_TREE;
11475     }
11476   else if (first_parm != NULL_TREE
11477            && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
11478            && TREE_CODE (TREE_VALUE (first_parm)) != VOID_TYPE)
11479     my_friendly_abort (145);
11480   else
11481     {
11482       /* Types were specified.  This is a list of declarators
11483          each represented as a TREE_LIST node.  */
11484       register tree parm, chain;
11485       int any_init = 0, any_error = 0;
11486
11487       if (first_parm != NULL_TREE)
11488         {
11489           tree last_result = NULL_TREE;
11490           tree last_decl = NULL_TREE;
11491
11492           for (parm = first_parm; parm != NULL_TREE; parm = chain)
11493             {
11494               tree type = NULL_TREE, list_node = parm;
11495               register tree decl = TREE_VALUE (parm);
11496               tree init = TREE_PURPOSE (parm);
11497
11498               chain = TREE_CHAIN (parm);
11499               /* @@ weak defense against parse errors.  */
11500               if (TREE_CODE (decl) != VOID_TYPE 
11501                   && TREE_CODE (decl) != TREE_LIST)
11502                 {
11503                   /* Give various messages as the need arises.  */
11504                   if (TREE_CODE (decl) == STRING_CST)
11505                     cp_error ("invalid string constant `%E'", decl);
11506                   else if (TREE_CODE (decl) == INTEGER_CST)
11507                     error ("invalid integer constant in parameter list, did you forget to give parameter name?");
11508                   continue;
11509                 }
11510
11511               if (TREE_CODE (decl) != VOID_TYPE)
11512                 {
11513                   decl = grokdeclarator (TREE_VALUE (decl),
11514                                          TREE_PURPOSE (decl),
11515                                          PARM, init != NULL_TREE,
11516                                          NULL_TREE);
11517                   if (! decl || TREE_TYPE (decl) == error_mark_node)
11518                     continue;
11519
11520                   /* Top-level qualifiers on the parameters are
11521                      ignored for function types.  */
11522                   type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
11523
11524                   if (TREE_CODE (type) == VOID_TYPE)
11525                     decl = void_type_node;
11526                   else if (TREE_CODE (type) == METHOD_TYPE)
11527                     {
11528                       if (DECL_NAME (decl))
11529                         /* Cannot use the decl here because
11530                            we don't have DECL_CONTEXT set up yet.  */
11531                         cp_error ("parameter `%D' invalidly declared method type",
11532                                   DECL_NAME (decl));
11533                       else
11534                         error ("parameter invalidly declared method type");
11535                       type = build_pointer_type (type);
11536                       TREE_TYPE (decl) = type;
11537                     }
11538                   else if (TREE_CODE (type) == OFFSET_TYPE)
11539                     {
11540                       if (DECL_NAME (decl))
11541                         cp_error ("parameter `%D' invalidly declared offset type",
11542                                   DECL_NAME (decl));
11543                       else
11544                         error ("parameter invalidly declared offset type");
11545                       type = build_pointer_type (type);
11546                       TREE_TYPE (decl) = type;
11547                     }
11548                   else if (TREE_CODE (type) == RECORD_TYPE
11549                            && TYPE_LANG_SPECIFIC (type)
11550                            && CLASSTYPE_ABSTRACT_VIRTUALS (type))
11551                     {
11552                       abstract_virtuals_error (decl, type);
11553                       any_error = 1;  /* Seems like a good idea. */
11554                     }
11555                   else if (TREE_CODE (type) == RECORD_TYPE
11556                            && TYPE_LANG_SPECIFIC (type)
11557                            && IS_SIGNATURE (type))
11558                     {
11559                       signature_error (decl, type);
11560                       any_error = 1;  /* Seems like a good idea. */
11561                     }
11562                   else if (POINTER_TYPE_P (type))
11563                     {
11564                       tree t = type;
11565                       while (POINTER_TYPE_P (t)
11566                              || (TREE_CODE (t) == ARRAY_TYPE
11567                                  && TYPE_DOMAIN (t) != NULL_TREE))
11568                         t = TREE_TYPE (t);
11569                       if (TREE_CODE (t) == ARRAY_TYPE)
11570                         cp_error ("parameter type `%T' includes %s to array of unknown bound",
11571                                   type,
11572                                   TYPE_PTR_P (type) ? "pointer" : "reference");
11573                     }
11574                 }
11575
11576               if (TREE_CODE (decl) == VOID_TYPE)
11577                 {
11578                   if (result == NULL_TREE)
11579                     {
11580                       result = void_list_node;
11581                       last_result = result;
11582                     }
11583                   else
11584                     {
11585                       TREE_CHAIN (last_result) = void_list_node;
11586                       last_result = void_list_node;
11587                     }
11588                   if (chain
11589                       && (chain != void_list_node || TREE_CHAIN (chain)))
11590                     error ("`void' in parameter list must be entire list");
11591                   break;
11592                 }
11593
11594               /* Since there is a prototype, args are passed in their own types.  */
11595               DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
11596 #ifdef PROMOTE_PROTOTYPES
11597               if ((TREE_CODE (type) == INTEGER_TYPE
11598                    || TREE_CODE (type) == ENUMERAL_TYPE)
11599                   && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
11600                 DECL_ARG_TYPE (decl) = integer_type_node;
11601 #endif
11602               if (!any_error && init)
11603                 {
11604                   any_init++;
11605                   init = check_default_argument (decl, init);
11606                 }
11607               else
11608                 init = NULL_TREE;
11609
11610               if (decls == NULL_TREE)
11611                 {
11612                   decls = decl;
11613                   last_decl = decls;
11614                 }
11615               else
11616                 {
11617                   TREE_CHAIN (last_decl) = decl;
11618                   last_decl = decl;
11619                 }
11620               if (! current_function_decl && TREE_PERMANENT (list_node))
11621                 {
11622                   TREE_PURPOSE (list_node) = init;
11623                   TREE_VALUE (list_node) = type;
11624                   TREE_CHAIN (list_node) = NULL_TREE;
11625                 }
11626               else
11627                 list_node = saveable_tree_cons (init, type, NULL_TREE);
11628               if (result == NULL_TREE)
11629                 {
11630                   result = list_node;
11631                   last_result = result;
11632                 }
11633               else
11634                 {
11635                   TREE_CHAIN (last_result) = list_node;
11636                   last_result = list_node;
11637                 }
11638             }
11639           if (last_result)
11640             TREE_CHAIN (last_result) = NULL_TREE;
11641           /* If there are no parameters, and the function does not end
11642              with `...', then last_decl will be NULL_TREE.  */
11643           if (last_decl != NULL_TREE)
11644             TREE_CHAIN (last_decl) = NULL_TREE;
11645         }
11646     }
11647
11648   last_function_parms = decls;
11649
11650   return result;
11651 }
11652
11653 /* Called from the parser to update an element of TYPE_ARG_TYPES for some
11654    FUNCTION_TYPE with the newly parsed version of its default argument, which
11655    was previously digested as text.  See snarf_defarg et al in lex.c.  */
11656
11657 void
11658 replace_defarg (arg, init)
11659      tree arg, init;
11660 {
11661   if (! processing_template_decl
11662       && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
11663     cp_pedwarn ("invalid type `%T' for default argument to `%T'",
11664                 TREE_TYPE (init), TREE_VALUE (arg));
11665   TREE_PURPOSE (arg) = init;
11666 }
11667 \f
11668 int
11669 copy_args_p (d)
11670      tree d;
11671 {
11672   tree t = FUNCTION_ARG_CHAIN (d);
11673   if (DECL_CONSTRUCTOR_P (d)
11674       && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (d)))
11675     t = TREE_CHAIN (t);
11676   if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
11677       && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
11678           == DECL_CLASS_CONTEXT (d))
11679       && (TREE_CHAIN (t) == NULL_TREE
11680           || TREE_CHAIN (t) == void_list_node
11681           || TREE_PURPOSE (TREE_CHAIN (t))))
11682     return 1;
11683   return 0;
11684 }
11685
11686 /* These memoizing functions keep track of special properties which
11687    a class may have.  `grok_ctor_properties' notices whether a class
11688    has a constructor of the form X(X&), and also complains
11689    if the class has a constructor of the form X(X).
11690    `grok_op_properties' takes notice of the various forms of
11691    operator= which are defined, as well as what sorts of type conversion
11692    may apply.  Both functions take a FUNCTION_DECL as an argument.  */
11693
11694 int
11695 grok_ctor_properties (ctype, decl)
11696      tree ctype, decl;
11697 {
11698   tree parmtypes = FUNCTION_ARG_CHAIN (decl);
11699   tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
11700
11701   /* When a type has virtual baseclasses, a magical first int argument is
11702      added to any ctor so we can tell if the class has been initialized
11703      yet.  This could screw things up in this function, so we deliberately
11704      ignore the leading int if we're in that situation.  */
11705   if (TYPE_USES_VIRTUAL_BASECLASSES (ctype))
11706     {
11707       my_friendly_assert (parmtypes
11708                           && TREE_VALUE (parmtypes) == integer_type_node,
11709                           980529);
11710       parmtypes = TREE_CHAIN (parmtypes);
11711       parmtype = TREE_VALUE (parmtypes);
11712     }
11713
11714   /* [class.copy]
11715
11716      A non-template constructor for class X is a copy constructor if
11717      its first parameter is of type X&, const X&, volatile X& or const
11718      volatile X&, and either there are no other parameters or else all
11719      other parameters have default arguments.  */
11720   if (TREE_CODE (parmtype) == REFERENCE_TYPE
11721       && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
11722       && (TREE_CHAIN (parmtypes) == NULL_TREE
11723           || TREE_CHAIN (parmtypes) == void_list_node
11724           || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11725       && !(DECL_TEMPLATE_INSTANTIATION (decl)
11726            && is_member_template (DECL_TI_TEMPLATE (decl))))
11727     {
11728       TYPE_HAS_INIT_REF (ctype) = 1;
11729       if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11730         TYPE_HAS_CONST_INIT_REF (ctype) = 1;
11731     }
11732   /* [class.copy]
11733
11734      A declaration of a constructor for a class X is ill-formed if its
11735      first parameter is of type (optionally cv-qualified) X and either
11736      there are no other parameters or else all other parameters have
11737      default arguments.  
11738
11739      We *don't* complain about member template instantiations that
11740      have this form, though; they can occur as we try to decide what
11741      constructor to use during overload resolution.  Since overload
11742      resolution will never prefer such a constructor to the
11743      non-template copy constructor (which is either explicitly or
11744      implicitly defined), there's no need to worry about their
11745      existence.  Theoretically, they should never even be
11746      instantiated, but that's hard to forestall.  */
11747   else if (TYPE_MAIN_VARIANT (parmtype) == ctype
11748            && (TREE_CHAIN (parmtypes) == NULL_TREE
11749                || TREE_CHAIN (parmtypes) == void_list_node
11750                || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11751            && !(DECL_TEMPLATE_INSTANTIATION (decl)
11752                 && is_member_template (DECL_TI_TEMPLATE (decl))))
11753     {
11754       cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
11755                 ctype, ctype);
11756       SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
11757       return 0;
11758     }
11759   else if (TREE_CODE (parmtype) == VOID_TYPE
11760            || TREE_PURPOSE (parmtypes) != NULL_TREE)
11761     TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
11762
11763   return 1;
11764 }
11765
11766 /* An operator with this name can be either unary or binary.  */
11767
11768 static int
11769 ambi_op_p (name)
11770      tree name;
11771 {
11772   return (name == ansi_opname [(int) INDIRECT_REF]
11773           || name == ansi_opname [(int) ADDR_EXPR]
11774           || name == ansi_opname [(int) NEGATE_EXPR]
11775           || name == ansi_opname[(int) POSTINCREMENT_EXPR]
11776           || name == ansi_opname[(int) POSTDECREMENT_EXPR]
11777           || name == ansi_opname [(int) CONVERT_EXPR]);
11778 }
11779
11780 /* An operator with this name can only be unary.  */
11781
11782 static int
11783 unary_op_p (name)
11784      tree name;
11785 {
11786   return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
11787           || name == ansi_opname [(int) BIT_NOT_EXPR]
11788           || name == ansi_opname [(int) COMPONENT_REF]
11789           || IDENTIFIER_TYPENAME_P (name));
11790 }
11791
11792 /* Do a little sanity-checking on how they declared their operator.  */
11793
11794 void
11795 grok_op_properties (decl, virtualp, friendp)
11796      tree decl;
11797      int virtualp, friendp;
11798 {
11799   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11800   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11801   tree name = DECL_NAME (decl);
11802
11803   if (current_class_type == NULL_TREE)
11804     friendp = 1;
11805
11806   if (! friendp)
11807     {
11808       /* [class.copy]
11809
11810          A user-declared copy assignment operator X::operator= is a
11811          non-static non-template member function of class X with
11812          exactly one parameter of type X, X&, const X&, volatile X& or
11813          const volatile X&.  */
11814       if (name == ansi_opname[(int) MODIFY_EXPR]
11815           && !(DECL_TEMPLATE_INSTANTIATION (decl)
11816                && is_member_template (DECL_TI_TEMPLATE (decl))))
11817         ;
11818       else if (name == ansi_opname[(int) CALL_EXPR])
11819         TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
11820       else if (name == ansi_opname[(int) ARRAY_REF])
11821         TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
11822       else if (name == ansi_opname[(int) COMPONENT_REF]
11823                || name == ansi_opname[(int) MEMBER_REF])
11824         TYPE_OVERLOADS_ARROW (current_class_type) = 1;
11825       else if (name == ansi_opname[(int) NEW_EXPR])
11826         TYPE_GETS_NEW (current_class_type) |= 1;
11827       else if (name == ansi_opname[(int) DELETE_EXPR])
11828         TYPE_GETS_DELETE (current_class_type) |= 1;
11829       else if (name == ansi_opname[(int) VEC_NEW_EXPR])
11830         TYPE_GETS_NEW (current_class_type) |= 2;
11831       else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
11832         TYPE_GETS_DELETE (current_class_type) |= 2;
11833     }
11834
11835   if (name == ansi_opname[(int) NEW_EXPR]
11836       || name == ansi_opname[(int) VEC_NEW_EXPR])
11837     {
11838       /* When the compiler encounters the definition of A::operator new, it
11839          doesn't look at the class declaration to find out if it's static.  */
11840       if (methodp)
11841         revert_static_member_fn (&decl, NULL, NULL);
11842      
11843       /* Take care of function decl if we had syntax errors.  */
11844       if (argtypes == NULL_TREE)
11845         TREE_TYPE (decl)
11846           = build_function_type (ptr_type_node,
11847                                  hash_tree_chain (integer_type_node,
11848                                                   void_list_node));
11849       else
11850         TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11851     }
11852   else if (name == ansi_opname[(int) DELETE_EXPR]
11853            || name == ansi_opname[(int) VEC_DELETE_EXPR])
11854     {
11855       if (methodp)
11856         revert_static_member_fn (&decl, NULL, NULL);
11857      
11858       if (argtypes == NULL_TREE)
11859         TREE_TYPE (decl)
11860           = build_function_type (void_type_node,
11861                                  hash_tree_chain (ptr_type_node,
11862                                                   void_list_node));
11863       else
11864         {
11865           TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11866
11867           if (! friendp && name == ansi_opname[(int) VEC_DELETE_EXPR]
11868               && (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
11869                   != void_list_node))
11870             TYPE_VEC_DELETE_TAKES_SIZE (current_class_type) = 1;
11871         }
11872     }
11873   else
11874     {
11875       /* An operator function must either be a non-static member function
11876          or have at least one parameter of a class, a reference to a class,
11877          an enumeration, or a reference to an enumeration.  13.4.0.6 */
11878       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11879         {
11880           if (IDENTIFIER_TYPENAME_P (name)
11881               || name == ansi_opname[(int) CALL_EXPR]
11882               || name == ansi_opname[(int) MODIFY_EXPR]
11883               || name == ansi_opname[(int) COMPONENT_REF]
11884               || name == ansi_opname[(int) ARRAY_REF])
11885             cp_error ("`%D' must be a nonstatic member function", decl);
11886           else
11887             {
11888               tree p = argtypes;
11889
11890               if (DECL_STATIC_FUNCTION_P (decl))
11891                 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
11892
11893               if (p)
11894                 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
11895                   {
11896                     tree arg = TREE_VALUE (p);
11897                     if (TREE_CODE (arg) == REFERENCE_TYPE)
11898                       arg = TREE_TYPE (arg);
11899
11900                     /* This lets bad template code slip through.  */
11901                     if (IS_AGGR_TYPE (arg)
11902                         || TREE_CODE (arg) == ENUMERAL_TYPE
11903                         || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
11904                         || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11905                       goto foundaggr;
11906                   }
11907               cp_error
11908                 ("`%D' must have an argument of class or enumerated type",
11909                  decl);
11910             foundaggr:
11911               ;
11912             }
11913         }
11914       
11915       if (name == ansi_opname[(int) CALL_EXPR])
11916         return;                 /* No restrictions on args. */
11917
11918       if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
11919         {
11920           tree t = TREE_TYPE (name);
11921           if (TREE_CODE (t) == VOID_TYPE)
11922             pedwarn ("void is not a valid type conversion operator");
11923           else if (! friendp)
11924             {
11925               int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11926               char *what = 0;
11927               if (ref)
11928                 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11929
11930               if (t == current_class_type)
11931                 what = "the same type";
11932               /* Don't force t to be complete here.  */
11933               else if (IS_AGGR_TYPE (t)
11934                        && TYPE_SIZE (t)
11935                        && DERIVED_FROM_P (t, current_class_type))
11936                 what = "a base class";
11937
11938               if (what)
11939                 warning ("conversion to %s%s will never use a type conversion operator",
11940                          ref ? "a reference to " : "", what);
11941             }
11942         }
11943
11944       if (name == ansi_opname[(int) MODIFY_EXPR])
11945         {
11946           tree parmtype;
11947
11948           if (list_length (argtypes) != 3 && methodp)
11949             {
11950               cp_error ("`%D' must take exactly one argument", decl);
11951               return;
11952             }
11953           parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
11954
11955           if (copy_assignment_arg_p (parmtype, virtualp)
11956               && ! friendp)
11957             {
11958               TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
11959               if (TREE_CODE (parmtype) != REFERENCE_TYPE
11960                   || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11961                 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
11962             }
11963         }
11964       else if (name == ansi_opname[(int) COND_EXPR])
11965         {
11966           /* 13.4.0.3 */
11967           pedwarn ("ANSI C++ prohibits overloading operator ?:");
11968           if (list_length (argtypes) != 4)
11969             cp_error ("`%D' must take exactly three arguments", decl);
11970         }         
11971       else if (ambi_op_p (name))
11972         {
11973           if (list_length (argtypes) == 2)
11974             /* prefix */;
11975           else if (list_length (argtypes) == 3)
11976             {
11977               if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
11978                    || name == ansi_opname[(int) POSTDECREMENT_EXPR])
11979                   && ! processing_template_decl
11980                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11981                 {
11982                   if (methodp)
11983                     cp_error ("postfix `%D' must take `int' as its argument",
11984                               decl);
11985                   else
11986                     cp_error
11987                       ("postfix `%D' must take `int' as its second argument",
11988                        decl);
11989                 }
11990             }
11991           else
11992             {
11993               if (methodp)
11994                 cp_error ("`%D' must take either zero or one argument", decl);
11995               else
11996                 cp_error ("`%D' must take either one or two arguments", decl);
11997             }
11998
11999           /* More Effective C++ rule 6.  */
12000           if (warn_ecpp
12001               && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12002                   || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
12003             {
12004               tree arg = TREE_VALUE (argtypes);
12005               tree ret = TREE_TYPE (TREE_TYPE (decl));
12006               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
12007                 arg = TREE_TYPE (arg);
12008               arg = TYPE_MAIN_VARIANT (arg);
12009               if (list_length (argtypes) == 2)
12010                 {
12011                   if (TREE_CODE (ret) != REFERENCE_TYPE
12012                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
12013                                        arg))
12014                     cp_warning ("prefix `%D' should return `%T'", decl,
12015                                 build_reference_type (arg));
12016                 }
12017               else
12018                 {
12019                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
12020                     cp_warning ("postfix `%D' should return `%T'", decl, arg);
12021                 }
12022             }
12023         }
12024       else if (unary_op_p (name))
12025         {
12026           if (list_length (argtypes) != 2)
12027             {
12028               if (methodp)
12029                 cp_error ("`%D' must take `void'", decl);
12030               else
12031                 cp_error ("`%D' must take exactly one argument", decl);
12032             }
12033         }
12034       else /* if (binary_op_p (name)) */
12035         {
12036           if (list_length (argtypes) != 3)
12037             {
12038               if (methodp)
12039                 cp_error ("`%D' must take exactly one argument", decl);
12040               else
12041                 cp_error ("`%D' must take exactly two arguments", decl);
12042             }
12043
12044           /* More Effective C++ rule 7.  */
12045           if (warn_ecpp
12046               && (name == ansi_opname [TRUTH_ANDIF_EXPR]
12047                   || name == ansi_opname [TRUTH_ORIF_EXPR]
12048                   || name == ansi_opname [COMPOUND_EXPR]))
12049             cp_warning ("user-defined `%D' always evaluates both arguments",
12050                         decl);
12051         }
12052
12053       /* Effective C++ rule 23.  */
12054       if (warn_ecpp
12055           && list_length (argtypes) == 3
12056           && (name == ansi_opname [PLUS_EXPR]
12057               || name == ansi_opname [MINUS_EXPR]
12058               || name == ansi_opname [TRUNC_DIV_EXPR]
12059               || name == ansi_opname [MULT_EXPR])
12060           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
12061         cp_warning ("`%D' should return by value", decl);
12062
12063       /* 13.4.0.8 */
12064       if (argtypes)
12065         for (; argtypes != void_list_node ; argtypes = TREE_CHAIN (argtypes))
12066           if (TREE_PURPOSE (argtypes))
12067             {
12068               TREE_PURPOSE (argtypes) = NULL_TREE;
12069               if (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12070                   || name == ansi_opname[(int) POSTDECREMENT_EXPR])
12071                 {
12072                   if (pedantic)
12073                     cp_pedwarn ("`%D' cannot have default arguments", decl);
12074                 }
12075               else
12076                 cp_error ("`%D' cannot have default arguments", decl);
12077             }
12078     }
12079 }
12080 \f
12081 static char *
12082 tag_name (code)
12083      enum tag_types code;
12084 {
12085   switch (code)
12086     {
12087     case record_type:
12088       return "struct";
12089     case class_type:
12090       return "class";
12091     case union_type:
12092       return "union ";
12093     case enum_type:
12094       return "enum";
12095     case signature_type:
12096       return "signature";
12097     default:
12098       my_friendly_abort (981122);
12099     }
12100 }
12101
12102 /* Get the struct, enum or union (CODE says which) with tag NAME.
12103    Define the tag as a forward-reference if it is not defined.
12104
12105    C++: If a class derivation is given, process it here, and report
12106    an error if multiple derivation declarations are not identical.
12107
12108    If this is a definition, come in through xref_tag and only look in
12109    the current frame for the name (since C++ allows new names in any
12110    scope.)  */
12111
12112 tree
12113 xref_tag (code_type_node, name, globalize)
12114      tree code_type_node;
12115      tree name;
12116      int globalize;
12117 {
12118   enum tag_types tag_code;
12119   enum tree_code code;
12120   int temp = 0;
12121   register tree ref, t;
12122   struct binding_level *b = inner_binding_level;
12123   int got_type = 0;
12124   tree attributes = NULL_TREE;
12125
12126   /* If we are called from the parser, code_type_node will sometimes be a
12127      TREE_LIST.  This indicates that the user wrote
12128      "class __attribute__ ((foo)) bar".  Extract the attributes so we can
12129      use them later.  */
12130   if (TREE_CODE (code_type_node) == TREE_LIST)
12131     {
12132       attributes = TREE_PURPOSE (code_type_node);
12133       code_type_node = TREE_VALUE (code_type_node);
12134     }
12135
12136   tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12137   switch (tag_code)
12138     {
12139     case record_type:
12140     case class_type:
12141     case signature_type:
12142       code = RECORD_TYPE;
12143       break;
12144     case union_type:
12145       code = UNION_TYPE;
12146       break;
12147     case enum_type:
12148       code = ENUMERAL_TYPE;
12149       break;
12150     default:
12151       my_friendly_abort (18);
12152     }
12153
12154   /* If a cross reference is requested, look up the type
12155      already defined for this tag and return it.  */
12156   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
12157     {
12158       t = name;
12159       name = TYPE_IDENTIFIER (t);
12160       got_type = 1;
12161     }
12162   else
12163     t = IDENTIFIER_TYPE_VALUE (name);
12164
12165   if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
12166       && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
12167     t = NULL_TREE;
12168
12169   if (! globalize)
12170     {
12171       /* If we know we are defining this tag, only look it up in
12172          this scope and don't try to find it as a type.  */
12173       ref = lookup_tag (code, name, b, 1);
12174     }
12175   else
12176     {
12177       if (current_class_type 
12178           && template_class_depth (current_class_type) 
12179           && PROCESSING_REAL_TEMPLATE_DECL_P ())
12180       /* Since GLOBALIZE is non-zero, we are not looking at a
12181          definition of this tag.  Since, in addition, we are currently
12182          processing a (member) template declaration of a template
12183          class, we don't want to do any lookup at all; consider:
12184
12185            template <class X>
12186            struct S1
12187
12188            template <class U>
12189            struct S2
12190            { template <class V>
12191              friend struct S1; };
12192            
12193          Here, the S2::S1 declaration should not be confused with the
12194          outer declaration.  In particular, the inner version should
12195          have a template parameter of level 2, not level 1.  This
12196          would be particularly important if the member declaration
12197          were instead:
12198
12199            template <class V = U> friend struct S1;
12200
12201          say, when we should tsubst into `U' when instantiating S2.  */
12202         ref = NULL_TREE;
12203       else 
12204         {
12205           if (t)
12206             {
12207               if (t != TYPE_MAIN_VARIANT (t))
12208                 cp_pedwarn ("using typedef-name `%D' after `%s'",
12209                             TYPE_NAME (t), tag_name (tag_code));
12210               ref = t;
12211             }
12212           else
12213             ref = lookup_tag (code, name, b, 0);
12214           
12215           if (! ref)
12216             {
12217               /* Try finding it as a type declaration.  If that wins,
12218                  use it.  */ 
12219               ref = lookup_name (name, 1);
12220
12221               if (ref != NULL_TREE
12222                   && processing_template_decl
12223                   && DECL_CLASS_TEMPLATE_P (ref)
12224                   && template_class_depth (current_class_type) == 0)
12225                 /* Since GLOBALIZE is true, we're declaring a global
12226                template, so we want this type.  */
12227                 ref = DECL_RESULT (ref);
12228
12229               if (ref && TREE_CODE (ref) == TYPE_DECL
12230                   && TREE_CODE (TREE_TYPE (ref)) == code)
12231                 ref = TREE_TYPE (ref);
12232               else
12233                 ref = NULL_TREE;
12234             }
12235         }
12236     }
12237
12238   push_obstacks_nochange ();
12239
12240   if (! ref)
12241     {
12242       /* If no such tag is yet defined, create a forward-reference node
12243          and record it as the "definition".
12244          When a real declaration of this type is found,
12245          the forward-reference will be altered into a real type.  */
12246
12247       /* In C++, since these migrate into the global scope, we must
12248          build them on the permanent obstack.  */
12249
12250       temp = allocation_temporary_p ();
12251       if (temp)
12252         end_temporary_allocation ();
12253
12254       if (code == ENUMERAL_TYPE)
12255         {
12256           cp_error ("use of enum `%#D' without previous declaration", name);
12257
12258           ref = make_node (ENUMERAL_TYPE);
12259
12260           /* Give the type a default layout like unsigned int
12261              to avoid crashing if it does not get defined.  */
12262           TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12263           TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
12264           TREE_UNSIGNED (ref) = 1;
12265           TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12266           TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12267           TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12268
12269           /* Enable us to recognize when a type is created in class context.
12270              To do nested classes correctly, this should probably be cleared
12271              out when we leave this classes scope.  Currently this in only
12272              done in `start_enum'.  */
12273
12274           pushtag (name, ref, globalize);
12275         }
12276       else
12277         {
12278           struct binding_level *old_b = class_binding_level;
12279
12280           ref = make_lang_type (code);
12281
12282           if (tag_code == signature_type)
12283             {
12284               SET_SIGNATURE (ref);
12285               /* Since a signature type will be turned into the type
12286                  of signature tables, it's not only an interface.  */
12287               CLASSTYPE_INTERFACE_ONLY (ref) = 0;
12288               SET_CLASSTYPE_INTERFACE_KNOWN (ref);
12289               /* A signature doesn't have a vtable.  */
12290               CLASSTYPE_VTABLE_NEEDS_WRITING (ref) = 0;
12291             }
12292
12293 #ifdef NONNESTED_CLASSES
12294           /* Class types don't nest the way enums do.  */
12295           class_binding_level = (struct binding_level *)0;
12296 #endif
12297           pushtag (name, ref, globalize);
12298           class_binding_level = old_b;
12299         }
12300     }
12301   else
12302     {
12303       /* If it no longer looks like a nested type, make sure it's
12304          in global scope.  
12305          If it is not an IDENTIFIER, this is not a declaration */
12306       if (b->namespace_p && !class_binding_level
12307           && TREE_CODE (name) == IDENTIFIER_NODE)
12308         {
12309           if (IDENTIFIER_NAMESPACE_VALUE (name) == NULL_TREE)
12310             SET_IDENTIFIER_NAMESPACE_VALUE (name, TYPE_NAME (ref));
12311         }
12312
12313       if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
12314         redeclare_class_template (ref, current_template_parms);
12315     }
12316
12317   /* Until the type is defined, tentatively accept whatever
12318      structure tag the user hands us.  */
12319   if (TYPE_SIZE (ref) == NULL_TREE
12320       && ref != current_class_type
12321       /* Have to check this, in case we have contradictory tag info.  */
12322       && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12323     {
12324       if (tag_code == class_type)
12325         CLASSTYPE_DECLARED_CLASS (ref) = 1;
12326       else if (tag_code == record_type || tag_code == signature_type)
12327         CLASSTYPE_DECLARED_CLASS (ref) = 0;
12328     }
12329
12330   pop_obstacks ();
12331
12332   TREE_TYPE (ref) = attributes;
12333
12334   if (ref && TYPE_P (ref))
12335     {
12336       /* [dcl.type.elab]
12337              
12338          If the identifier resolves to a typedef-name or a template
12339          type-parameter, the elaborated-type-specifier is
12340          ill-formed.  */
12341       if (TYPE_LANG_SPECIFIC (ref) && TYPE_WAS_ANONYMOUS (ref))
12342         cp_error ("`%T' is a typedef name", ref);
12343       else if (TREE_CODE (ref) == TEMPLATE_TYPE_PARM)
12344         cp_error ("`%T' is a template type paramter", ref);
12345     }
12346
12347   return ref;
12348 }
12349
12350 tree
12351 xref_tag_from_type (old, id, globalize)
12352      tree old, id;
12353      int globalize;
12354 {
12355   tree code_type_node;
12356
12357   if (TREE_CODE (old) == RECORD_TYPE)
12358     code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12359                       ? class_type_node : record_type_node);
12360   else
12361     code_type_node = union_type_node;
12362
12363   if (id == NULL_TREE)
12364     id = TYPE_IDENTIFIER (old);
12365
12366   return xref_tag (code_type_node, id, globalize);
12367 }
12368
12369 /* REF is a type (named NAME), for which we have just seen some
12370    baseclasses.  BINFO is a list of those baseclasses; the
12371    TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
12372    the base-class.  CODE_TYPE_NODE indicates whether REF is a class,
12373    struct, or union.  */
12374
12375 void
12376 xref_basetypes (code_type_node, name, ref, binfo)
12377      tree code_type_node;
12378      tree name, ref;
12379      tree binfo;
12380 {
12381   /* In the declaration `A : X, Y, ... Z' we mark all the types
12382      (A, X, Y, ..., Z) so we can check for duplicates.  */
12383   tree binfos;
12384   tree base;
12385
12386   int i, len;
12387   enum tag_types tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12388
12389   if (tag_code == union_type)
12390     {
12391       cp_error ("derived union `%T' invalid", ref);
12392       return;
12393     }
12394
12395   len = list_length (binfo);
12396   push_obstacks (TYPE_OBSTACK (ref), TYPE_OBSTACK (ref));
12397
12398   /* First, make sure that any templates in base-classes are
12399      instantiated.  This ensures that if we call ourselves recursively
12400      we do not get confused about which classes are marked and which
12401      are not.  */
12402   for (base = binfo; base; base = TREE_CHAIN (base))
12403     complete_type (TREE_VALUE (base));
12404
12405   SET_CLASSTYPE_MARKED (ref);
12406   BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12407
12408   for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12409     {
12410       /* The base of a derived struct is public by default.  */
12411       int via_public
12412         = (TREE_PURPOSE (binfo) == access_public_node
12413            || TREE_PURPOSE (binfo) == access_public_virtual_node
12414            || (tag_code != class_type
12415                && (TREE_PURPOSE (binfo) == access_default_node
12416                    || TREE_PURPOSE (binfo) == access_default_virtual_node)));
12417       int via_protected
12418         = (TREE_PURPOSE (binfo) == access_protected_node
12419            || TREE_PURPOSE (binfo) == access_protected_virtual_node);
12420       int via_virtual
12421         = (TREE_PURPOSE (binfo) == access_private_virtual_node
12422            || TREE_PURPOSE (binfo) == access_protected_virtual_node
12423            || TREE_PURPOSE (binfo) == access_public_virtual_node
12424            || TREE_PURPOSE (binfo) == access_default_virtual_node);
12425       tree basetype = TREE_VALUE (binfo);
12426       tree base_binfo;
12427
12428       if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12429         basetype = TREE_TYPE (basetype);
12430       if (!basetype
12431           || (TREE_CODE (basetype) != RECORD_TYPE
12432               && TREE_CODE (basetype) != TYPENAME_TYPE
12433               && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
12434               && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
12435         {
12436           cp_error ("base type `%T' fails to be a struct or class type",
12437                     TREE_VALUE (binfo));
12438           continue;
12439         }
12440
12441       GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
12442
12443       /* This code replaces similar code in layout_basetypes.
12444          We put the complete_type first for implicit `typename'.  */
12445       if (TYPE_SIZE (basetype) == NULL_TREE
12446           && ! (current_template_parms && uses_template_parms (basetype)))
12447         {
12448           cp_error ("base class `%T' has incomplete type", basetype);
12449           continue;
12450         }
12451       else
12452         {
12453           if (CLASSTYPE_MARKED (basetype))
12454             {
12455               if (basetype == ref)
12456                 cp_error ("recursive type `%T' undefined", basetype);
12457               else
12458                 cp_error ("duplicate base type `%T' invalid", basetype);
12459               continue;
12460             }
12461
12462           if (TYPE_FOR_JAVA (basetype)
12463               && current_lang_stack == current_lang_base)
12464             TYPE_FOR_JAVA (ref) = 1;
12465
12466           /* Note that the BINFO records which describe individual
12467              inheritances are *not* shared in the lattice!  They
12468              cannot be shared because a given baseclass may be
12469              inherited with different `accessibility' by different
12470              derived classes.  (Each BINFO record describing an
12471              individual inheritance contains flags which say what
12472              the `accessibility' of that particular inheritance is.)  */
12473   
12474           base_binfo 
12475             = make_binfo (integer_zero_node, basetype,
12476                           CLASS_TYPE_P (basetype)
12477                           ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12478                           CLASS_TYPE_P (basetype)
12479                           ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
12480  
12481           TREE_VEC_ELT (binfos, i) = base_binfo;
12482           TREE_VIA_PUBLIC (base_binfo) = via_public;
12483           TREE_VIA_PROTECTED (base_binfo) = via_protected;
12484           TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12485           BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12486
12487           /* We need to unshare the binfos now so that lookups during class
12488              definition work.  */
12489           unshare_base_binfos (base_binfo);
12490
12491           SET_CLASSTYPE_MARKED (basetype);
12492
12493           /* We are free to modify these bits because they are meaningless
12494              at top level, and BASETYPE is a top-level type.  */
12495           if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
12496             {
12497               TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
12498               TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12499             }
12500
12501           if (CLASS_TYPE_P (basetype))
12502             {
12503               TYPE_GETS_NEW (ref) |= TYPE_GETS_NEW (basetype);
12504               TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12505             }
12506
12507           i += 1;
12508         }
12509     }
12510   if (i)
12511     TREE_VEC_LENGTH (binfos) = i;
12512   else
12513     BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
12514
12515   if (i > 1)
12516     TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
12517   else if (i == 1)
12518     {
12519       tree basetype = BINFO_TYPE (TREE_VEC_ELT (binfos, 0));
12520       
12521       if (CLASS_TYPE_P (basetype))
12522         TYPE_USES_MULTIPLE_INHERITANCE (ref)
12523           = TYPE_USES_MULTIPLE_INHERITANCE (basetype);
12524     }
12525
12526   if (TYPE_USES_MULTIPLE_INHERITANCE (ref))
12527     TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12528
12529   /* Unmark all the types.  */
12530   while (--i >= 0)
12531     CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
12532   CLEAR_CLASSTYPE_MARKED (ref);
12533
12534   /* Now that we know all the base-classes, set up the list of virtual
12535      bases.  */
12536   CLASSTYPE_VBASECLASSES (ref) = get_vbase_types (ref);
12537
12538   pop_obstacks ();
12539 }
12540   
12541 \f
12542 /* Begin compiling the definition of an enumeration type.
12543    NAME is its name (or null if anonymous).
12544    Returns the type object, as yet incomplete.
12545    Also records info about it so that build_enumerator
12546    may be used to declare the individual values as they are read.  */
12547
12548 tree
12549 start_enum (name)
12550      tree name;
12551 {
12552   register tree enumtype = NULL_TREE;
12553   struct binding_level *b = inner_binding_level;
12554
12555   /* We are wasting space here and putting these on the permanent_obstack so
12556      that typeid(local enum) will work correctly. */
12557   push_obstacks (&permanent_obstack, &permanent_obstack);
12558
12559   /* If this is the real definition for a previous forward reference,
12560      fill in the contents in the same object that used to be the
12561      forward reference.  */
12562
12563   if (name != NULL_TREE)
12564     enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
12565
12566   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12567     cp_error ("multiple definition of `%#T'", enumtype);
12568   else
12569     {
12570       enumtype = make_node (ENUMERAL_TYPE);
12571       pushtag (name, enumtype, 0);
12572     }
12573
12574   if (current_class_type)
12575     TREE_ADDRESSABLE (b->tags) = 1;
12576
12577   /* We don't copy this value because build_enumerator needs to do it.  */
12578   enum_next_value = integer_zero_node;
12579   enum_overflow = 0;
12580
12581   GNU_xref_decl (current_function_decl, enumtype);
12582   return enumtype;
12583 }
12584
12585 /* After processing and defining all the values of an enumeration type,
12586    install their decls in the enumeration type and finish it off.
12587    ENUMTYPE is the type object and VALUES a list of name-value pairs.
12588    Returns ENUMTYPE.  */
12589
12590 tree
12591 finish_enum (enumtype)
12592      tree enumtype;
12593 {
12594   register tree minnode = NULL_TREE, maxnode = NULL_TREE;
12595   /* Calculate the maximum value of any enumerator in this type.  */
12596
12597   tree values = TYPE_VALUES (enumtype);
12598   if (values)
12599     {
12600       tree pair;
12601
12602       for (pair = values; pair; pair = TREE_CHAIN (pair))
12603         {
12604           tree decl;
12605           tree value;
12606
12607           /* The TREE_VALUE is a CONST_DECL for this enumeration
12608              constant.  */
12609           decl = TREE_VALUE (pair);
12610
12611           /* The DECL_INITIAL will be NULL if we are processing a
12612              template declaration and this enumeration constant had no
12613              explicit initializer.  */
12614           value = DECL_INITIAL (decl);
12615           if (value && !processing_template_decl)
12616             {
12617               /* Set the TREE_TYPE for the VALUE as well.  That's so
12618                  that when we call decl_constant_value we get an
12619                  entity of the right type (but with the constant
12620                  value).  Since we shouldn't ever call
12621                  decl_constant_value on a template type, there's no
12622                  reason to do that when processing_template_decl.
12623                  And, if the expression is something like a
12624                  TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
12625                  wreak havoc on the intended type of the expression.  
12626
12627                  Of course, there's also no point in trying to compute
12628                  minimum or maximum values if we're in a template.  */
12629               TREE_TYPE (value) = enumtype;
12630
12631               if (!minnode)
12632                 minnode = maxnode = value;
12633               else if (tree_int_cst_lt (maxnode, value))
12634                 maxnode = value;
12635               else if (tree_int_cst_lt (value, minnode))
12636                 minnode = value;
12637             }
12638
12639           if (processing_template_decl) 
12640             /* If this is just a template, leave the CONST_DECL
12641                alone.  That way tsubst_copy will find CONST_DECLs for
12642                CONST_DECLs, and not INTEGER_CSTs.  */
12643             ;
12644           else
12645             /* In the list we're building up, we want the enumeration
12646                values, not the CONST_DECLs.  */
12647             TREE_VALUE (pair) = value;
12648         }
12649     }
12650   else
12651     maxnode = minnode = integer_zero_node;
12652
12653   TYPE_VALUES (enumtype) = nreverse (values);
12654
12655   if (processing_template_decl)
12656     {
12657       tree scope = current_scope ();
12658       if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12659         add_tree (build_min (TAG_DEFN, enumtype));
12660     }
12661   else
12662     {
12663       int unsignedp = tree_int_cst_sgn (minnode) >= 0;
12664       int lowprec = min_precision (minnode, unsignedp);
12665       int highprec = min_precision (maxnode, unsignedp);
12666       int precision = MAX (lowprec, highprec);
12667       tree tem;
12668
12669       TYPE_SIZE (enumtype) = NULL_TREE;
12670
12671       /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'.  */
12672
12673       TYPE_PRECISION (enumtype) = precision;
12674       if (unsignedp)
12675         fixup_unsigned_type (enumtype);
12676       else
12677         fixup_signed_type (enumtype);
12678
12679       if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
12680         /* Use the width of the narrowest normal C type which is wide
12681            enough.  */ 
12682         TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
12683                                                     (precision, 1));
12684       else
12685         TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
12686
12687       TYPE_SIZE (enumtype) = 0;
12688       layout_type (enumtype);
12689     
12690       /* Fix up all variant types of this enum type.  */
12691       for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
12692            tem = TYPE_NEXT_VARIANT (tem))
12693         {
12694           TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
12695           TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
12696           TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
12697           TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
12698           TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
12699           TYPE_MODE (tem) = TYPE_MODE (enumtype);
12700           TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
12701           TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
12702           TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
12703         }
12704
12705       /* Finish debugging output for this type.  */
12706       rest_of_type_compilation (enumtype, namespace_bindings_p ());
12707     }
12708
12709   /* In start_enum we pushed obstacks.  Here, we must pop them.  */
12710   pop_obstacks ();
12711
12712   return enumtype;
12713 }
12714
12715 /* Build and install a CONST_DECL for an enumeration constant of the
12716    enumeration type TYPE whose NAME and VALUE (if any) are provided.
12717    Assignment of sequential values by default is handled here.  */
12718
12719 tree
12720 build_enumerator (name, value, type)
12721      tree name;
12722      tree value;
12723      tree type;
12724 {
12725   tree decl, result;
12726   tree context;
12727
12728   /* Remove no-op casts from the value.  */
12729   if (value)
12730     STRIP_TYPE_NOPS (value);
12731
12732  if (! processing_template_decl)
12733    {
12734      /* Validate and default VALUE.  */
12735      if (value != NULL_TREE)
12736        {
12737          if (TREE_READONLY_DECL_P (value))
12738            value = decl_constant_value (value);
12739
12740          if (TREE_CODE (value) == INTEGER_CST)
12741            {
12742              value = default_conversion (value);
12743              constant_expression_warning (value);
12744            }
12745          else
12746            {
12747              cp_error ("enumerator value for `%D' not integer constant", name);
12748              value = NULL_TREE;
12749            }
12750        }
12751
12752      /* Default based on previous value.  */
12753      if (value == NULL_TREE && ! processing_template_decl)
12754        {
12755          value = enum_next_value;
12756          if (enum_overflow)
12757            cp_error ("overflow in enumeration values at `%D'", name);
12758        }
12759
12760      /* Remove no-op casts from the value.  */
12761      if (value)
12762        STRIP_TYPE_NOPS (value);
12763 #if 0
12764      /* To fix MAX_VAL enum consts. (bkoz)  */
12765      TREE_TYPE (value) = integer_type_node;
12766 #endif
12767    }
12768
12769  /* We always have to copy here; not all INTEGER_CSTs are unshared.
12770     Even in other cases, we will later (in finish_enum) be setting the
12771     type of VALUE.  */
12772  if (value != NULL_TREE)
12773    value = copy_node (value);
12774
12775   /* C++ associates enums with global, function, or class declarations.  */
12776  
12777  context = current_scope ();
12778  if (context && context == current_class_type)
12779    /* This enum declaration is local to the class.  */
12780    decl = build_lang_field_decl (CONST_DECL, name, type);
12781  else
12782    /* It's a global enum, or it's local to a function.  (Note local to
12783       a function could mean local to a class method.  */
12784    decl = build_decl (CONST_DECL, name, type);
12785
12786  DECL_CONTEXT (decl) = FROB_CONTEXT (context);
12787  DECL_INITIAL (decl) = value;
12788  TREE_READONLY (decl) = 1;
12789
12790  if (context && context == current_class_type)
12791    {
12792      pushdecl_class_level (decl);
12793      /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12794         on the TYPE_FIELDS list for `S'.  (That's so that you can say
12795         things like `S::i' later.)  */
12796      finish_member_declaration (decl);
12797    }
12798  else
12799    {
12800      pushdecl (decl);
12801      GNU_xref_decl (current_function_decl, decl);
12802    }
12803
12804  if (! processing_template_decl)
12805    {
12806      /* Set basis for default for next value.  */
12807      enum_next_value = build_binary_op_nodefault (PLUS_EXPR, value,
12808                                                   integer_one_node, PLUS_EXPR);
12809      enum_overflow = tree_int_cst_lt (enum_next_value, value);
12810    }
12811
12812   result = saveable_tree_cons (name, decl, NULL_TREE);
12813   return result;
12814 }
12815
12816 \f
12817 static int function_depth;
12818
12819 /* Create the FUNCTION_DECL for a function definition.
12820    DECLSPECS and DECLARATOR are the parts of the declaration;
12821    they describe the function's name and the type it returns,
12822    but twisted together in a fashion that parallels the syntax of C.
12823
12824    If PRE_PARSED_P is non-zero then DECLARATOR is really the DECL for
12825    the function we are about to process; DECLSPECS are ignored.  For
12826    example, we set PRE_PARSED_P when processing the definition of
12827    inline function that was defined in-class; the definition is
12828    actually processed when the class is complete.  In this case,
12829    PRE_PARSED_P is 2.  We also set PRE_PARSED_P when instanting the
12830    body of a template function, and when constructing thunk functions
12831    and such; in these cases PRE_PARSED_P is 1.
12832    
12833    This function creates a binding context for the function body
12834    as well as setting up the FUNCTION_DECL in current_function_decl.
12835
12836    Returns 1 on success.  If the DECLARATOR is not suitable for a function
12837    (it defines a datum instead), we return 0, which tells
12838    yyparse to report a parse error.
12839
12840    For C++, we must first check whether that datum makes any sense.
12841    For example, "class A local_a(1,2);" means that variable local_a
12842    is an aggregate of type A, which should have a constructor
12843    applied to it with the argument list [1, 2].
12844
12845    @@ There is currently no way to retrieve the storage
12846    @@ allocated to FUNCTION (or all of its parms) if we return
12847    @@ something we had previously.  */
12848
12849 int
12850 start_function (declspecs, declarator, attrs, pre_parsed_p)
12851      tree declspecs, declarator, attrs;
12852      int pre_parsed_p;
12853 {
12854   tree decl1;
12855   tree ctype = NULL_TREE;
12856   tree fntype;
12857   tree restype;
12858   extern int have_extern_spec;
12859   extern int used_extern_spec;
12860   int doing_friend = 0;
12861
12862   /* Sanity check.  */
12863   my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
12864   my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
12865
12866   /* Assume, until we see it does.  */
12867   current_function_returns_value = 0;
12868   current_function_returns_null = 0;
12869   named_labels = 0;
12870   shadowed_labels = 0;
12871   current_function_assigns_this = 0;
12872   current_function_just_assigned_this = 0;
12873   current_function_parms_stored = 0;
12874   original_result_rtx = NULL_RTX;
12875   base_init_expr = NULL_TREE;
12876   current_base_init_list = NULL_TREE;
12877   current_member_init_list = NULL_TREE;
12878   ctor_label = dtor_label = NULL_TREE;
12879   static_labelno = 0;
12880
12881   clear_temp_name ();
12882
12883   /* This should only be done once on the top most decl.  */
12884   if (have_extern_spec && !used_extern_spec)
12885     {
12886       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
12887       used_extern_spec = 1;
12888     }
12889
12890   if (pre_parsed_p)
12891     {
12892       decl1 = declarator;
12893
12894 #if 0
12895       /* What was this testing for, exactly?  */
12896       if (! DECL_ARGUMENTS (decl1)
12897           && !DECL_STATIC_FUNCTION_P (decl1)
12898           && !DECL_ARTIFICIAL (decl1)
12899           && DECL_CLASS_SCOPE_P (decl1)
12900           && TYPE_IDENTIFIER (DECL_CONTEXT (decl1))
12901           && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (DECL_CONTEXT (decl1))))
12902         {
12903           tree binding = binding_for_name (DECL_NAME (decl1), 
12904                                            current_namespace);
12905           cp_error ("redeclaration of `%#D'", decl1);
12906           if (IDENTIFIER_CLASS_VALUE (DECL_NAME (decl1)))
12907             cp_error_at ("previous declaration here", IDENTIFIER_CLASS_VALUE (DECL_NAME (decl1)));
12908           else if (BINDING_VALUE (binding))
12909             cp_error_at ("previous declaration here", BINDING_VALUE (binding));
12910         }
12911 #endif
12912
12913       fntype = TREE_TYPE (decl1);
12914       if (TREE_CODE (fntype) == METHOD_TYPE)
12915         ctype = TYPE_METHOD_BASETYPE (fntype);
12916
12917       /* ANSI C++ June 5 1992 WP 11.4.5.  A friend function defined in a
12918          class is in the (lexical) scope of the class in which it is
12919          defined.  */
12920       if (!ctype && DECL_FRIEND_P (decl1))
12921         {
12922           ctype = DECL_CLASS_CONTEXT (decl1);
12923
12924           /* CTYPE could be null here if we're dealing with a template;
12925              for example, `inline friend float foo()' inside a template
12926              will have no CTYPE set.  */
12927           if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
12928             ctype = NULL_TREE;
12929           else
12930             doing_friend = 1;
12931         }
12932
12933       last_function_parms = DECL_ARGUMENTS (decl1);
12934       last_function_parm_tags = NULL_TREE;
12935     }
12936   else
12937     {
12938       decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
12939       /* If the declarator is not suitable for a function definition,
12940          cause a syntax error.  */
12941       if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
12942
12943       fntype = TREE_TYPE (decl1);
12944
12945       restype = TREE_TYPE (fntype);
12946       if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
12947         {
12948           cp_error ("semicolon missing after declaration of `%#T'", restype);
12949           shadow_tag (build_expr_list (NULL_TREE, restype));
12950           CLASSTYPE_GOT_SEMICOLON (restype) = 1;
12951           if (TREE_CODE (fntype) == FUNCTION_TYPE)
12952             fntype = build_function_type (integer_type_node,
12953                                           TYPE_ARG_TYPES (fntype));
12954           else
12955             fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
12956                                               integer_type_node,
12957                                               TYPE_ARG_TYPES (fntype));
12958           TREE_TYPE (decl1) = fntype;
12959         }
12960
12961       if (TREE_CODE (fntype) == METHOD_TYPE)
12962         ctype = TYPE_METHOD_BASETYPE (fntype);
12963       else if (DECL_MAIN_P (decl1))
12964         {
12965           /* If this doesn't return integer_type, complain.  */
12966           if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
12967             {
12968               if (pedantic || warn_return_type)
12969                 pedwarn ("return type for `main' changed to `int'");
12970               TREE_TYPE (decl1) = fntype = default_function_type;
12971             }
12972         }
12973     }
12974
12975   /* Warn if function was previously implicitly declared
12976      (but not if we warned then).  */
12977   if (! warn_implicit
12978       && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
12979     cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
12980
12981   announce_function (decl1);
12982
12983   /* Set up current_class_type, and enter the scope of the class, if
12984      appropriate.  */
12985   if (ctype)
12986     push_nested_class (ctype, 1);
12987   else if (DECL_STATIC_FUNCTION_P (decl1))
12988     push_nested_class (DECL_CONTEXT (decl1), 2);
12989
12990   /* Now that we have entered the scope of the class, we must restore
12991      the bindings for any template parameters surrounding DECL1, if it
12992      is an inline member template.  (Order is important; consider the
12993      case where a template parameter has the same name as a field of
12994      the class.)  It is not until after this point that
12995      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
12996   if (pre_parsed_p == 2)
12997     maybe_begin_member_template_processing (decl1);
12998
12999   /* We are now in the scope of the function being defined.  */
13000   current_function_decl = decl1;
13001
13002   /* Save the parm names or decls from this function's declarator
13003      where store_parm_decls will find them.  */
13004   current_function_parms = last_function_parms;
13005   current_function_parm_tags = last_function_parm_tags;
13006
13007   if (! processing_template_decl)
13008     {
13009       /* In a function definition, arg types must be complete.  */
13010       require_complete_types_for_parms (current_function_parms);
13011
13012       if (TYPE_SIZE (complete_type (TREE_TYPE (fntype))) == NULL_TREE)
13013         {
13014           cp_error ("return-type `%#T' is an incomplete type",
13015                     TREE_TYPE (fntype));
13016
13017           /* Make it return void instead, but don't change the
13018              type of the DECL_RESULT, in case we have a named return value.  */
13019           if (ctype)
13020             TREE_TYPE (decl1)
13021               = build_cplus_method_type (build_type_variant (ctype,
13022                                                              TREE_READONLY (decl1),
13023                                                              TREE_SIDE_EFFECTS (decl1)),
13024                                          void_type_node,
13025                                          FUNCTION_ARG_CHAIN (decl1));
13026           else
13027             TREE_TYPE (decl1)
13028               = build_function_type (void_type_node,
13029                                      TYPE_ARG_TYPES (TREE_TYPE (decl1)));
13030           DECL_RESULT (decl1)
13031             = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (TREE_TYPE (fntype)));
13032           TREE_READONLY (DECL_RESULT (decl1))
13033             = CP_TYPE_CONST_P (TREE_TYPE (fntype));
13034           TREE_THIS_VOLATILE (DECL_RESULT (decl1))
13035             = CP_TYPE_VOLATILE_P (TREE_TYPE (fntype));
13036         }
13037
13038       if (TYPE_LANG_SPECIFIC (TREE_TYPE (fntype))
13039           && CLASSTYPE_ABSTRACT_VIRTUALS (TREE_TYPE (fntype)))
13040         abstract_virtuals_error (decl1, TREE_TYPE (fntype));
13041     }
13042
13043   /* Effective C++ rule 15.  See also c_expand_return.  */
13044   if (warn_ecpp
13045       && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
13046       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
13047     cp_warning ("`operator=' should return a reference to `*this'");
13048
13049   /* Make the init_value nonzero so pushdecl knows this is not tentative.
13050      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
13051   DECL_INITIAL (decl1) = error_mark_node;
13052
13053 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
13054   SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
13055 #endif
13056   
13057   /* This function exists in static storage.
13058      (This does not mean `static' in the C sense!)  */
13059   TREE_STATIC (decl1) = 1;
13060
13061   /* We must call push_template_decl after current_class_type is set
13062      up.  (If we are processing inline definitions after exiting a
13063      class scope, current_class_type will be NULL_TREE until set above
13064      by push_nested_class.)  */
13065   if (processing_template_decl)
13066     decl1 = push_template_decl (decl1);
13067
13068   /* Record the decl so that the function name is defined.
13069      If we already have a decl for this name, and it is a FUNCTION_DECL,
13070      use the old decl.  */
13071   if (!processing_template_decl && pre_parsed_p == 0)
13072     {
13073       /* A specialization is not used to guide overload resolution.  */
13074       if ((flag_guiding_decls 
13075            || !DECL_TEMPLATE_SPECIALIZATION (decl1))
13076           && ! DECL_FUNCTION_MEMBER_P (decl1))
13077         decl1 = pushdecl (decl1);
13078       else
13079         {
13080           /* We need to set the DECL_CONTEXT. */
13081           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13082             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13083           /* And make sure we have enough default args.  */
13084           check_default_args (decl1);
13085         }
13086       DECL_MAIN_VARIANT (decl1) = decl1;
13087       fntype = TREE_TYPE (decl1);
13088     }
13089
13090   current_function_decl = decl1;
13091
13092   if (DECL_INTERFACE_KNOWN (decl1))
13093     {
13094       tree ctx = hack_decl_function_context (decl1);
13095
13096       if (DECL_NOT_REALLY_EXTERN (decl1))
13097         DECL_EXTERNAL (decl1) = 0;
13098
13099       if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx) 
13100           && TREE_PUBLIC (ctx))
13101         /* This is a function in a local class in an extern inline
13102            function.  */
13103         comdat_linkage (decl1);
13104     }
13105   /* If this function belongs to an interface, it is public.
13106      If it belongs to someone else's interface, it is also external.
13107      This only affects inlines and template instantiations.  */
13108   else if (interface_unknown == 0
13109            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13110                || flag_alt_external_templates))
13111     {
13112       if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
13113           || processing_template_decl)
13114         {
13115           DECL_EXTERNAL (decl1)
13116             = (interface_only
13117                || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines));
13118
13119           /* For WIN32 we also want to put these in linkonce sections.  */
13120           maybe_make_one_only (decl1);
13121         }
13122       else
13123         DECL_EXTERNAL (decl1) = 0;
13124       DECL_NOT_REALLY_EXTERN (decl1) = 0;
13125       DECL_INTERFACE_KNOWN (decl1) = 1;
13126     }
13127   else if (interface_unknown && interface_only
13128            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13129                || flag_alt_external_templates))
13130     {
13131       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13132          interface, we will have interface_only set but not
13133          interface_known.  In that case, we don't want to use the normal
13134          heuristics because someone will supply a #pragma implementation
13135          elsewhere, and deducing it here would produce a conflict.  */
13136       comdat_linkage (decl1);
13137       DECL_EXTERNAL (decl1) = 0;
13138       DECL_INTERFACE_KNOWN (decl1) = 1;
13139       DECL_DEFER_OUTPUT (decl1) = 1;
13140     }
13141   else
13142     {
13143       /* This is a definition, not a reference.
13144          So clear DECL_EXTERNAL.  */
13145       DECL_EXTERNAL (decl1) = 0;
13146
13147       if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
13148           && ! DECL_INTERFACE_KNOWN (decl1)
13149           /* Don't try to defer nested functions for now.  */
13150           && ! hack_decl_function_context (decl1))
13151         DECL_DEFER_OUTPUT (decl1) = 1;
13152       else
13153         DECL_INTERFACE_KNOWN (decl1) = 1;
13154     }
13155
13156   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1))
13157     {
13158       if (TREE_CODE (fntype) == METHOD_TYPE)
13159         TREE_TYPE (decl1) = fntype
13160           = build_function_type (TREE_TYPE (fntype),
13161                                  TREE_CHAIN (TYPE_ARG_TYPES (fntype)));
13162       current_function_parms = TREE_CHAIN (current_function_parms);
13163       DECL_ARGUMENTS (decl1) = current_function_parms;
13164       ctype = NULL_TREE;
13165     }
13166   restype = TREE_TYPE (fntype);
13167
13168   if (ctype)
13169     {
13170       /* If we're compiling a friend function, neither of the variables
13171          current_class_ptr nor current_class_type will have values.  */
13172       if (! doing_friend)
13173         {
13174           /* We know that this was set up by `grokclassfn'.
13175              We do not wait until `store_parm_decls', since evil
13176              parse errors may never get us to that point.  Here
13177              we keep the consistency between `current_class_type'
13178              and `current_class_ptr'.  */
13179           tree t = current_function_parms;
13180
13181           my_friendly_assert (t != NULL_TREE
13182                               && TREE_CODE (t) == PARM_DECL, 162);
13183
13184           if (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE)
13185             {
13186               int i;
13187
13188               if (! hack_decl_function_context (decl1))
13189                 temporary_allocation ();
13190               i = suspend_momentary ();
13191
13192               /* Normally, build_indirect_ref returns
13193                  current_class_ref whenever current_class_ptr is
13194                  dereferenced.  This time, however, we want it to
13195                  *create* current_class_ref, so we temporarily clear
13196                  current_class_ptr to fool it.  */
13197               current_class_ptr = NULL_TREE;
13198               current_class_ref = build_indirect_ref (t, NULL_PTR);
13199               current_class_ptr = t;
13200
13201               resume_momentary (i);
13202               if (! hack_decl_function_context (decl1))
13203                 end_temporary_allocation ();
13204             }
13205           else
13206             /* We're having a signature pointer here.  */
13207             current_class_ref = current_class_ptr = t;
13208
13209         }
13210     }
13211   else
13212     current_class_ptr = current_class_ref = NULL_TREE;
13213
13214   pushlevel (0);
13215   current_binding_level->parm_flag = 1;
13216
13217   GNU_xref_function (decl1, current_function_parms);
13218
13219   if (attrs)
13220     cplus_decl_attributes (decl1, NULL_TREE, attrs);
13221   
13222   make_function_rtl (decl1);
13223
13224   /* Promote the value to int before returning it.  */
13225   if (C_PROMOTING_INTEGER_TYPE_P (restype))
13226     restype = type_promotes_to (restype);
13227
13228   /* If this fcn was already referenced via a block-scope `extern' decl
13229      (or an implicit decl), propagate certain information about the usage.  */
13230   if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
13231     TREE_ADDRESSABLE (decl1) = 1;
13232
13233   if (DECL_RESULT (decl1) == NULL_TREE)
13234     {
13235       DECL_RESULT (decl1)
13236         = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13237       TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13238       TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
13239     }
13240
13241   /* Allocate further tree nodes temporarily during compilation
13242      of this function only.  Tiemann moved up here from bottom of fn.  */
13243   /* If this is a nested function, then we must continue to allocate RTL
13244      on the permanent obstack in case we need to inline it later.  */
13245   if (! hack_decl_function_context (decl1))
13246     temporary_allocation ();
13247
13248   if (processing_template_decl)
13249     {
13250       ++minimal_parse_mode;
13251       last_tree = DECL_SAVED_TREE (decl1)
13252         = build_nt (EXPR_STMT, void_zero_node);
13253     }
13254
13255   ++function_depth;
13256
13257   if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl1))
13258       && DECL_LANGUAGE (decl1) == lang_cplusplus)
13259     {
13260       dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13261       ctor_label = NULL_TREE;
13262     }
13263   else
13264     {
13265       dtor_label = NULL_TREE;
13266       if (DECL_CONSTRUCTOR_P (decl1))
13267         ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13268     }
13269
13270   return 1;
13271 }
13272 \f
13273 /* Called after store_parm_decls for a function-try-block.  We need to update
13274    last_parm_cleanup_insn so that the base initializers for a constructor
13275    are run within this block, not before it.  */
13276
13277 void
13278 expand_start_early_try_stmts ()
13279 {
13280   expand_start_try_stmts ();
13281   last_parm_cleanup_insn = get_last_insn ();
13282 }
13283
13284 /* Store the parameter declarations into the current function declaration.
13285    This is called after parsing the parameter declarations, before
13286    digesting the body of the function.
13287
13288    Also install to binding contour return value identifier, if any.  */
13289
13290 void
13291 store_parm_decls ()
13292 {
13293   register tree fndecl = current_function_decl;
13294   register tree parm;
13295   int parms_have_cleanups = 0;
13296   tree cleanups = NULL_TREE;
13297
13298   /* This is either a chain of PARM_DECLs (when a prototype is used).  */
13299   tree specparms = current_function_parms;
13300
13301   /* This is a list of types declared among parms in a prototype.  */
13302   tree parmtags = current_function_parm_tags;
13303
13304   /* This is a chain of any other decls that came in among the parm
13305      declarations.  If a parm is declared with  enum {foo, bar} x;
13306      then CONST_DECLs for foo and bar are put here.  */
13307   tree nonparms = NULL_TREE;
13308
13309   if (toplevel_bindings_p ())
13310     fatal ("parse errors have confused me too much");
13311
13312   /* Initialize RTL machinery.  */
13313   init_function_start (fndecl, input_filename, lineno);
13314
13315   /* Create a binding level for the parms.  */
13316   expand_start_bindings (0);
13317
13318   if (specparms != NULL_TREE)
13319     {
13320       /* This case is when the function was defined with an ANSI prototype.
13321          The parms already have decls, so we need not do anything here
13322          except record them as in effect
13323          and complain if any redundant old-style parm decls were written.  */
13324
13325       register tree next;
13326
13327       /* Must clear this because it might contain TYPE_DECLs declared
13328          at class level.  */
13329       storedecls (NULL_TREE);
13330
13331       for (parm = nreverse (specparms); parm; parm = next)
13332         {
13333           next = TREE_CHAIN (parm);
13334           if (TREE_CODE (parm) == PARM_DECL)
13335             {
13336               tree cleanup;
13337               if (DECL_NAME (parm) == NULL_TREE)
13338                 {
13339                   pushdecl (parm);
13340                 }
13341               else if (TREE_CODE (TREE_TYPE (parm)) == VOID_TYPE)
13342                 cp_error ("parameter `%D' declared void", parm);
13343               else
13344                 {
13345                   /* Now fill in DECL_REFERENCE_SLOT for any of the parm decls.
13346                      A parameter is assumed not to have any side effects.
13347                      If this should change for any reason, then this
13348                      will have to wrap the bashed reference type in a save_expr.
13349                      
13350                      Also, if the parameter type is declared to be an X
13351                      and there is an X(X&) constructor, we cannot lay it
13352                      into the stack (any more), so we make this parameter
13353                      look like it is really of reference type.  Functions
13354                      which pass parameters to this function will know to
13355                      create a temporary in their frame, and pass a reference
13356                      to that.  */
13357
13358                   if (TREE_CODE (TREE_TYPE (parm)) == REFERENCE_TYPE
13359                       && TYPE_SIZE (TREE_TYPE (TREE_TYPE (parm))))
13360                     SET_DECL_REFERENCE_SLOT (parm, convert_from_reference (parm));
13361
13362                   pushdecl (parm);
13363                 }
13364               if (! processing_template_decl
13365                   && (cleanup = maybe_build_cleanup (parm), cleanup))
13366                 {
13367                   expand_decl (parm);
13368                   parms_have_cleanups = 1;
13369
13370                   /* Keep track of the cleanups.  */
13371                   cleanups = tree_cons (parm, cleanup, cleanups);
13372                 }
13373             }
13374           else
13375             {
13376               /* If we find an enum constant or a type tag,
13377                  put it aside for the moment.  */
13378               TREE_CHAIN (parm) = NULL_TREE;
13379               nonparms = chainon (nonparms, parm);
13380             }
13381         }
13382
13383       /* Get the decls in their original chain order
13384          and record in the function.  This is all and only the
13385          PARM_DECLs that were pushed into scope by the loop above.  */
13386       DECL_ARGUMENTS (fndecl) = getdecls ();
13387
13388       storetags (chainon (parmtags, gettags ()));
13389     }
13390   else
13391     DECL_ARGUMENTS (fndecl) = NULL_TREE;
13392
13393   /* Now store the final chain of decls for the arguments
13394      as the decl-chain of the current lexical scope.
13395      Put the enumerators in as well, at the front so that
13396      DECL_ARGUMENTS is not modified.  */
13397
13398   storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
13399
13400   /* Declare __FUNCTION__ and __PRETTY_FUNCTION__ for this function.  */
13401   declare_function_name ();
13402
13403   /* Initialize the RTL code for the function.  */
13404   DECL_SAVED_INSNS (fndecl) = NULL_RTX;
13405   if (! processing_template_decl)
13406     expand_function_start (fndecl, parms_have_cleanups);
13407
13408   current_function_parms_stored = 1;
13409
13410   /* If this function is `main', emit a call to `__main'
13411      to run global initializers, etc.  */
13412   if (DECL_MAIN_P (fndecl))
13413     expand_main_function ();
13414
13415   /* Now that we have initialized the parms, we can start their
13416      cleanups.  We cannot do this before, since expand_decl_cleanup
13417      should not be called before the parm can be used.  */
13418   if (cleanups
13419       && ! processing_template_decl)      
13420     {
13421       for (cleanups = nreverse (cleanups); cleanups; cleanups = TREE_CHAIN (cleanups))
13422         {
13423           if (! expand_decl_cleanup (TREE_PURPOSE (cleanups), TREE_VALUE (cleanups)))
13424             cp_error ("parser lost in parsing declaration of `%D'",
13425                       TREE_PURPOSE (cleanups));
13426         }
13427     }
13428
13429   /* Create a binding contour which can be used to catch
13430      cleanup-generated temporaries.  Also, if the return value needs or
13431      has initialization, deal with that now.  */
13432   if (parms_have_cleanups)
13433     {
13434       pushlevel (0);
13435       expand_start_bindings (0);
13436     }
13437
13438   if (! processing_template_decl && flag_exceptions)
13439     {
13440       /* Do the starting of the exception specifications, if we have any.  */
13441       if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13442         expand_start_eh_spec ();
13443     }
13444
13445   last_parm_cleanup_insn = get_last_insn ();
13446   last_dtor_insn = get_last_insn ();
13447 }
13448
13449 /* Bind a name and initialization to the return value of
13450    the current function.  */
13451
13452 void
13453 store_return_init (return_id, init)
13454      tree return_id, init;
13455 {
13456   tree decl = DECL_RESULT (current_function_decl);
13457
13458   if (pedantic)
13459     /* Give this error as many times as there are occurrences,
13460        so that users can use Emacs compilation buffers to find
13461        and fix all such places.  */
13462     pedwarn ("ANSI C++ does not permit named return values");
13463
13464   if (return_id != NULL_TREE)
13465     {
13466       if (DECL_NAME (decl) == NULL_TREE)
13467         {
13468           DECL_NAME (decl) = return_id;
13469           DECL_ASSEMBLER_NAME (decl) = return_id;
13470         }
13471       else
13472         cp_error ("return identifier `%D' already in place", decl);
13473     }
13474
13475   /* Can't let this happen for constructors.  */
13476   if (DECL_CONSTRUCTOR_P (current_function_decl))
13477     {
13478       error ("can't redefine default return value for constructors");
13479       return;
13480     }
13481
13482   /* If we have a named return value, put that in our scope as well.  */
13483   if (DECL_NAME (decl) != NULL_TREE)
13484     {
13485       /* If this named return value comes in a register,
13486          put it in a pseudo-register.  */
13487       if (DECL_REGISTER (decl))
13488         {
13489           original_result_rtx = DECL_RTL (decl);
13490           DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
13491         }
13492
13493       /* Let `cp_finish_decl' know that this initializer is ok.  */
13494       DECL_INITIAL (decl) = init;
13495       pushdecl (decl);
13496
13497       if (minimal_parse_mode)
13498         add_tree (build_min_nt (RETURN_INIT, return_id,
13499                                 copy_to_permanent (init)));
13500       else
13501         cp_finish_decl (decl, init, NULL_TREE, 0, 0);
13502     }
13503 }
13504
13505 \f
13506 /* Finish up a function declaration and compile that function
13507    all the way to assembler language output.  The free the storage
13508    for the function definition.
13509
13510    This is called after parsing the body of the function definition.
13511    LINENO is the current line number.
13512
13513    FLAGS is a bitwise or of the following values: 
13514      1 - CALL_POPLEVEL 
13515        An extra call to poplevel (and expand_end_bindings) must be
13516        made to take care of the binding contour for the base
13517        initializers.  This is only relevant for constructors.
13518      2 - INCLASS_INLINE
13519        We just finished processing the body of an in-class inline
13520        function definition.  (This processing will have taken place
13521        after the class definition is complete.)
13522
13523    NESTED is nonzero if we were in the middle of compiling another function
13524    when we started on this one.  */
13525
13526 void
13527 finish_function (lineno, flags, nested)
13528      int lineno;
13529      int flags;
13530      int nested;
13531 {
13532   register tree fndecl = current_function_decl;
13533   tree fntype, ctype = NULL_TREE;
13534   rtx last_parm_insn, insns;
13535   /* Label to use if this function is supposed to return a value.  */
13536   tree no_return_label = NULL_TREE;
13537   tree decls = NULL_TREE;
13538   int call_poplevel = (flags & 1) != 0;
13539   int inclass_inline = (flags & 2) != 0;
13540   int in_template;
13541
13542   /* When we get some parse errors, we can end up without a
13543      current_function_decl, so cope.  */
13544   if (fndecl == NULL_TREE)
13545     return;
13546
13547   if (! nested && function_depth > 1)
13548     nested = 1;
13549
13550   fntype = TREE_TYPE (fndecl);
13551
13552 /*  TREE_READONLY (fndecl) = 1;
13553     This caused &foo to be of type ptr-to-const-function
13554     which then got a warning when stored in a ptr-to-function variable.  */
13555
13556   /* This happens on strange parse errors.  */
13557   if (! current_function_parms_stored)
13558     {
13559       call_poplevel = 0;
13560       store_parm_decls ();
13561     }
13562
13563   if (processing_template_decl)
13564     {
13565       if (DECL_CONSTRUCTOR_P (fndecl) && call_poplevel)
13566         {
13567           decls = getdecls ();
13568           expand_end_bindings (decls, decls != NULL_TREE, 0);
13569           poplevel (decls != NULL_TREE, 0, 0);
13570         }
13571     }
13572   else
13573     {
13574       if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
13575         {
13576           tree ttype = target_type (fntype);
13577           tree parmdecl;
13578
13579           if (IS_AGGR_TYPE (ttype))
13580             /* Let debugger know it should output info for this type.  */
13581             note_debug_info_needed (ttype);
13582
13583           for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
13584             {
13585               ttype = target_type (TREE_TYPE (parmdecl));
13586               if (IS_AGGR_TYPE (ttype))
13587                 /* Let debugger know it should output info for this type.  */
13588                 note_debug_info_needed (ttype);
13589             }
13590         }
13591
13592       /* Clean house because we will need to reorder insns here.  */
13593       do_pending_stack_adjust ();
13594
13595       if (dtor_label)
13596         {
13597           tree binfo = TYPE_BINFO (current_class_type);
13598           tree cond = integer_one_node;
13599           tree exprstmt;
13600           tree in_charge_node = lookup_name (in_charge_identifier, 0);
13601           tree virtual_size;
13602           int ok_to_optimize_dtor = 0;
13603           int empty_dtor = get_last_insn () == last_dtor_insn;
13604
13605           if (current_function_assigns_this)
13606             cond = build (NE_EXPR, boolean_type_node,
13607                           current_class_ptr, integer_zero_node);
13608           else
13609             {
13610               int n_baseclasses = CLASSTYPE_N_BASECLASSES (current_class_type);
13611
13612               /* If this destructor is empty, then we don't need to check
13613                  whether `this' is NULL in some cases.  */
13614               if ((flag_this_is_variable & 1) == 0)
13615                 ok_to_optimize_dtor = 1;
13616               else if (empty_dtor)
13617                 ok_to_optimize_dtor
13618                   = (n_baseclasses == 0
13619                      || (n_baseclasses == 1
13620                          && TYPE_HAS_DESTRUCTOR (TYPE_BINFO_BASETYPE (current_class_type, 0))));
13621             }
13622
13623           /* These initializations might go inline.  Protect
13624              the binding level of the parms.  */
13625           pushlevel (0);
13626           expand_start_bindings (0);
13627
13628           if (current_function_assigns_this)
13629             {
13630               current_function_assigns_this = 0;
13631               current_function_just_assigned_this = 0;
13632             }
13633
13634           /* Generate the code to call destructor on base class.
13635              If this destructor belongs to a class with virtual
13636              functions, then set the virtual function table
13637              pointer to represent the type of our base class.  */
13638
13639           /* This side-effect makes call to `build_delete' generate the
13640              code we have to have at the end of this destructor.
13641              `build_delete' will set the flag again.  */
13642           TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
13643
13644           /* These are two cases where we cannot delegate deletion.  */
13645           if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)
13646               || TYPE_GETS_REG_DELETE (current_class_type))
13647             exprstmt = build_delete (current_class_type, current_class_ref, integer_zero_node,
13648                                      LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
13649           else
13650             exprstmt = build_delete (current_class_type, current_class_ref, in_charge_node,
13651                                      LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
13652
13653           /* If we did not assign to this, then `this' is non-zero at
13654              the end of a destructor.  As a special optimization, don't
13655              emit test if this is an empty destructor.  If it does nothing,
13656              it does nothing.  If it calls a base destructor, the base
13657              destructor will perform the test.  */
13658
13659           if (exprstmt != error_mark_node
13660               && (TREE_CODE (exprstmt) != NOP_EXPR
13661                   || TREE_OPERAND (exprstmt, 0) != integer_zero_node
13662                   || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
13663             {
13664               expand_label (dtor_label);
13665               if (cond != integer_one_node)
13666                 expand_start_cond (cond, 0);
13667               if (exprstmt != void_zero_node)
13668                 /* Don't call `expand_expr_stmt' if we're not going to do
13669                    anything, since -Wall will give a diagnostic.  */
13670                 expand_expr_stmt (exprstmt);
13671
13672               /* Run destructor on all virtual baseclasses.  */
13673               if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13674                 {
13675                   tree vbases = nreverse (copy_list (CLASSTYPE_VBASECLASSES (current_class_type)));
13676                   expand_start_cond (build (BIT_AND_EXPR, integer_type_node,
13677                                             in_charge_node, integer_two_node), 0);
13678                   while (vbases)
13679                     {
13680                       if (TYPE_NEEDS_DESTRUCTOR (BINFO_TYPE (vbases)))
13681                         {
13682                           tree vb = get_vbase
13683                             (BINFO_TYPE (vbases),
13684                              TYPE_BINFO (current_class_type));
13685                           expand_expr_stmt
13686                             (build_scoped_method_call
13687                              (current_class_ref, vb, dtor_identifier,
13688                               build_expr_list (NULL_TREE, integer_zero_node)));
13689                         }
13690                       vbases = TREE_CHAIN (vbases);
13691                     }
13692                   expand_end_cond ();
13693                 }
13694
13695               do_pending_stack_adjust ();
13696               if (cond != integer_one_node)
13697                 expand_end_cond ();
13698             }
13699
13700           virtual_size = c_sizeof (current_class_type);
13701
13702           /* At the end, call delete if that's what's requested.  */
13703
13704           /* FDIS sez: At the point of definition of a virtual destructor
13705                (including an implicit definition), non-placement operator
13706                delete shall be looked up in the scope of the destructor's
13707                class and if found shall be accessible and unambiguous.
13708
13709              This is somewhat unclear, but I take it to mean that if the
13710              class only defines placement deletes we don't do anything here.
13711              So we pass LOOKUP_SPECULATIVELY; delete_sanity will complain
13712              for us if they ever try to delete one of these.  */
13713
13714           if (TYPE_GETS_REG_DELETE (current_class_type)
13715               || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13716             exprstmt = build_op_delete_call
13717               (DELETE_EXPR, current_class_ptr, virtual_size,
13718                LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
13719           else
13720             exprstmt = NULL_TREE;
13721
13722           if (exprstmt)
13723             {
13724               cond = build (BIT_AND_EXPR, integer_type_node,
13725                             in_charge_node, integer_one_node);
13726               expand_start_cond (cond, 0);
13727               expand_expr_stmt (exprstmt);
13728               expand_end_cond ();
13729             }
13730
13731           /* End of destructor.  */
13732           expand_end_bindings (NULL_TREE, getdecls () != NULL_TREE, 0);
13733           poplevel (getdecls () != NULL_TREE, 0, 0);
13734
13735           /* Back to the top of destructor.  */
13736           /* Don't execute destructor code if `this' is NULL.  */
13737
13738           start_sequence ();
13739
13740           /* If the dtor is empty, and we know there is not possible way we
13741              could use any vtable entries, before they are possibly set by
13742              a base class dtor, we don't have to setup the vtables, as we
13743              know that any base class dtoring will set up any vtables it
13744              needs.  We avoid MI, because one base class dtor can do a
13745              virtual dispatch to an overridden function that would need to
13746              have a non-related vtable set up, we cannot avoid setting up
13747              vtables in that case.  We could change this to see if there is
13748              just one vtable.  */
13749           if (! empty_dtor || TYPE_USES_COMPLEX_INHERITANCE (current_class_type))
13750             {
13751               /* Make all virtual function table pointers in non-virtual base
13752                  classes point to CURRENT_CLASS_TYPE's virtual function
13753                  tables.  */
13754               expand_direct_vtbls_init (binfo, binfo, 1, 0, current_class_ptr);
13755
13756               if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13757                 expand_indirect_vtbls_init (binfo, current_class_ref, current_class_ptr);
13758             }
13759           
13760           if (! ok_to_optimize_dtor)
13761             {
13762               cond = build_binary_op (NE_EXPR,
13763                                       current_class_ptr, integer_zero_node, 1);
13764               expand_start_cond (cond, 0);
13765             }
13766
13767           insns = get_insns ();
13768           end_sequence ();
13769
13770           last_parm_insn = get_first_nonparm_insn ();
13771           if (last_parm_insn == NULL_RTX)
13772             last_parm_insn = get_last_insn ();
13773           else
13774             last_parm_insn = previous_insn (last_parm_insn);
13775
13776           emit_insns_after (insns, last_parm_insn);
13777
13778           if (! ok_to_optimize_dtor)
13779             expand_end_cond ();
13780         }
13781       else if (current_function_assigns_this)
13782         {
13783           /* Does not need to call emit_base_init, because
13784              that is done (if needed) just after assignment to this
13785              is seen.  */
13786
13787           if (DECL_CONSTRUCTOR_P (current_function_decl))
13788             {
13789               end_protect_partials ();
13790               expand_label (ctor_label);
13791               ctor_label = NULL_TREE;
13792
13793               if (call_poplevel)
13794                 {
13795                   decls = getdecls ();
13796                   expand_end_bindings (decls, decls != NULL_TREE, 0);
13797                   poplevel (decls != NULL_TREE, 0, 0);
13798                 }
13799               /* c_expand_return knows to return 'this' from a constructor.  */
13800               c_expand_return (NULL_TREE);
13801             }
13802           else if (TREE_CODE (TREE_TYPE (DECL_RESULT (current_function_decl))) != VOID_TYPE
13803                    && return_label != NULL_RTX)
13804             no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13805
13806           current_function_assigns_this = 0;
13807           current_function_just_assigned_this = 0;
13808           base_init_expr = NULL_TREE;
13809         }
13810       else if (DECL_CONSTRUCTOR_P (fndecl))
13811         {
13812           tree cond = NULL_TREE, thenclause = NULL_TREE;
13813           /* Allow constructor for a type to get a new instance of the object
13814              using `build_new'.  */
13815           tree abstract_virtuals = CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type);
13816           CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = NULL_TREE;
13817
13818           DECL_RETURNS_FIRST_ARG (fndecl) = 1;
13819
13820           if (flag_this_is_variable > 0)
13821             {
13822               cond = build_binary_op (EQ_EXPR,
13823                                       current_class_ptr, integer_zero_node, 1);
13824               thenclause = build_modify_expr (current_class_ptr, NOP_EXPR,
13825                                               build_new (NULL_TREE, current_class_type, void_type_node, 0));
13826             }
13827
13828           CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = abstract_virtuals;
13829
13830           start_sequence ();
13831
13832           if (flag_this_is_variable > 0)
13833             {
13834               expand_start_cond (cond, 0);
13835               expand_expr_stmt (thenclause);
13836               expand_end_cond ();
13837             }
13838
13839           /* Emit insns from `emit_base_init' which sets up virtual
13840              function table pointer(s).  */
13841           if (base_init_expr)
13842             {
13843               expand_expr_stmt (base_init_expr);
13844               base_init_expr = NULL_TREE;
13845             }
13846
13847           insns = get_insns ();
13848           end_sequence ();
13849
13850           /* This is where the body of the constructor begins.  */
13851
13852           emit_insns_after (insns, last_parm_cleanup_insn);
13853
13854           end_protect_partials ();
13855
13856           /* This is where the body of the constructor ends.  */
13857           expand_label (ctor_label);
13858           ctor_label = NULL_TREE;
13859
13860           if (call_poplevel)
13861             {
13862               decls = getdecls ();
13863               expand_end_bindings (decls, decls != NULL_TREE, 0);
13864               poplevel (decls != NULL_TREE, 1, 0);
13865             }
13866
13867           /* c_expand_return knows to return 'this' from a constructor.  */
13868           c_expand_return (NULL_TREE);
13869
13870           current_function_assigns_this = 0;
13871           current_function_just_assigned_this = 0;
13872         }
13873       else if (DECL_MAIN_P (fndecl))
13874         {
13875           /* Make it so that `main' always returns 0 by default.  */
13876 #ifdef VMS
13877           c_expand_return (integer_one_node);
13878 #else
13879           c_expand_return (integer_zero_node);
13880 #endif
13881         }
13882       else if (return_label != NULL_RTX
13883                && current_function_return_value == NULL_TREE
13884                && ! DECL_NAME (DECL_RESULT (current_function_decl)))
13885         no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13886
13887       if (flag_exceptions)
13888         expand_exception_blocks ();
13889
13890       /* If this function is supposed to return a value, ensure that
13891          we do not fall into the cleanups by mistake.  The end of our
13892          function will look like this:
13893          
13894          user code (may have return stmt somewhere)
13895          goto no_return_label
13896          cleanup_label:
13897          cleanups
13898          goto return_label
13899          no_return_label:
13900          NOTE_INSN_FUNCTION_END
13901          return_label:
13902          things for return
13903          
13904          If the user omits a return stmt in the USER CODE section, we
13905          will have a control path which reaches NOTE_INSN_FUNCTION_END.
13906          Otherwise, we won't.  */
13907       if (no_return_label)
13908         {
13909           DECL_CONTEXT (no_return_label) = fndecl;
13910           DECL_INITIAL (no_return_label) = error_mark_node;
13911           DECL_SOURCE_FILE (no_return_label) = input_filename;
13912           DECL_SOURCE_LINE (no_return_label) = lineno;
13913           expand_goto (no_return_label);
13914         }
13915
13916       if (cleanup_label)
13917         {
13918           /* Remove the binding contour which is used
13919              to catch cleanup-generated temporaries.  */
13920           expand_end_bindings (0, 0, 0);
13921           poplevel (0, 0, 0);
13922
13923           /* Emit label at beginning of cleanup code for parameters.  */
13924           emit_label (cleanup_label);
13925         }
13926
13927       /* Get return value into register if that's where it's supposed to be.  */
13928       if (original_result_rtx)
13929         fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
13930
13931       /* Finish building code that will trigger warnings if users forget
13932          to make their functions return values.  */
13933       if (no_return_label || cleanup_label)
13934         emit_jump (return_label);
13935       if (no_return_label)
13936         {
13937           /* We don't need to call `expand_*_return' here because we
13938              don't need any cleanups here--this path of code is only
13939              for error checking purposes.  */
13940           expand_label (no_return_label);
13941         }
13942
13943       /* Generate rtl for function exit.  */
13944       expand_function_end (input_filename, lineno, 1);
13945     }
13946   
13947   /* If we're processing a template, squirrel away the definition
13948      until we do an instantiation.  */
13949   if (processing_template_decl)
13950     {
13951       --minimal_parse_mode;
13952       DECL_SAVED_TREE (fndecl) = TREE_CHAIN (DECL_SAVED_TREE (fndecl));
13953       /* We have to save this value here in case
13954          maybe_end_member_template_processing decides to pop all the
13955          template parameters.  */
13956       in_template = 1;
13957     }
13958   else
13959     in_template = 0;
13960
13961   /* This must come after expand_function_end because cleanups might
13962      have declarations (from inline functions) that need to go into
13963      this function's blocks.  */
13964   if (current_binding_level->parm_flag != 1)
13965     my_friendly_abort (122);
13966   poplevel (1, 0, 1);
13967
13968   /* If this is a in-class inline definition, we may have to pop the
13969      bindings for the template parameters that we added in
13970      maybe_begin_member_template_processing when start_function was
13971      called.  */
13972   if (inclass_inline)
13973     maybe_end_member_template_processing ();
13974
13975   /* Reset scope for C++: if we were in the scope of a class,
13976      then when we finish this function, we are not longer so.
13977      This cannot be done until we know for sure that no more
13978      class members will ever be referenced in this function
13979      (i.e., calls to destructors).  */
13980   if (current_class_name)
13981     {
13982       ctype = current_class_type;
13983       pop_nested_class (1);
13984     }
13985
13986   /* Must mark the RESULT_DECL as being in this function.  */
13987   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
13988
13989   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
13990      to the FUNCTION_DECL node itself.  */
13991   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
13992
13993   if (!in_template)
13994     {
13995       int saved_flag_keep_inline_functions =
13996         flag_keep_inline_functions;
13997
13998       /* So we can tell if jump_optimize sets it to 1.  */
13999       can_reach_end = 0;
14000
14001       if (DECL_CONTEXT (fndecl) != NULL_TREE
14002           && hack_decl_function_context (fndecl))
14003         /* Trick rest_of_compilation into not deferring output of this
14004            function, even if it is inline, since the rtl_obstack for
14005            this function is the function_obstack of the enclosing
14006            function and will be deallocated when the enclosing
14007            function is gone.  See save_tree_status.  */
14008         flag_keep_inline_functions = 1;
14009
14010       /* Run the optimizers and output the assembler code for this
14011          function.  */
14012
14013       if (DECL_ARTIFICIAL (fndecl))
14014         {
14015           /* Do we really *want* to inline this synthesized method?  */
14016
14017           int save_fif = flag_inline_functions;
14018           flag_inline_functions = 1;
14019
14020           /* Turn off DECL_INLINE for the moment so function_cannot_inline_p
14021              will check our size.  */
14022           DECL_INLINE (fndecl) = 0;
14023
14024           rest_of_compilation (fndecl);
14025           flag_inline_functions = save_fif;
14026         }
14027       else
14028         rest_of_compilation (fndecl);
14029
14030       flag_keep_inline_functions = saved_flag_keep_inline_functions;
14031
14032       if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
14033         {
14034           /* Set DECL_EXTERNAL so that assemble_external will be called as
14035              necessary.  We'll clear it again in finish_file.  */
14036           if (! DECL_EXTERNAL (fndecl))
14037             DECL_NOT_REALLY_EXTERN (fndecl) = 1;
14038           DECL_EXTERNAL (fndecl) = 1;
14039           mark_inline_for_output (fndecl);
14040         }
14041
14042       if (ctype && TREE_ASM_WRITTEN (fndecl))
14043         note_debug_info_needed (ctype);
14044
14045       current_function_returns_null |= can_reach_end;
14046
14047       /* Since we don't normally go through c_expand_return for constructors,
14048          this normally gets the wrong value.
14049          Also, named return values have their return codes emitted after
14050          NOTE_INSN_FUNCTION_END, confusing jump.c.  */
14051       if (DECL_CONSTRUCTOR_P (fndecl)
14052           || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
14053         current_function_returns_null = 0;
14054
14055       if (TREE_THIS_VOLATILE (fndecl) && current_function_returns_null)
14056         cp_warning ("`noreturn' function `%D' does return", fndecl);
14057       else if ((warn_return_type || pedantic)
14058                && current_function_returns_null
14059                && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE)
14060         {
14061           /* If this function returns non-void and control can drop through,
14062              complain.  */
14063           cp_warning ("control reaches end of non-void function `%D'", fndecl);
14064         }
14065       /* With just -W, complain only if function returns both with
14066          and without a value.  */
14067       else if (extra_warnings
14068                && current_function_returns_value && current_function_returns_null)
14069         warning ("this function may return with or without a value");
14070     }
14071
14072   --function_depth;
14073
14074   /* Free all the tree nodes making up this function.  */
14075   /* Switch back to allocating nodes permanently
14076      until we start another function.  */
14077   if (! nested)
14078     permanent_allocation (1);
14079
14080   if (DECL_SAVED_INSNS (fndecl) == NULL_RTX)
14081     {
14082       tree t;
14083
14084       /* Stop pointing to the local nodes about to be freed.  */
14085       /* But DECL_INITIAL must remain nonzero so we know this
14086          was an actual function definition.  */
14087       DECL_INITIAL (fndecl) = error_mark_node;
14088       for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
14089         DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
14090     }
14091
14092   if (DECL_STATIC_CONSTRUCTOR (fndecl))
14093     static_ctors = perm_tree_cons (NULL_TREE, fndecl, static_ctors);
14094   if (DECL_STATIC_DESTRUCTOR (fndecl))
14095     static_dtors = perm_tree_cons (NULL_TREE, fndecl, static_dtors);
14096
14097   if (! nested)
14098     {
14099       /* Let the error reporting routines know that we're outside a
14100          function.  For a nested function, this value is used in
14101          pop_cp_function_context and then reset via pop_function_context.  */
14102       current_function_decl = NULL_TREE;
14103     }
14104
14105   named_label_uses = NULL;
14106   current_class_ptr = NULL_TREE;
14107   current_class_ref = NULL_TREE;
14108 }
14109 \f
14110 /* Create the FUNCTION_DECL for a function definition.
14111    DECLSPECS and DECLARATOR are the parts of the declaration;
14112    they describe the return type and the name of the function,
14113    but twisted together in a fashion that parallels the syntax of C.
14114
14115    This function creates a binding context for the function body
14116    as well as setting up the FUNCTION_DECL in current_function_decl.
14117
14118    Returns a FUNCTION_DECL on success.
14119
14120    If the DECLARATOR is not suitable for a function (it defines a datum
14121    instead), we return 0, which tells yyparse to report a parse error.
14122
14123    May return void_type_node indicating that this method is actually
14124    a friend.  See grokfield for more details.
14125
14126    Came here with a `.pushlevel' .
14127
14128    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14129    CHANGES TO CODE IN `grokfield'.  */
14130
14131 tree
14132 start_method (declspecs, declarator, attrlist)
14133      tree declarator, declspecs, attrlist;
14134 {
14135   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
14136                                 attrlist);
14137
14138   /* Something too ugly to handle.  */
14139   if (fndecl == NULL_TREE)
14140     return NULL_TREE;
14141
14142   /* Pass friends other than inline friend functions back.  */
14143   if (fndecl == void_type_node)
14144     return fndecl;
14145
14146   if (TREE_CODE (fndecl) != FUNCTION_DECL)
14147     /* Not a function, tell parser to report parse error.  */
14148     return NULL_TREE;
14149
14150   if (IS_SIGNATURE (current_class_type))
14151     IS_DEFAULT_IMPLEMENTATION (fndecl) = 1;
14152
14153   if (DECL_IN_AGGR_P (fndecl))
14154     {
14155       if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
14156         {
14157           if (DECL_CONTEXT (fndecl) 
14158               && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
14159             cp_error ("`%D' is already defined in class %s", fndecl,
14160                              TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
14161         }
14162       return void_type_node;
14163     }
14164
14165   check_template_shadow (fndecl);
14166
14167   DECL_THIS_INLINE (fndecl) = 1;
14168
14169   if (flag_default_inline)
14170     DECL_INLINE (fndecl) = 1;
14171
14172   /* We process method specializations in finish_struct_1.  */
14173   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
14174     fndecl = push_template_decl (fndecl);
14175
14176   /* We read in the parameters on the maybepermanent_obstack,
14177      but we won't be getting back to them until after we
14178      may have clobbered them.  So the call to preserve_data
14179      will keep them safe.  */
14180   preserve_data ();
14181
14182   if (! DECL_FRIEND_P (fndecl))
14183     {
14184       if (TREE_CHAIN (fndecl))
14185         {
14186           fndecl = copy_node (fndecl);
14187           TREE_CHAIN (fndecl) = NULL_TREE;
14188         }
14189
14190       if (DECL_CONSTRUCTOR_P (fndecl))
14191         {
14192           if (! grok_ctor_properties (current_class_type, fndecl))
14193             return void_type_node;
14194         }
14195       else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
14196         grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
14197     }
14198
14199   cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0, 0);
14200
14201   /* Make a place for the parms */
14202   pushlevel (0);
14203   current_binding_level->parm_flag = 1;
14204   
14205   DECL_IN_AGGR_P (fndecl) = 1;
14206   return fndecl;
14207 }
14208
14209 /* Go through the motions of finishing a function definition.
14210    We don't compile this method until after the whole class has
14211    been processed.
14212
14213    FINISH_METHOD must return something that looks as though it
14214    came from GROKFIELD (since we are defining a method, after all).
14215
14216    This is called after parsing the body of the function definition.
14217    STMTS is the chain of statements that makes up the function body.
14218
14219    DECL is the ..._DECL that `start_method' provided.  */
14220
14221 tree
14222 finish_method (decl)
14223      tree decl;
14224 {
14225   register tree fndecl = decl;
14226   tree old_initial;
14227
14228   register tree link;
14229
14230   if (decl == void_type_node)
14231     return decl;
14232
14233   old_initial = DECL_INITIAL (fndecl);
14234
14235   /* Undo the level for the parms (from start_method).
14236      This is like poplevel, but it causes nothing to be
14237      saved.  Saving information here confuses symbol-table
14238      output routines.  Besides, this information will
14239      be correctly output when this method is actually
14240      compiled.  */
14241
14242   /* Clear out the meanings of the local variables of this level;
14243      also record in each decl which block it belongs to.  */
14244
14245   for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
14246     {
14247       if (DECL_NAME (link) != NULL_TREE)
14248         pop_binding (DECL_NAME (link), link);
14249       my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
14250       DECL_CONTEXT (link) = NULL_TREE;
14251     }
14252
14253   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
14254                       (HOST_WIDE_INT) current_binding_level->level_chain,
14255                       current_binding_level->parm_flag,
14256                       current_binding_level->keep);
14257
14258   poplevel (0, 0, 0);
14259
14260   DECL_INITIAL (fndecl) = old_initial;
14261
14262   /* We used to check if the context of FNDECL was different from
14263      current_class_type as another way to get inside here.  This didn't work
14264      for String.cc in libg++.  */
14265   if (DECL_FRIEND_P (fndecl))
14266     {
14267       CLASSTYPE_INLINE_FRIENDS (current_class_type)
14268         = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
14269       decl = void_type_node;
14270     }
14271
14272   return decl;
14273 }
14274 \f
14275 /* Called when a new struct TYPE is defined.
14276    If this structure or union completes the type of any previous
14277    variable declaration, lay it out and output its rtl.  */
14278
14279 void
14280 hack_incomplete_structures (type)
14281      tree type;
14282 {
14283   tree *list;
14284
14285   if (current_binding_level->incomplete == NULL_TREE)
14286     return;
14287
14288   if (!type) /* Don't do this for class templates.  */
14289     return;
14290
14291   for (list = &current_binding_level->incomplete; *list; )
14292     {
14293       tree decl = TREE_VALUE (*list);
14294       if ((decl && TREE_TYPE (decl) == type)
14295           || (TREE_TYPE (decl)
14296               && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14297               && TREE_TYPE (TREE_TYPE (decl)) == type))
14298         {
14299           int toplevel = toplevel_bindings_p ();
14300           if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14301               && TREE_TYPE (TREE_TYPE (decl)) == type)
14302             layout_type (TREE_TYPE (decl));
14303           layout_decl (decl, 0);
14304           rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
14305           if (! toplevel)
14306             {
14307               tree cleanup;
14308               expand_decl (decl);
14309               cleanup = maybe_build_cleanup (decl);
14310               expand_decl_init (decl);
14311               if (! expand_decl_cleanup (decl, cleanup))
14312                 cp_error ("parser lost in parsing declaration of `%D'",
14313                           decl);
14314             }
14315           *list = TREE_CHAIN (*list);
14316         }
14317       else
14318         list = &TREE_CHAIN (*list);
14319     }
14320 }
14321
14322 /* If DECL is of a type which needs a cleanup, build that cleanup here.
14323    See build_delete for information about AUTO_DELETE.
14324
14325    Don't build these on the momentary obstack; they must live
14326    the life of the binding contour.  */
14327
14328 static tree
14329 maybe_build_cleanup_1 (decl, auto_delete)
14330      tree decl, auto_delete;
14331 {
14332   tree type = TREE_TYPE (decl);
14333   if (type != error_mark_node && TYPE_NEEDS_DESTRUCTOR (type))
14334     {
14335       int temp = 0, flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
14336       tree rval;
14337
14338       if (TREE_CODE (decl) != PARM_DECL)
14339         temp = suspend_momentary ();
14340
14341       if (TREE_CODE (type) == ARRAY_TYPE)
14342         rval = decl;
14343       else
14344         {
14345           mark_addressable (decl);
14346           rval = build_unary_op (ADDR_EXPR, decl, 0);
14347         }
14348
14349       /* Optimize for space over speed here.  */
14350       if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14351           || flag_expensive_optimizations)
14352         flags |= LOOKUP_NONVIRTUAL;
14353
14354       rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
14355
14356       if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14357           && ! TYPE_HAS_DESTRUCTOR (type))
14358         rval = build_compound_expr (expr_tree_cons (NULL_TREE, rval,
14359                                                build_expr_list (NULL_TREE, build_vbase_delete (type, decl))));
14360
14361       if (TREE_CODE (decl) != PARM_DECL)
14362         resume_momentary (temp);
14363
14364       return rval;
14365     }
14366   return 0;
14367 }
14368
14369 /* If DECL is of a type which needs a cleanup, build that cleanup
14370    here.  The cleanup does free the storage with a call to delete.  */
14371
14372 tree
14373 maybe_build_cleanup_and_delete (decl)
14374      tree decl;
14375 {
14376   return maybe_build_cleanup_1 (decl, integer_three_node);
14377 }
14378
14379 /* If DECL is of a type which needs a cleanup, build that cleanup
14380    here.  The cleanup does not free the storage with a call a delete.  */
14381
14382 tree
14383 maybe_build_cleanup (decl)
14384      tree decl;
14385 {
14386   return maybe_build_cleanup_1 (decl, integer_two_node);
14387 }
14388 \f
14389 /* Expand a C++ expression at the statement level.
14390    This is needed to ferret out nodes which have UNKNOWN_TYPE.
14391    The C++ type checker should get all of these out when
14392    expressions are combined with other, type-providing, expressions,
14393    leaving only orphan expressions, such as:
14394
14395    &class::bar;         / / takes its address, but does nothing with it.  */
14396
14397 void
14398 cplus_expand_expr_stmt (exp)
14399      tree exp;
14400 {
14401   if (processing_template_decl)
14402     {
14403       add_tree (build_min_nt (EXPR_STMT, exp));
14404       return;
14405     }
14406
14407   /* Arrange for all temps to disappear.  */
14408   expand_start_target_temps ();
14409
14410   exp = require_complete_type_in_void (exp);
14411   
14412   if (TREE_CODE (exp) == FUNCTION_DECL)
14413     {
14414       cp_warning ("reference, not call, to function `%D'", exp);
14415       warning ("at this point in file");
14416     }
14417
14418 #if 0
14419   /* We should do this eventually, but right now this causes regex.o from
14420      libg++ to miscompile, and tString to core dump.  */
14421   exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
14422 #endif
14423
14424   /* Strip unused implicit INDIRECT_REFs of references.  */
14425   if (TREE_CODE (exp) == INDIRECT_REF
14426       && TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 0))) == REFERENCE_TYPE)
14427     exp = TREE_OPERAND (exp, 0);
14428
14429   /* If we don't do this, we end up down inside expand_expr
14430      trying to do TYPE_MODE on the ERROR_MARK, and really
14431      go outside the bounds of the type.  */
14432   if (exp != error_mark_node)
14433     expand_expr_stmt (break_out_cleanups (exp));
14434
14435   /* Clean up any pending cleanups.  This happens when a function call
14436      returns a cleanup-needing value that nobody uses.  */
14437   expand_end_target_temps ();
14438 }
14439
14440 /* When a stmt has been parsed, this function is called.
14441
14442    Currently, this function only does something within a
14443    constructor's scope: if a stmt has just assigned to this,
14444    and we are in a derived class, we call `emit_base_init'.  */
14445
14446 void
14447 finish_stmt ()
14448 {
14449   extern struct nesting *cond_stack, *loop_stack, *case_stack;
14450
14451   
14452   if (current_function_assigns_this
14453       || ! current_function_just_assigned_this)
14454     return;
14455   if (DECL_CONSTRUCTOR_P (current_function_decl))
14456     {
14457       /* Constructors must wait until we are out of control
14458          zones before calling base constructors.  */
14459       if (cond_stack || loop_stack || case_stack)
14460         return;
14461       expand_expr_stmt (base_init_expr);
14462       check_base_init (current_class_type);
14463     }
14464   current_function_assigns_this = 1;
14465 }
14466
14467 /* Change a static member function definition into a FUNCTION_TYPE, instead
14468    of the METHOD_TYPE that we create when it's originally parsed.
14469
14470    WARNING: DO NOT pass &TREE_TYPE (decl) to FN or &TYPE_ARG_TYPES
14471    (TREE_TYPE (decl)) to ARGTYPES, as doing so will corrupt the types of
14472    other decls.  Either pass the addresses of local variables or NULL.  */
14473
14474 void
14475 revert_static_member_fn (decl, fn, argtypes)
14476      tree *decl, *fn, *argtypes;
14477 {
14478   tree tmp;
14479   tree function = fn ? *fn : TREE_TYPE (*decl);
14480   tree args = argtypes ? *argtypes : TYPE_ARG_TYPES (function);
14481
14482   if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args))) 
14483       != TYPE_UNQUALIFIED)
14484     cp_error ("static member function `%#D' declared with type qualifiers", 
14485               *decl);
14486
14487   args = TREE_CHAIN (args);
14488   tmp = build_function_type (TREE_TYPE (function), args);
14489   tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
14490   tmp = build_exception_variant (tmp,
14491                                  TYPE_RAISES_EXCEPTIONS (function));
14492   TREE_TYPE (*decl) = tmp;
14493   if (DECL_ARGUMENTS (*decl))
14494     DECL_ARGUMENTS (*decl) = TREE_CHAIN (DECL_ARGUMENTS (*decl));
14495   DECL_STATIC_FUNCTION_P (*decl) = 1;
14496   if (fn)
14497     *fn = tmp;
14498   if (argtypes)
14499     *argtypes = args;
14500 }
14501
14502 int
14503 id_in_current_class (id)
14504      tree id;
14505 {
14506   return !!purpose_member (id, class_binding_level->class_shadowed);
14507 }
14508
14509 struct cp_function
14510 {
14511   int returns_value;
14512   int returns_null;
14513   int assigns_this;
14514   int just_assigned_this;
14515   int parms_stored;
14516   int temp_name_counter;
14517   tree named_labels;
14518   struct named_label_list *named_label_uses;
14519   tree shadowed_labels;
14520   tree ctor_label;
14521   tree dtor_label;
14522   rtx last_dtor_insn;
14523   rtx last_parm_cleanup_insn;
14524   tree base_init_list;
14525   tree member_init_list;
14526   tree base_init_expr;
14527   tree current_class_ptr;
14528   tree current_class_ref;
14529   rtx result_rtx;
14530   struct cp_function *next;
14531   struct binding_level *binding_level;
14532   int static_labelno;
14533 };
14534
14535 static struct cp_function *cp_function_chain;
14536
14537 extern int temp_name_counter;
14538
14539 /* Save and reinitialize the variables
14540    used during compilation of a C++ function.  */
14541
14542 void
14543 push_cp_function_context (context)
14544      tree context;
14545 {
14546   struct cp_function *p
14547     = (struct cp_function *) xmalloc (sizeof (struct cp_function));
14548
14549   push_function_context_to (context);
14550
14551   p->next = cp_function_chain;
14552   cp_function_chain = p;
14553
14554   p->named_labels = named_labels;
14555   p->named_label_uses = named_label_uses;
14556   p->shadowed_labels = shadowed_labels;
14557   p->returns_value = current_function_returns_value;
14558   p->returns_null = current_function_returns_null;
14559   p->binding_level = current_binding_level;
14560   p->ctor_label = ctor_label;
14561   p->dtor_label = dtor_label;
14562   p->last_dtor_insn = last_dtor_insn;
14563   p->last_parm_cleanup_insn = last_parm_cleanup_insn;
14564   p->assigns_this = current_function_assigns_this;
14565   p->just_assigned_this = current_function_just_assigned_this;
14566   p->parms_stored = current_function_parms_stored;
14567   p->result_rtx = original_result_rtx;
14568   p->base_init_expr = base_init_expr;
14569   p->temp_name_counter = temp_name_counter;
14570   p->base_init_list = current_base_init_list;
14571   p->member_init_list = current_member_init_list;
14572   p->current_class_ptr = current_class_ptr;
14573   p->current_class_ref = current_class_ref;
14574   p->static_labelno = static_labelno;
14575 }
14576
14577 /* Restore the variables used during compilation of a C++ function.  */
14578
14579 void
14580 pop_cp_function_context (context)
14581      tree context;
14582 {
14583   struct cp_function *p = cp_function_chain;
14584   tree link;
14585
14586   /* Bring back all the labels that were shadowed.  */
14587   for (link = shadowed_labels; link; link = TREE_CHAIN (link))
14588     if (DECL_NAME (TREE_VALUE (link)) != 0)
14589       SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link)),
14590                                   TREE_VALUE (link));
14591
14592   pop_function_context_from (context);
14593
14594   cp_function_chain = p->next;
14595
14596   named_labels = p->named_labels;
14597   named_label_uses = p->named_label_uses;
14598   shadowed_labels = p->shadowed_labels;
14599   current_function_returns_value = p->returns_value;
14600   current_function_returns_null = p->returns_null;
14601   current_binding_level = p->binding_level;
14602   ctor_label = p->ctor_label;
14603   dtor_label = p->dtor_label;
14604   last_dtor_insn = p->last_dtor_insn;
14605   last_parm_cleanup_insn = p->last_parm_cleanup_insn;
14606   current_function_assigns_this = p->assigns_this;
14607   current_function_just_assigned_this = p->just_assigned_this;
14608   current_function_parms_stored = p->parms_stored;
14609   original_result_rtx = p->result_rtx;
14610   base_init_expr = p->base_init_expr;
14611   temp_name_counter = p->temp_name_counter;
14612   current_base_init_list = p->base_init_list;
14613   current_member_init_list = p->member_init_list;
14614   current_class_ptr = p->current_class_ptr;
14615   current_class_ref = p->current_class_ref;
14616   static_labelno = p->static_labelno;
14617
14618   free (p);
14619 }
14620
14621 int
14622 in_function_p ()
14623 {
14624   return function_depth != 0;
14625 }