OSDN Git Service

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